@@ -18,97 +18,97 @@ |
||
18 | 18 | class RegUrlLink |
19 | 19 | { |
20 | 20 | |
21 | - /* |
|
21 | + /* |
|
22 | 22 | * @var string $reg_url_link |
23 | 23 | */ |
24 | - private $reg_url_link; |
|
24 | + private $reg_url_link; |
|
25 | 25 | |
26 | 26 | |
27 | - /** |
|
28 | - * @param string $reg_url_link |
|
29 | - * @return RegUrlLink |
|
30 | - * @throws InvalidArgumentException |
|
31 | - */ |
|
32 | - public static function fromRegUrlLinkString($reg_url_link) |
|
33 | - { |
|
34 | - if (empty($reg_url_link) || ! is_string($reg_url_link)) { |
|
35 | - throw new InvalidArgumentException( |
|
36 | - __( |
|
37 | - 'You must supply a valid non-empty string to generate a reg_url_link.', |
|
38 | - 'event_espresso' |
|
39 | - ) |
|
40 | - ); |
|
41 | - } |
|
42 | - return new RegUrlLink(1, '', $reg_url_link); |
|
43 | - } |
|
27 | + /** |
|
28 | + * @param string $reg_url_link |
|
29 | + * @return RegUrlLink |
|
30 | + * @throws InvalidArgumentException |
|
31 | + */ |
|
32 | + public static function fromRegUrlLinkString($reg_url_link) |
|
33 | + { |
|
34 | + if (empty($reg_url_link) || ! is_string($reg_url_link)) { |
|
35 | + throw new InvalidArgumentException( |
|
36 | + __( |
|
37 | + 'You must supply a valid non-empty string to generate a reg_url_link.', |
|
38 | + 'event_espresso' |
|
39 | + ) |
|
40 | + ); |
|
41 | + } |
|
42 | + return new RegUrlLink(1, '', $reg_url_link); |
|
43 | + } |
|
44 | 44 | |
45 | 45 | |
46 | - /** |
|
47 | - * @param EE_Registration $registration |
|
48 | - * @return RegUrlLink |
|
49 | - * @throws EntityNotFoundException |
|
50 | - * @throws EE_Error |
|
51 | - * @throws InvalidArgumentException |
|
52 | - */ |
|
53 | - public static function fromRegistration(EE_Registration $registration) |
|
54 | - { |
|
55 | - return new RegUrlLink( |
|
56 | - $registration->count(), |
|
57 | - $registration->ticket_line_item() |
|
58 | - ); |
|
59 | - } |
|
46 | + /** |
|
47 | + * @param EE_Registration $registration |
|
48 | + * @return RegUrlLink |
|
49 | + * @throws EntityNotFoundException |
|
50 | + * @throws EE_Error |
|
51 | + * @throws InvalidArgumentException |
|
52 | + */ |
|
53 | + public static function fromRegistration(EE_Registration $registration) |
|
54 | + { |
|
55 | + return new RegUrlLink( |
|
56 | + $registration->count(), |
|
57 | + $registration->ticket_line_item() |
|
58 | + ); |
|
59 | + } |
|
60 | 60 | |
61 | 61 | |
62 | - /** |
|
63 | - * CreateRegUrlLinkCommand constructor. |
|
64 | - * |
|
65 | - * @param int $reg_count |
|
66 | - * @param mixed $base_code |
|
67 | - * @param string $reg_url_link |
|
68 | - * @throws InvalidArgumentException |
|
69 | - */ |
|
70 | - public function __construct( |
|
71 | - $reg_count = 1, |
|
72 | - $base_code = '', |
|
73 | - $reg_url_link = '' |
|
74 | - ) { |
|
75 | - if (! empty($reg_url_link) && is_string($reg_url_link)) { |
|
76 | - $this->reg_url_link = apply_filters( |
|
77 | - 'FHEE__\EventEspresso\core\domain\entities\RegUrlLink__construct__reg_url_link', |
|
78 | - $reg_url_link, |
|
79 | - $reg_count, |
|
80 | - $base_code, |
|
81 | - $reg_url_link |
|
82 | - ); |
|
83 | - return; |
|
84 | - } |
|
85 | - $reg_count = max(1, absint($reg_count)); |
|
86 | - $base_code = $base_code instanceof \EE_Line_Item ? $base_code->code() : $base_code; |
|
87 | - if (empty($base_code) || ! is_string($base_code)) { |
|
88 | - throw new InvalidArgumentException( |
|
89 | - __( |
|
90 | - 'You must supply a valid EE_Line_Item or a non-empty string to generate a reg_url_link.', |
|
91 | - 'event_espresso' |
|
92 | - ) |
|
93 | - ); |
|
94 | - } |
|
95 | - $this->reg_url_link = (string) apply_filters( |
|
96 | - 'FHEE__\EventEspresso\core\domain\entities\RegUrlLink__construct__reg_url_link', |
|
97 | - $reg_count . '-' . md5($base_code . microtime()), |
|
98 | - $reg_count, |
|
99 | - $base_code, |
|
100 | - $reg_url_link |
|
101 | - ); |
|
102 | - } |
|
62 | + /** |
|
63 | + * CreateRegUrlLinkCommand constructor. |
|
64 | + * |
|
65 | + * @param int $reg_count |
|
66 | + * @param mixed $base_code |
|
67 | + * @param string $reg_url_link |
|
68 | + * @throws InvalidArgumentException |
|
69 | + */ |
|
70 | + public function __construct( |
|
71 | + $reg_count = 1, |
|
72 | + $base_code = '', |
|
73 | + $reg_url_link = '' |
|
74 | + ) { |
|
75 | + if (! empty($reg_url_link) && is_string($reg_url_link)) { |
|
76 | + $this->reg_url_link = apply_filters( |
|
77 | + 'FHEE__\EventEspresso\core\domain\entities\RegUrlLink__construct__reg_url_link', |
|
78 | + $reg_url_link, |
|
79 | + $reg_count, |
|
80 | + $base_code, |
|
81 | + $reg_url_link |
|
82 | + ); |
|
83 | + return; |
|
84 | + } |
|
85 | + $reg_count = max(1, absint($reg_count)); |
|
86 | + $base_code = $base_code instanceof \EE_Line_Item ? $base_code->code() : $base_code; |
|
87 | + if (empty($base_code) || ! is_string($base_code)) { |
|
88 | + throw new InvalidArgumentException( |
|
89 | + __( |
|
90 | + 'You must supply a valid EE_Line_Item or a non-empty string to generate a reg_url_link.', |
|
91 | + 'event_espresso' |
|
92 | + ) |
|
93 | + ); |
|
94 | + } |
|
95 | + $this->reg_url_link = (string) apply_filters( |
|
96 | + 'FHEE__\EventEspresso\core\domain\entities\RegUrlLink__construct__reg_url_link', |
|
97 | + $reg_count . '-' . md5($base_code . microtime()), |
|
98 | + $reg_count, |
|
99 | + $base_code, |
|
100 | + $reg_url_link |
|
101 | + ); |
|
102 | + } |
|
103 | 103 | |
104 | 104 | |
105 | - /** |
|
106 | - * Return the object as a string |
|
107 | - * |
|
108 | - * @return string |
|
109 | - */ |
|
110 | - public function __toString() |
|
111 | - { |
|
112 | - return $this->reg_url_link; |
|
113 | - } |
|
105 | + /** |
|
106 | + * Return the object as a string |
|
107 | + * |
|
108 | + * @return string |
|
109 | + */ |
|
110 | + public function __toString() |
|
111 | + { |
|
112 | + return $this->reg_url_link; |
|
113 | + } |
|
114 | 114 | } |
@@ -72,7 +72,7 @@ discard block |
||
72 | 72 | $base_code = '', |
73 | 73 | $reg_url_link = '' |
74 | 74 | ) { |
75 | - if (! empty($reg_url_link) && is_string($reg_url_link)) { |
|
75 | + if ( ! empty($reg_url_link) && is_string($reg_url_link)) { |
|
76 | 76 | $this->reg_url_link = apply_filters( |
77 | 77 | 'FHEE__\EventEspresso\core\domain\entities\RegUrlLink__construct__reg_url_link', |
78 | 78 | $reg_url_link, |
@@ -94,7 +94,7 @@ discard block |
||
94 | 94 | } |
95 | 95 | $this->reg_url_link = (string) apply_filters( |
96 | 96 | 'FHEE__\EventEspresso\core\domain\entities\RegUrlLink__construct__reg_url_link', |
97 | - $reg_count . '-' . md5($base_code . microtime()), |
|
97 | + $reg_count.'-'.md5($base_code.microtime()), |
|
98 | 98 | $reg_count, |
99 | 99 | $base_code, |
100 | 100 | $reg_url_link |
@@ -30,132 +30,132 @@ |
||
30 | 30 | { |
31 | 31 | |
32 | 32 | |
33 | - /** |
|
34 | - * the actual shortcode tag that gets registered with WordPress |
|
35 | - * |
|
36 | - * @return string |
|
37 | - */ |
|
38 | - public function getTag() |
|
39 | - { |
|
40 | - return 'ESPRESSO_EVENTS'; |
|
41 | - } |
|
33 | + /** |
|
34 | + * the actual shortcode tag that gets registered with WordPress |
|
35 | + * |
|
36 | + * @return string |
|
37 | + */ |
|
38 | + public function getTag() |
|
39 | + { |
|
40 | + return 'ESPRESSO_EVENTS'; |
|
41 | + } |
|
42 | 42 | |
43 | 43 | |
44 | - /** |
|
45 | - * the time in seconds to cache the results of the processShortcode() method |
|
46 | - * 0 means the processShortcode() results will NOT be cached at all |
|
47 | - * |
|
48 | - * @return int |
|
49 | - */ |
|
50 | - public function cacheExpiration() |
|
51 | - { |
|
52 | - return 0; |
|
53 | - } |
|
44 | + /** |
|
45 | + * the time in seconds to cache the results of the processShortcode() method |
|
46 | + * 0 means the processShortcode() results will NOT be cached at all |
|
47 | + * |
|
48 | + * @return int |
|
49 | + */ |
|
50 | + public function cacheExpiration() |
|
51 | + { |
|
52 | + return 0; |
|
53 | + } |
|
54 | 54 | |
55 | 55 | |
56 | - /** |
|
57 | - * a place for adding any initialization code that needs to run prior to wp_header(). |
|
58 | - * this may be required for shortcodes that utilize a corresponding module, |
|
59 | - * and need to enqueue assets for that module |
|
60 | - * |
|
61 | - * @return void |
|
62 | - */ |
|
63 | - public function initializeShortcode() |
|
64 | - { |
|
65 | - EED_Events_Archive::instance()->event_list(); |
|
66 | - $this->shortcodeHasBeenInitialized(); |
|
67 | - } |
|
56 | + /** |
|
57 | + * a place for adding any initialization code that needs to run prior to wp_header(). |
|
58 | + * this may be required for shortcodes that utilize a corresponding module, |
|
59 | + * and need to enqueue assets for that module |
|
60 | + * |
|
61 | + * @return void |
|
62 | + */ |
|
63 | + public function initializeShortcode() |
|
64 | + { |
|
65 | + EED_Events_Archive::instance()->event_list(); |
|
66 | + $this->shortcodeHasBeenInitialized(); |
|
67 | + } |
|
68 | 68 | |
69 | 69 | |
70 | - /** |
|
71 | - * callback that runs when the shortcode is encountered in post content. |
|
72 | - * IMPORTANT !!! |
|
73 | - * remember that shortcode content should be RETURNED and NOT echoed out |
|
74 | - * |
|
75 | - * @param array $attributes |
|
76 | - * @return string |
|
77 | - */ |
|
78 | - public function processShortcode($attributes = array()) |
|
79 | - { |
|
80 | - // grab attributes and merge with defaults |
|
81 | - $attributes = $this->getAttributes($attributes); |
|
82 | - // make sure we use the_excerpt() |
|
83 | - add_filter('FHEE__EES_Espresso_Events__process_shortcode__true', '__return_true'); |
|
84 | - // apply query filters |
|
85 | - add_filter('FHEE__EEH_Event_Query__apply_query_filters', '__return_true'); |
|
86 | - // run the query |
|
87 | - global $wp_query; |
|
88 | - // yes we have to overwrite the main wp query, but it's ok... |
|
89 | - // we're going to reset it again below, so everything will be Hunky Dory (amazing album) |
|
90 | - $wp_query = new EventListQuery($attributes); |
|
91 | - // check what template is loaded and load filters accordingly |
|
92 | - EED_Events_Archive::instance()->template_include('loop-espresso_events.php'); |
|
93 | - // load our template |
|
94 | - $event_list = EEH_Template::locate_template( |
|
95 | - 'loop-espresso_events.php', |
|
96 | - array(), |
|
97 | - true, |
|
98 | - true |
|
99 | - ); |
|
100 | - // now reset the query and post data |
|
101 | - wp_reset_query(); |
|
102 | - wp_reset_postdata(); |
|
103 | - EED_Events_Archive::remove_all_events_archive_filters(); |
|
104 | - // remove query filters |
|
105 | - remove_filter('FHEE__EEH_Event_Query__apply_query_filters', '__return_true'); |
|
106 | - // pull our content from the output buffer and return it |
|
107 | - return $event_list; |
|
108 | - } |
|
70 | + /** |
|
71 | + * callback that runs when the shortcode is encountered in post content. |
|
72 | + * IMPORTANT !!! |
|
73 | + * remember that shortcode content should be RETURNED and NOT echoed out |
|
74 | + * |
|
75 | + * @param array $attributes |
|
76 | + * @return string |
|
77 | + */ |
|
78 | + public function processShortcode($attributes = array()) |
|
79 | + { |
|
80 | + // grab attributes and merge with defaults |
|
81 | + $attributes = $this->getAttributes($attributes); |
|
82 | + // make sure we use the_excerpt() |
|
83 | + add_filter('FHEE__EES_Espresso_Events__process_shortcode__true', '__return_true'); |
|
84 | + // apply query filters |
|
85 | + add_filter('FHEE__EEH_Event_Query__apply_query_filters', '__return_true'); |
|
86 | + // run the query |
|
87 | + global $wp_query; |
|
88 | + // yes we have to overwrite the main wp query, but it's ok... |
|
89 | + // we're going to reset it again below, so everything will be Hunky Dory (amazing album) |
|
90 | + $wp_query = new EventListQuery($attributes); |
|
91 | + // check what template is loaded and load filters accordingly |
|
92 | + EED_Events_Archive::instance()->template_include('loop-espresso_events.php'); |
|
93 | + // load our template |
|
94 | + $event_list = EEH_Template::locate_template( |
|
95 | + 'loop-espresso_events.php', |
|
96 | + array(), |
|
97 | + true, |
|
98 | + true |
|
99 | + ); |
|
100 | + // now reset the query and post data |
|
101 | + wp_reset_query(); |
|
102 | + wp_reset_postdata(); |
|
103 | + EED_Events_Archive::remove_all_events_archive_filters(); |
|
104 | + // remove query filters |
|
105 | + remove_filter('FHEE__EEH_Event_Query__apply_query_filters', '__return_true'); |
|
106 | + // pull our content from the output buffer and return it |
|
107 | + return $event_list; |
|
108 | + } |
|
109 | 109 | |
110 | 110 | |
111 | - /** |
|
112 | - * merge incoming attributes with filtered defaults |
|
113 | - * |
|
114 | - * @param array $attributes |
|
115 | - * @return array |
|
116 | - */ |
|
117 | - private function getAttributes(array $attributes) |
|
118 | - { |
|
119 | - return array_merge( |
|
120 | - (array) apply_filters( |
|
121 | - 'EES_Espresso_Events__process_shortcode__default_espresso_events_shortcode_atts', |
|
122 | - array( |
|
123 | - 'title' => '', |
|
124 | - 'limit' => 10, |
|
125 | - 'css_class' => '', |
|
126 | - 'show_expired' => false, |
|
127 | - 'month' => '', |
|
128 | - 'category_slug' => '', |
|
129 | - 'order_by' => 'start_date', |
|
130 | - 'sort' => 'ASC', |
|
131 | - 'show_title' => true, |
|
132 | - ) |
|
133 | - ), |
|
134 | - $attributes |
|
135 | - ); |
|
136 | - } |
|
111 | + /** |
|
112 | + * merge incoming attributes with filtered defaults |
|
113 | + * |
|
114 | + * @param array $attributes |
|
115 | + * @return array |
|
116 | + */ |
|
117 | + private function getAttributes(array $attributes) |
|
118 | + { |
|
119 | + return array_merge( |
|
120 | + (array) apply_filters( |
|
121 | + 'EES_Espresso_Events__process_shortcode__default_espresso_events_shortcode_atts', |
|
122 | + array( |
|
123 | + 'title' => '', |
|
124 | + 'limit' => 10, |
|
125 | + 'css_class' => '', |
|
126 | + 'show_expired' => false, |
|
127 | + 'month' => '', |
|
128 | + 'category_slug' => '', |
|
129 | + 'order_by' => 'start_date', |
|
130 | + 'sort' => 'ASC', |
|
131 | + 'show_title' => true, |
|
132 | + ) |
|
133 | + ), |
|
134 | + $attributes |
|
135 | + ); |
|
136 | + } |
|
137 | 137 | |
138 | 138 | |
139 | - /** |
|
140 | - * array for defining custom attribute sanitization callbacks, |
|
141 | - * where keys match keys in your attributes array, |
|
142 | - * and values represent the sanitization function you wish to be applied to that attribute. |
|
143 | - * So for example, if you had an integer attribute named "event_id" |
|
144 | - * that you wanted to be sanitized using absint(), |
|
145 | - * then you would pass the following for your $custom_sanitization array: |
|
146 | - * array('event_id' => 'absint') |
|
147 | - * |
|
148 | - * @return array |
|
149 | - */ |
|
150 | - protected function customAttributeSanitizationMap() |
|
151 | - { |
|
152 | - // the following get sanitized/whitelisted in EEH_Event_Query |
|
153 | - return array( |
|
154 | - 'category_slug' => 'skip_sanitization', |
|
155 | - 'show_expired' => 'skip_sanitization', |
|
156 | - 'order_by' => 'skip_sanitization', |
|
157 | - 'month' => 'skip_sanitization', |
|
158 | - 'sort' => 'skip_sanitization', |
|
159 | - ); |
|
160 | - } |
|
139 | + /** |
|
140 | + * array for defining custom attribute sanitization callbacks, |
|
141 | + * where keys match keys in your attributes array, |
|
142 | + * and values represent the sanitization function you wish to be applied to that attribute. |
|
143 | + * So for example, if you had an integer attribute named "event_id" |
|
144 | + * that you wanted to be sanitized using absint(), |
|
145 | + * then you would pass the following for your $custom_sanitization array: |
|
146 | + * array('event_id' => 'absint') |
|
147 | + * |
|
148 | + * @return array |
|
149 | + */ |
|
150 | + protected function customAttributeSanitizationMap() |
|
151 | + { |
|
152 | + // the following get sanitized/whitelisted in EEH_Event_Query |
|
153 | + return array( |
|
154 | + 'category_slug' => 'skip_sanitization', |
|
155 | + 'show_expired' => 'skip_sanitization', |
|
156 | + 'order_by' => 'skip_sanitization', |
|
157 | + 'month' => 'skip_sanitization', |
|
158 | + 'sort' => 'skip_sanitization', |
|
159 | + ); |
|
160 | + } |
|
161 | 161 | } |
@@ -20,78 +20,78 @@ |
||
20 | 20 | { |
21 | 21 | |
22 | 22 | |
23 | - /** |
|
24 | - * the actual shortcode tag that gets registered with WordPress |
|
25 | - * |
|
26 | - * @return string |
|
27 | - */ |
|
28 | - public function getTag() |
|
29 | - { |
|
30 | - return 'ESPRESSO_CANCELLED'; |
|
31 | - } |
|
23 | + /** |
|
24 | + * the actual shortcode tag that gets registered with WordPress |
|
25 | + * |
|
26 | + * @return string |
|
27 | + */ |
|
28 | + public function getTag() |
|
29 | + { |
|
30 | + return 'ESPRESSO_CANCELLED'; |
|
31 | + } |
|
32 | 32 | |
33 | 33 | |
34 | - /** |
|
35 | - * the time in seconds to cache the results of the processShortcode() method |
|
36 | - * 0 means the processShortcode() results will NOT be cached at all |
|
37 | - * |
|
38 | - * @return int |
|
39 | - */ |
|
40 | - public function cacheExpiration() |
|
41 | - { |
|
42 | - return 0; |
|
43 | - } |
|
34 | + /** |
|
35 | + * the time in seconds to cache the results of the processShortcode() method |
|
36 | + * 0 means the processShortcode() results will NOT be cached at all |
|
37 | + * |
|
38 | + * @return int |
|
39 | + */ |
|
40 | + public function cacheExpiration() |
|
41 | + { |
|
42 | + return 0; |
|
43 | + } |
|
44 | 44 | |
45 | 45 | |
46 | - /** |
|
47 | - * a place for adding any initialization code that needs to run prior to wp_header(). |
|
48 | - * this may be required for shortcodes that utilize a corresponding module, |
|
49 | - * and need to enqueue assets for that module |
|
50 | - * |
|
51 | - * @return void |
|
52 | - */ |
|
53 | - public function initializeShortcode() |
|
54 | - { |
|
55 | - $this->shortcodeHasBeenInitialized(); |
|
56 | - } |
|
46 | + /** |
|
47 | + * a place for adding any initialization code that needs to run prior to wp_header(). |
|
48 | + * this may be required for shortcodes that utilize a corresponding module, |
|
49 | + * and need to enqueue assets for that module |
|
50 | + * |
|
51 | + * @return void |
|
52 | + */ |
|
53 | + public function initializeShortcode() |
|
54 | + { |
|
55 | + $this->shortcodeHasBeenInitialized(); |
|
56 | + } |
|
57 | 57 | |
58 | 58 | |
59 | - /** |
|
60 | - * callback that runs when the shortcode is encountered in post content. |
|
61 | - * IMPORTANT !!! |
|
62 | - * remember that shortcode content should be RETURNED and NOT echoed out |
|
63 | - * |
|
64 | - * @param array $attributes |
|
65 | - * @return string |
|
66 | - * @throws \EE_Error |
|
67 | - */ |
|
68 | - public function processShortcode($attributes = array()) |
|
69 | - { |
|
70 | - $transaction = EE_Registry::instance()->SSN->get_session_data('transaction'); |
|
71 | - if ($transaction instanceof EE_Transaction) { |
|
72 | - do_action('AHEE__EES_Espresso_Cancelled__process_shortcode__transaction', $transaction); |
|
73 | - $registrations = $transaction->registrations(); |
|
74 | - foreach ($registrations as $registration) { |
|
75 | - if ($registration instanceof EE_Registration) { |
|
76 | - do_action('AHEE__EES_Espresso_Cancelled__process_shortcode__registration', $registration); |
|
77 | - } |
|
78 | - } |
|
79 | - } |
|
80 | - do_action('AHEE__EES_Espresso_Cancelled__process_shortcode__clear_session'); |
|
81 | - // remove all unwanted records from the db |
|
82 | - if (EE_Registry::instance()->CART instanceof EE_Cart) { |
|
83 | - EE_Registry::instance()->CART->delete_cart(); |
|
84 | - } |
|
85 | - // phpcs:disable WordPress.WP.I18n.UnorderedPlaceholdersText |
|
86 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
87 | - return sprintf( |
|
88 | - __( |
|
89 | - '%sAll unsaved registration information entered during this session has been deleted.%s', |
|
90 | - 'event_espresso' |
|
91 | - ), |
|
92 | - '<p class="ee-registrations-cancelled-pg ee-attention">', |
|
93 | - '</p>' |
|
94 | - ); |
|
95 | - // phpcs:enable |
|
96 | - } |
|
59 | + /** |
|
60 | + * callback that runs when the shortcode is encountered in post content. |
|
61 | + * IMPORTANT !!! |
|
62 | + * remember that shortcode content should be RETURNED and NOT echoed out |
|
63 | + * |
|
64 | + * @param array $attributes |
|
65 | + * @return string |
|
66 | + * @throws \EE_Error |
|
67 | + */ |
|
68 | + public function processShortcode($attributes = array()) |
|
69 | + { |
|
70 | + $transaction = EE_Registry::instance()->SSN->get_session_data('transaction'); |
|
71 | + if ($transaction instanceof EE_Transaction) { |
|
72 | + do_action('AHEE__EES_Espresso_Cancelled__process_shortcode__transaction', $transaction); |
|
73 | + $registrations = $transaction->registrations(); |
|
74 | + foreach ($registrations as $registration) { |
|
75 | + if ($registration instanceof EE_Registration) { |
|
76 | + do_action('AHEE__EES_Espresso_Cancelled__process_shortcode__registration', $registration); |
|
77 | + } |
|
78 | + } |
|
79 | + } |
|
80 | + do_action('AHEE__EES_Espresso_Cancelled__process_shortcode__clear_session'); |
|
81 | + // remove all unwanted records from the db |
|
82 | + if (EE_Registry::instance()->CART instanceof EE_Cart) { |
|
83 | + EE_Registry::instance()->CART->delete_cart(); |
|
84 | + } |
|
85 | + // phpcs:disable WordPress.WP.I18n.UnorderedPlaceholdersText |
|
86 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
87 | + return sprintf( |
|
88 | + __( |
|
89 | + '%sAll unsaved registration information entered during this session has been deleted.%s', |
|
90 | + 'event_espresso' |
|
91 | + ), |
|
92 | + '<p class="ee-registrations-cancelled-pg ee-attention">', |
|
93 | + '</p>' |
|
94 | + ); |
|
95 | + // phpcs:enable |
|
96 | + } |
|
97 | 97 | } |
@@ -16,198 +16,198 @@ |
||
16 | 16 | class EventListQuery extends WP_Query |
17 | 17 | { |
18 | 18 | |
19 | - /** |
|
20 | - * @var string $title |
|
21 | - */ |
|
22 | - private $title; |
|
23 | - |
|
24 | - /** |
|
25 | - * @var integer $limit |
|
26 | - */ |
|
27 | - private $limit = 10; |
|
28 | - |
|
29 | - /** |
|
30 | - * @var string $css_class |
|
31 | - */ |
|
32 | - private $css_class; |
|
33 | - |
|
34 | - /** |
|
35 | - * @var boolean $show_expired |
|
36 | - */ |
|
37 | - private $show_expired = false; |
|
38 | - |
|
39 | - /** |
|
40 | - * @var string $month |
|
41 | - */ |
|
42 | - private $month; |
|
43 | - |
|
44 | - /** |
|
45 | - * @var string $category_slug |
|
46 | - */ |
|
47 | - private $category_slug; |
|
48 | - |
|
49 | - /** |
|
50 | - * @var string $order_by |
|
51 | - */ |
|
52 | - private $order_by; |
|
53 | - |
|
54 | - /** |
|
55 | - * @var string $sort |
|
56 | - */ |
|
57 | - private $sort; |
|
58 | - |
|
59 | - /** |
|
60 | - * @var boolean $show_title |
|
61 | - */ |
|
62 | - private $show_title = true; |
|
63 | - |
|
64 | - |
|
65 | - /** |
|
66 | - * EE_Event_List_Query Constructor * |
|
67 | - * |
|
68 | - * @param array $args |
|
69 | - */ |
|
70 | - public function __construct($args = array()) |
|
71 | - { |
|
72 | - $args = $this->parseArgs((array) $args); |
|
73 | - $this->setupEventQueryHelper(); |
|
74 | - $this->setupFilters(); |
|
75 | - $args = $this->getQueryArgs($args); |
|
76 | - // run the query |
|
77 | - parent::__construct($args); |
|
78 | - } |
|
79 | - |
|
80 | - |
|
81 | - /** |
|
82 | - * @param array $args |
|
83 | - * @return array |
|
84 | - */ |
|
85 | - private function parseArgs(array $args) |
|
86 | - { |
|
87 | - // incoming args could be a mix of WP query args + EE shortcode args |
|
88 | - foreach ($args as $property => $value) { |
|
89 | - // if the arg is a property of this class, then it's an EE shortcode arg |
|
90 | - if (property_exists($this, $property) && ! property_exists('WP_Query', $property)) { |
|
91 | - // set the property value |
|
92 | - $this->{$property} = $value; |
|
93 | - // then remove it from the array of args that will later be passed to WP_Query() |
|
94 | - unset($args[ $property ]); |
|
95 | - } |
|
96 | - } |
|
97 | - return $args; |
|
98 | - } |
|
99 | - |
|
100 | - |
|
101 | - private function setupEventQueryHelper() |
|
102 | - { |
|
103 | - // add query filters |
|
104 | - EEH_Event_Query::add_query_filters(); |
|
105 | - // set params that will get used by the filters |
|
106 | - EEH_Event_Query::set_query_params( |
|
107 | - $this->month, |
|
108 | - $this->category_slug, |
|
109 | - $this->show_expired, |
|
110 | - $this->order_by, |
|
111 | - $this->sort |
|
112 | - ); |
|
113 | - } |
|
114 | - |
|
115 | - |
|
116 | - private function setupFilters() |
|
117 | - { |
|
118 | - // first off, let's remove any filters from previous queries |
|
119 | - remove_filter( |
|
120 | - 'FHEE__archive_espresso_events_template__show_header', |
|
121 | - array($this, 'show_event_list_title') |
|
122 | - ); |
|
123 | - remove_filter( |
|
124 | - 'FHEE__archive_espresso_events_template__upcoming_events_h1', |
|
125 | - array($this, 'event_list_title') |
|
126 | - ); |
|
127 | - remove_all_filters('FHEE__content_espresso_events__event_class'); |
|
128 | - // Event List Title ? |
|
129 | - add_filter( |
|
130 | - 'FHEE__archive_espresso_events_template__show_header', |
|
131 | - array($this, 'show_event_list_title') |
|
132 | - ); |
|
133 | - add_filter( |
|
134 | - 'FHEE__archive_espresso_events_template__upcoming_events_h1', |
|
135 | - array($this, 'event_list_title'), |
|
136 | - 10, |
|
137 | - 1 |
|
138 | - ); |
|
139 | - // add the css class |
|
140 | - add_filter( |
|
141 | - 'FHEE__content_espresso_events__event_class', |
|
142 | - array($this, 'event_list_css'), |
|
143 | - 10, |
|
144 | - 1 |
|
145 | - ); |
|
146 | - } |
|
147 | - |
|
148 | - |
|
149 | - private function getQueryArgs(array $args) |
|
150 | - { |
|
151 | - // the current "page" we are viewing |
|
152 | - $paged = max(1, get_query_var('paged')); |
|
153 | - // Force these args |
|
154 | - return array_merge( |
|
155 | - $args, |
|
156 | - array( |
|
157 | - 'post_type' => 'espresso_events', |
|
158 | - 'posts_per_page' => $this->limit, |
|
159 | - 'update_post_term_cache' => false, |
|
160 | - 'update_post_meta_cache' => false, |
|
161 | - 'paged' => $paged, |
|
162 | - 'offset' => ($paged - 1) * $this->limit, |
|
163 | - ) |
|
164 | - ); |
|
165 | - } |
|
166 | - |
|
167 | - // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps |
|
168 | - |
|
169 | - /** |
|
170 | - * show_event_list_title |
|
171 | - * |
|
172 | - * @return boolean |
|
173 | - */ |
|
174 | - public function show_event_list_title() |
|
175 | - { |
|
176 | - return filter_var( |
|
177 | - $this->show_title, |
|
178 | - FILTER_VALIDATE_BOOLEAN |
|
179 | - ); |
|
180 | - } |
|
181 | - |
|
182 | - |
|
183 | - /** |
|
184 | - * callback for FHEE__archive_espresso_events_template__upcoming_events_h1 filter |
|
185 | - * |
|
186 | - * @param string $event_list_title |
|
187 | - * @return string |
|
188 | - */ |
|
189 | - public function event_list_title($event_list_title = '') |
|
190 | - { |
|
191 | - if (! empty($this->title)) { |
|
192 | - return $this->title; |
|
193 | - } |
|
194 | - return $event_list_title; |
|
195 | - } |
|
196 | - |
|
197 | - |
|
198 | - /** |
|
199 | - * callback for FHEE__content_espresso_events__event_class filter |
|
200 | - * |
|
201 | - * @param string $event_list_css |
|
202 | - * @return string |
|
203 | - */ |
|
204 | - public function event_list_css($event_list_css = '') |
|
205 | - { |
|
206 | - $event_list_css .= ! empty($event_list_css) ? ' ' : ''; |
|
207 | - $event_list_css .= ! empty($this->css_class) ? $this->css_class : ''; |
|
208 | - $event_list_css .= ! empty($event_list_css) ? ' ' : ''; |
|
209 | - $event_list_css .= ! empty($this->category_slug) ? $this->category_slug : ''; |
|
210 | - return $event_list_css; |
|
211 | - } |
|
212 | - // phpcs:enable |
|
19 | + /** |
|
20 | + * @var string $title |
|
21 | + */ |
|
22 | + private $title; |
|
23 | + |
|
24 | + /** |
|
25 | + * @var integer $limit |
|
26 | + */ |
|
27 | + private $limit = 10; |
|
28 | + |
|
29 | + /** |
|
30 | + * @var string $css_class |
|
31 | + */ |
|
32 | + private $css_class; |
|
33 | + |
|
34 | + /** |
|
35 | + * @var boolean $show_expired |
|
36 | + */ |
|
37 | + private $show_expired = false; |
|
38 | + |
|
39 | + /** |
|
40 | + * @var string $month |
|
41 | + */ |
|
42 | + private $month; |
|
43 | + |
|
44 | + /** |
|
45 | + * @var string $category_slug |
|
46 | + */ |
|
47 | + private $category_slug; |
|
48 | + |
|
49 | + /** |
|
50 | + * @var string $order_by |
|
51 | + */ |
|
52 | + private $order_by; |
|
53 | + |
|
54 | + /** |
|
55 | + * @var string $sort |
|
56 | + */ |
|
57 | + private $sort; |
|
58 | + |
|
59 | + /** |
|
60 | + * @var boolean $show_title |
|
61 | + */ |
|
62 | + private $show_title = true; |
|
63 | + |
|
64 | + |
|
65 | + /** |
|
66 | + * EE_Event_List_Query Constructor * |
|
67 | + * |
|
68 | + * @param array $args |
|
69 | + */ |
|
70 | + public function __construct($args = array()) |
|
71 | + { |
|
72 | + $args = $this->parseArgs((array) $args); |
|
73 | + $this->setupEventQueryHelper(); |
|
74 | + $this->setupFilters(); |
|
75 | + $args = $this->getQueryArgs($args); |
|
76 | + // run the query |
|
77 | + parent::__construct($args); |
|
78 | + } |
|
79 | + |
|
80 | + |
|
81 | + /** |
|
82 | + * @param array $args |
|
83 | + * @return array |
|
84 | + */ |
|
85 | + private function parseArgs(array $args) |
|
86 | + { |
|
87 | + // incoming args could be a mix of WP query args + EE shortcode args |
|
88 | + foreach ($args as $property => $value) { |
|
89 | + // if the arg is a property of this class, then it's an EE shortcode arg |
|
90 | + if (property_exists($this, $property) && ! property_exists('WP_Query', $property)) { |
|
91 | + // set the property value |
|
92 | + $this->{$property} = $value; |
|
93 | + // then remove it from the array of args that will later be passed to WP_Query() |
|
94 | + unset($args[ $property ]); |
|
95 | + } |
|
96 | + } |
|
97 | + return $args; |
|
98 | + } |
|
99 | + |
|
100 | + |
|
101 | + private function setupEventQueryHelper() |
|
102 | + { |
|
103 | + // add query filters |
|
104 | + EEH_Event_Query::add_query_filters(); |
|
105 | + // set params that will get used by the filters |
|
106 | + EEH_Event_Query::set_query_params( |
|
107 | + $this->month, |
|
108 | + $this->category_slug, |
|
109 | + $this->show_expired, |
|
110 | + $this->order_by, |
|
111 | + $this->sort |
|
112 | + ); |
|
113 | + } |
|
114 | + |
|
115 | + |
|
116 | + private function setupFilters() |
|
117 | + { |
|
118 | + // first off, let's remove any filters from previous queries |
|
119 | + remove_filter( |
|
120 | + 'FHEE__archive_espresso_events_template__show_header', |
|
121 | + array($this, 'show_event_list_title') |
|
122 | + ); |
|
123 | + remove_filter( |
|
124 | + 'FHEE__archive_espresso_events_template__upcoming_events_h1', |
|
125 | + array($this, 'event_list_title') |
|
126 | + ); |
|
127 | + remove_all_filters('FHEE__content_espresso_events__event_class'); |
|
128 | + // Event List Title ? |
|
129 | + add_filter( |
|
130 | + 'FHEE__archive_espresso_events_template__show_header', |
|
131 | + array($this, 'show_event_list_title') |
|
132 | + ); |
|
133 | + add_filter( |
|
134 | + 'FHEE__archive_espresso_events_template__upcoming_events_h1', |
|
135 | + array($this, 'event_list_title'), |
|
136 | + 10, |
|
137 | + 1 |
|
138 | + ); |
|
139 | + // add the css class |
|
140 | + add_filter( |
|
141 | + 'FHEE__content_espresso_events__event_class', |
|
142 | + array($this, 'event_list_css'), |
|
143 | + 10, |
|
144 | + 1 |
|
145 | + ); |
|
146 | + } |
|
147 | + |
|
148 | + |
|
149 | + private function getQueryArgs(array $args) |
|
150 | + { |
|
151 | + // the current "page" we are viewing |
|
152 | + $paged = max(1, get_query_var('paged')); |
|
153 | + // Force these args |
|
154 | + return array_merge( |
|
155 | + $args, |
|
156 | + array( |
|
157 | + 'post_type' => 'espresso_events', |
|
158 | + 'posts_per_page' => $this->limit, |
|
159 | + 'update_post_term_cache' => false, |
|
160 | + 'update_post_meta_cache' => false, |
|
161 | + 'paged' => $paged, |
|
162 | + 'offset' => ($paged - 1) * $this->limit, |
|
163 | + ) |
|
164 | + ); |
|
165 | + } |
|
166 | + |
|
167 | + // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps |
|
168 | + |
|
169 | + /** |
|
170 | + * show_event_list_title |
|
171 | + * |
|
172 | + * @return boolean |
|
173 | + */ |
|
174 | + public function show_event_list_title() |
|
175 | + { |
|
176 | + return filter_var( |
|
177 | + $this->show_title, |
|
178 | + FILTER_VALIDATE_BOOLEAN |
|
179 | + ); |
|
180 | + } |
|
181 | + |
|
182 | + |
|
183 | + /** |
|
184 | + * callback for FHEE__archive_espresso_events_template__upcoming_events_h1 filter |
|
185 | + * |
|
186 | + * @param string $event_list_title |
|
187 | + * @return string |
|
188 | + */ |
|
189 | + public function event_list_title($event_list_title = '') |
|
190 | + { |
|
191 | + if (! empty($this->title)) { |
|
192 | + return $this->title; |
|
193 | + } |
|
194 | + return $event_list_title; |
|
195 | + } |
|
196 | + |
|
197 | + |
|
198 | + /** |
|
199 | + * callback for FHEE__content_espresso_events__event_class filter |
|
200 | + * |
|
201 | + * @param string $event_list_css |
|
202 | + * @return string |
|
203 | + */ |
|
204 | + public function event_list_css($event_list_css = '') |
|
205 | + { |
|
206 | + $event_list_css .= ! empty($event_list_css) ? ' ' : ''; |
|
207 | + $event_list_css .= ! empty($this->css_class) ? $this->css_class : ''; |
|
208 | + $event_list_css .= ! empty($event_list_css) ? ' ' : ''; |
|
209 | + $event_list_css .= ! empty($this->category_slug) ? $this->category_slug : ''; |
|
210 | + return $event_list_css; |
|
211 | + } |
|
212 | + // phpcs:enable |
|
213 | 213 | } |
@@ -91,7 +91,7 @@ discard block |
||
91 | 91 | // set the property value |
92 | 92 | $this->{$property} = $value; |
93 | 93 | // then remove it from the array of args that will later be passed to WP_Query() |
94 | - unset($args[ $property ]); |
|
94 | + unset($args[$property]); |
|
95 | 95 | } |
96 | 96 | } |
97 | 97 | return $args; |
@@ -188,7 +188,7 @@ discard block |
||
188 | 188 | */ |
189 | 189 | public function event_list_title($event_list_title = '') |
190 | 190 | { |
191 | - if (! empty($this->title)) { |
|
191 | + if ( ! empty($this->title)) { |
|
192 | 192 | return $this->title; |
193 | 193 | } |
194 | 194 | return $event_list_title; |
@@ -15,112 +15,112 @@ |
||
15 | 15 | class Basic implements EmailValidatorInterface |
16 | 16 | { |
17 | 17 | |
18 | - /** |
|
19 | - * @param string $email_address |
|
20 | - * @return bool |
|
21 | - * @throws EmailValidationException |
|
22 | - */ |
|
23 | - public function validate($email_address) |
|
24 | - { |
|
25 | - if (! preg_match('/^.+\@\S+$/', $email_address)) { |
|
26 | - // email not in correct {string}@{string} format |
|
27 | - throw new EmailValidationException( |
|
28 | - esc_html__('Email does not have the required @ sign.', 'event_espresso') |
|
29 | - ); |
|
30 | - } |
|
31 | - $atIndex = $this->getAtIndex($email_address); |
|
32 | - $local = $this->getLocalPartOfEmail($email_address, $atIndex); |
|
33 | - $localLen = strlen($local); |
|
34 | - if ($localLen < 1) { |
|
35 | - // no local part |
|
36 | - throw new EmailValidationException( |
|
37 | - esc_html__('Email local-part (before the @) is required.', 'event_espresso') |
|
38 | - ); |
|
39 | - } |
|
40 | - if ($localLen > 64) { |
|
41 | - // local part length exceeded |
|
42 | - throw new EmailValidationException( |
|
43 | - esc_html__('Email local-part (before the @) is too long.', 'event_espresso') |
|
44 | - ); |
|
45 | - } |
|
46 | - if ($local[0] === '.') { |
|
47 | - // local part starts with '.' |
|
48 | - throw new EmailValidationException( |
|
49 | - esc_html__('Email local-part (before the @) must not begin with a period.', 'event_espresso') |
|
50 | - ); |
|
51 | - } |
|
52 | - if ($local[ $localLen - 1 ] === '.') { |
|
53 | - // local part starts or ends with '.' |
|
54 | - throw new EmailValidationException( |
|
55 | - esc_html__('Email local-part (before the @) must not end with a period.', 'event_espresso') |
|
56 | - ); |
|
57 | - } |
|
58 | - if (preg_match('/\\.\\./', $local)) { |
|
59 | - // local part has two consecutive dots |
|
60 | - throw new EmailValidationException( |
|
61 | - esc_html__( |
|
62 | - 'Email local-part (before the @) must not have two consecutive periods.', |
|
63 | - 'event_espresso' |
|
64 | - ) |
|
65 | - ); |
|
66 | - } |
|
67 | - $domain = $this->getDomainPartOfEmail($email_address, $atIndex); |
|
68 | - $domainLen = strlen($domain); |
|
69 | - if ($domainLen < 1) { |
|
70 | - throw new EmailValidationException( |
|
71 | - esc_html__('Email domain (after the @) is required.', 'event_espresso') |
|
72 | - ); |
|
73 | - } |
|
74 | - if ($domainLen > 255) { |
|
75 | - // domain part length exceeded |
|
76 | - throw new EmailValidationException( |
|
77 | - esc_html__('Email domain (after the @) is too long.', 'event_espresso') |
|
78 | - ); |
|
79 | - } |
|
80 | - if (preg_match('/\\.\\./', $domain)) { |
|
81 | - // domain part has two consecutive dots |
|
82 | - throw new EmailValidationException( |
|
83 | - esc_html__('Email domain (after the @) must not have two consecutive periods.', 'event_espresso') |
|
84 | - ); |
|
85 | - } |
|
86 | - return true; |
|
87 | - } |
|
18 | + /** |
|
19 | + * @param string $email_address |
|
20 | + * @return bool |
|
21 | + * @throws EmailValidationException |
|
22 | + */ |
|
23 | + public function validate($email_address) |
|
24 | + { |
|
25 | + if (! preg_match('/^.+\@\S+$/', $email_address)) { |
|
26 | + // email not in correct {string}@{string} format |
|
27 | + throw new EmailValidationException( |
|
28 | + esc_html__('Email does not have the required @ sign.', 'event_espresso') |
|
29 | + ); |
|
30 | + } |
|
31 | + $atIndex = $this->getAtIndex($email_address); |
|
32 | + $local = $this->getLocalPartOfEmail($email_address, $atIndex); |
|
33 | + $localLen = strlen($local); |
|
34 | + if ($localLen < 1) { |
|
35 | + // no local part |
|
36 | + throw new EmailValidationException( |
|
37 | + esc_html__('Email local-part (before the @) is required.', 'event_espresso') |
|
38 | + ); |
|
39 | + } |
|
40 | + if ($localLen > 64) { |
|
41 | + // local part length exceeded |
|
42 | + throw new EmailValidationException( |
|
43 | + esc_html__('Email local-part (before the @) is too long.', 'event_espresso') |
|
44 | + ); |
|
45 | + } |
|
46 | + if ($local[0] === '.') { |
|
47 | + // local part starts with '.' |
|
48 | + throw new EmailValidationException( |
|
49 | + esc_html__('Email local-part (before the @) must not begin with a period.', 'event_espresso') |
|
50 | + ); |
|
51 | + } |
|
52 | + if ($local[ $localLen - 1 ] === '.') { |
|
53 | + // local part starts or ends with '.' |
|
54 | + throw new EmailValidationException( |
|
55 | + esc_html__('Email local-part (before the @) must not end with a period.', 'event_espresso') |
|
56 | + ); |
|
57 | + } |
|
58 | + if (preg_match('/\\.\\./', $local)) { |
|
59 | + // local part has two consecutive dots |
|
60 | + throw new EmailValidationException( |
|
61 | + esc_html__( |
|
62 | + 'Email local-part (before the @) must not have two consecutive periods.', |
|
63 | + 'event_espresso' |
|
64 | + ) |
|
65 | + ); |
|
66 | + } |
|
67 | + $domain = $this->getDomainPartOfEmail($email_address, $atIndex); |
|
68 | + $domainLen = strlen($domain); |
|
69 | + if ($domainLen < 1) { |
|
70 | + throw new EmailValidationException( |
|
71 | + esc_html__('Email domain (after the @) is required.', 'event_espresso') |
|
72 | + ); |
|
73 | + } |
|
74 | + if ($domainLen > 255) { |
|
75 | + // domain part length exceeded |
|
76 | + throw new EmailValidationException( |
|
77 | + esc_html__('Email domain (after the @) is too long.', 'event_espresso') |
|
78 | + ); |
|
79 | + } |
|
80 | + if (preg_match('/\\.\\./', $domain)) { |
|
81 | + // domain part has two consecutive dots |
|
82 | + throw new EmailValidationException( |
|
83 | + esc_html__('Email domain (after the @) must not have two consecutive periods.', 'event_espresso') |
|
84 | + ); |
|
85 | + } |
|
86 | + return true; |
|
87 | + } |
|
88 | 88 | |
89 | 89 | |
90 | - /** |
|
91 | - * returns the location of the @ symbol |
|
92 | - * |
|
93 | - * @param string $email_address |
|
94 | - * @return bool|string |
|
95 | - */ |
|
96 | - protected function getAtIndex($email_address) |
|
97 | - { |
|
98 | - return strrpos($email_address, '@'); |
|
99 | - } |
|
90 | + /** |
|
91 | + * returns the location of the @ symbol |
|
92 | + * |
|
93 | + * @param string $email_address |
|
94 | + * @return bool|string |
|
95 | + */ |
|
96 | + protected function getAtIndex($email_address) |
|
97 | + { |
|
98 | + return strrpos($email_address, '@'); |
|
99 | + } |
|
100 | 100 | |
101 | 101 | |
102 | - /** |
|
103 | - * Gets the local part of the email |
|
104 | - * |
|
105 | - * @param string $email_address |
|
106 | - * @param bool|int $atIndex |
|
107 | - * @return bool|string |
|
108 | - */ |
|
109 | - protected function getLocalPartOfEmail($email_address, $atIndex) |
|
110 | - { |
|
111 | - return substr($email_address, 0, $atIndex); |
|
112 | - } |
|
102 | + /** |
|
103 | + * Gets the local part of the email |
|
104 | + * |
|
105 | + * @param string $email_address |
|
106 | + * @param bool|int $atIndex |
|
107 | + * @return bool|string |
|
108 | + */ |
|
109 | + protected function getLocalPartOfEmail($email_address, $atIndex) |
|
110 | + { |
|
111 | + return substr($email_address, 0, $atIndex); |
|
112 | + } |
|
113 | 113 | |
114 | 114 | |
115 | - /** |
|
116 | - * Gets the domain part of the email |
|
117 | - * |
|
118 | - * @param string $email_address |
|
119 | - * @param bool|int $atIndex |
|
120 | - * @return bool|string |
|
121 | - */ |
|
122 | - protected function getDomainPartOfEmail($email_address, $atIndex) |
|
123 | - { |
|
124 | - return substr($email_address, $atIndex + 1); |
|
125 | - } |
|
115 | + /** |
|
116 | + * Gets the domain part of the email |
|
117 | + * |
|
118 | + * @param string $email_address |
|
119 | + * @param bool|int $atIndex |
|
120 | + * @return bool|string |
|
121 | + */ |
|
122 | + protected function getDomainPartOfEmail($email_address, $atIndex) |
|
123 | + { |
|
124 | + return substr($email_address, $atIndex + 1); |
|
125 | + } |
|
126 | 126 | } |
@@ -22,7 +22,7 @@ discard block |
||
22 | 22 | */ |
23 | 23 | public function validate($email_address) |
24 | 24 | { |
25 | - if (! preg_match('/^.+\@\S+$/', $email_address)) { |
|
25 | + if ( ! preg_match('/^.+\@\S+$/', $email_address)) { |
|
26 | 26 | // email not in correct {string}@{string} format |
27 | 27 | throw new EmailValidationException( |
28 | 28 | esc_html__('Email does not have the required @ sign.', 'event_espresso') |
@@ -49,7 +49,7 @@ discard block |
||
49 | 49 | esc_html__('Email local-part (before the @) must not begin with a period.', 'event_espresso') |
50 | 50 | ); |
51 | 51 | } |
52 | - if ($local[ $localLen - 1 ] === '.') { |
|
52 | + if ($local[$localLen - 1] === '.') { |
|
53 | 53 | // local part starts or ends with '.' |
54 | 54 | throw new EmailValidationException( |
55 | 55 | esc_html__('Email local-part (before the @) must not end with a period.', 'event_espresso') |
@@ -70,14 +70,14 @@ |
||
70 | 70 | 'REG_code' => $reg_code, |
71 | 71 | ) |
72 | 72 | ); |
73 | - if (! $registration instanceof EE_Registration) { |
|
73 | + if ( ! $registration instanceof EE_Registration) { |
|
74 | 74 | throw new UnexpectedEntityException($registration, 'EE_Registration'); |
75 | 75 | } |
76 | 76 | // save registration so that we have an ID |
77 | 77 | $registration->save(); |
78 | 78 | // track reservation on reg but don't adjust ticket and datetime reserved counts |
79 | 79 | // because that is done as soon as the tickets are added/removed from the cart |
80 | - $registration->reserve_ticket(false, 'CreateRegistrationService:' . __LINE__); |
|
80 | + $registration->reserve_ticket(false, 'CreateRegistrationService:'.__LINE__); |
|
81 | 81 | $registration->_add_relation_to($event, 'Event', array(), $event->ID()); |
82 | 82 | $registration->_add_relation_to($ticket, 'Ticket', array(), $ticket->ID()); |
83 | 83 | $transaction->_add_relation_to($registration, 'Registration', array(), $registration->ID()); |
@@ -29,102 +29,102 @@ |
||
29 | 29 | { |
30 | 30 | |
31 | 31 | |
32 | - /** |
|
33 | - * @param EE_Event $event |
|
34 | - * @param EE_Transaction $transaction |
|
35 | - * @param EE_Ticket $ticket |
|
36 | - * @param EE_Line_Item $ticket_line_item |
|
37 | - * @param $reg_count |
|
38 | - * @param $reg_group_size |
|
39 | - * @param string $reg_status |
|
40 | - * @return EE_Registration |
|
41 | - * @throws OutOfRangeException |
|
42 | - * @throws EE_Error |
|
43 | - * @throws UnexpectedEntityException |
|
44 | - */ |
|
45 | - public function create( |
|
46 | - EE_Event $event, |
|
47 | - EE_Transaction $transaction, |
|
48 | - EE_Ticket $ticket, |
|
49 | - EE_Line_Item $ticket_line_item, |
|
50 | - $reg_count, |
|
51 | - $reg_group_size, |
|
52 | - $reg_status = EEM_Registration::status_id_incomplete |
|
53 | - ) { |
|
54 | - $registrations = $transaction->registrations(); |
|
55 | - $reg_count = $reg_count ? $reg_count : count($registrations) + 1; |
|
56 | - $reg_url_link = new RegUrlLink($reg_count, $ticket_line_item); |
|
57 | - $reg_code = new RegCode($reg_url_link, $transaction, $ticket); |
|
58 | - // generate new EE_Registration |
|
59 | - $registration = EE_Registration::new_instance( |
|
60 | - array( |
|
61 | - 'EVT_ID' => $event->ID(), |
|
62 | - 'TXN_ID' => $transaction->ID(), |
|
63 | - 'TKT_ID' => $ticket->ID(), |
|
64 | - 'STS_ID' => $reg_status, |
|
65 | - 'REG_final_price' => $this->resolveFinalPrice($transaction, $ticket, $ticket_line_item), |
|
66 | - 'REG_session' => EE_Registry::instance()->SSN->id(), |
|
67 | - 'REG_count' => $reg_count, |
|
68 | - 'REG_group_size' => $reg_group_size ? $reg_group_size : $this->incrementRegGroupSize($registrations), |
|
69 | - 'REG_url_link' => $reg_url_link, |
|
70 | - 'REG_code' => $reg_code, |
|
71 | - ) |
|
72 | - ); |
|
73 | - if (! $registration instanceof EE_Registration) { |
|
74 | - throw new UnexpectedEntityException($registration, 'EE_Registration'); |
|
75 | - } |
|
76 | - // save registration so that we have an ID |
|
77 | - $registration->save(); |
|
78 | - // track reservation on reg but don't adjust ticket and datetime reserved counts |
|
79 | - // because that is done as soon as the tickets are added/removed from the cart |
|
80 | - $registration->reserve_ticket(false, 'CreateRegistrationService:' . __LINE__); |
|
81 | - $registration->_add_relation_to($event, 'Event', array(), $event->ID()); |
|
82 | - $registration->_add_relation_to($ticket, 'Ticket', array(), $ticket->ID()); |
|
83 | - $transaction->_add_relation_to($registration, 'Registration', array(), $registration->ID()); |
|
84 | - $registration->save(); |
|
85 | - return $registration; |
|
86 | - } |
|
32 | + /** |
|
33 | + * @param EE_Event $event |
|
34 | + * @param EE_Transaction $transaction |
|
35 | + * @param EE_Ticket $ticket |
|
36 | + * @param EE_Line_Item $ticket_line_item |
|
37 | + * @param $reg_count |
|
38 | + * @param $reg_group_size |
|
39 | + * @param string $reg_status |
|
40 | + * @return EE_Registration |
|
41 | + * @throws OutOfRangeException |
|
42 | + * @throws EE_Error |
|
43 | + * @throws UnexpectedEntityException |
|
44 | + */ |
|
45 | + public function create( |
|
46 | + EE_Event $event, |
|
47 | + EE_Transaction $transaction, |
|
48 | + EE_Ticket $ticket, |
|
49 | + EE_Line_Item $ticket_line_item, |
|
50 | + $reg_count, |
|
51 | + $reg_group_size, |
|
52 | + $reg_status = EEM_Registration::status_id_incomplete |
|
53 | + ) { |
|
54 | + $registrations = $transaction->registrations(); |
|
55 | + $reg_count = $reg_count ? $reg_count : count($registrations) + 1; |
|
56 | + $reg_url_link = new RegUrlLink($reg_count, $ticket_line_item); |
|
57 | + $reg_code = new RegCode($reg_url_link, $transaction, $ticket); |
|
58 | + // generate new EE_Registration |
|
59 | + $registration = EE_Registration::new_instance( |
|
60 | + array( |
|
61 | + 'EVT_ID' => $event->ID(), |
|
62 | + 'TXN_ID' => $transaction->ID(), |
|
63 | + 'TKT_ID' => $ticket->ID(), |
|
64 | + 'STS_ID' => $reg_status, |
|
65 | + 'REG_final_price' => $this->resolveFinalPrice($transaction, $ticket, $ticket_line_item), |
|
66 | + 'REG_session' => EE_Registry::instance()->SSN->id(), |
|
67 | + 'REG_count' => $reg_count, |
|
68 | + 'REG_group_size' => $reg_group_size ? $reg_group_size : $this->incrementRegGroupSize($registrations), |
|
69 | + 'REG_url_link' => $reg_url_link, |
|
70 | + 'REG_code' => $reg_code, |
|
71 | + ) |
|
72 | + ); |
|
73 | + if (! $registration instanceof EE_Registration) { |
|
74 | + throw new UnexpectedEntityException($registration, 'EE_Registration'); |
|
75 | + } |
|
76 | + // save registration so that we have an ID |
|
77 | + $registration->save(); |
|
78 | + // track reservation on reg but don't adjust ticket and datetime reserved counts |
|
79 | + // because that is done as soon as the tickets are added/removed from the cart |
|
80 | + $registration->reserve_ticket(false, 'CreateRegistrationService:' . __LINE__); |
|
81 | + $registration->_add_relation_to($event, 'Event', array(), $event->ID()); |
|
82 | + $registration->_add_relation_to($ticket, 'Ticket', array(), $ticket->ID()); |
|
83 | + $transaction->_add_relation_to($registration, 'Registration', array(), $registration->ID()); |
|
84 | + $registration->save(); |
|
85 | + return $registration; |
|
86 | + } |
|
87 | 87 | |
88 | 88 | |
89 | - /** |
|
90 | - * @param EE_Transaction $transaction |
|
91 | - * @param EE_Ticket $ticket |
|
92 | - * @param EE_Line_Item $ticket_line_item |
|
93 | - * @return float |
|
94 | - * @throws EE_Error |
|
95 | - * @throws OutOfRangeException |
|
96 | - */ |
|
97 | - protected function resolveFinalPrice( |
|
98 | - EE_Transaction $transaction, |
|
99 | - EE_Ticket $ticket, |
|
100 | - EE_Line_Item $ticket_line_item |
|
101 | - ) { |
|
102 | - $final_price = EEH_Line_Item::calculate_final_price_for_ticket_line_item( |
|
103 | - $transaction->total_line_item(), |
|
104 | - $ticket_line_item |
|
105 | - ); |
|
106 | - $final_price = $final_price !== null ? $final_price : $ticket->get_ticket_total_with_taxes(); |
|
107 | - return (float) $final_price; |
|
108 | - } |
|
89 | + /** |
|
90 | + * @param EE_Transaction $transaction |
|
91 | + * @param EE_Ticket $ticket |
|
92 | + * @param EE_Line_Item $ticket_line_item |
|
93 | + * @return float |
|
94 | + * @throws EE_Error |
|
95 | + * @throws OutOfRangeException |
|
96 | + */ |
|
97 | + protected function resolveFinalPrice( |
|
98 | + EE_Transaction $transaction, |
|
99 | + EE_Ticket $ticket, |
|
100 | + EE_Line_Item $ticket_line_item |
|
101 | + ) { |
|
102 | + $final_price = EEH_Line_Item::calculate_final_price_for_ticket_line_item( |
|
103 | + $transaction->total_line_item(), |
|
104 | + $ticket_line_item |
|
105 | + ); |
|
106 | + $final_price = $final_price !== null ? $final_price : $ticket->get_ticket_total_with_taxes(); |
|
107 | + return (float) $final_price; |
|
108 | + } |
|
109 | 109 | |
110 | 110 | |
111 | - /** |
|
112 | - * @param EE_Registration[] $registrations |
|
113 | - * @param boolean $update_existing_registrations |
|
114 | - * @return int |
|
115 | - * @throws EE_Error |
|
116 | - */ |
|
117 | - protected function incrementRegGroupSize(array $registrations, $update_existing_registrations = true) |
|
118 | - { |
|
119 | - $new_reg_group_size = count($registrations) + 1; |
|
120 | - if ($update_existing_registrations) { |
|
121 | - foreach ($registrations as $registration) { |
|
122 | - if ($registration instanceof EE_Registration) { |
|
123 | - $registration->set_group_size($new_reg_group_size); |
|
124 | - $registration->save(); |
|
125 | - } |
|
126 | - } |
|
127 | - } |
|
128 | - return $new_reg_group_size; |
|
129 | - } |
|
111 | + /** |
|
112 | + * @param EE_Registration[] $registrations |
|
113 | + * @param boolean $update_existing_registrations |
|
114 | + * @return int |
|
115 | + * @throws EE_Error |
|
116 | + */ |
|
117 | + protected function incrementRegGroupSize(array $registrations, $update_existing_registrations = true) |
|
118 | + { |
|
119 | + $new_reg_group_size = count($registrations) + 1; |
|
120 | + if ($update_existing_registrations) { |
|
121 | + foreach ($registrations as $registration) { |
|
122 | + if ($registration instanceof EE_Registration) { |
|
123 | + $registration->set_group_size($new_reg_group_size); |
|
124 | + $registration->save(); |
|
125 | + } |
|
126 | + } |
|
127 | + } |
|
128 | + return $new_reg_group_size; |
|
129 | + } |
|
130 | 130 | } |
@@ -83,7 +83,7 @@ discard block |
||
83 | 83 | $reindexed_answers = array(); |
84 | 84 | foreach ($answers as $answer) { |
85 | 85 | if ($answer instanceof EE_Answer) { |
86 | - $reindexed_answers[ $answer->question_ID() ] = $answer->value(); |
|
86 | + $reindexed_answers[$answer->question_ID()] = $answer->value(); |
|
87 | 87 | } |
88 | 88 | } |
89 | 89 | return $reindexed_answers; |
@@ -103,8 +103,8 @@ discard block |
||
103 | 103 | EE_Registration $registration, |
104 | 104 | $previous_answers |
105 | 105 | ) { |
106 | - $old_answer_value = isset($previous_answers[ $question->ID() ]) |
|
107 | - ? $previous_answers[ $question->ID() ] |
|
106 | + $old_answer_value = isset($previous_answers[$question->ID()]) |
|
107 | + ? $previous_answers[$question->ID()] |
|
108 | 108 | : ''; |
109 | 109 | $new_answer = EE_Answer::new_instance( |
110 | 110 | array( |
@@ -113,7 +113,7 @@ discard block |
||
113 | 113 | 'ANS_value' => $old_answer_value, |
114 | 114 | ) |
115 | 115 | ); |
116 | - if (! $new_answer instanceof EE_Answer) { |
|
116 | + if ( ! $new_answer instanceof EE_Answer) { |
|
117 | 117 | throw new UnexpectedEntityException($new_answer, 'EE_Answer'); |
118 | 118 | } |
119 | 119 | $new_answer->save(); |
@@ -150,7 +150,7 @@ discard block |
||
150 | 150 | 'RPY_amount' => $payment_amount, |
151 | 151 | ) |
152 | 152 | ); |
153 | - if (! $new_registration_payment instanceof EE_Registration_Payment) { |
|
153 | + if ( ! $new_registration_payment instanceof EE_Registration_Payment) { |
|
154 | 154 | throw new UnexpectedEntityException($new_registration_payment, 'EE_Registration_Payment'); |
155 | 155 | } |
156 | 156 | $new_registration_payment->save(); |
@@ -27,151 +27,151 @@ |
||
27 | 27 | { |
28 | 28 | |
29 | 29 | |
30 | - /** |
|
31 | - * @param EE_Registration $target_registration |
|
32 | - * @param EE_Registration $registration_to_copy |
|
33 | - * @return bool |
|
34 | - * @throws UnexpectedEntityException |
|
35 | - * @throws EntityNotFoundException |
|
36 | - * @throws RuntimeException |
|
37 | - * @throws EE_Error |
|
38 | - */ |
|
39 | - public function copyRegistrationDetails( |
|
40 | - EE_Registration $target_registration, |
|
41 | - EE_Registration $registration_to_copy |
|
42 | - ) { |
|
43 | - // copy attendee |
|
44 | - $target_registration->set_attendee_id($registration_to_copy->attendee_ID()); |
|
45 | - $target_registration->updateStatusBasedOnTotalPaid(false); |
|
46 | - $target_registration->save(); |
|
47 | - // get answers to previous reg questions |
|
48 | - $answers = $this->reindexAnswersByQuestionId($registration_to_copy->answers()); |
|
49 | - // get questions to new event reg form |
|
50 | - $new_event = $target_registration->event(); |
|
51 | - $field_name = 'Event_Question_Group.' |
|
52 | - . EEM_Event_Question_Group::instance()->fieldNameForContext( |
|
53 | - $registration_to_copy->is_primary_registrant() |
|
54 | - ); |
|
55 | - $question_groups = $new_event->question_groups([ |
|
56 | - [ |
|
57 | - 'Event.EVT_ID' => $new_event->ID(), |
|
58 | - $field_name => true, |
|
59 | - ], |
|
60 | - 'order_by' => ['QSG_order' => 'ASC'], |
|
61 | - ]); |
|
62 | - foreach ($question_groups as $question_group) { |
|
63 | - if ($question_group instanceof \EE_Question_Group) { |
|
64 | - foreach ($question_group->questions() as $question) { |
|
65 | - if ($question instanceof EE_Question) { |
|
66 | - $this->generateNewAnswer( |
|
67 | - $question, |
|
68 | - $target_registration, |
|
69 | - $answers |
|
70 | - ); |
|
71 | - } |
|
72 | - } |
|
73 | - } |
|
74 | - } |
|
75 | - return true; |
|
76 | - } |
|
30 | + /** |
|
31 | + * @param EE_Registration $target_registration |
|
32 | + * @param EE_Registration $registration_to_copy |
|
33 | + * @return bool |
|
34 | + * @throws UnexpectedEntityException |
|
35 | + * @throws EntityNotFoundException |
|
36 | + * @throws RuntimeException |
|
37 | + * @throws EE_Error |
|
38 | + */ |
|
39 | + public function copyRegistrationDetails( |
|
40 | + EE_Registration $target_registration, |
|
41 | + EE_Registration $registration_to_copy |
|
42 | + ) { |
|
43 | + // copy attendee |
|
44 | + $target_registration->set_attendee_id($registration_to_copy->attendee_ID()); |
|
45 | + $target_registration->updateStatusBasedOnTotalPaid(false); |
|
46 | + $target_registration->save(); |
|
47 | + // get answers to previous reg questions |
|
48 | + $answers = $this->reindexAnswersByQuestionId($registration_to_copy->answers()); |
|
49 | + // get questions to new event reg form |
|
50 | + $new_event = $target_registration->event(); |
|
51 | + $field_name = 'Event_Question_Group.' |
|
52 | + . EEM_Event_Question_Group::instance()->fieldNameForContext( |
|
53 | + $registration_to_copy->is_primary_registrant() |
|
54 | + ); |
|
55 | + $question_groups = $new_event->question_groups([ |
|
56 | + [ |
|
57 | + 'Event.EVT_ID' => $new_event->ID(), |
|
58 | + $field_name => true, |
|
59 | + ], |
|
60 | + 'order_by' => ['QSG_order' => 'ASC'], |
|
61 | + ]); |
|
62 | + foreach ($question_groups as $question_group) { |
|
63 | + if ($question_group instanceof \EE_Question_Group) { |
|
64 | + foreach ($question_group->questions() as $question) { |
|
65 | + if ($question instanceof EE_Question) { |
|
66 | + $this->generateNewAnswer( |
|
67 | + $question, |
|
68 | + $target_registration, |
|
69 | + $answers |
|
70 | + ); |
|
71 | + } |
|
72 | + } |
|
73 | + } |
|
74 | + } |
|
75 | + return true; |
|
76 | + } |
|
77 | 77 | |
78 | 78 | |
79 | - /** |
|
80 | - * @param EE_Answer[] $answers |
|
81 | - * @return array |
|
82 | - * @throws EE_Error |
|
83 | - */ |
|
84 | - protected function reindexAnswersByQuestionId(array $answers) |
|
85 | - { |
|
86 | - $reindexed_answers = array(); |
|
87 | - foreach ($answers as $answer) { |
|
88 | - if ($answer instanceof EE_Answer) { |
|
89 | - $reindexed_answers[ $answer->question_ID() ] = $answer->value(); |
|
90 | - } |
|
91 | - } |
|
92 | - return $reindexed_answers; |
|
93 | - } |
|
79 | + /** |
|
80 | + * @param EE_Answer[] $answers |
|
81 | + * @return array |
|
82 | + * @throws EE_Error |
|
83 | + */ |
|
84 | + protected function reindexAnswersByQuestionId(array $answers) |
|
85 | + { |
|
86 | + $reindexed_answers = array(); |
|
87 | + foreach ($answers as $answer) { |
|
88 | + if ($answer instanceof EE_Answer) { |
|
89 | + $reindexed_answers[ $answer->question_ID() ] = $answer->value(); |
|
90 | + } |
|
91 | + } |
|
92 | + return $reindexed_answers; |
|
93 | + } |
|
94 | 94 | |
95 | 95 | |
96 | - /** |
|
97 | - * @param EE_Question $question |
|
98 | - * @param EE_Registration $registration |
|
99 | - * @param $previous_answers |
|
100 | - * @return EE_Answer |
|
101 | - * @throws UnexpectedEntityException |
|
102 | - * @throws EE_Error |
|
103 | - */ |
|
104 | - protected function generateNewAnswer( |
|
105 | - EE_Question $question, |
|
106 | - EE_Registration $registration, |
|
107 | - $previous_answers |
|
108 | - ) { |
|
109 | - $old_answer_value = isset($previous_answers[ $question->ID() ]) |
|
110 | - ? $previous_answers[ $question->ID() ] |
|
111 | - : ''; |
|
112 | - $new_answer = EE_Answer::new_instance( |
|
113 | - array( |
|
114 | - 'QST_ID' => $question->ID(), |
|
115 | - 'REG_ID' => $registration->ID(), |
|
116 | - 'ANS_value' => $old_answer_value, |
|
117 | - ) |
|
118 | - ); |
|
119 | - if (! $new_answer instanceof EE_Answer) { |
|
120 | - throw new UnexpectedEntityException($new_answer, 'EE_Answer'); |
|
121 | - } |
|
122 | - $new_answer->save(); |
|
123 | - return $new_answer; |
|
124 | - } |
|
96 | + /** |
|
97 | + * @param EE_Question $question |
|
98 | + * @param EE_Registration $registration |
|
99 | + * @param $previous_answers |
|
100 | + * @return EE_Answer |
|
101 | + * @throws UnexpectedEntityException |
|
102 | + * @throws EE_Error |
|
103 | + */ |
|
104 | + protected function generateNewAnswer( |
|
105 | + EE_Question $question, |
|
106 | + EE_Registration $registration, |
|
107 | + $previous_answers |
|
108 | + ) { |
|
109 | + $old_answer_value = isset($previous_answers[ $question->ID() ]) |
|
110 | + ? $previous_answers[ $question->ID() ] |
|
111 | + : ''; |
|
112 | + $new_answer = EE_Answer::new_instance( |
|
113 | + array( |
|
114 | + 'QST_ID' => $question->ID(), |
|
115 | + 'REG_ID' => $registration->ID(), |
|
116 | + 'ANS_value' => $old_answer_value, |
|
117 | + ) |
|
118 | + ); |
|
119 | + if (! $new_answer instanceof EE_Answer) { |
|
120 | + throw new UnexpectedEntityException($new_answer, 'EE_Answer'); |
|
121 | + } |
|
122 | + $new_answer->save(); |
|
123 | + return $new_answer; |
|
124 | + } |
|
125 | 125 | |
126 | 126 | |
127 | - /** |
|
128 | - * @param EE_Registration $target_registration |
|
129 | - * @param EE_Registration $registration_to_copy |
|
130 | - * @return bool |
|
131 | - * @throws RuntimeException |
|
132 | - * @throws UnexpectedEntityException |
|
133 | - * @throws EE_Error |
|
134 | - */ |
|
135 | - public function copyPaymentDetails( |
|
136 | - EE_Registration $target_registration, |
|
137 | - EE_Registration $registration_to_copy |
|
138 | - ) { |
|
139 | - $save = false; |
|
140 | - $previous_registration_payments = $registration_to_copy->registration_payments(); |
|
141 | - $new_registration_payment_total = 0; |
|
142 | - $registration_to_copy_total = $registration_to_copy->paid(); |
|
143 | - foreach ($previous_registration_payments as $previous_registration_payment) { |
|
144 | - if ($previous_registration_payment instanceof EE_Registration_Payment |
|
145 | - && $previous_registration_payment->payment() instanceof EE_Payment |
|
146 | - && $previous_registration_payment->payment()->is_approved() |
|
147 | - ) { |
|
148 | - $payment_amount = $previous_registration_payment->amount(); |
|
149 | - $new_registration_payment = EE_Registration_Payment::new_instance( |
|
150 | - array( |
|
151 | - 'REG_ID' => $target_registration->ID(), |
|
152 | - 'PAY_ID' => $previous_registration_payment->payment()->ID(), |
|
153 | - 'RPY_amount' => $payment_amount, |
|
154 | - ) |
|
155 | - ); |
|
156 | - if (! $new_registration_payment instanceof EE_Registration_Payment) { |
|
157 | - throw new UnexpectedEntityException($new_registration_payment, 'EE_Registration_Payment'); |
|
158 | - } |
|
159 | - $new_registration_payment->save(); |
|
160 | - // if new reg payment is good, then set old reg payment amount to zero |
|
161 | - $previous_registration_payment->set_amount(0); |
|
162 | - $previous_registration_payment->save(); |
|
163 | - // now increment/decrement payment amounts |
|
164 | - $new_registration_payment_total += $payment_amount; |
|
165 | - $registration_to_copy_total -= $payment_amount; |
|
166 | - $save = true; |
|
167 | - } |
|
168 | - } |
|
169 | - if ($save) { |
|
170 | - $target_registration->set_paid($new_registration_payment_total); |
|
171 | - $target_registration->save(); |
|
172 | - $registration_to_copy->set_paid($registration_to_copy_total); |
|
173 | - $registration_to_copy->save(); |
|
174 | - } |
|
175 | - return true; |
|
176 | - } |
|
127 | + /** |
|
128 | + * @param EE_Registration $target_registration |
|
129 | + * @param EE_Registration $registration_to_copy |
|
130 | + * @return bool |
|
131 | + * @throws RuntimeException |
|
132 | + * @throws UnexpectedEntityException |
|
133 | + * @throws EE_Error |
|
134 | + */ |
|
135 | + public function copyPaymentDetails( |
|
136 | + EE_Registration $target_registration, |
|
137 | + EE_Registration $registration_to_copy |
|
138 | + ) { |
|
139 | + $save = false; |
|
140 | + $previous_registration_payments = $registration_to_copy->registration_payments(); |
|
141 | + $new_registration_payment_total = 0; |
|
142 | + $registration_to_copy_total = $registration_to_copy->paid(); |
|
143 | + foreach ($previous_registration_payments as $previous_registration_payment) { |
|
144 | + if ($previous_registration_payment instanceof EE_Registration_Payment |
|
145 | + && $previous_registration_payment->payment() instanceof EE_Payment |
|
146 | + && $previous_registration_payment->payment()->is_approved() |
|
147 | + ) { |
|
148 | + $payment_amount = $previous_registration_payment->amount(); |
|
149 | + $new_registration_payment = EE_Registration_Payment::new_instance( |
|
150 | + array( |
|
151 | + 'REG_ID' => $target_registration->ID(), |
|
152 | + 'PAY_ID' => $previous_registration_payment->payment()->ID(), |
|
153 | + 'RPY_amount' => $payment_amount, |
|
154 | + ) |
|
155 | + ); |
|
156 | + if (! $new_registration_payment instanceof EE_Registration_Payment) { |
|
157 | + throw new UnexpectedEntityException($new_registration_payment, 'EE_Registration_Payment'); |
|
158 | + } |
|
159 | + $new_registration_payment->save(); |
|
160 | + // if new reg payment is good, then set old reg payment amount to zero |
|
161 | + $previous_registration_payment->set_amount(0); |
|
162 | + $previous_registration_payment->save(); |
|
163 | + // now increment/decrement payment amounts |
|
164 | + $new_registration_payment_total += $payment_amount; |
|
165 | + $registration_to_copy_total -= $payment_amount; |
|
166 | + $save = true; |
|
167 | + } |
|
168 | + } |
|
169 | + if ($save) { |
|
170 | + $target_registration->set_paid($new_registration_payment_total); |
|
171 | + $target_registration->save(); |
|
172 | + $registration_to_copy->set_paid($registration_to_copy_total); |
|
173 | + $registration_to_copy->save(); |
|
174 | + } |
|
175 | + return true; |
|
176 | + } |
|
177 | 177 | } |
@@ -76,9 +76,9 @@ discard block |
||
76 | 76 | public function statsCallback() |
77 | 77 | { |
78 | 78 | // returns a callback that can is used to retrieve the stats to send along to the pue server. |
79 | - return function () { |
|
79 | + return function() { |
|
80 | 80 | // we only send stats one a week, so let's see if our stat timestamp has expired. |
81 | - if (! $this->sendStats()) { |
|
81 | + if ( ! $this->sendStats()) { |
|
82 | 82 | return array(); |
83 | 83 | } |
84 | 84 | return $this->stats_gatherer->stats(); |
@@ -126,9 +126,9 @@ discard block |
||
126 | 126 | */ |
127 | 127 | public static function optinText($extra = true) |
128 | 128 | { |
129 | - if (! $extra) { |
|
129 | + if ( ! $extra) { |
|
130 | 130 | echo '<h2 class="ee-admin-settings-hdr" ' |
131 | - . (! $extra ? 'id="UXIP_settings"' : '') |
|
131 | + . ( ! $extra ? 'id="UXIP_settings"' : '') |
|
132 | 132 | . '>' |
133 | 133 | . esc_html__('User eXperience Improvement Program (UXIP)', 'event_espresso') |
134 | 134 | . EEH_Template::get_help_tab_link('organization_logo_info') |
@@ -159,7 +159,7 @@ discard block |
||
159 | 159 | ), |
160 | 160 | '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
161 | 161 | '</a>', |
162 | - '<a href="' . $settings_url . '" target="_blank">', |
|
162 | + '<a href="'.$settings_url.'" target="_blank">', |
|
163 | 163 | '</a>' |
164 | 164 | ); |
165 | 165 | } |
@@ -173,14 +173,14 @@ discard block |
||
173 | 173 | { |
174 | 174 | wp_register_script( |
175 | 175 | 'ee-data-optin-js', |
176 | - EE_GLOBAL_ASSETS_URL . 'scripts/ee-data-optin.js', |
|
176 | + EE_GLOBAL_ASSETS_URL.'scripts/ee-data-optin.js', |
|
177 | 177 | array('jquery'), |
178 | 178 | EVENT_ESPRESSO_VERSION, |
179 | 179 | true |
180 | 180 | ); |
181 | 181 | wp_register_style( |
182 | 182 | 'ee-data-optin-css', |
183 | - EE_GLOBAL_ASSETS_URL . 'css/ee-data-optin.css', |
|
183 | + EE_GLOBAL_ASSETS_URL.'css/ee-data-optin.css', |
|
184 | 184 | array(), |
185 | 185 | EVENT_ESPRESSO_VERSION |
186 | 186 | ); |
@@ -19,86 +19,86 @@ discard block |
||
19 | 19 | class Stats |
20 | 20 | { |
21 | 21 | |
22 | - const OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS = 'ee_uxip_stats_expiry'; |
|
23 | - |
|
24 | - /** |
|
25 | - * @var Config |
|
26 | - */ |
|
27 | - private $config; |
|
28 | - |
|
29 | - |
|
30 | - /** |
|
31 | - * @var StatsGatherer |
|
32 | - */ |
|
33 | - private $stats_gatherer; |
|
34 | - |
|
35 | - |
|
36 | - /** |
|
37 | - * @var EE_Maintenance_Mode |
|
38 | - */ |
|
39 | - private $maintenance_mode; |
|
40 | - |
|
41 | - public function __construct( |
|
42 | - Config $config, |
|
43 | - EE_Maintenance_Mode $maintenance_mode, |
|
44 | - StatsGatherer $stats_gatherer |
|
45 | - ) { |
|
46 | - $this->config = $config; |
|
47 | - $this->maintenance_mode = $maintenance_mode; |
|
48 | - $this->stats_gatherer = $stats_gatherer; |
|
49 | - $this->setUxipNotices(); |
|
50 | - } |
|
51 | - |
|
52 | - |
|
53 | - /** |
|
54 | - * Displays uxip opt-in notice if necessary. |
|
55 | - */ |
|
56 | - private function setUxipNotices() |
|
57 | - { |
|
58 | - if ($this->canDisplayNotices()) { |
|
59 | - add_action('admin_notices', array($this, 'optinNotice')); |
|
60 | - add_action('admin_enqueue_scripts', array($this, 'enqueueScripts')); |
|
61 | - add_action('wp_ajax_espresso_data_optin', array($this, 'ajaxHandler')); |
|
62 | - } |
|
63 | - } |
|
64 | - |
|
65 | - |
|
66 | - /** |
|
67 | - * This returns the callback that PluginUpdateEngineChecker will use for getting any extra stats to send. |
|
68 | - * |
|
69 | - * @return Closure |
|
70 | - */ |
|
71 | - public function statsCallback() |
|
72 | - { |
|
73 | - // returns a callback that can is used to retrieve the stats to send along to the pue server. |
|
74 | - return function () { |
|
75 | - // we only send stats one a week, so let's see if our stat timestamp has expired. |
|
76 | - if (! $this->sendStats()) { |
|
77 | - return array(); |
|
78 | - } |
|
79 | - return $this->stats_gatherer->stats(); |
|
80 | - }; |
|
81 | - } |
|
82 | - |
|
83 | - |
|
84 | - /** |
|
85 | - * Return whether notices can be displayed or not |
|
86 | - * |
|
87 | - * @return bool |
|
88 | - */ |
|
89 | - private function canDisplayNotices() |
|
90 | - { |
|
91 | - return ! $this->config->hasNotifiedForUxip() |
|
92 | - && $this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance; |
|
93 | - } |
|
94 | - |
|
95 | - |
|
96 | - /** |
|
97 | - * Callback for the admin_notices hook that outputs the UXIP optin-in notice. |
|
98 | - */ |
|
99 | - public function optinNotice() |
|
100 | - { |
|
101 | - ?> |
|
22 | + const OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS = 'ee_uxip_stats_expiry'; |
|
23 | + |
|
24 | + /** |
|
25 | + * @var Config |
|
26 | + */ |
|
27 | + private $config; |
|
28 | + |
|
29 | + |
|
30 | + /** |
|
31 | + * @var StatsGatherer |
|
32 | + */ |
|
33 | + private $stats_gatherer; |
|
34 | + |
|
35 | + |
|
36 | + /** |
|
37 | + * @var EE_Maintenance_Mode |
|
38 | + */ |
|
39 | + private $maintenance_mode; |
|
40 | + |
|
41 | + public function __construct( |
|
42 | + Config $config, |
|
43 | + EE_Maintenance_Mode $maintenance_mode, |
|
44 | + StatsGatherer $stats_gatherer |
|
45 | + ) { |
|
46 | + $this->config = $config; |
|
47 | + $this->maintenance_mode = $maintenance_mode; |
|
48 | + $this->stats_gatherer = $stats_gatherer; |
|
49 | + $this->setUxipNotices(); |
|
50 | + } |
|
51 | + |
|
52 | + |
|
53 | + /** |
|
54 | + * Displays uxip opt-in notice if necessary. |
|
55 | + */ |
|
56 | + private function setUxipNotices() |
|
57 | + { |
|
58 | + if ($this->canDisplayNotices()) { |
|
59 | + add_action('admin_notices', array($this, 'optinNotice')); |
|
60 | + add_action('admin_enqueue_scripts', array($this, 'enqueueScripts')); |
|
61 | + add_action('wp_ajax_espresso_data_optin', array($this, 'ajaxHandler')); |
|
62 | + } |
|
63 | + } |
|
64 | + |
|
65 | + |
|
66 | + /** |
|
67 | + * This returns the callback that PluginUpdateEngineChecker will use for getting any extra stats to send. |
|
68 | + * |
|
69 | + * @return Closure |
|
70 | + */ |
|
71 | + public function statsCallback() |
|
72 | + { |
|
73 | + // returns a callback that can is used to retrieve the stats to send along to the pue server. |
|
74 | + return function () { |
|
75 | + // we only send stats one a week, so let's see if our stat timestamp has expired. |
|
76 | + if (! $this->sendStats()) { |
|
77 | + return array(); |
|
78 | + } |
|
79 | + return $this->stats_gatherer->stats(); |
|
80 | + }; |
|
81 | + } |
|
82 | + |
|
83 | + |
|
84 | + /** |
|
85 | + * Return whether notices can be displayed or not |
|
86 | + * |
|
87 | + * @return bool |
|
88 | + */ |
|
89 | + private function canDisplayNotices() |
|
90 | + { |
|
91 | + return ! $this->config->hasNotifiedForUxip() |
|
92 | + && $this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance; |
|
93 | + } |
|
94 | + |
|
95 | + |
|
96 | + /** |
|
97 | + * Callback for the admin_notices hook that outputs the UXIP optin-in notice. |
|
98 | + */ |
|
99 | + public function optinNotice() |
|
100 | + { |
|
101 | + ?> |
|
102 | 102 | <div class="updated data-collect-optin" id="espresso-data-collect-optin-container"> |
103 | 103 | <div id="data-collect-optin-options-container"> |
104 | 104 | <span class="dashicons dashicons-admin-site"></span> |
@@ -111,125 +111,125 @@ discard block |
||
111 | 111 | </div> |
112 | 112 | </div> |
113 | 113 | <?php |
114 | - } |
|
115 | - |
|
116 | - |
|
117 | - /** |
|
118 | - * Retrieves the optin text (static so it can be used in multiple places as necessary). |
|
119 | - * |
|
120 | - * @param bool $extra |
|
121 | - */ |
|
122 | - public static function optinText($extra = true) |
|
123 | - { |
|
124 | - if (! $extra) { |
|
125 | - echo '<h2 class="ee-admin-settings-hdr" ' |
|
126 | - . (! $extra ? 'id="UXIP_settings"' : '') |
|
127 | - . '>' |
|
128 | - . esc_html__('User eXperience Improvement Program (UXIP)', 'event_espresso') |
|
129 | - . EEH_Template::get_help_tab_link('organization_logo_info') |
|
130 | - . '</h2>'; |
|
131 | - printf( |
|
132 | - esc_html__( |
|
133 | - '%1$sPlease help us make Event Espresso better and vote for your favorite features.%2$s The %3$sUser eXperience Improvement Program (UXIP)%4$s, has been created so when you use Event Espresso you are voting for the features and settings that are important to you. The UXIP helps us understand how you use our products and services, track problems and in what context. If you opt-out of the UXIP you essentially elect for us to disregard how you use Event Espresso as we build new features and make changes. Participation in the program is completely voluntary and it is disabled by default. The end results of the UXIP are software improvements to better meet your needs. The data we collect will never be sold, traded, or misused in any way. %5$sPlease see our %6$sPrivacy Policy%7$s for more information.', |
|
134 | - 'event_espresso' |
|
135 | - ), |
|
136 | - '<p><em>', |
|
137 | - '</em></p>', |
|
138 | - '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
|
139 | - '</a>', |
|
140 | - '<br><br>', |
|
141 | - '<a href="https://eventespresso.com/about/privacy-policy/" target="_blank">', |
|
142 | - '</a>' |
|
143 | - ); |
|
144 | - } else { |
|
145 | - $settings_url = EEH_URL::add_query_args_and_nonce( |
|
146 | - array('action' => 'default'), |
|
147 | - admin_url('admin.php?page=espresso_general_settings') |
|
148 | - ); |
|
149 | - $settings_url .= '#UXIP_settings'; |
|
150 | - printf( |
|
151 | - esc_html__( |
|
152 | - 'The Event Espresso UXIP feature is not yet active on your site. For %1$smore info%2$s and to opt-in %3$sclick here%4$s.', |
|
153 | - 'event_espresso' |
|
154 | - ), |
|
155 | - '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
|
156 | - '</a>', |
|
157 | - '<a href="' . $settings_url . '" target="_blank">', |
|
158 | - '</a>' |
|
159 | - ); |
|
160 | - } |
|
161 | - } |
|
162 | - |
|
163 | - |
|
164 | - /** |
|
165 | - * Callback for admin_enqueue_scripts that sets up the scripts and styles for the uxip notice |
|
166 | - */ |
|
167 | - public function enqueueScripts() |
|
168 | - { |
|
169 | - wp_register_script( |
|
170 | - 'ee-data-optin-js', |
|
171 | - EE_GLOBAL_ASSETS_URL . 'scripts/ee-data-optin.js', |
|
172 | - array('jquery'), |
|
173 | - EVENT_ESPRESSO_VERSION, |
|
174 | - true |
|
175 | - ); |
|
176 | - wp_register_style( |
|
177 | - 'ee-data-optin-css', |
|
178 | - EE_GLOBAL_ASSETS_URL . 'css/ee-data-optin.css', |
|
179 | - array(), |
|
180 | - EVENT_ESPRESSO_VERSION |
|
181 | - ); |
|
182 | - |
|
183 | - wp_enqueue_script('ee-data-optin-js'); |
|
184 | - wp_enqueue_style('ee-data-optin-css'); |
|
185 | - } |
|
186 | - |
|
187 | - |
|
188 | - /** |
|
189 | - * Callback for wp_ajax_espresso_data_optin that handles the ajax request |
|
190 | - */ |
|
191 | - public function ajaxHandler() |
|
192 | - { |
|
193 | - // verify nonce |
|
194 | - if (isset($_POST['nonce']) && ! wp_verify_nonce($_POST['nonce'], 'ee-data-optin')) { |
|
195 | - exit(); |
|
196 | - } |
|
197 | - |
|
198 | - // update has notified option |
|
199 | - $this->config->setHasNotifiedAboutUxip(); |
|
200 | - exit(); |
|
201 | - } |
|
202 | - |
|
203 | - |
|
204 | - /** |
|
205 | - * Used to determine whether additional stats are sent. |
|
206 | - */ |
|
207 | - private function sendStats() |
|
208 | - { |
|
209 | - return $this->config->isOptedInForUxip() |
|
210 | - && $this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance |
|
211 | - && $this->statSendTimestampExpired(); |
|
212 | - } |
|
213 | - |
|
214 | - |
|
215 | - /** |
|
216 | - * Returns true when the timestamp used to track whether stats get sent (currently a weekly interval) is expired. |
|
217 | - * Returns false otherwise. |
|
218 | - * |
|
219 | - * @return bool |
|
220 | - */ |
|
221 | - private function statSendTimestampExpired() |
|
222 | - { |
|
223 | - $current_expiry = get_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, null); |
|
224 | - if ($current_expiry === null) { |
|
225 | - add_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, time() + WEEK_IN_SECONDS, '', 'no'); |
|
226 | - return true; |
|
227 | - } |
|
228 | - |
|
229 | - if (time() > (int) $current_expiry) { |
|
230 | - update_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, time() + WEEK_IN_SECONDS); |
|
231 | - return true; |
|
232 | - } |
|
233 | - return false; |
|
234 | - } |
|
114 | + } |
|
115 | + |
|
116 | + |
|
117 | + /** |
|
118 | + * Retrieves the optin text (static so it can be used in multiple places as necessary). |
|
119 | + * |
|
120 | + * @param bool $extra |
|
121 | + */ |
|
122 | + public static function optinText($extra = true) |
|
123 | + { |
|
124 | + if (! $extra) { |
|
125 | + echo '<h2 class="ee-admin-settings-hdr" ' |
|
126 | + . (! $extra ? 'id="UXIP_settings"' : '') |
|
127 | + . '>' |
|
128 | + . esc_html__('User eXperience Improvement Program (UXIP)', 'event_espresso') |
|
129 | + . EEH_Template::get_help_tab_link('organization_logo_info') |
|
130 | + . '</h2>'; |
|
131 | + printf( |
|
132 | + esc_html__( |
|
133 | + '%1$sPlease help us make Event Espresso better and vote for your favorite features.%2$s The %3$sUser eXperience Improvement Program (UXIP)%4$s, has been created so when you use Event Espresso you are voting for the features and settings that are important to you. The UXIP helps us understand how you use our products and services, track problems and in what context. If you opt-out of the UXIP you essentially elect for us to disregard how you use Event Espresso as we build new features and make changes. Participation in the program is completely voluntary and it is disabled by default. The end results of the UXIP are software improvements to better meet your needs. The data we collect will never be sold, traded, or misused in any way. %5$sPlease see our %6$sPrivacy Policy%7$s for more information.', |
|
134 | + 'event_espresso' |
|
135 | + ), |
|
136 | + '<p><em>', |
|
137 | + '</em></p>', |
|
138 | + '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
|
139 | + '</a>', |
|
140 | + '<br><br>', |
|
141 | + '<a href="https://eventespresso.com/about/privacy-policy/" target="_blank">', |
|
142 | + '</a>' |
|
143 | + ); |
|
144 | + } else { |
|
145 | + $settings_url = EEH_URL::add_query_args_and_nonce( |
|
146 | + array('action' => 'default'), |
|
147 | + admin_url('admin.php?page=espresso_general_settings') |
|
148 | + ); |
|
149 | + $settings_url .= '#UXIP_settings'; |
|
150 | + printf( |
|
151 | + esc_html__( |
|
152 | + 'The Event Espresso UXIP feature is not yet active on your site. For %1$smore info%2$s and to opt-in %3$sclick here%4$s.', |
|
153 | + 'event_espresso' |
|
154 | + ), |
|
155 | + '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
|
156 | + '</a>', |
|
157 | + '<a href="' . $settings_url . '" target="_blank">', |
|
158 | + '</a>' |
|
159 | + ); |
|
160 | + } |
|
161 | + } |
|
162 | + |
|
163 | + |
|
164 | + /** |
|
165 | + * Callback for admin_enqueue_scripts that sets up the scripts and styles for the uxip notice |
|
166 | + */ |
|
167 | + public function enqueueScripts() |
|
168 | + { |
|
169 | + wp_register_script( |
|
170 | + 'ee-data-optin-js', |
|
171 | + EE_GLOBAL_ASSETS_URL . 'scripts/ee-data-optin.js', |
|
172 | + array('jquery'), |
|
173 | + EVENT_ESPRESSO_VERSION, |
|
174 | + true |
|
175 | + ); |
|
176 | + wp_register_style( |
|
177 | + 'ee-data-optin-css', |
|
178 | + EE_GLOBAL_ASSETS_URL . 'css/ee-data-optin.css', |
|
179 | + array(), |
|
180 | + EVENT_ESPRESSO_VERSION |
|
181 | + ); |
|
182 | + |
|
183 | + wp_enqueue_script('ee-data-optin-js'); |
|
184 | + wp_enqueue_style('ee-data-optin-css'); |
|
185 | + } |
|
186 | + |
|
187 | + |
|
188 | + /** |
|
189 | + * Callback for wp_ajax_espresso_data_optin that handles the ajax request |
|
190 | + */ |
|
191 | + public function ajaxHandler() |
|
192 | + { |
|
193 | + // verify nonce |
|
194 | + if (isset($_POST['nonce']) && ! wp_verify_nonce($_POST['nonce'], 'ee-data-optin')) { |
|
195 | + exit(); |
|
196 | + } |
|
197 | + |
|
198 | + // update has notified option |
|
199 | + $this->config->setHasNotifiedAboutUxip(); |
|
200 | + exit(); |
|
201 | + } |
|
202 | + |
|
203 | + |
|
204 | + /** |
|
205 | + * Used to determine whether additional stats are sent. |
|
206 | + */ |
|
207 | + private function sendStats() |
|
208 | + { |
|
209 | + return $this->config->isOptedInForUxip() |
|
210 | + && $this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance |
|
211 | + && $this->statSendTimestampExpired(); |
|
212 | + } |
|
213 | + |
|
214 | + |
|
215 | + /** |
|
216 | + * Returns true when the timestamp used to track whether stats get sent (currently a weekly interval) is expired. |
|
217 | + * Returns false otherwise. |
|
218 | + * |
|
219 | + * @return bool |
|
220 | + */ |
|
221 | + private function statSendTimestampExpired() |
|
222 | + { |
|
223 | + $current_expiry = get_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, null); |
|
224 | + if ($current_expiry === null) { |
|
225 | + add_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, time() + WEEK_IN_SECONDS, '', 'no'); |
|
226 | + return true; |
|
227 | + } |
|
228 | + |
|
229 | + if (time() > (int) $current_expiry) { |
|
230 | + update_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, time() + WEEK_IN_SECONDS); |
|
231 | + return true; |
|
232 | + } |
|
233 | + return false; |
|
234 | + } |
|
235 | 235 | } |
@@ -20,113 +20,113 @@ |
||
20 | 20 | { |
21 | 21 | |
22 | 22 | |
23 | - /** |
|
24 | - * @param \EE_Registration $registration |
|
25 | - * @param int $quantity |
|
26 | - * @return bool|int |
|
27 | - */ |
|
28 | - public function forRegistration(\EE_Registration $registration, $quantity = 1) |
|
29 | - { |
|
30 | - return $this->cancel( |
|
31 | - $registration->transaction(), |
|
32 | - $registration->ticket(), |
|
33 | - $quantity, |
|
34 | - $registration->ticket_line_item() |
|
35 | - ); |
|
36 | - } |
|
23 | + /** |
|
24 | + * @param \EE_Registration $registration |
|
25 | + * @param int $quantity |
|
26 | + * @return bool|int |
|
27 | + */ |
|
28 | + public function forRegistration(\EE_Registration $registration, $quantity = 1) |
|
29 | + { |
|
30 | + return $this->cancel( |
|
31 | + $registration->transaction(), |
|
32 | + $registration->ticket(), |
|
33 | + $quantity, |
|
34 | + $registration->ticket_line_item() |
|
35 | + ); |
|
36 | + } |
|
37 | 37 | |
38 | 38 | |
39 | - /** |
|
40 | - * @param \EE_Transaction $transaction |
|
41 | - * @param \EE_Ticket $ticket |
|
42 | - * @param int $quantity |
|
43 | - * @param \EE_Line_Item $ticket_line_item |
|
44 | - * @return bool|int |
|
45 | - */ |
|
46 | - public function cancel( |
|
47 | - \EE_Transaction $transaction, |
|
48 | - \EE_Ticket $ticket, |
|
49 | - $quantity = 1, |
|
50 | - \EE_Line_Item $ticket_line_item = null |
|
51 | - ) { |
|
52 | - $ticket_line_item = $ticket_line_item instanceof \EE_Line_Item |
|
53 | - ? $ticket_line_item |
|
54 | - : $this->getTicketLineItem($transaction, $ticket); |
|
55 | - // first we need to decrement the ticket quantity |
|
56 | - \EEH_Line_Item::decrement_quantity($ticket_line_item, $quantity); |
|
57 | - // no tickets left for this line item ? |
|
58 | - if ((int) $ticket_line_item->quantity() === 0) { |
|
59 | - // then just set this line item as cancelled, save, and get out |
|
60 | - $ticket_line_item->set_type(\EEM_Line_Item::type_cancellation); |
|
61 | - $success = $ticket_line_item->save(); |
|
62 | - } else { |
|
63 | - // otherwise create a new cancelled line item, so that we have a record of the cancellation |
|
64 | - $items_subtotal = \EEH_Line_Item::get_pre_tax_subtotal( |
|
65 | - \EEH_Line_Item::get_event_line_item_for_ticket( |
|
66 | - $transaction->total_line_item(), |
|
67 | - $ticket |
|
68 | - ) |
|
69 | - ); |
|
70 | - $cancelled_line_item = \EE_Line_Item::new_instance( |
|
71 | - array( |
|
72 | - 'LIN_name' => $ticket_line_item->name(), |
|
73 | - 'LIN_desc' => sprintf( |
|
74 | - __('%1$s Cancelled: %2$s', 'event_espresso'), |
|
75 | - $ticket_line_item->desc(), |
|
76 | - date('Y-m-d h:i a') |
|
77 | - ), |
|
78 | - 'LIN_unit_price' => (float) $ticket_line_item->unit_price(), |
|
79 | - 'LIN_quantity' => $quantity, |
|
80 | - 'LIN_percent' => null, |
|
81 | - 'LIN_is_taxable' => false, |
|
82 | - 'LIN_order' => $items_subtotal instanceof \EE_Line_Item |
|
83 | - ? count($items_subtotal->children()) |
|
84 | - : 0, |
|
85 | - 'LIN_total' => (float) $ticket_line_item->unit_price(), |
|
86 | - 'LIN_type' => \EEM_Line_Item::type_cancellation, |
|
87 | - ) |
|
88 | - ); |
|
89 | - $success = \EEH_Line_Item::add_item($transaction->total_line_item(), $cancelled_line_item); |
|
90 | - } |
|
91 | - if (! $success) { |
|
92 | - throw new \RuntimeException( |
|
93 | - sprintf( |
|
94 | - __('An error occurred while attempting to cancel ticket line item %1$s', 'event_espresso'), |
|
95 | - $ticket_line_item->ID() |
|
96 | - ) |
|
97 | - ); |
|
98 | - } |
|
99 | - return $success; |
|
100 | - } |
|
39 | + /** |
|
40 | + * @param \EE_Transaction $transaction |
|
41 | + * @param \EE_Ticket $ticket |
|
42 | + * @param int $quantity |
|
43 | + * @param \EE_Line_Item $ticket_line_item |
|
44 | + * @return bool|int |
|
45 | + */ |
|
46 | + public function cancel( |
|
47 | + \EE_Transaction $transaction, |
|
48 | + \EE_Ticket $ticket, |
|
49 | + $quantity = 1, |
|
50 | + \EE_Line_Item $ticket_line_item = null |
|
51 | + ) { |
|
52 | + $ticket_line_item = $ticket_line_item instanceof \EE_Line_Item |
|
53 | + ? $ticket_line_item |
|
54 | + : $this->getTicketLineItem($transaction, $ticket); |
|
55 | + // first we need to decrement the ticket quantity |
|
56 | + \EEH_Line_Item::decrement_quantity($ticket_line_item, $quantity); |
|
57 | + // no tickets left for this line item ? |
|
58 | + if ((int) $ticket_line_item->quantity() === 0) { |
|
59 | + // then just set this line item as cancelled, save, and get out |
|
60 | + $ticket_line_item->set_type(\EEM_Line_Item::type_cancellation); |
|
61 | + $success = $ticket_line_item->save(); |
|
62 | + } else { |
|
63 | + // otherwise create a new cancelled line item, so that we have a record of the cancellation |
|
64 | + $items_subtotal = \EEH_Line_Item::get_pre_tax_subtotal( |
|
65 | + \EEH_Line_Item::get_event_line_item_for_ticket( |
|
66 | + $transaction->total_line_item(), |
|
67 | + $ticket |
|
68 | + ) |
|
69 | + ); |
|
70 | + $cancelled_line_item = \EE_Line_Item::new_instance( |
|
71 | + array( |
|
72 | + 'LIN_name' => $ticket_line_item->name(), |
|
73 | + 'LIN_desc' => sprintf( |
|
74 | + __('%1$s Cancelled: %2$s', 'event_espresso'), |
|
75 | + $ticket_line_item->desc(), |
|
76 | + date('Y-m-d h:i a') |
|
77 | + ), |
|
78 | + 'LIN_unit_price' => (float) $ticket_line_item->unit_price(), |
|
79 | + 'LIN_quantity' => $quantity, |
|
80 | + 'LIN_percent' => null, |
|
81 | + 'LIN_is_taxable' => false, |
|
82 | + 'LIN_order' => $items_subtotal instanceof \EE_Line_Item |
|
83 | + ? count($items_subtotal->children()) |
|
84 | + : 0, |
|
85 | + 'LIN_total' => (float) $ticket_line_item->unit_price(), |
|
86 | + 'LIN_type' => \EEM_Line_Item::type_cancellation, |
|
87 | + ) |
|
88 | + ); |
|
89 | + $success = \EEH_Line_Item::add_item($transaction->total_line_item(), $cancelled_line_item); |
|
90 | + } |
|
91 | + if (! $success) { |
|
92 | + throw new \RuntimeException( |
|
93 | + sprintf( |
|
94 | + __('An error occurred while attempting to cancel ticket line item %1$s', 'event_espresso'), |
|
95 | + $ticket_line_item->ID() |
|
96 | + ) |
|
97 | + ); |
|
98 | + } |
|
99 | + return $success; |
|
100 | + } |
|
101 | 101 | |
102 | 102 | |
103 | - /** |
|
104 | - * @param \EE_Transaction $transaction |
|
105 | - * @param \EE_Ticket $ticket |
|
106 | - * @return \EE_Line_Item |
|
107 | - * @throws EntityNotFoundException |
|
108 | - * @throws \EE_Error |
|
109 | - */ |
|
110 | - protected static function getTicketLineItem(\EE_Transaction $transaction, \EE_Ticket $ticket) |
|
111 | - { |
|
112 | - $line_item = null; |
|
113 | - $ticket_line_items = \EEH_Line_Item::get_line_items_by_object_type_and_IDs( |
|
114 | - $transaction->total_line_item(), |
|
115 | - 'Ticket', |
|
116 | - array($ticket->ID()) |
|
117 | - ); |
|
118 | - foreach ($ticket_line_items as $ticket_line_item) { |
|
119 | - if ($ticket_line_item instanceof \EE_Line_Item |
|
120 | - && $ticket_line_item->OBJ_type() === 'Ticket' |
|
121 | - && $ticket_line_item->OBJ_ID() === $ticket->ID() |
|
122 | - ) { |
|
123 | - $line_item = $ticket_line_item; |
|
124 | - break; |
|
125 | - } |
|
126 | - } |
|
127 | - if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) { |
|
128 | - throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID()); |
|
129 | - } |
|
130 | - return $line_item; |
|
131 | - } |
|
103 | + /** |
|
104 | + * @param \EE_Transaction $transaction |
|
105 | + * @param \EE_Ticket $ticket |
|
106 | + * @return \EE_Line_Item |
|
107 | + * @throws EntityNotFoundException |
|
108 | + * @throws \EE_Error |
|
109 | + */ |
|
110 | + protected static function getTicketLineItem(\EE_Transaction $transaction, \EE_Ticket $ticket) |
|
111 | + { |
|
112 | + $line_item = null; |
|
113 | + $ticket_line_items = \EEH_Line_Item::get_line_items_by_object_type_and_IDs( |
|
114 | + $transaction->total_line_item(), |
|
115 | + 'Ticket', |
|
116 | + array($ticket->ID()) |
|
117 | + ); |
|
118 | + foreach ($ticket_line_items as $ticket_line_item) { |
|
119 | + if ($ticket_line_item instanceof \EE_Line_Item |
|
120 | + && $ticket_line_item->OBJ_type() === 'Ticket' |
|
121 | + && $ticket_line_item->OBJ_ID() === $ticket->ID() |
|
122 | + ) { |
|
123 | + $line_item = $ticket_line_item; |
|
124 | + break; |
|
125 | + } |
|
126 | + } |
|
127 | + if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) { |
|
128 | + throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID()); |
|
129 | + } |
|
130 | + return $line_item; |
|
131 | + } |
|
132 | 132 | } |
@@ -88,7 +88,7 @@ discard block |
||
88 | 88 | ); |
89 | 89 | $success = \EEH_Line_Item::add_item($transaction->total_line_item(), $cancelled_line_item); |
90 | 90 | } |
91 | - if (! $success) { |
|
91 | + if ( ! $success) { |
|
92 | 92 | throw new \RuntimeException( |
93 | 93 | sprintf( |
94 | 94 | __('An error occurred while attempting to cancel ticket line item %1$s', 'event_espresso'), |
@@ -124,7 +124,7 @@ discard block |
||
124 | 124 | break; |
125 | 125 | } |
126 | 126 | } |
127 | - if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) { |
|
127 | + if ( ! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) { |
|
128 | 128 | throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID()); |
129 | 129 | } |
130 | 130 | return $line_item; |