@@ -7,16 +7,16 @@ discard block |
||
7 | 7 | define('EE_SUPPORT_EMAIL', '[email protected]'); |
8 | 8 | // used to be DIRECTORY_SEPARATOR, but that caused issues on windows |
9 | 9 | if (! defined('DS')) { |
10 | - define('DS', '/'); |
|
10 | + define('DS', '/'); |
|
11 | 11 | } |
12 | 12 | if (! defined('PS')) { |
13 | - define('PS', PATH_SEPARATOR); |
|
13 | + define('PS', PATH_SEPARATOR); |
|
14 | 14 | } |
15 | 15 | if (! defined('SP')) { |
16 | - define('SP', ' '); |
|
16 | + define('SP', ' '); |
|
17 | 17 | } |
18 | 18 | if (! defined('EENL')) { |
19 | - define('EENL', "\n"); |
|
19 | + define('EENL', "\n"); |
|
20 | 20 | } |
21 | 21 | // define the plugin directory and URL |
22 | 22 | define('EE_PLUGIN_BASENAME', plugin_basename(EVENT_ESPRESSO_MAIN_FILE)); |
@@ -70,7 +70,7 @@ discard block |
||
70 | 70 | define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'languages/'); |
71 | 71 | // check for DOMPDF fonts in uploads |
72 | 72 | if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . 'fonts/')) { |
73 | - define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts/'); |
|
73 | + define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts/'); |
|
74 | 74 | } |
75 | 75 | // just a handy constant occasionally needed for finding values representing infinity in the DB |
76 | 76 | // you're better to use this than its straight value (currently -1) in case you ever |
@@ -78,9 +78,9 @@ discard block |
||
78 | 78 | define('EE_INF_IN_DB', -1); |
79 | 79 | define('EE_INF', INF > (float) PHP_INT_MAX ? INF : PHP_INT_MAX); |
80 | 80 | if (! defined('EE_DEBUG')) { |
81 | - define('EE_DEBUG', false); |
|
81 | + define('EE_DEBUG', false); |
|
82 | 82 | } |
83 | 83 | // for older WP versions |
84 | 84 | if (! defined('MONTH_IN_SECONDS')) { |
85 | - define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30); |
|
85 | + define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30); |
|
86 | 86 | } |
@@ -6,81 +6,81 @@ |
||
6 | 6 | define('EE_MIN_PHP_VER_RECOMMENDED', '5.6.32'); |
7 | 7 | define('EE_SUPPORT_EMAIL', '[email protected]'); |
8 | 8 | // used to be DIRECTORY_SEPARATOR, but that caused issues on windows |
9 | -if (! defined('DS')) { |
|
9 | +if ( ! defined('DS')) { |
|
10 | 10 | define('DS', '/'); |
11 | 11 | } |
12 | -if (! defined('PS')) { |
|
12 | +if ( ! defined('PS')) { |
|
13 | 13 | define('PS', PATH_SEPARATOR); |
14 | 14 | } |
15 | -if (! defined('SP')) { |
|
15 | +if ( ! defined('SP')) { |
|
16 | 16 | define('SP', ' '); |
17 | 17 | } |
18 | -if (! defined('EENL')) { |
|
18 | +if ( ! defined('EENL')) { |
|
19 | 19 | define('EENL', "\n"); |
20 | 20 | } |
21 | 21 | // define the plugin directory and URL |
22 | 22 | define('EE_PLUGIN_BASENAME', plugin_basename(EVENT_ESPRESSO_MAIN_FILE)); |
23 | -define('EE_PLUGIN_DIR_PATH', dirname(EVENT_ESPRESSO_MAIN_FILE) . '/'); |
|
23 | +define('EE_PLUGIN_DIR_PATH', dirname(EVENT_ESPRESSO_MAIN_FILE).'/'); |
|
24 | 24 | define('EE_PLUGIN_DIR_URL', plugin_dir_url(EVENT_ESPRESSO_MAIN_FILE)); |
25 | 25 | // main root folder paths |
26 | -define('EE_ADMIN_PAGES', EE_PLUGIN_DIR_PATH . 'admin_pages/'); |
|
27 | -define('EE_CORE', EE_PLUGIN_DIR_PATH . 'core/'); |
|
28 | -define('EE_MODULES', EE_PLUGIN_DIR_PATH . 'modules/'); |
|
29 | -define('EE_PUBLIC', EE_PLUGIN_DIR_PATH . 'public/'); |
|
30 | -define('EE_SHORTCODES', EE_PLUGIN_DIR_PATH . 'shortcodes/'); |
|
31 | -define('EE_WIDGETS', EE_PLUGIN_DIR_PATH . 'widgets/'); |
|
32 | -define('EE_PAYMENT_METHODS', EE_PLUGIN_DIR_PATH . 'payment_methods/'); |
|
33 | -define('EE_CAFF_PATH', EE_PLUGIN_DIR_PATH . 'caffeinated/'); |
|
26 | +define('EE_ADMIN_PAGES', EE_PLUGIN_DIR_PATH.'admin_pages/'); |
|
27 | +define('EE_CORE', EE_PLUGIN_DIR_PATH.'core/'); |
|
28 | +define('EE_MODULES', EE_PLUGIN_DIR_PATH.'modules/'); |
|
29 | +define('EE_PUBLIC', EE_PLUGIN_DIR_PATH.'public/'); |
|
30 | +define('EE_SHORTCODES', EE_PLUGIN_DIR_PATH.'shortcodes/'); |
|
31 | +define('EE_WIDGETS', EE_PLUGIN_DIR_PATH.'widgets/'); |
|
32 | +define('EE_PAYMENT_METHODS', EE_PLUGIN_DIR_PATH.'payment_methods/'); |
|
33 | +define('EE_CAFF_PATH', EE_PLUGIN_DIR_PATH.'caffeinated/'); |
|
34 | 34 | // core system paths |
35 | -define('EE_ADMIN', EE_CORE . 'admin/'); |
|
36 | -define('EE_CPTS', EE_CORE . 'CPTs/'); |
|
37 | -define('EE_CLASSES', EE_CORE . 'db_classes/'); |
|
38 | -define('EE_INTERFACES', EE_CORE . 'interfaces/'); |
|
39 | -define('EE_BUSINESS', EE_CORE . 'business/'); |
|
40 | -define('EE_MODELS', EE_CORE . 'db_models/'); |
|
41 | -define('EE_HELPERS', EE_CORE . 'helpers/'); |
|
42 | -define('EE_LIBRARIES', EE_CORE . 'libraries/'); |
|
43 | -define('EE_TEMPLATES', EE_CORE . 'templates/'); |
|
44 | -define('EE_THIRD_PARTY', EE_CORE . 'third_party_libs/'); |
|
45 | -define('EE_GLOBAL_ASSETS', EE_TEMPLATES . 'global_assets/'); |
|
46 | -define('EE_FORM_SECTIONS', EE_LIBRARIES . 'form_sections/'); |
|
35 | +define('EE_ADMIN', EE_CORE.'admin/'); |
|
36 | +define('EE_CPTS', EE_CORE.'CPTs/'); |
|
37 | +define('EE_CLASSES', EE_CORE.'db_classes/'); |
|
38 | +define('EE_INTERFACES', EE_CORE.'interfaces/'); |
|
39 | +define('EE_BUSINESS', EE_CORE.'business/'); |
|
40 | +define('EE_MODELS', EE_CORE.'db_models/'); |
|
41 | +define('EE_HELPERS', EE_CORE.'helpers/'); |
|
42 | +define('EE_LIBRARIES', EE_CORE.'libraries/'); |
|
43 | +define('EE_TEMPLATES', EE_CORE.'templates/'); |
|
44 | +define('EE_THIRD_PARTY', EE_CORE.'third_party_libs/'); |
|
45 | +define('EE_GLOBAL_ASSETS', EE_TEMPLATES.'global_assets/'); |
|
46 | +define('EE_FORM_SECTIONS', EE_LIBRARIES.'form_sections/'); |
|
47 | 47 | // gateways |
48 | -define('EE_GATEWAYS', EE_MODULES . 'gateways/'); |
|
49 | -define('EE_GATEWAYS_URL', EE_PLUGIN_DIR_URL . 'modules/gateways/'); |
|
48 | +define('EE_GATEWAYS', EE_MODULES.'gateways/'); |
|
49 | +define('EE_GATEWAYS_URL', EE_PLUGIN_DIR_URL.'modules/gateways/'); |
|
50 | 50 | // asset URL paths |
51 | -define('EE_TEMPLATES_URL', EE_PLUGIN_DIR_URL . 'core/templates/'); |
|
52 | -define('EE_GLOBAL_ASSETS_URL', EE_TEMPLATES_URL . 'global_assets/'); |
|
53 | -define('EE_IMAGES_URL', EE_GLOBAL_ASSETS_URL . 'images/'); |
|
54 | -define('EE_THIRD_PARTY_URL', EE_PLUGIN_DIR_URL . 'core/third_party_libs/'); |
|
55 | -define('EE_HELPERS_ASSETS', EE_PLUGIN_DIR_URL . 'core/helpers/assets/'); |
|
56 | -define('EE_LIBRARIES_URL', EE_PLUGIN_DIR_URL . 'core/libraries/'); |
|
51 | +define('EE_TEMPLATES_URL', EE_PLUGIN_DIR_URL.'core/templates/'); |
|
52 | +define('EE_GLOBAL_ASSETS_URL', EE_TEMPLATES_URL.'global_assets/'); |
|
53 | +define('EE_IMAGES_URL', EE_GLOBAL_ASSETS_URL.'images/'); |
|
54 | +define('EE_THIRD_PARTY_URL', EE_PLUGIN_DIR_URL.'core/third_party_libs/'); |
|
55 | +define('EE_HELPERS_ASSETS', EE_PLUGIN_DIR_URL.'core/helpers/assets/'); |
|
56 | +define('EE_LIBRARIES_URL', EE_PLUGIN_DIR_URL.'core/libraries/'); |
|
57 | 57 | // define upload paths |
58 | 58 | $uploads = wp_upload_dir(); |
59 | 59 | // define the uploads directory and URL |
60 | -define('EVENT_ESPRESSO_UPLOAD_DIR', $uploads['basedir'] . '/espresso/'); |
|
61 | -define('EVENT_ESPRESSO_UPLOAD_URL', $uploads['baseurl'] . '/espresso/'); |
|
60 | +define('EVENT_ESPRESSO_UPLOAD_DIR', $uploads['basedir'].'/espresso/'); |
|
61 | +define('EVENT_ESPRESSO_UPLOAD_URL', $uploads['baseurl'].'/espresso/'); |
|
62 | 62 | // define the templates directory and URL |
63 | -define('EVENT_ESPRESSO_TEMPLATE_DIR', $uploads['basedir'] . '/espresso/templates/'); |
|
64 | -define('EVENT_ESPRESSO_TEMPLATE_URL', $uploads['baseurl'] . '/espresso/templates/'); |
|
63 | +define('EVENT_ESPRESSO_TEMPLATE_DIR', $uploads['basedir'].'/espresso/templates/'); |
|
64 | +define('EVENT_ESPRESSO_TEMPLATE_URL', $uploads['baseurl'].'/espresso/templates/'); |
|
65 | 65 | // define the gateway directory and URL |
66 | -define('EVENT_ESPRESSO_GATEWAY_DIR', $uploads['basedir'] . '/espresso/gateways/'); |
|
67 | -define('EVENT_ESPRESSO_GATEWAY_URL', $uploads['baseurl'] . '/espresso/gateways/'); |
|
66 | +define('EVENT_ESPRESSO_GATEWAY_DIR', $uploads['basedir'].'/espresso/gateways/'); |
|
67 | +define('EVENT_ESPRESSO_GATEWAY_URL', $uploads['baseurl'].'/espresso/gateways/'); |
|
68 | 68 | // languages folder/path |
69 | -define('EE_LANGUAGES_SAFE_LOC', '../' . 'uploads/' . 'espresso/languages/'); |
|
70 | -define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'languages/'); |
|
69 | +define('EE_LANGUAGES_SAFE_LOC', '../'.'uploads/'.'espresso/languages/'); |
|
70 | +define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR.'languages/'); |
|
71 | 71 | // check for DOMPDF fonts in uploads |
72 | -if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . 'fonts/')) { |
|
73 | - define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts/'); |
|
72 | +if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR.'fonts/')) { |
|
73 | + define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR.'fonts/'); |
|
74 | 74 | } |
75 | 75 | // just a handy constant occasionally needed for finding values representing infinity in the DB |
76 | 76 | // you're better to use this than its straight value (currently -1) in case you ever |
77 | 77 | // want to change its default value! or find when -1 means infinity |
78 | 78 | define('EE_INF_IN_DB', -1); |
79 | 79 | define('EE_INF', INF > (float) PHP_INT_MAX ? INF : PHP_INT_MAX); |
80 | -if (! defined('EE_DEBUG')) { |
|
80 | +if ( ! defined('EE_DEBUG')) { |
|
81 | 81 | define('EE_DEBUG', false); |
82 | 82 | } |
83 | 83 | // for older WP versions |
84 | -if (! defined('MONTH_IN_SECONDS')) { |
|
84 | +if ( ! defined('MONTH_IN_SECONDS')) { |
|
85 | 85 | define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30); |
86 | 86 | } |
@@ -18,202 +18,202 @@ |
||
18 | 18 | class RequestTypeContextDetector |
19 | 19 | { |
20 | 20 | |
21 | - /** |
|
22 | - * @var RequestTypeContextFactoryInterface $factory |
|
23 | - */ |
|
24 | - private $factory; |
|
25 | - |
|
26 | - /** |
|
27 | - * @var RequestInterface $request |
|
28 | - */ |
|
29 | - private $request; |
|
30 | - |
|
31 | - /** |
|
32 | - * @var array $globalRouteConditions |
|
33 | - */ |
|
34 | - private $globalRouteConditions; |
|
35 | - |
|
36 | - |
|
37 | - /** |
|
38 | - * RequestTypeContextDetector constructor. |
|
39 | - * |
|
40 | - * @param RequestInterface $request |
|
41 | - * @param RequestTypeContextFactoryInterface $factory |
|
42 | - * @param array $globalRouteConditions an array for injecting values that would |
|
43 | - * otherwise be defined as global constants |
|
44 | - * or other global variables for the current |
|
45 | - * request route such as DOING_AJAX |
|
46 | - */ |
|
47 | - public function __construct( |
|
48 | - RequestInterface $request, |
|
49 | - RequestTypeContextFactoryInterface $factory, |
|
50 | - array $globalRouteConditions = array() |
|
51 | - ) { |
|
52 | - $this->request = $request; |
|
53 | - $this->factory = $factory; |
|
54 | - $this->globalRouteConditions = $globalRouteConditions; |
|
55 | - } |
|
56 | - |
|
57 | - |
|
58 | - /** |
|
59 | - * @return mixed |
|
60 | - */ |
|
61 | - private function getGlobalRouteCondition($globalRouteCondition, $default) |
|
62 | - { |
|
63 | - return isset($this->globalRouteConditions[ $globalRouteCondition ]) |
|
64 | - ? $this->globalRouteConditions[ $globalRouteCondition ] |
|
65 | - : $default; |
|
66 | - } |
|
67 | - |
|
68 | - |
|
69 | - /** |
|
70 | - * @return RequestTypeContext |
|
71 | - * @throws InvalidArgumentException |
|
72 | - */ |
|
73 | - public function detectRequestTypeContext() |
|
74 | - { |
|
75 | - // Detect error scrapes |
|
76 | - if ($this->request->getRequestParam('wp_scrape_key') |
|
77 | - && $this->request->getRequestParam('wp_scrape_nonce') |
|
78 | - ) { |
|
79 | - return $this->factory->create(RequestTypeContext::WP_SCRAPE); |
|
80 | - } |
|
81 | - // Detect EE REST API |
|
82 | - if ($this->isEspressoRestApiRequest()) { |
|
83 | - return $this->factory->create(RequestTypeContext::API); |
|
84 | - } |
|
85 | - // Detect WP REST API |
|
86 | - if ($this->isWordPressRestApiRequest()) { |
|
87 | - return $this->factory->create(RequestTypeContext::WP_API); |
|
88 | - } |
|
89 | - // Detect AJAX |
|
90 | - if ($this->getGlobalRouteCondition('DOING_AJAX', false)) { |
|
91 | - return $this->isAjaxRequest(); |
|
92 | - } |
|
93 | - // Detect WP_Cron |
|
94 | - if ($this->isCronRequest()) { |
|
95 | - return $this->factory->create(RequestTypeContext::CRON); |
|
96 | - } |
|
97 | - // Detect command line requests |
|
98 | - if ($this->getGlobalRouteCondition('WP_CLI', false)) { |
|
99 | - return $this->factory->create(RequestTypeContext::CLI); |
|
100 | - } |
|
101 | - // detect WordPress admin (ie: "Dashboard") |
|
102 | - if ($this->getGlobalRouteCondition('is_admin', false)) { |
|
103 | - return $this->factory->create(RequestTypeContext::ADMIN); |
|
104 | - } |
|
105 | - // Detect iFrames |
|
106 | - if ($this->isIframeRoute()) { |
|
107 | - return $this->factory->create(RequestTypeContext::IFRAME); |
|
108 | - } |
|
109 | - // Detect Feeds |
|
110 | - if ($this->isFeedRequest()) { |
|
111 | - return $this->factory->create(RequestTypeContext::FEED); |
|
112 | - } |
|
113 | - // and by process of elimination... |
|
114 | - return $this->factory->create(RequestTypeContext::FRONTEND); |
|
115 | - } |
|
116 | - |
|
117 | - |
|
118 | - /** |
|
119 | - * @return RequestTypeContext |
|
120 | - */ |
|
121 | - private function isAjaxRequest() |
|
122 | - { |
|
123 | - if ( |
|
124 | - $this->request->getRequestParam('ee_front_ajax', 0, 'int') |
|
125 | - || $this->request->getRequestParam('data[ee_front_ajax]', 0, 'int') |
|
126 | - ) { |
|
127 | - if (! defined('EE_FRONT_AJAX')) { |
|
128 | - define( 'EE_FRONT_AJAX', true); |
|
129 | - } |
|
130 | - return $this->factory->create(RequestTypeContext::AJAX_FRONT); |
|
131 | - } |
|
132 | - if ( |
|
133 | - $this->request->getRequestParam('ee_admin_ajax', 0, 'int') |
|
134 | - || $this->request->getRequestParam('data[ee_admin_ajax]', 0, 'int') |
|
135 | - ) { |
|
136 | - if (! defined('EE_ADMIN_AJAX')) { |
|
137 | - define('EE_ADMIN_AJAX', true); |
|
138 | - } |
|
139 | - return $this->factory->create(RequestTypeContext::AJAX_ADMIN); |
|
140 | - } |
|
141 | - if ($this->request->getRequestParam('action') === 'heartbeat') { |
|
142 | - return $this->factory->create(RequestTypeContext::AJAX_HEARTBEAT); |
|
143 | - } |
|
144 | - return $this->factory->create(RequestTypeContext::AJAX_OTHER); |
|
145 | - } |
|
146 | - |
|
147 | - |
|
148 | - /** |
|
149 | - * @return bool |
|
150 | - */ |
|
151 | - private function isEspressoRestApiRequest() |
|
152 | - { |
|
153 | - // Check for URLs like http://mysite.com/?rest_route=/ee... and http://mysite.com/wp-json/ee/... |
|
154 | - return strpos( |
|
155 | - $this->request->getRequestParam('rest_route'), |
|
156 | - '/' . Domain::API_NAMESPACE |
|
157 | - ) === 0 |
|
158 | - || $this->uriPathMatches(trim(rest_get_url_prefix(), '/') . '/' . Domain::API_NAMESPACE); |
|
159 | - } |
|
160 | - |
|
161 | - |
|
162 | - |
|
163 | - /** |
|
164 | - * @return bool |
|
165 | - */ |
|
166 | - private function isWordPressRestApiRequest() |
|
167 | - { |
|
168 | - // Check for URLs like http://mysite.com/?rest_route=/.. and http://mysite.com/wp-json/... |
|
169 | - return $this->request->getRequestParam('rest_route') !== '' |
|
170 | - || $this->uriPathMatches(trim(rest_get_url_prefix(), '/')); |
|
171 | - } |
|
172 | - |
|
173 | - |
|
174 | - /** |
|
175 | - * @return bool |
|
176 | - */ |
|
177 | - private function isCronRequest() |
|
178 | - { |
|
179 | - return $this->uriPathMatches('wp-cron.php'); |
|
180 | - } |
|
181 | - |
|
182 | - |
|
183 | - /** |
|
184 | - * @return bool |
|
185 | - */ |
|
186 | - private function isFeedRequest() |
|
187 | - { |
|
188 | - return $this->uriPathMatches('feed'); |
|
189 | - } |
|
190 | - |
|
191 | - |
|
192 | - /** |
|
193 | - * @param string $component |
|
194 | - * @return bool |
|
195 | - */ |
|
196 | - private function uriPathMatches($component) |
|
197 | - { |
|
198 | - $request_uri = $this->request->requestUri(true); |
|
199 | - $parts = explode('?', $request_uri); |
|
200 | - $path = trim(reset($parts), '/'); |
|
201 | - return strpos($path, $component) === 0; |
|
202 | - } |
|
203 | - |
|
204 | - |
|
205 | - /** |
|
206 | - * @return bool |
|
207 | - */ |
|
208 | - private function isIframeRoute() |
|
209 | - { |
|
210 | - $is_iframe_route = apply_filters( |
|
211 | - 'FHEE__EventEspresso_core_domain_services_contexts_RequestTypeContextDetector__isIframeRoute', |
|
212 | - $this->request->getRequestParam('event_list', '') === 'iframe' |
|
213 | - || $this->request->getRequestParam('ticket_selector', '') === 'iframe' |
|
214 | - || $this->request->getRequestParam('calendar', '') === 'iframe', |
|
215 | - $this |
|
216 | - ); |
|
217 | - return filter_var($is_iframe_route, FILTER_VALIDATE_BOOLEAN); |
|
218 | - } |
|
21 | + /** |
|
22 | + * @var RequestTypeContextFactoryInterface $factory |
|
23 | + */ |
|
24 | + private $factory; |
|
25 | + |
|
26 | + /** |
|
27 | + * @var RequestInterface $request |
|
28 | + */ |
|
29 | + private $request; |
|
30 | + |
|
31 | + /** |
|
32 | + * @var array $globalRouteConditions |
|
33 | + */ |
|
34 | + private $globalRouteConditions; |
|
35 | + |
|
36 | + |
|
37 | + /** |
|
38 | + * RequestTypeContextDetector constructor. |
|
39 | + * |
|
40 | + * @param RequestInterface $request |
|
41 | + * @param RequestTypeContextFactoryInterface $factory |
|
42 | + * @param array $globalRouteConditions an array for injecting values that would |
|
43 | + * otherwise be defined as global constants |
|
44 | + * or other global variables for the current |
|
45 | + * request route such as DOING_AJAX |
|
46 | + */ |
|
47 | + public function __construct( |
|
48 | + RequestInterface $request, |
|
49 | + RequestTypeContextFactoryInterface $factory, |
|
50 | + array $globalRouteConditions = array() |
|
51 | + ) { |
|
52 | + $this->request = $request; |
|
53 | + $this->factory = $factory; |
|
54 | + $this->globalRouteConditions = $globalRouteConditions; |
|
55 | + } |
|
56 | + |
|
57 | + |
|
58 | + /** |
|
59 | + * @return mixed |
|
60 | + */ |
|
61 | + private function getGlobalRouteCondition($globalRouteCondition, $default) |
|
62 | + { |
|
63 | + return isset($this->globalRouteConditions[ $globalRouteCondition ]) |
|
64 | + ? $this->globalRouteConditions[ $globalRouteCondition ] |
|
65 | + : $default; |
|
66 | + } |
|
67 | + |
|
68 | + |
|
69 | + /** |
|
70 | + * @return RequestTypeContext |
|
71 | + * @throws InvalidArgumentException |
|
72 | + */ |
|
73 | + public function detectRequestTypeContext() |
|
74 | + { |
|
75 | + // Detect error scrapes |
|
76 | + if ($this->request->getRequestParam('wp_scrape_key') |
|
77 | + && $this->request->getRequestParam('wp_scrape_nonce') |
|
78 | + ) { |
|
79 | + return $this->factory->create(RequestTypeContext::WP_SCRAPE); |
|
80 | + } |
|
81 | + // Detect EE REST API |
|
82 | + if ($this->isEspressoRestApiRequest()) { |
|
83 | + return $this->factory->create(RequestTypeContext::API); |
|
84 | + } |
|
85 | + // Detect WP REST API |
|
86 | + if ($this->isWordPressRestApiRequest()) { |
|
87 | + return $this->factory->create(RequestTypeContext::WP_API); |
|
88 | + } |
|
89 | + // Detect AJAX |
|
90 | + if ($this->getGlobalRouteCondition('DOING_AJAX', false)) { |
|
91 | + return $this->isAjaxRequest(); |
|
92 | + } |
|
93 | + // Detect WP_Cron |
|
94 | + if ($this->isCronRequest()) { |
|
95 | + return $this->factory->create(RequestTypeContext::CRON); |
|
96 | + } |
|
97 | + // Detect command line requests |
|
98 | + if ($this->getGlobalRouteCondition('WP_CLI', false)) { |
|
99 | + return $this->factory->create(RequestTypeContext::CLI); |
|
100 | + } |
|
101 | + // detect WordPress admin (ie: "Dashboard") |
|
102 | + if ($this->getGlobalRouteCondition('is_admin', false)) { |
|
103 | + return $this->factory->create(RequestTypeContext::ADMIN); |
|
104 | + } |
|
105 | + // Detect iFrames |
|
106 | + if ($this->isIframeRoute()) { |
|
107 | + return $this->factory->create(RequestTypeContext::IFRAME); |
|
108 | + } |
|
109 | + // Detect Feeds |
|
110 | + if ($this->isFeedRequest()) { |
|
111 | + return $this->factory->create(RequestTypeContext::FEED); |
|
112 | + } |
|
113 | + // and by process of elimination... |
|
114 | + return $this->factory->create(RequestTypeContext::FRONTEND); |
|
115 | + } |
|
116 | + |
|
117 | + |
|
118 | + /** |
|
119 | + * @return RequestTypeContext |
|
120 | + */ |
|
121 | + private function isAjaxRequest() |
|
122 | + { |
|
123 | + if ( |
|
124 | + $this->request->getRequestParam('ee_front_ajax', 0, 'int') |
|
125 | + || $this->request->getRequestParam('data[ee_front_ajax]', 0, 'int') |
|
126 | + ) { |
|
127 | + if (! defined('EE_FRONT_AJAX')) { |
|
128 | + define( 'EE_FRONT_AJAX', true); |
|
129 | + } |
|
130 | + return $this->factory->create(RequestTypeContext::AJAX_FRONT); |
|
131 | + } |
|
132 | + if ( |
|
133 | + $this->request->getRequestParam('ee_admin_ajax', 0, 'int') |
|
134 | + || $this->request->getRequestParam('data[ee_admin_ajax]', 0, 'int') |
|
135 | + ) { |
|
136 | + if (! defined('EE_ADMIN_AJAX')) { |
|
137 | + define('EE_ADMIN_AJAX', true); |
|
138 | + } |
|
139 | + return $this->factory->create(RequestTypeContext::AJAX_ADMIN); |
|
140 | + } |
|
141 | + if ($this->request->getRequestParam('action') === 'heartbeat') { |
|
142 | + return $this->factory->create(RequestTypeContext::AJAX_HEARTBEAT); |
|
143 | + } |
|
144 | + return $this->factory->create(RequestTypeContext::AJAX_OTHER); |
|
145 | + } |
|
146 | + |
|
147 | + |
|
148 | + /** |
|
149 | + * @return bool |
|
150 | + */ |
|
151 | + private function isEspressoRestApiRequest() |
|
152 | + { |
|
153 | + // Check for URLs like http://mysite.com/?rest_route=/ee... and http://mysite.com/wp-json/ee/... |
|
154 | + return strpos( |
|
155 | + $this->request->getRequestParam('rest_route'), |
|
156 | + '/' . Domain::API_NAMESPACE |
|
157 | + ) === 0 |
|
158 | + || $this->uriPathMatches(trim(rest_get_url_prefix(), '/') . '/' . Domain::API_NAMESPACE); |
|
159 | + } |
|
160 | + |
|
161 | + |
|
162 | + |
|
163 | + /** |
|
164 | + * @return bool |
|
165 | + */ |
|
166 | + private function isWordPressRestApiRequest() |
|
167 | + { |
|
168 | + // Check for URLs like http://mysite.com/?rest_route=/.. and http://mysite.com/wp-json/... |
|
169 | + return $this->request->getRequestParam('rest_route') !== '' |
|
170 | + || $this->uriPathMatches(trim(rest_get_url_prefix(), '/')); |
|
171 | + } |
|
172 | + |
|
173 | + |
|
174 | + /** |
|
175 | + * @return bool |
|
176 | + */ |
|
177 | + private function isCronRequest() |
|
178 | + { |
|
179 | + return $this->uriPathMatches('wp-cron.php'); |
|
180 | + } |
|
181 | + |
|
182 | + |
|
183 | + /** |
|
184 | + * @return bool |
|
185 | + */ |
|
186 | + private function isFeedRequest() |
|
187 | + { |
|
188 | + return $this->uriPathMatches('feed'); |
|
189 | + } |
|
190 | + |
|
191 | + |
|
192 | + /** |
|
193 | + * @param string $component |
|
194 | + * @return bool |
|
195 | + */ |
|
196 | + private function uriPathMatches($component) |
|
197 | + { |
|
198 | + $request_uri = $this->request->requestUri(true); |
|
199 | + $parts = explode('?', $request_uri); |
|
200 | + $path = trim(reset($parts), '/'); |
|
201 | + return strpos($path, $component) === 0; |
|
202 | + } |
|
203 | + |
|
204 | + |
|
205 | + /** |
|
206 | + * @return bool |
|
207 | + */ |
|
208 | + private function isIframeRoute() |
|
209 | + { |
|
210 | + $is_iframe_route = apply_filters( |
|
211 | + 'FHEE__EventEspresso_core_domain_services_contexts_RequestTypeContextDetector__isIframeRoute', |
|
212 | + $this->request->getRequestParam('event_list', '') === 'iframe' |
|
213 | + || $this->request->getRequestParam('ticket_selector', '') === 'iframe' |
|
214 | + || $this->request->getRequestParam('calendar', '') === 'iframe', |
|
215 | + $this |
|
216 | + ); |
|
217 | + return filter_var($is_iframe_route, FILTER_VALIDATE_BOOLEAN); |
|
218 | + } |
|
219 | 219 | } |
@@ -60,8 +60,8 @@ discard block |
||
60 | 60 | */ |
61 | 61 | private function getGlobalRouteCondition($globalRouteCondition, $default) |
62 | 62 | { |
63 | - return isset($this->globalRouteConditions[ $globalRouteCondition ]) |
|
64 | - ? $this->globalRouteConditions[ $globalRouteCondition ] |
|
63 | + return isset($this->globalRouteConditions[$globalRouteCondition]) |
|
64 | + ? $this->globalRouteConditions[$globalRouteCondition] |
|
65 | 65 | : $default; |
66 | 66 | } |
67 | 67 | |
@@ -124,8 +124,8 @@ discard block |
||
124 | 124 | $this->request->getRequestParam('ee_front_ajax', 0, 'int') |
125 | 125 | || $this->request->getRequestParam('data[ee_front_ajax]', 0, 'int') |
126 | 126 | ) { |
127 | - if (! defined('EE_FRONT_AJAX')) { |
|
128 | - define( 'EE_FRONT_AJAX', true); |
|
127 | + if ( ! defined('EE_FRONT_AJAX')) { |
|
128 | + define('EE_FRONT_AJAX', true); |
|
129 | 129 | } |
130 | 130 | return $this->factory->create(RequestTypeContext::AJAX_FRONT); |
131 | 131 | } |
@@ -133,7 +133,7 @@ discard block |
||
133 | 133 | $this->request->getRequestParam('ee_admin_ajax', 0, 'int') |
134 | 134 | || $this->request->getRequestParam('data[ee_admin_ajax]', 0, 'int') |
135 | 135 | ) { |
136 | - if (! defined('EE_ADMIN_AJAX')) { |
|
136 | + if ( ! defined('EE_ADMIN_AJAX')) { |
|
137 | 137 | define('EE_ADMIN_AJAX', true); |
138 | 138 | } |
139 | 139 | return $this->factory->create(RequestTypeContext::AJAX_ADMIN); |
@@ -153,9 +153,9 @@ discard block |
||
153 | 153 | // Check for URLs like http://mysite.com/?rest_route=/ee... and http://mysite.com/wp-json/ee/... |
154 | 154 | return strpos( |
155 | 155 | $this->request->getRequestParam('rest_route'), |
156 | - '/' . Domain::API_NAMESPACE |
|
156 | + '/'.Domain::API_NAMESPACE |
|
157 | 157 | ) === 0 |
158 | - || $this->uriPathMatches(trim(rest_get_url_prefix(), '/') . '/' . Domain::API_NAMESPACE); |
|
158 | + || $this->uriPathMatches(trim(rest_get_url_prefix(), '/').'/'.Domain::API_NAMESPACE); |
|
159 | 159 | } |
160 | 160 | |
161 | 161 |
@@ -21,382 +21,382 @@ |
||
21 | 21 | class QueryBuilder |
22 | 22 | { |
23 | 23 | |
24 | - /** |
|
25 | - * @var RequestInterface $request |
|
26 | - */ |
|
27 | - protected $request; |
|
28 | - |
|
29 | - /** |
|
30 | - * @var EEM_Registration $registration_model |
|
31 | - */ |
|
32 | - protected $registration_model; |
|
33 | - |
|
34 | - /** |
|
35 | - * @var string $view |
|
36 | - */ |
|
37 | - protected $view; |
|
38 | - |
|
39 | - /** |
|
40 | - * @var array $where_params |
|
41 | - */ |
|
42 | - protected $where_params; |
|
43 | - |
|
44 | - |
|
45 | - /** |
|
46 | - * QueryBuilder constructor. |
|
47 | - * |
|
48 | - * @param RequestInterface $request |
|
49 | - * @param EEM_Registration $registration_model |
|
50 | - * @param array $extra_request_params |
|
51 | - */ |
|
52 | - public function __construct( |
|
53 | - RequestInterface $request, |
|
54 | - EEM_Registration $registration_model, |
|
55 | - array $extra_request_params = [] |
|
56 | - ) { |
|
57 | - $this->request = $request; |
|
58 | - $this->registration_model = $registration_model; |
|
59 | - foreach ($extra_request_params as $key => $value) { |
|
60 | - $this->request->setRequestParam($key, $value); |
|
61 | - } |
|
62 | - $this->view = $this->request->getRequestParam('status', ''); |
|
63 | - $this->where_params = []; |
|
64 | - } |
|
65 | - |
|
66 | - |
|
67 | - /** |
|
68 | - * Sets up the where conditions for the registrations query. |
|
69 | - * |
|
70 | - * @param int $per_page |
|
71 | - * @param bool $count_query |
|
72 | - * @return array |
|
73 | - * @throws EE_Error |
|
74 | - * @throws InvalidArgumentException |
|
75 | - * @throws InvalidDataTypeException |
|
76 | - * @throws InvalidInterfaceException |
|
77 | - */ |
|
78 | - public function getQueryParams($per_page = 10, $count_query = false) |
|
79 | - { |
|
80 | - $query_params = [ |
|
81 | - 0 => $this->getWhereClause(), |
|
82 | - 'caps' => EEM_Registration::caps_read_admin, |
|
83 | - 'default_where_conditions' => 'this_model_only', |
|
84 | - ]; |
|
85 | - if (! $count_query) { |
|
86 | - $query_params = array_merge( |
|
87 | - $query_params, |
|
88 | - $this->getOrderbyClause(), |
|
89 | - $this->getLimitClause($per_page) |
|
90 | - ); |
|
91 | - } |
|
92 | - |
|
93 | - return $query_params; |
|
94 | - } |
|
95 | - |
|
96 | - |
|
97 | - /** |
|
98 | - * Sets up the where conditions for the registrations query. |
|
99 | - * |
|
100 | - * @return array |
|
101 | - * @throws EE_Error |
|
102 | - * @throws InvalidArgumentException |
|
103 | - * @throws InvalidDataTypeException |
|
104 | - * @throws InvalidInterfaceException |
|
105 | - */ |
|
106 | - protected function getWhereClause() |
|
107 | - { |
|
108 | - $this->addAttendeeIdToWhereConditions(); |
|
109 | - $this->addEventIdToWhereConditions(); |
|
110 | - $this->addCategoryIdToWhereConditions(); |
|
111 | - $this->addDatetimeIdToWhereConditions(); |
|
112 | - $this->addTicketIdToWhereConditions(); |
|
113 | - $this->addRegistrationStatusToWhereConditions(); |
|
114 | - $this->addDateToWhereConditions(); |
|
115 | - $this->addSearchToWhereConditions(); |
|
116 | - return apply_filters( |
|
117 | - 'FHEE__Registrations_Admin_Page___get_where_conditions_for_registrations_query', |
|
118 | - $this->where_params, |
|
119 | - $this->request->requestParams() |
|
120 | - ); |
|
121 | - } |
|
122 | - |
|
123 | - |
|
124 | - /** |
|
125 | - * This will add ATT_ID to the provided $this->where_clause array for EE model query parameters. |
|
126 | - */ |
|
127 | - protected function addAttendeeIdToWhereConditions() |
|
128 | - { |
|
129 | - $ATT_ID = $this->request->getRequestParam('attendee_id'); |
|
130 | - $ATT_ID = $this->request->getRequestParam('ATT_ID', $ATT_ID, 'int'); |
|
131 | - if ($ATT_ID) { |
|
132 | - $this->where_params['ATT_ID'] = $ATT_ID; |
|
133 | - } |
|
134 | - } |
|
135 | - |
|
136 | - |
|
137 | - /** |
|
138 | - * This will add EVT_ID to the provided $this->where_clause array for EE model query parameters. |
|
139 | - */ |
|
140 | - protected function addEventIdToWhereConditions() |
|
141 | - { |
|
142 | - $EVT_ID = $this->request->getRequestParam('event_id'); |
|
143 | - $EVT_ID = $this->request->getRequestParam('EVT_ID', $EVT_ID, 'int'); |
|
144 | - if ($EVT_ID) { |
|
145 | - $this->where_params['EVT_ID'] = $EVT_ID; |
|
146 | - } |
|
147 | - } |
|
148 | - |
|
149 | - |
|
150 | - /** |
|
151 | - * Adds category ID if it exists in the request to the where conditions for the registrations query. |
|
152 | - */ |
|
153 | - protected function addCategoryIdToWhereConditions() |
|
154 | - { |
|
155 | - $EVT_CAT = (int) $this->request->getRequestParam('EVT_CAT', 0, 'int'); |
|
156 | - if ($EVT_CAT > 0) { |
|
157 | - $this->where_params['Event.Term_Taxonomy.term_id'] = $EVT_CAT; |
|
158 | - } |
|
159 | - } |
|
160 | - |
|
161 | - |
|
162 | - /** |
|
163 | - * Adds the datetime ID if it exists in the request to the where conditions for the registrations query. |
|
164 | - */ |
|
165 | - protected function addDatetimeIdToWhereConditions() |
|
166 | - { |
|
167 | - // first look for 'datetime_id' then 'DTT_ID' using first result as fallback default value |
|
168 | - $DTT_ID = $this->request->getRequestParam('datetime_id'); |
|
169 | - $DTT_ID = $this->request->getRequestParam('DTT_ID', $DTT_ID, 'int'); |
|
170 | - if ($DTT_ID) { |
|
171 | - $this->where_params['Ticket.Datetime.DTT_ID'] = $DTT_ID; |
|
172 | - } |
|
173 | - } |
|
174 | - |
|
175 | - |
|
176 | - /** |
|
177 | - * Adds the ticket ID if it exists in the request to the where conditions for the registrations query. |
|
178 | - */ |
|
179 | - protected function addTicketIdToWhereConditions() |
|
180 | - { |
|
181 | - // first look for 'ticket_id' then 'TKT_ID' using first result as fallback default value |
|
182 | - $TKT_ID = $this->request->getRequestParam('ticket_id'); |
|
183 | - $TKT_ID = $this->request->getRequestParam('TKT_ID', $TKT_ID, 'int'); |
|
184 | - if ($TKT_ID) { |
|
185 | - $this->where_params['TKT_ID'] = $TKT_ID; |
|
186 | - } |
|
187 | - } |
|
188 | - |
|
189 | - |
|
190 | - /** |
|
191 | - * Adds the correct registration status to the where conditions for the registrations query. |
|
192 | - * If filtering by registration status, then we show registrations matching that status. |
|
193 | - * If not filtering by specified status, then we show all registrations excluding incomplete registrations |
|
194 | - * UNLESS viewing trashed registrations. |
|
195 | - */ |
|
196 | - protected function addRegistrationStatusToWhereConditions() |
|
197 | - { |
|
198 | - $registration_status = $this->request->getRequestParam('_reg_status'); |
|
199 | - if ($registration_status) { |
|
200 | - $this->where_params['STS_ID'] = sanitize_text_field($registration_status); |
|
201 | - return; |
|
202 | - } |
|
203 | - // make sure we exclude incomplete registrations, but only if not trashed. |
|
204 | - if ($this->view === 'trash') { |
|
205 | - $this->where_params['REG_deleted'] = true; |
|
206 | - return; |
|
207 | - } |
|
208 | - $this->where_params['STS_ID'] = $this->view === 'incomplete' |
|
209 | - ? EEM_Registration::status_id_incomplete |
|
210 | - : ['!=', EEM_Registration::status_id_incomplete]; |
|
211 | - } |
|
212 | - |
|
213 | - |
|
214 | - /** |
|
215 | - * Adds any provided date restraints to the where conditions for the registrations query. |
|
216 | - * |
|
217 | - * @throws EE_Error |
|
218 | - * @throws InvalidArgumentException |
|
219 | - * @throws InvalidDataTypeException |
|
220 | - * @throws InvalidInterfaceException |
|
221 | - */ |
|
222 | - protected function addDateToWhereConditions() |
|
223 | - { |
|
224 | - if ($this->view === 'today') { |
|
225 | - $now = date('Y-m-d', current_time('timestamp')); |
|
226 | - $this->where_params['REG_date'] = [ |
|
227 | - 'BETWEEN', |
|
228 | - [ |
|
229 | - $this->registration_model->convert_datetime_for_query( |
|
230 | - 'REG_date', |
|
231 | - $now . ' 00:00:00', |
|
232 | - 'Y-m-d H:i:s' |
|
233 | - ), |
|
234 | - $this->registration_model->convert_datetime_for_query( |
|
235 | - 'REG_date', |
|
236 | - $now . ' 23:59:59', |
|
237 | - 'Y-m-d H:i:s' |
|
238 | - ), |
|
239 | - ], |
|
240 | - ]; |
|
241 | - return; |
|
242 | - } |
|
243 | - if ($this->view === 'month') { |
|
244 | - $current_year_and_month = date('Y-m', current_time('timestamp')); |
|
245 | - $days_this_month = date('t', current_time('timestamp')); |
|
246 | - $this->where_params['REG_date'] = [ |
|
247 | - 'BETWEEN', |
|
248 | - [ |
|
249 | - $this->registration_model->convert_datetime_for_query( |
|
250 | - 'REG_date', |
|
251 | - $current_year_and_month . '-01 00:00:00', |
|
252 | - 'Y-m-d H:i:s' |
|
253 | - ), |
|
254 | - $this->registration_model->convert_datetime_for_query( |
|
255 | - 'REG_date', |
|
256 | - $current_year_and_month . '-' . $days_this_month . ' 23:59:59', |
|
257 | - 'Y-m-d H:i:s' |
|
258 | - ), |
|
259 | - ], |
|
260 | - ]; |
|
261 | - return; |
|
262 | - } |
|
263 | - $month_range = $this->request->getRequestParam('month_range'); |
|
264 | - if ($month_range) { |
|
265 | - $month_range = sanitize_text_field($month_range); |
|
266 | - $pieces = explode(' ', $month_range, 3); |
|
267 | - $month_requested = ! empty($pieces[0]) |
|
268 | - ? date('m', EEH_DTT_Helper::first_of_month_timestamp($pieces[0])) |
|
269 | - : ''; |
|
270 | - $year_requested = ! empty($pieces[1]) |
|
271 | - ? $pieces[1] |
|
272 | - : ''; |
|
273 | - // if there is not a month or year then we can't go further |
|
274 | - if ($month_requested && $year_requested) { |
|
275 | - $days_in_month = date('t', strtotime($year_requested . '-' . $month_requested . '-' . '01')); |
|
276 | - $this->where_params['REG_date'] = [ |
|
277 | - 'BETWEEN', |
|
278 | - [ |
|
279 | - $this->registration_model->convert_datetime_for_query( |
|
280 | - 'REG_date', |
|
281 | - $year_requested . '-' . $month_requested . '-01 00:00:00', |
|
282 | - 'Y-m-d H:i:s' |
|
283 | - ), |
|
284 | - $this->registration_model->convert_datetime_for_query( |
|
285 | - 'REG_date', |
|
286 | - $year_requested . '-' . $month_requested . '-' . $days_in_month . ' 23:59:59', |
|
287 | - 'Y-m-d H:i:s' |
|
288 | - ), |
|
289 | - ], |
|
290 | - ]; |
|
291 | - } |
|
292 | - } |
|
293 | - } |
|
294 | - |
|
295 | - |
|
296 | - /** |
|
297 | - * Adds any provided search restraints to the where conditions for the registrations query |
|
298 | - */ |
|
299 | - protected function addSearchToWhereConditions() |
|
300 | - { |
|
301 | - $search = $this->request->getRequestParam('s'); |
|
302 | - if ($search) { |
|
303 | - $search_string = '%' . sanitize_text_field($search) . '%'; |
|
304 | - $this->where_params['OR*search_conditions'] = [ |
|
305 | - 'Event.EVT_name' => ['LIKE', $search_string], |
|
306 | - 'Event.EVT_desc' => ['LIKE', $search_string], |
|
307 | - 'Event.EVT_short_desc' => ['LIKE', $search_string], |
|
308 | - 'Attendee.ATT_full_name' => ['LIKE', $search_string], |
|
309 | - 'Attendee.ATT_fname' => ['LIKE', $search_string], |
|
310 | - 'Attendee.ATT_lname' => ['LIKE', $search_string], |
|
311 | - 'Attendee.ATT_short_bio' => ['LIKE', $search_string], |
|
312 | - 'Attendee.ATT_email' => ['LIKE', $search_string], |
|
313 | - 'Attendee.ATT_address' => ['LIKE', $search_string], |
|
314 | - 'Attendee.ATT_address2' => ['LIKE', $search_string], |
|
315 | - 'Attendee.ATT_city' => ['LIKE', $search_string], |
|
316 | - 'REG_final_price' => ['LIKE', $search_string], |
|
317 | - 'REG_code' => ['LIKE', $search_string], |
|
318 | - 'REG_count' => ['LIKE', $search_string], |
|
319 | - 'REG_group_size' => ['LIKE', $search_string], |
|
320 | - 'Ticket.TKT_name' => ['LIKE', $search_string], |
|
321 | - 'Ticket.TKT_description' => ['LIKE', $search_string], |
|
322 | - 'Transaction.Payment.PAY_txn_id_chq_nmbr' => ['LIKE', $search_string], |
|
323 | - ]; |
|
324 | - } |
|
325 | - } |
|
326 | - |
|
327 | - |
|
328 | - /** |
|
329 | - * Sets up the orderby for the registrations query. |
|
330 | - * |
|
331 | - * @return array |
|
332 | - */ |
|
333 | - protected function getOrderbyClause() |
|
334 | - { |
|
335 | - $orderby_field = $this->request->getRequestParam('orderby'); |
|
336 | - $orderby_field = $orderby_field ? sanitize_text_field($orderby_field) : '_REG_date'; |
|
337 | - switch ($orderby_field) { |
|
338 | - case '_REG_ID': |
|
339 | - $orderby = ['REG_ID']; |
|
340 | - break; |
|
341 | - case '_Reg_status': |
|
342 | - $orderby = ['STS_ID']; |
|
343 | - break; |
|
344 | - case 'ATT_fname': |
|
345 | - $orderby = ['Attendee.ATT_fname', 'Attendee.ATT_lname']; |
|
346 | - break; |
|
347 | - case 'ATT_lname': |
|
348 | - $orderby = ['Attendee.ATT_lname', 'Attendee.ATT_fname']; |
|
349 | - break; |
|
350 | - case 'event_name': |
|
351 | - $orderby = ['Event.EVT_name']; |
|
352 | - break; |
|
353 | - case 'DTT_EVT_start': |
|
354 | - $orderby = ['Event.Datetime.DTT_EVT_start']; |
|
355 | - break; |
|
356 | - case '_REG_date': |
|
357 | - $orderby = ['REG_date']; |
|
358 | - break; |
|
359 | - default: |
|
360 | - $orderby = [$orderby_field]; |
|
361 | - break; |
|
362 | - } |
|
363 | - $order = $this->request->getRequestParam('order'); |
|
364 | - $order = $order ? sanitize_text_field($order) : 'DESC'; |
|
365 | - |
|
366 | - $orderby = array_combine( |
|
367 | - $orderby, |
|
368 | - array_fill(0, count($orderby), $order) |
|
369 | - ); |
|
370 | - // because there are many registrations with the same date, define |
|
371 | - // a secondary way to order them, otherwise MySQL seems to be a bit random |
|
372 | - if (empty($orderby['REG_ID'])) { |
|
373 | - $orderby['REG_ID'] = $order; |
|
374 | - } |
|
375 | - |
|
376 | - $orderby = apply_filters( |
|
377 | - 'FHEE__Registrations_Admin_Page___get_orderby_for_registrations_query', |
|
378 | - $orderby, |
|
379 | - $this->request->requestParams() |
|
380 | - ); |
|
381 | - return ['order_by' => $orderby]; |
|
382 | - } |
|
383 | - |
|
384 | - |
|
385 | - /** |
|
386 | - * Sets up the limit for the registrations query. |
|
387 | - * |
|
388 | - * @param $per_page |
|
389 | - * @return array |
|
390 | - */ |
|
391 | - protected function getLimitClause($per_page) |
|
392 | - { |
|
393 | - $current_page = $this->request->getRequestParam('paged', 1, 'int'); |
|
394 | - $per_page = $this->request->getRequestParam('perpage', $per_page, 'int'); |
|
395 | - // -1 means return all results so get out if that's set. |
|
396 | - if ($per_page === -1) { |
|
397 | - return []; |
|
398 | - } |
|
399 | - $offset = ($current_page - 1) * $per_page; |
|
400 | - return ['limit' => [$offset, $per_page]]; |
|
401 | - } |
|
24 | + /** |
|
25 | + * @var RequestInterface $request |
|
26 | + */ |
|
27 | + protected $request; |
|
28 | + |
|
29 | + /** |
|
30 | + * @var EEM_Registration $registration_model |
|
31 | + */ |
|
32 | + protected $registration_model; |
|
33 | + |
|
34 | + /** |
|
35 | + * @var string $view |
|
36 | + */ |
|
37 | + protected $view; |
|
38 | + |
|
39 | + /** |
|
40 | + * @var array $where_params |
|
41 | + */ |
|
42 | + protected $where_params; |
|
43 | + |
|
44 | + |
|
45 | + /** |
|
46 | + * QueryBuilder constructor. |
|
47 | + * |
|
48 | + * @param RequestInterface $request |
|
49 | + * @param EEM_Registration $registration_model |
|
50 | + * @param array $extra_request_params |
|
51 | + */ |
|
52 | + public function __construct( |
|
53 | + RequestInterface $request, |
|
54 | + EEM_Registration $registration_model, |
|
55 | + array $extra_request_params = [] |
|
56 | + ) { |
|
57 | + $this->request = $request; |
|
58 | + $this->registration_model = $registration_model; |
|
59 | + foreach ($extra_request_params as $key => $value) { |
|
60 | + $this->request->setRequestParam($key, $value); |
|
61 | + } |
|
62 | + $this->view = $this->request->getRequestParam('status', ''); |
|
63 | + $this->where_params = []; |
|
64 | + } |
|
65 | + |
|
66 | + |
|
67 | + /** |
|
68 | + * Sets up the where conditions for the registrations query. |
|
69 | + * |
|
70 | + * @param int $per_page |
|
71 | + * @param bool $count_query |
|
72 | + * @return array |
|
73 | + * @throws EE_Error |
|
74 | + * @throws InvalidArgumentException |
|
75 | + * @throws InvalidDataTypeException |
|
76 | + * @throws InvalidInterfaceException |
|
77 | + */ |
|
78 | + public function getQueryParams($per_page = 10, $count_query = false) |
|
79 | + { |
|
80 | + $query_params = [ |
|
81 | + 0 => $this->getWhereClause(), |
|
82 | + 'caps' => EEM_Registration::caps_read_admin, |
|
83 | + 'default_where_conditions' => 'this_model_only', |
|
84 | + ]; |
|
85 | + if (! $count_query) { |
|
86 | + $query_params = array_merge( |
|
87 | + $query_params, |
|
88 | + $this->getOrderbyClause(), |
|
89 | + $this->getLimitClause($per_page) |
|
90 | + ); |
|
91 | + } |
|
92 | + |
|
93 | + return $query_params; |
|
94 | + } |
|
95 | + |
|
96 | + |
|
97 | + /** |
|
98 | + * Sets up the where conditions for the registrations query. |
|
99 | + * |
|
100 | + * @return array |
|
101 | + * @throws EE_Error |
|
102 | + * @throws InvalidArgumentException |
|
103 | + * @throws InvalidDataTypeException |
|
104 | + * @throws InvalidInterfaceException |
|
105 | + */ |
|
106 | + protected function getWhereClause() |
|
107 | + { |
|
108 | + $this->addAttendeeIdToWhereConditions(); |
|
109 | + $this->addEventIdToWhereConditions(); |
|
110 | + $this->addCategoryIdToWhereConditions(); |
|
111 | + $this->addDatetimeIdToWhereConditions(); |
|
112 | + $this->addTicketIdToWhereConditions(); |
|
113 | + $this->addRegistrationStatusToWhereConditions(); |
|
114 | + $this->addDateToWhereConditions(); |
|
115 | + $this->addSearchToWhereConditions(); |
|
116 | + return apply_filters( |
|
117 | + 'FHEE__Registrations_Admin_Page___get_where_conditions_for_registrations_query', |
|
118 | + $this->where_params, |
|
119 | + $this->request->requestParams() |
|
120 | + ); |
|
121 | + } |
|
122 | + |
|
123 | + |
|
124 | + /** |
|
125 | + * This will add ATT_ID to the provided $this->where_clause array for EE model query parameters. |
|
126 | + */ |
|
127 | + protected function addAttendeeIdToWhereConditions() |
|
128 | + { |
|
129 | + $ATT_ID = $this->request->getRequestParam('attendee_id'); |
|
130 | + $ATT_ID = $this->request->getRequestParam('ATT_ID', $ATT_ID, 'int'); |
|
131 | + if ($ATT_ID) { |
|
132 | + $this->where_params['ATT_ID'] = $ATT_ID; |
|
133 | + } |
|
134 | + } |
|
135 | + |
|
136 | + |
|
137 | + /** |
|
138 | + * This will add EVT_ID to the provided $this->where_clause array for EE model query parameters. |
|
139 | + */ |
|
140 | + protected function addEventIdToWhereConditions() |
|
141 | + { |
|
142 | + $EVT_ID = $this->request->getRequestParam('event_id'); |
|
143 | + $EVT_ID = $this->request->getRequestParam('EVT_ID', $EVT_ID, 'int'); |
|
144 | + if ($EVT_ID) { |
|
145 | + $this->where_params['EVT_ID'] = $EVT_ID; |
|
146 | + } |
|
147 | + } |
|
148 | + |
|
149 | + |
|
150 | + /** |
|
151 | + * Adds category ID if it exists in the request to the where conditions for the registrations query. |
|
152 | + */ |
|
153 | + protected function addCategoryIdToWhereConditions() |
|
154 | + { |
|
155 | + $EVT_CAT = (int) $this->request->getRequestParam('EVT_CAT', 0, 'int'); |
|
156 | + if ($EVT_CAT > 0) { |
|
157 | + $this->where_params['Event.Term_Taxonomy.term_id'] = $EVT_CAT; |
|
158 | + } |
|
159 | + } |
|
160 | + |
|
161 | + |
|
162 | + /** |
|
163 | + * Adds the datetime ID if it exists in the request to the where conditions for the registrations query. |
|
164 | + */ |
|
165 | + protected function addDatetimeIdToWhereConditions() |
|
166 | + { |
|
167 | + // first look for 'datetime_id' then 'DTT_ID' using first result as fallback default value |
|
168 | + $DTT_ID = $this->request->getRequestParam('datetime_id'); |
|
169 | + $DTT_ID = $this->request->getRequestParam('DTT_ID', $DTT_ID, 'int'); |
|
170 | + if ($DTT_ID) { |
|
171 | + $this->where_params['Ticket.Datetime.DTT_ID'] = $DTT_ID; |
|
172 | + } |
|
173 | + } |
|
174 | + |
|
175 | + |
|
176 | + /** |
|
177 | + * Adds the ticket ID if it exists in the request to the where conditions for the registrations query. |
|
178 | + */ |
|
179 | + protected function addTicketIdToWhereConditions() |
|
180 | + { |
|
181 | + // first look for 'ticket_id' then 'TKT_ID' using first result as fallback default value |
|
182 | + $TKT_ID = $this->request->getRequestParam('ticket_id'); |
|
183 | + $TKT_ID = $this->request->getRequestParam('TKT_ID', $TKT_ID, 'int'); |
|
184 | + if ($TKT_ID) { |
|
185 | + $this->where_params['TKT_ID'] = $TKT_ID; |
|
186 | + } |
|
187 | + } |
|
188 | + |
|
189 | + |
|
190 | + /** |
|
191 | + * Adds the correct registration status to the where conditions for the registrations query. |
|
192 | + * If filtering by registration status, then we show registrations matching that status. |
|
193 | + * If not filtering by specified status, then we show all registrations excluding incomplete registrations |
|
194 | + * UNLESS viewing trashed registrations. |
|
195 | + */ |
|
196 | + protected function addRegistrationStatusToWhereConditions() |
|
197 | + { |
|
198 | + $registration_status = $this->request->getRequestParam('_reg_status'); |
|
199 | + if ($registration_status) { |
|
200 | + $this->where_params['STS_ID'] = sanitize_text_field($registration_status); |
|
201 | + return; |
|
202 | + } |
|
203 | + // make sure we exclude incomplete registrations, but only if not trashed. |
|
204 | + if ($this->view === 'trash') { |
|
205 | + $this->where_params['REG_deleted'] = true; |
|
206 | + return; |
|
207 | + } |
|
208 | + $this->where_params['STS_ID'] = $this->view === 'incomplete' |
|
209 | + ? EEM_Registration::status_id_incomplete |
|
210 | + : ['!=', EEM_Registration::status_id_incomplete]; |
|
211 | + } |
|
212 | + |
|
213 | + |
|
214 | + /** |
|
215 | + * Adds any provided date restraints to the where conditions for the registrations query. |
|
216 | + * |
|
217 | + * @throws EE_Error |
|
218 | + * @throws InvalidArgumentException |
|
219 | + * @throws InvalidDataTypeException |
|
220 | + * @throws InvalidInterfaceException |
|
221 | + */ |
|
222 | + protected function addDateToWhereConditions() |
|
223 | + { |
|
224 | + if ($this->view === 'today') { |
|
225 | + $now = date('Y-m-d', current_time('timestamp')); |
|
226 | + $this->where_params['REG_date'] = [ |
|
227 | + 'BETWEEN', |
|
228 | + [ |
|
229 | + $this->registration_model->convert_datetime_for_query( |
|
230 | + 'REG_date', |
|
231 | + $now . ' 00:00:00', |
|
232 | + 'Y-m-d H:i:s' |
|
233 | + ), |
|
234 | + $this->registration_model->convert_datetime_for_query( |
|
235 | + 'REG_date', |
|
236 | + $now . ' 23:59:59', |
|
237 | + 'Y-m-d H:i:s' |
|
238 | + ), |
|
239 | + ], |
|
240 | + ]; |
|
241 | + return; |
|
242 | + } |
|
243 | + if ($this->view === 'month') { |
|
244 | + $current_year_and_month = date('Y-m', current_time('timestamp')); |
|
245 | + $days_this_month = date('t', current_time('timestamp')); |
|
246 | + $this->where_params['REG_date'] = [ |
|
247 | + 'BETWEEN', |
|
248 | + [ |
|
249 | + $this->registration_model->convert_datetime_for_query( |
|
250 | + 'REG_date', |
|
251 | + $current_year_and_month . '-01 00:00:00', |
|
252 | + 'Y-m-d H:i:s' |
|
253 | + ), |
|
254 | + $this->registration_model->convert_datetime_for_query( |
|
255 | + 'REG_date', |
|
256 | + $current_year_and_month . '-' . $days_this_month . ' 23:59:59', |
|
257 | + 'Y-m-d H:i:s' |
|
258 | + ), |
|
259 | + ], |
|
260 | + ]; |
|
261 | + return; |
|
262 | + } |
|
263 | + $month_range = $this->request->getRequestParam('month_range'); |
|
264 | + if ($month_range) { |
|
265 | + $month_range = sanitize_text_field($month_range); |
|
266 | + $pieces = explode(' ', $month_range, 3); |
|
267 | + $month_requested = ! empty($pieces[0]) |
|
268 | + ? date('m', EEH_DTT_Helper::first_of_month_timestamp($pieces[0])) |
|
269 | + : ''; |
|
270 | + $year_requested = ! empty($pieces[1]) |
|
271 | + ? $pieces[1] |
|
272 | + : ''; |
|
273 | + // if there is not a month or year then we can't go further |
|
274 | + if ($month_requested && $year_requested) { |
|
275 | + $days_in_month = date('t', strtotime($year_requested . '-' . $month_requested . '-' . '01')); |
|
276 | + $this->where_params['REG_date'] = [ |
|
277 | + 'BETWEEN', |
|
278 | + [ |
|
279 | + $this->registration_model->convert_datetime_for_query( |
|
280 | + 'REG_date', |
|
281 | + $year_requested . '-' . $month_requested . '-01 00:00:00', |
|
282 | + 'Y-m-d H:i:s' |
|
283 | + ), |
|
284 | + $this->registration_model->convert_datetime_for_query( |
|
285 | + 'REG_date', |
|
286 | + $year_requested . '-' . $month_requested . '-' . $days_in_month . ' 23:59:59', |
|
287 | + 'Y-m-d H:i:s' |
|
288 | + ), |
|
289 | + ], |
|
290 | + ]; |
|
291 | + } |
|
292 | + } |
|
293 | + } |
|
294 | + |
|
295 | + |
|
296 | + /** |
|
297 | + * Adds any provided search restraints to the where conditions for the registrations query |
|
298 | + */ |
|
299 | + protected function addSearchToWhereConditions() |
|
300 | + { |
|
301 | + $search = $this->request->getRequestParam('s'); |
|
302 | + if ($search) { |
|
303 | + $search_string = '%' . sanitize_text_field($search) . '%'; |
|
304 | + $this->where_params['OR*search_conditions'] = [ |
|
305 | + 'Event.EVT_name' => ['LIKE', $search_string], |
|
306 | + 'Event.EVT_desc' => ['LIKE', $search_string], |
|
307 | + 'Event.EVT_short_desc' => ['LIKE', $search_string], |
|
308 | + 'Attendee.ATT_full_name' => ['LIKE', $search_string], |
|
309 | + 'Attendee.ATT_fname' => ['LIKE', $search_string], |
|
310 | + 'Attendee.ATT_lname' => ['LIKE', $search_string], |
|
311 | + 'Attendee.ATT_short_bio' => ['LIKE', $search_string], |
|
312 | + 'Attendee.ATT_email' => ['LIKE', $search_string], |
|
313 | + 'Attendee.ATT_address' => ['LIKE', $search_string], |
|
314 | + 'Attendee.ATT_address2' => ['LIKE', $search_string], |
|
315 | + 'Attendee.ATT_city' => ['LIKE', $search_string], |
|
316 | + 'REG_final_price' => ['LIKE', $search_string], |
|
317 | + 'REG_code' => ['LIKE', $search_string], |
|
318 | + 'REG_count' => ['LIKE', $search_string], |
|
319 | + 'REG_group_size' => ['LIKE', $search_string], |
|
320 | + 'Ticket.TKT_name' => ['LIKE', $search_string], |
|
321 | + 'Ticket.TKT_description' => ['LIKE', $search_string], |
|
322 | + 'Transaction.Payment.PAY_txn_id_chq_nmbr' => ['LIKE', $search_string], |
|
323 | + ]; |
|
324 | + } |
|
325 | + } |
|
326 | + |
|
327 | + |
|
328 | + /** |
|
329 | + * Sets up the orderby for the registrations query. |
|
330 | + * |
|
331 | + * @return array |
|
332 | + */ |
|
333 | + protected function getOrderbyClause() |
|
334 | + { |
|
335 | + $orderby_field = $this->request->getRequestParam('orderby'); |
|
336 | + $orderby_field = $orderby_field ? sanitize_text_field($orderby_field) : '_REG_date'; |
|
337 | + switch ($orderby_field) { |
|
338 | + case '_REG_ID': |
|
339 | + $orderby = ['REG_ID']; |
|
340 | + break; |
|
341 | + case '_Reg_status': |
|
342 | + $orderby = ['STS_ID']; |
|
343 | + break; |
|
344 | + case 'ATT_fname': |
|
345 | + $orderby = ['Attendee.ATT_fname', 'Attendee.ATT_lname']; |
|
346 | + break; |
|
347 | + case 'ATT_lname': |
|
348 | + $orderby = ['Attendee.ATT_lname', 'Attendee.ATT_fname']; |
|
349 | + break; |
|
350 | + case 'event_name': |
|
351 | + $orderby = ['Event.EVT_name']; |
|
352 | + break; |
|
353 | + case 'DTT_EVT_start': |
|
354 | + $orderby = ['Event.Datetime.DTT_EVT_start']; |
|
355 | + break; |
|
356 | + case '_REG_date': |
|
357 | + $orderby = ['REG_date']; |
|
358 | + break; |
|
359 | + default: |
|
360 | + $orderby = [$orderby_field]; |
|
361 | + break; |
|
362 | + } |
|
363 | + $order = $this->request->getRequestParam('order'); |
|
364 | + $order = $order ? sanitize_text_field($order) : 'DESC'; |
|
365 | + |
|
366 | + $orderby = array_combine( |
|
367 | + $orderby, |
|
368 | + array_fill(0, count($orderby), $order) |
|
369 | + ); |
|
370 | + // because there are many registrations with the same date, define |
|
371 | + // a secondary way to order them, otherwise MySQL seems to be a bit random |
|
372 | + if (empty($orderby['REG_ID'])) { |
|
373 | + $orderby['REG_ID'] = $order; |
|
374 | + } |
|
375 | + |
|
376 | + $orderby = apply_filters( |
|
377 | + 'FHEE__Registrations_Admin_Page___get_orderby_for_registrations_query', |
|
378 | + $orderby, |
|
379 | + $this->request->requestParams() |
|
380 | + ); |
|
381 | + return ['order_by' => $orderby]; |
|
382 | + } |
|
383 | + |
|
384 | + |
|
385 | + /** |
|
386 | + * Sets up the limit for the registrations query. |
|
387 | + * |
|
388 | + * @param $per_page |
|
389 | + * @return array |
|
390 | + */ |
|
391 | + protected function getLimitClause($per_page) |
|
392 | + { |
|
393 | + $current_page = $this->request->getRequestParam('paged', 1, 'int'); |
|
394 | + $per_page = $this->request->getRequestParam('perpage', $per_page, 'int'); |
|
395 | + // -1 means return all results so get out if that's set. |
|
396 | + if ($per_page === -1) { |
|
397 | + return []; |
|
398 | + } |
|
399 | + $offset = ($current_page - 1) * $per_page; |
|
400 | + return ['limit' => [$offset, $per_page]]; |
|
401 | + } |
|
402 | 402 | } |
@@ -24,62 +24,62 @@ |
||
24 | 24 | class EventFilterHeader extends AdminPageHeaderDecorator |
25 | 25 | { |
26 | 26 | |
27 | - /** |
|
28 | - * @var EEM_Event $event_model |
|
29 | - */ |
|
30 | - private $event_model; |
|
27 | + /** |
|
28 | + * @var EEM_Event $event_model |
|
29 | + */ |
|
30 | + private $event_model; |
|
31 | 31 | |
32 | 32 | |
33 | - /** |
|
34 | - * EventFilterHeader constructor. |
|
35 | - * |
|
36 | - * @param RequestInterface $request |
|
37 | - * @param EEM_Event $event_model |
|
38 | - */ |
|
39 | - public function __construct(RequestInterface $request, EEM_Event $event_model) |
|
40 | - { |
|
41 | - parent::__construct($request); |
|
42 | - $this->event_model = $event_model; |
|
43 | - } |
|
33 | + /** |
|
34 | + * EventFilterHeader constructor. |
|
35 | + * |
|
36 | + * @param RequestInterface $request |
|
37 | + * @param EEM_Event $event_model |
|
38 | + */ |
|
39 | + public function __construct(RequestInterface $request, EEM_Event $event_model) |
|
40 | + { |
|
41 | + parent::__construct($request); |
|
42 | + $this->event_model = $event_model; |
|
43 | + } |
|
44 | 44 | |
45 | 45 | |
46 | - /** |
|
47 | - * @param string $text |
|
48 | - * @return string |
|
49 | - * @throws EE_Error |
|
50 | - * @throws InvalidDataTypeException |
|
51 | - * @throws InvalidInterfaceException |
|
52 | - * @throws InvalidArgumentException |
|
53 | - * @throws ReflectionException |
|
54 | - * @since 4.10.2.p |
|
55 | - */ |
|
56 | - public function getHeaderText($text = '') |
|
57 | - { |
|
58 | - $EVT_ID = $this->request->getRequestParam('EVT_ID'); |
|
59 | - $EVT_ID = $this->request->getRequestParam('event_id', $EVT_ID, 'int'); |
|
60 | - if ($EVT_ID) { |
|
61 | - $event = $this->event_model->get_one_by_ID($EVT_ID); |
|
62 | - if ($event instanceof EE_Event) { |
|
63 | - $text .= sprintf( |
|
64 | - /* translators: %s: <h3> %s: <a href>Event Name</a> %s: </h3> */ |
|
65 | - // phpcs:ignore WordPress.WP.I18n.UnorderedPlaceholdersText |
|
66 | - esc_html__('%s Viewing registrations for the event: %s%s', 'event_espresso'), |
|
67 | - '<h3 style="line-height:1.5em;">', |
|
68 | - ' <a href="' |
|
69 | - . EE_Admin_Page::add_query_args_and_nonce( |
|
70 | - array( |
|
71 | - 'action' => 'edit', |
|
72 | - 'post' => $event->ID(), |
|
73 | - ), |
|
74 | - EVENTS_ADMIN_URL |
|
75 | - ) |
|
76 | - . '">' |
|
77 | - . $event->get('EVT_name') |
|
78 | - . '</a> ', |
|
79 | - '</h3>' |
|
80 | - ); |
|
81 | - } |
|
82 | - } |
|
83 | - return $text; |
|
84 | - } |
|
46 | + /** |
|
47 | + * @param string $text |
|
48 | + * @return string |
|
49 | + * @throws EE_Error |
|
50 | + * @throws InvalidDataTypeException |
|
51 | + * @throws InvalidInterfaceException |
|
52 | + * @throws InvalidArgumentException |
|
53 | + * @throws ReflectionException |
|
54 | + * @since 4.10.2.p |
|
55 | + */ |
|
56 | + public function getHeaderText($text = '') |
|
57 | + { |
|
58 | + $EVT_ID = $this->request->getRequestParam('EVT_ID'); |
|
59 | + $EVT_ID = $this->request->getRequestParam('event_id', $EVT_ID, 'int'); |
|
60 | + if ($EVT_ID) { |
|
61 | + $event = $this->event_model->get_one_by_ID($EVT_ID); |
|
62 | + if ($event instanceof EE_Event) { |
|
63 | + $text .= sprintf( |
|
64 | + /* translators: %s: <h3> %s: <a href>Event Name</a> %s: </h3> */ |
|
65 | + // phpcs:ignore WordPress.WP.I18n.UnorderedPlaceholdersText |
|
66 | + esc_html__('%s Viewing registrations for the event: %s%s', 'event_espresso'), |
|
67 | + '<h3 style="line-height:1.5em;">', |
|
68 | + ' <a href="' |
|
69 | + . EE_Admin_Page::add_query_args_and_nonce( |
|
70 | + array( |
|
71 | + 'action' => 'edit', |
|
72 | + 'post' => $event->ID(), |
|
73 | + ), |
|
74 | + EVENTS_ADMIN_URL |
|
75 | + ) |
|
76 | + . '">' |
|
77 | + . $event->get('EVT_name') |
|
78 | + . '</a> ', |
|
79 | + '</h3>' |
|
80 | + ); |
|
81 | + } |
|
82 | + } |
|
83 | + return $text; |
|
84 | + } |
|
85 | 85 | } |
@@ -23,64 +23,64 @@ |
||
23 | 23 | class TicketFilterHeader extends AdminPageHeaderDecorator |
24 | 24 | { |
25 | 25 | |
26 | - /** |
|
27 | - * @var EEM_Ticket $ticket_model |
|
28 | - */ |
|
29 | - private $ticket_model; |
|
26 | + /** |
|
27 | + * @var EEM_Ticket $ticket_model |
|
28 | + */ |
|
29 | + private $ticket_model; |
|
30 | 30 | |
31 | 31 | |
32 | - /** |
|
33 | - * TicketFilterHeader constructor. |
|
34 | - * |
|
35 | - * @param RequestInterface $request |
|
36 | - * @param EEM_Ticket $ticket_model |
|
37 | - */ |
|
38 | - public function __construct(RequestInterface $request, EEM_Ticket $ticket_model) |
|
39 | - { |
|
40 | - parent::__construct($request); |
|
41 | - $this->ticket_model = $ticket_model; |
|
42 | - } |
|
32 | + /** |
|
33 | + * TicketFilterHeader constructor. |
|
34 | + * |
|
35 | + * @param RequestInterface $request |
|
36 | + * @param EEM_Ticket $ticket_model |
|
37 | + */ |
|
38 | + public function __construct(RequestInterface $request, EEM_Ticket $ticket_model) |
|
39 | + { |
|
40 | + parent::__construct($request); |
|
41 | + $this->ticket_model = $ticket_model; |
|
42 | + } |
|
43 | 43 | |
44 | 44 | |
45 | - /** |
|
46 | - * @param string $text |
|
47 | - * @return string |
|
48 | - * @throws EE_Error |
|
49 | - * @throws InvalidDataTypeException |
|
50 | - * @throws InvalidInterfaceException |
|
51 | - * @throws InvalidArgumentException |
|
52 | - * @throws ReflectionException |
|
53 | - * @since 4.10.2.p |
|
54 | - */ |
|
55 | - public function getHeaderText($text = '') |
|
56 | - { |
|
57 | - $TKT_ID = $this->request->getRequestParam('TKT_ID'); |
|
58 | - $TKT_ID = $this->request->getRequestParam('ticket_id', $TKT_ID, 'int'); |
|
59 | - if ($TKT_ID) { |
|
60 | - $ticket = $this->ticket_model->get_one_by_ID($TKT_ID); |
|
61 | - if ($ticket instanceof EE_Ticket) { |
|
62 | - $ticket_details = '<span class="ee-ticket-name">' . $ticket->name() . '</span> '; |
|
63 | - $ticket_details .= ! $ticket->is_free() |
|
64 | - ? '<span class="ee-ticket-price">' . $ticket->pretty_price() . '</span>' |
|
65 | - : '<span class="reg-overview-free-event-spn">' |
|
66 | - . __('free', 'event_espresso') |
|
67 | - . '</span>'; |
|
68 | - // remove the closing h3 heading tag if it exists |
|
69 | - $text = str_replace( |
|
70 | - '</h3>', |
|
71 | - '', |
|
72 | - $text |
|
73 | - ); |
|
74 | - if (empty($text)) { |
|
75 | - $text = '<h3 style="line-height:1.5em;">'; |
|
76 | - $text .= esc_html__('Viewing registrations for ticket:', 'event_espresso'); |
|
77 | - } |
|
78 | - $text .= ' '; |
|
79 | - $text .= '<span class="drk-grey-text" style="font-size:.9em;">'; |
|
80 | - $text .= '<span class="dashicons dashicons-tickets-alt"></span>'; |
|
81 | - $text .= $ticket_details . '</span></h3>'; |
|
82 | - } |
|
83 | - } |
|
84 | - return $text; |
|
85 | - } |
|
45 | + /** |
|
46 | + * @param string $text |
|
47 | + * @return string |
|
48 | + * @throws EE_Error |
|
49 | + * @throws InvalidDataTypeException |
|
50 | + * @throws InvalidInterfaceException |
|
51 | + * @throws InvalidArgumentException |
|
52 | + * @throws ReflectionException |
|
53 | + * @since 4.10.2.p |
|
54 | + */ |
|
55 | + public function getHeaderText($text = '') |
|
56 | + { |
|
57 | + $TKT_ID = $this->request->getRequestParam('TKT_ID'); |
|
58 | + $TKT_ID = $this->request->getRequestParam('ticket_id', $TKT_ID, 'int'); |
|
59 | + if ($TKT_ID) { |
|
60 | + $ticket = $this->ticket_model->get_one_by_ID($TKT_ID); |
|
61 | + if ($ticket instanceof EE_Ticket) { |
|
62 | + $ticket_details = '<span class="ee-ticket-name">' . $ticket->name() . '</span> '; |
|
63 | + $ticket_details .= ! $ticket->is_free() |
|
64 | + ? '<span class="ee-ticket-price">' . $ticket->pretty_price() . '</span>' |
|
65 | + : '<span class="reg-overview-free-event-spn">' |
|
66 | + . __('free', 'event_espresso') |
|
67 | + . '</span>'; |
|
68 | + // remove the closing h3 heading tag if it exists |
|
69 | + $text = str_replace( |
|
70 | + '</h3>', |
|
71 | + '', |
|
72 | + $text |
|
73 | + ); |
|
74 | + if (empty($text)) { |
|
75 | + $text = '<h3 style="line-height:1.5em;">'; |
|
76 | + $text .= esc_html__('Viewing registrations for ticket:', 'event_espresso'); |
|
77 | + } |
|
78 | + $text .= ' '; |
|
79 | + $text .= '<span class="drk-grey-text" style="font-size:.9em;">'; |
|
80 | + $text .= '<span class="dashicons dashicons-tickets-alt"></span>'; |
|
81 | + $text .= $ticket_details . '</span></h3>'; |
|
82 | + } |
|
83 | + } |
|
84 | + return $text; |
|
85 | + } |
|
86 | 86 | } |
@@ -20,55 +20,55 @@ |
||
20 | 20 | class AttendeeFilterHeader extends AdminPageHeaderDecorator |
21 | 21 | { |
22 | 22 | |
23 | - /** |
|
24 | - * @var EEM_Attendee $attendee_model |
|
25 | - */ |
|
26 | - private $attendee_model; |
|
23 | + /** |
|
24 | + * @var EEM_Attendee $attendee_model |
|
25 | + */ |
|
26 | + private $attendee_model; |
|
27 | 27 | |
28 | 28 | |
29 | - /** |
|
30 | - * AttendeeFilterHeader constructor. |
|
31 | - * |
|
32 | - * @param RequestInterface $request |
|
33 | - * @param EEM_Attendee $attendee_model |
|
34 | - */ |
|
35 | - public function __construct(RequestInterface $request, EEM_Attendee $attendee_model) |
|
36 | - { |
|
37 | - parent::__construct($request); |
|
38 | - $this->attendee_model = $attendee_model; |
|
39 | - } |
|
29 | + /** |
|
30 | + * AttendeeFilterHeader constructor. |
|
31 | + * |
|
32 | + * @param RequestInterface $request |
|
33 | + * @param EEM_Attendee $attendee_model |
|
34 | + */ |
|
35 | + public function __construct(RequestInterface $request, EEM_Attendee $attendee_model) |
|
36 | + { |
|
37 | + parent::__construct($request); |
|
38 | + $this->attendee_model = $attendee_model; |
|
39 | + } |
|
40 | 40 | |
41 | 41 | |
42 | - /** |
|
43 | - * @param string $text |
|
44 | - * @return string |
|
45 | - * @throws EE_Error |
|
46 | - * @since 4.10.2.p |
|
47 | - */ |
|
48 | - public function getHeaderText($text = '') |
|
49 | - { |
|
50 | - $ATT_ID = $this->request->getRequestParam('ATT_ID'); |
|
51 | - $ATT_ID = $this->request->getRequestParam('attendee_id', $ATT_ID, 'int'); |
|
52 | - if ($ATT_ID) { |
|
53 | - $attendee = $this->attendee_model->get_one_by_ID($ATT_ID); |
|
54 | - if ($attendee instanceof EE_Attendee) { |
|
55 | - $text .= sprintf( |
|
56 | - esc_html__( |
|
57 | - '%1$s Viewing registrations for %2$s%3$s', |
|
58 | - 'event_espresso' |
|
59 | - ), |
|
60 | - '<h3 style="line-height:1.5em;">', |
|
61 | - '<a href="' . EE_Admin_Page::add_query_args_and_nonce( |
|
62 | - array( |
|
63 | - 'action' => 'edit_attendee', |
|
64 | - 'post' => $ATT_ID, |
|
65 | - ), |
|
66 | - REG_ADMIN_URL |
|
67 | - ) . '">' . $attendee->full_name() . '</a>', |
|
68 | - '</h3>' |
|
69 | - ); |
|
70 | - } |
|
71 | - } |
|
72 | - return $text; |
|
73 | - } |
|
42 | + /** |
|
43 | + * @param string $text |
|
44 | + * @return string |
|
45 | + * @throws EE_Error |
|
46 | + * @since 4.10.2.p |
|
47 | + */ |
|
48 | + public function getHeaderText($text = '') |
|
49 | + { |
|
50 | + $ATT_ID = $this->request->getRequestParam('ATT_ID'); |
|
51 | + $ATT_ID = $this->request->getRequestParam('attendee_id', $ATT_ID, 'int'); |
|
52 | + if ($ATT_ID) { |
|
53 | + $attendee = $this->attendee_model->get_one_by_ID($ATT_ID); |
|
54 | + if ($attendee instanceof EE_Attendee) { |
|
55 | + $text .= sprintf( |
|
56 | + esc_html__( |
|
57 | + '%1$s Viewing registrations for %2$s%3$s', |
|
58 | + 'event_espresso' |
|
59 | + ), |
|
60 | + '<h3 style="line-height:1.5em;">', |
|
61 | + '<a href="' . EE_Admin_Page::add_query_args_and_nonce( |
|
62 | + array( |
|
63 | + 'action' => 'edit_attendee', |
|
64 | + 'post' => $ATT_ID, |
|
65 | + ), |
|
66 | + REG_ADMIN_URL |
|
67 | + ) . '">' . $attendee->full_name() . '</a>', |
|
68 | + '</h3>' |
|
69 | + ); |
|
70 | + } |
|
71 | + } |
|
72 | + return $text; |
|
73 | + } |
|
74 | 74 | } |
@@ -23,57 +23,57 @@ |
||
23 | 23 | class DateFilterHeader extends AdminPageHeaderDecorator |
24 | 24 | { |
25 | 25 | |
26 | - /** |
|
27 | - * @var EEM_Datetime $datetime_model |
|
28 | - */ |
|
29 | - private $datetime_model; |
|
26 | + /** |
|
27 | + * @var EEM_Datetime $datetime_model |
|
28 | + */ |
|
29 | + private $datetime_model; |
|
30 | 30 | |
31 | 31 | |
32 | - /** |
|
33 | - * DateFilterHeader constructor. |
|
34 | - * |
|
35 | - * @param RequestInterface $request |
|
36 | - * @param EEM_Datetime $datetime_model |
|
37 | - */ |
|
38 | - public function __construct(RequestInterface $request, EEM_Datetime $datetime_model) |
|
39 | - { |
|
40 | - parent::__construct($request); |
|
41 | - $this->datetime_model = $datetime_model; |
|
42 | - } |
|
32 | + /** |
|
33 | + * DateFilterHeader constructor. |
|
34 | + * |
|
35 | + * @param RequestInterface $request |
|
36 | + * @param EEM_Datetime $datetime_model |
|
37 | + */ |
|
38 | + public function __construct(RequestInterface $request, EEM_Datetime $datetime_model) |
|
39 | + { |
|
40 | + parent::__construct($request); |
|
41 | + $this->datetime_model = $datetime_model; |
|
42 | + } |
|
43 | 43 | |
44 | 44 | |
45 | - /** |
|
46 | - * @param string $text |
|
47 | - * @return string |
|
48 | - * @throws EE_Error |
|
49 | - * @throws InvalidDataTypeException |
|
50 | - * @throws InvalidInterfaceException |
|
51 | - * @throws InvalidArgumentException |
|
52 | - * @throws ReflectionException |
|
53 | - * @since 4.10.2.p |
|
54 | - */ |
|
55 | - public function getHeaderText($text = '') |
|
56 | - { |
|
57 | - $DTT_ID = $this->request->getRequestParam('DTT_ID'); |
|
58 | - $DTT_ID = $this->request->getRequestParam('datetime_id', $DTT_ID, 'int'); |
|
59 | - if ($DTT_ID) { |
|
60 | - $datetime = $this->datetime_model->get_one_by_ID($DTT_ID); |
|
61 | - if ($datetime instanceof EE_Datetime && $text !== '') { |
|
62 | - // remove the closing h3 heading tag if it exists |
|
63 | - $text = str_replace( |
|
64 | - '</h3>', |
|
65 | - '', |
|
66 | - $text |
|
67 | - ); |
|
68 | - $text .= ' '; |
|
69 | - $text .= '<span class="drk-grey-text">'; |
|
70 | - $text .= '<span class="dashicons dashicons-calendar"></span>'; |
|
71 | - $text .= $datetime->name(); |
|
72 | - $text .= ' ( ' . $datetime->start_date() . ' )'; |
|
73 | - $text .= '</span></h3>'; |
|
74 | - } |
|
75 | - } |
|
45 | + /** |
|
46 | + * @param string $text |
|
47 | + * @return string |
|
48 | + * @throws EE_Error |
|
49 | + * @throws InvalidDataTypeException |
|
50 | + * @throws InvalidInterfaceException |
|
51 | + * @throws InvalidArgumentException |
|
52 | + * @throws ReflectionException |
|
53 | + * @since 4.10.2.p |
|
54 | + */ |
|
55 | + public function getHeaderText($text = '') |
|
56 | + { |
|
57 | + $DTT_ID = $this->request->getRequestParam('DTT_ID'); |
|
58 | + $DTT_ID = $this->request->getRequestParam('datetime_id', $DTT_ID, 'int'); |
|
59 | + if ($DTT_ID) { |
|
60 | + $datetime = $this->datetime_model->get_one_by_ID($DTT_ID); |
|
61 | + if ($datetime instanceof EE_Datetime && $text !== '') { |
|
62 | + // remove the closing h3 heading tag if it exists |
|
63 | + $text = str_replace( |
|
64 | + '</h3>', |
|
65 | + '', |
|
66 | + $text |
|
67 | + ); |
|
68 | + $text .= ' '; |
|
69 | + $text .= '<span class="drk-grey-text">'; |
|
70 | + $text .= '<span class="dashicons dashicons-calendar"></span>'; |
|
71 | + $text .= $datetime->name(); |
|
72 | + $text .= ' ( ' . $datetime->start_date() . ' )'; |
|
73 | + $text .= '</span></h3>'; |
|
74 | + } |
|
75 | + } |
|
76 | 76 | |
77 | - return $text; |
|
78 | - } |
|
77 | + return $text; |
|
78 | + } |
|
79 | 79 | } |
@@ -22,86 +22,86 @@ discard block |
||
22 | 22 | class Stats |
23 | 23 | { |
24 | 24 | |
25 | - const OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS = 'ee_uxip_stats_expiry'; |
|
26 | - |
|
27 | - /** |
|
28 | - * @var Config |
|
29 | - */ |
|
30 | - private $config; |
|
31 | - |
|
32 | - |
|
33 | - /** |
|
34 | - * @var StatsGatherer |
|
35 | - */ |
|
36 | - private $stats_gatherer; |
|
37 | - |
|
38 | - |
|
39 | - /** |
|
40 | - * @var EE_Maintenance_Mode |
|
41 | - */ |
|
42 | - private $maintenance_mode; |
|
43 | - |
|
44 | - public function __construct( |
|
45 | - Config $config, |
|
46 | - EE_Maintenance_Mode $maintenance_mode, |
|
47 | - StatsGatherer $stats_gatherer |
|
48 | - ) { |
|
49 | - $this->config = $config; |
|
50 | - $this->maintenance_mode = $maintenance_mode; |
|
51 | - $this->stats_gatherer = $stats_gatherer; |
|
52 | - $this->setUxipNotices(); |
|
53 | - } |
|
54 | - |
|
55 | - |
|
56 | - /** |
|
57 | - * Displays uxip opt-in notice if necessary. |
|
58 | - */ |
|
59 | - private function setUxipNotices() |
|
60 | - { |
|
61 | - if ($this->canDisplayNotices()) { |
|
62 | - add_action('admin_notices', array($this, 'optinNotice')); |
|
63 | - add_action('admin_enqueue_scripts', array($this, 'enqueueScripts')); |
|
64 | - add_action('wp_ajax_espresso_data_optin', array($this, 'ajaxHandler')); |
|
65 | - } |
|
66 | - } |
|
67 | - |
|
68 | - |
|
69 | - /** |
|
70 | - * This returns the callback that PluginUpdateEngineChecker will use for getting any extra stats to send. |
|
71 | - * |
|
72 | - * @return Closure |
|
73 | - */ |
|
74 | - public function statsCallback() |
|
75 | - { |
|
76 | - // returns a callback that can is used to retrieve the stats to send along to the pue server. |
|
77 | - return function () { |
|
78 | - // we only send stats one a week, so let's see if our stat timestamp has expired. |
|
79 | - if (! $this->sendStats()) { |
|
80 | - return array(); |
|
81 | - } |
|
82 | - return $this->stats_gatherer->stats(); |
|
83 | - }; |
|
84 | - } |
|
85 | - |
|
86 | - |
|
87 | - /** |
|
88 | - * Return whether notices can be displayed or not |
|
89 | - * |
|
90 | - * @return bool |
|
91 | - */ |
|
92 | - private function canDisplayNotices() |
|
93 | - { |
|
94 | - return ! $this->config->hasNotifiedForUxip() |
|
95 | - && $this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance; |
|
96 | - } |
|
97 | - |
|
98 | - |
|
99 | - /** |
|
100 | - * Callback for the admin_notices hook that outputs the UXIP optin-in notice. |
|
101 | - */ |
|
102 | - public function optinNotice() |
|
103 | - { |
|
104 | - ?> |
|
25 | + const OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS = 'ee_uxip_stats_expiry'; |
|
26 | + |
|
27 | + /** |
|
28 | + * @var Config |
|
29 | + */ |
|
30 | + private $config; |
|
31 | + |
|
32 | + |
|
33 | + /** |
|
34 | + * @var StatsGatherer |
|
35 | + */ |
|
36 | + private $stats_gatherer; |
|
37 | + |
|
38 | + |
|
39 | + /** |
|
40 | + * @var EE_Maintenance_Mode |
|
41 | + */ |
|
42 | + private $maintenance_mode; |
|
43 | + |
|
44 | + public function __construct( |
|
45 | + Config $config, |
|
46 | + EE_Maintenance_Mode $maintenance_mode, |
|
47 | + StatsGatherer $stats_gatherer |
|
48 | + ) { |
|
49 | + $this->config = $config; |
|
50 | + $this->maintenance_mode = $maintenance_mode; |
|
51 | + $this->stats_gatherer = $stats_gatherer; |
|
52 | + $this->setUxipNotices(); |
|
53 | + } |
|
54 | + |
|
55 | + |
|
56 | + /** |
|
57 | + * Displays uxip opt-in notice if necessary. |
|
58 | + */ |
|
59 | + private function setUxipNotices() |
|
60 | + { |
|
61 | + if ($this->canDisplayNotices()) { |
|
62 | + add_action('admin_notices', array($this, 'optinNotice')); |
|
63 | + add_action('admin_enqueue_scripts', array($this, 'enqueueScripts')); |
|
64 | + add_action('wp_ajax_espresso_data_optin', array($this, 'ajaxHandler')); |
|
65 | + } |
|
66 | + } |
|
67 | + |
|
68 | + |
|
69 | + /** |
|
70 | + * This returns the callback that PluginUpdateEngineChecker will use for getting any extra stats to send. |
|
71 | + * |
|
72 | + * @return Closure |
|
73 | + */ |
|
74 | + public function statsCallback() |
|
75 | + { |
|
76 | + // returns a callback that can is used to retrieve the stats to send along to the pue server. |
|
77 | + return function () { |
|
78 | + // we only send stats one a week, so let's see if our stat timestamp has expired. |
|
79 | + if (! $this->sendStats()) { |
|
80 | + return array(); |
|
81 | + } |
|
82 | + return $this->stats_gatherer->stats(); |
|
83 | + }; |
|
84 | + } |
|
85 | + |
|
86 | + |
|
87 | + /** |
|
88 | + * Return whether notices can be displayed or not |
|
89 | + * |
|
90 | + * @return bool |
|
91 | + */ |
|
92 | + private function canDisplayNotices() |
|
93 | + { |
|
94 | + return ! $this->config->hasNotifiedForUxip() |
|
95 | + && $this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance; |
|
96 | + } |
|
97 | + |
|
98 | + |
|
99 | + /** |
|
100 | + * Callback for the admin_notices hook that outputs the UXIP optin-in notice. |
|
101 | + */ |
|
102 | + public function optinNotice() |
|
103 | + { |
|
104 | + ?> |
|
105 | 105 | <div class="updated data-collect-optin" id="espresso-data-collect-optin-container"> |
106 | 106 | <div id="data-collect-optin-options-container"> |
107 | 107 | <span class="dashicons dashicons-admin-site"></span> |
@@ -114,128 +114,128 @@ discard block |
||
114 | 114 | </div> |
115 | 115 | </div> |
116 | 116 | <?php |
117 | - } |
|
118 | - |
|
119 | - |
|
120 | - /** |
|
121 | - * Retrieves the optin text (static so it can be used in multiple places as necessary). |
|
122 | - * |
|
123 | - * @param bool $extra |
|
124 | - */ |
|
125 | - public static function optinText($extra = true) |
|
126 | - { |
|
127 | - if (! $extra) { |
|
128 | - echo '<h2 class="ee-admin-settings-hdr" ' |
|
129 | - . (! $extra ? 'id="UXIP_settings"' : '') |
|
130 | - . '>' |
|
131 | - . esc_html__('User eXperience Improvement Program (UXIP)', 'event_espresso') |
|
132 | - . EEH_Template::get_help_tab_link('organization_logo_info') |
|
133 | - . '</h2>'; |
|
134 | - printf( |
|
135 | - esc_html__( |
|
136 | - '%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.', |
|
137 | - 'event_espresso' |
|
138 | - ), |
|
139 | - '<p><em>', |
|
140 | - '</em></p>', |
|
141 | - '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
|
142 | - '</a>', |
|
143 | - '<br><br>', |
|
144 | - '<a href="https://eventespresso.com/about/privacy-policy/" target="_blank">', |
|
145 | - '</a>' |
|
146 | - ); |
|
147 | - } else { |
|
148 | - $settings_url = EEH_URL::add_query_args_and_nonce( |
|
149 | - array('action' => 'default'), |
|
150 | - admin_url('admin.php?page=espresso_general_settings') |
|
151 | - ); |
|
152 | - $settings_url .= '#UXIP_settings'; |
|
153 | - printf( |
|
154 | - esc_html__( |
|
155 | - '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.', |
|
156 | - 'event_espresso' |
|
157 | - ), |
|
158 | - '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
|
159 | - '</a>', |
|
160 | - '<a href="' . $settings_url . '" target="_blank">', |
|
161 | - '</a>' |
|
162 | - ); |
|
163 | - } |
|
164 | - } |
|
165 | - |
|
166 | - |
|
167 | - /** |
|
168 | - * Callback for admin_enqueue_scripts that sets up the scripts and styles for the uxip notice |
|
169 | - */ |
|
170 | - public function enqueueScripts() |
|
171 | - { |
|
172 | - wp_register_script( |
|
173 | - 'ee-data-optin-js', |
|
174 | - EE_GLOBAL_ASSETS_URL . 'scripts/ee-data-optin.js', |
|
175 | - array('jquery'), |
|
176 | - EVENT_ESPRESSO_VERSION, |
|
177 | - true |
|
178 | - ); |
|
179 | - wp_register_style( |
|
180 | - 'ee-data-optin-css', |
|
181 | - EE_GLOBAL_ASSETS_URL . 'css/ee-data-optin.css', |
|
182 | - array(), |
|
183 | - EVENT_ESPRESSO_VERSION |
|
184 | - ); |
|
185 | - |
|
186 | - wp_enqueue_script('ee-data-optin-js'); |
|
187 | - wp_enqueue_style('ee-data-optin-css'); |
|
188 | - } |
|
189 | - |
|
190 | - |
|
191 | - /** |
|
192 | - * Callback for wp_ajax_espresso_data_optin that handles the ajax request |
|
193 | - */ |
|
194 | - public function ajaxHandler() |
|
195 | - { |
|
196 | - /** @var RequestInterface $request */ |
|
197 | - $request = LoaderFactory::getLoader()->getShared(RequestInterface::class); |
|
198 | - $nonce = $request->getRequestParam('nonce'); |
|
199 | - // verify nonce |
|
200 | - if (! $nonce || ! wp_verify_nonce($nonce, 'ee-data-optin')) { |
|
201 | - exit(); |
|
202 | - } |
|
203 | - |
|
204 | - // update has notified option |
|
205 | - $this->config->setHasNotifiedAboutUxip(); |
|
206 | - exit(); |
|
207 | - } |
|
208 | - |
|
209 | - |
|
210 | - /** |
|
211 | - * Used to determine whether additional stats are sent. |
|
212 | - */ |
|
213 | - private function sendStats() |
|
214 | - { |
|
215 | - return $this->config->isOptedInForUxip() |
|
216 | - && $this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance |
|
217 | - && $this->statSendTimestampExpired(); |
|
218 | - } |
|
219 | - |
|
220 | - |
|
221 | - /** |
|
222 | - * Returns true when the timestamp used to track whether stats get sent (currently a weekly interval) is expired. |
|
223 | - * Returns false otherwise. |
|
224 | - * |
|
225 | - * @return bool |
|
226 | - */ |
|
227 | - private function statSendTimestampExpired() |
|
228 | - { |
|
229 | - $current_expiry = get_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, null); |
|
230 | - if ($current_expiry === null) { |
|
231 | - add_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, time() + WEEK_IN_SECONDS, '', 'no'); |
|
232 | - return true; |
|
233 | - } |
|
234 | - |
|
235 | - if (time() > (int) $current_expiry) { |
|
236 | - update_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, time() + WEEK_IN_SECONDS); |
|
237 | - return true; |
|
238 | - } |
|
239 | - return false; |
|
240 | - } |
|
117 | + } |
|
118 | + |
|
119 | + |
|
120 | + /** |
|
121 | + * Retrieves the optin text (static so it can be used in multiple places as necessary). |
|
122 | + * |
|
123 | + * @param bool $extra |
|
124 | + */ |
|
125 | + public static function optinText($extra = true) |
|
126 | + { |
|
127 | + if (! $extra) { |
|
128 | + echo '<h2 class="ee-admin-settings-hdr" ' |
|
129 | + . (! $extra ? 'id="UXIP_settings"' : '') |
|
130 | + . '>' |
|
131 | + . esc_html__('User eXperience Improvement Program (UXIP)', 'event_espresso') |
|
132 | + . EEH_Template::get_help_tab_link('organization_logo_info') |
|
133 | + . '</h2>'; |
|
134 | + printf( |
|
135 | + esc_html__( |
|
136 | + '%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.', |
|
137 | + 'event_espresso' |
|
138 | + ), |
|
139 | + '<p><em>', |
|
140 | + '</em></p>', |
|
141 | + '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
|
142 | + '</a>', |
|
143 | + '<br><br>', |
|
144 | + '<a href="https://eventespresso.com/about/privacy-policy/" target="_blank">', |
|
145 | + '</a>' |
|
146 | + ); |
|
147 | + } else { |
|
148 | + $settings_url = EEH_URL::add_query_args_and_nonce( |
|
149 | + array('action' => 'default'), |
|
150 | + admin_url('admin.php?page=espresso_general_settings') |
|
151 | + ); |
|
152 | + $settings_url .= '#UXIP_settings'; |
|
153 | + printf( |
|
154 | + esc_html__( |
|
155 | + '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.', |
|
156 | + 'event_espresso' |
|
157 | + ), |
|
158 | + '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
|
159 | + '</a>', |
|
160 | + '<a href="' . $settings_url . '" target="_blank">', |
|
161 | + '</a>' |
|
162 | + ); |
|
163 | + } |
|
164 | + } |
|
165 | + |
|
166 | + |
|
167 | + /** |
|
168 | + * Callback for admin_enqueue_scripts that sets up the scripts and styles for the uxip notice |
|
169 | + */ |
|
170 | + public function enqueueScripts() |
|
171 | + { |
|
172 | + wp_register_script( |
|
173 | + 'ee-data-optin-js', |
|
174 | + EE_GLOBAL_ASSETS_URL . 'scripts/ee-data-optin.js', |
|
175 | + array('jquery'), |
|
176 | + EVENT_ESPRESSO_VERSION, |
|
177 | + true |
|
178 | + ); |
|
179 | + wp_register_style( |
|
180 | + 'ee-data-optin-css', |
|
181 | + EE_GLOBAL_ASSETS_URL . 'css/ee-data-optin.css', |
|
182 | + array(), |
|
183 | + EVENT_ESPRESSO_VERSION |
|
184 | + ); |
|
185 | + |
|
186 | + wp_enqueue_script('ee-data-optin-js'); |
|
187 | + wp_enqueue_style('ee-data-optin-css'); |
|
188 | + } |
|
189 | + |
|
190 | + |
|
191 | + /** |
|
192 | + * Callback for wp_ajax_espresso_data_optin that handles the ajax request |
|
193 | + */ |
|
194 | + public function ajaxHandler() |
|
195 | + { |
|
196 | + /** @var RequestInterface $request */ |
|
197 | + $request = LoaderFactory::getLoader()->getShared(RequestInterface::class); |
|
198 | + $nonce = $request->getRequestParam('nonce'); |
|
199 | + // verify nonce |
|
200 | + if (! $nonce || ! wp_verify_nonce($nonce, 'ee-data-optin')) { |
|
201 | + exit(); |
|
202 | + } |
|
203 | + |
|
204 | + // update has notified option |
|
205 | + $this->config->setHasNotifiedAboutUxip(); |
|
206 | + exit(); |
|
207 | + } |
|
208 | + |
|
209 | + |
|
210 | + /** |
|
211 | + * Used to determine whether additional stats are sent. |
|
212 | + */ |
|
213 | + private function sendStats() |
|
214 | + { |
|
215 | + return $this->config->isOptedInForUxip() |
|
216 | + && $this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance |
|
217 | + && $this->statSendTimestampExpired(); |
|
218 | + } |
|
219 | + |
|
220 | + |
|
221 | + /** |
|
222 | + * Returns true when the timestamp used to track whether stats get sent (currently a weekly interval) is expired. |
|
223 | + * Returns false otherwise. |
|
224 | + * |
|
225 | + * @return bool |
|
226 | + */ |
|
227 | + private function statSendTimestampExpired() |
|
228 | + { |
|
229 | + $current_expiry = get_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, null); |
|
230 | + if ($current_expiry === null) { |
|
231 | + add_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, time() + WEEK_IN_SECONDS, '', 'no'); |
|
232 | + return true; |
|
233 | + } |
|
234 | + |
|
235 | + if (time() > (int) $current_expiry) { |
|
236 | + update_option(self::OPTIONS_KEY_EXPIRY_TIMESTAMP_FOR_SENDING_STATS, time() + WEEK_IN_SECONDS); |
|
237 | + return true; |
|
238 | + } |
|
239 | + return false; |
|
240 | + } |
|
241 | 241 | } |
@@ -74,9 +74,9 @@ discard block |
||
74 | 74 | public function statsCallback() |
75 | 75 | { |
76 | 76 | // returns a callback that can is used to retrieve the stats to send along to the pue server. |
77 | - return function () { |
|
77 | + return function() { |
|
78 | 78 | // we only send stats one a week, so let's see if our stat timestamp has expired. |
79 | - if (! $this->sendStats()) { |
|
79 | + if ( ! $this->sendStats()) { |
|
80 | 80 | return array(); |
81 | 81 | } |
82 | 82 | return $this->stats_gatherer->stats(); |
@@ -124,9 +124,9 @@ discard block |
||
124 | 124 | */ |
125 | 125 | public static function optinText($extra = true) |
126 | 126 | { |
127 | - if (! $extra) { |
|
127 | + if ( ! $extra) { |
|
128 | 128 | echo '<h2 class="ee-admin-settings-hdr" ' |
129 | - . (! $extra ? 'id="UXIP_settings"' : '') |
|
129 | + . ( ! $extra ? 'id="UXIP_settings"' : '') |
|
130 | 130 | . '>' |
131 | 131 | . esc_html__('User eXperience Improvement Program (UXIP)', 'event_espresso') |
132 | 132 | . EEH_Template::get_help_tab_link('organization_logo_info') |
@@ -157,7 +157,7 @@ discard block |
||
157 | 157 | ), |
158 | 158 | '<a href="https://eventespresso.com/about/user-experience-improvement-program-uxip/" target="_blank">', |
159 | 159 | '</a>', |
160 | - '<a href="' . $settings_url . '" target="_blank">', |
|
160 | + '<a href="'.$settings_url.'" target="_blank">', |
|
161 | 161 | '</a>' |
162 | 162 | ); |
163 | 163 | } |
@@ -171,14 +171,14 @@ discard block |
||
171 | 171 | { |
172 | 172 | wp_register_script( |
173 | 173 | 'ee-data-optin-js', |
174 | - EE_GLOBAL_ASSETS_URL . 'scripts/ee-data-optin.js', |
|
174 | + EE_GLOBAL_ASSETS_URL.'scripts/ee-data-optin.js', |
|
175 | 175 | array('jquery'), |
176 | 176 | EVENT_ESPRESSO_VERSION, |
177 | 177 | true |
178 | 178 | ); |
179 | 179 | wp_register_style( |
180 | 180 | 'ee-data-optin-css', |
181 | - EE_GLOBAL_ASSETS_URL . 'css/ee-data-optin.css', |
|
181 | + EE_GLOBAL_ASSETS_URL.'css/ee-data-optin.css', |
|
182 | 182 | array(), |
183 | 183 | EVENT_ESPRESSO_VERSION |
184 | 184 | ); |
@@ -197,7 +197,7 @@ discard block |
||
197 | 197 | $request = LoaderFactory::getLoader()->getShared(RequestInterface::class); |
198 | 198 | $nonce = $request->getRequestParam('nonce'); |
199 | 199 | // verify nonce |
200 | - if (! $nonce || ! wp_verify_nonce($nonce, 'ee-data-optin')) { |
|
200 | + if ( ! $nonce || ! wp_verify_nonce($nonce, 'ee-data-optin')) { |
|
201 | 201 | exit(); |
202 | 202 | } |
203 | 203 |
@@ -21,172 +21,172 @@ |
||
21 | 21 | class EventAttendees extends Block |
22 | 22 | { |
23 | 23 | |
24 | - const BLOCK_TYPE = 'event-attendees'; |
|
24 | + const BLOCK_TYPE = 'event-attendees'; |
|
25 | 25 | |
26 | - /** |
|
27 | - * @var EventAttendeesBlockRenderer $renderer |
|
28 | - */ |
|
29 | - protected $renderer; |
|
26 | + /** |
|
27 | + * @var EventAttendeesBlockRenderer $renderer |
|
28 | + */ |
|
29 | + protected $renderer; |
|
30 | 30 | |
31 | 31 | |
32 | - /** |
|
33 | - * EventAttendees constructor. |
|
34 | - * |
|
35 | - * @param CoreBlocksAssetManager $block_asset_manager |
|
36 | - * @param RequestInterface $request |
|
37 | - * @param EventAttendeesBlockRenderer $renderer |
|
38 | - */ |
|
39 | - public function __construct( |
|
40 | - CoreBlocksAssetManager $block_asset_manager, |
|
41 | - RequestInterface $request, |
|
42 | - EventAttendeesBlockRenderer $renderer |
|
43 | - ) { |
|
44 | - parent::__construct($block_asset_manager, $request); |
|
45 | - $this->renderer= $renderer; |
|
46 | - } |
|
32 | + /** |
|
33 | + * EventAttendees constructor. |
|
34 | + * |
|
35 | + * @param CoreBlocksAssetManager $block_asset_manager |
|
36 | + * @param RequestInterface $request |
|
37 | + * @param EventAttendeesBlockRenderer $renderer |
|
38 | + */ |
|
39 | + public function __construct( |
|
40 | + CoreBlocksAssetManager $block_asset_manager, |
|
41 | + RequestInterface $request, |
|
42 | + EventAttendeesBlockRenderer $renderer |
|
43 | + ) { |
|
44 | + parent::__construct($block_asset_manager, $request); |
|
45 | + $this->renderer= $renderer; |
|
46 | + } |
|
47 | 47 | |
48 | 48 | |
49 | - /** |
|
50 | - * Perform any early setup required by the block |
|
51 | - * including setting the block type and supported post types |
|
52 | - * |
|
53 | - * @return void |
|
54 | - */ |
|
55 | - public function initialize() |
|
56 | - { |
|
57 | - $this->setBlockType(self::BLOCK_TYPE); |
|
58 | - $this->setSupportedRoutes( |
|
59 | - array( |
|
60 | - 'EventEspresso\core\domain\entities\route_match\specifications\admin\EspressoStandardPostTypeEditor', |
|
61 | - 'EventEspresso\core\domain\entities\route_match\specifications\admin\WordPressPostTypeEditor', |
|
62 | - 'EventEspresso\core\domain\entities\route_match\specifications\frontend\EspressoBlockRenderer', |
|
63 | - 'EventEspresso\core\domain\entities\route_match\specifications\frontend\AnyFrontendRequest' |
|
64 | - ) |
|
65 | - ); |
|
66 | - $EVT_ID = $this->request->getRequestParam('page') === 'espresso_events' |
|
67 | - ? $this->request->getRequestParam('post', 0, 'int') |
|
68 | - : 0; |
|
69 | - $this->setAttributes( |
|
70 | - array( |
|
71 | - 'eventId' => array( |
|
72 | - 'type' => 'number', |
|
73 | - 'default' => $EVT_ID, |
|
74 | - ), |
|
75 | - 'datetimeId' => array( |
|
76 | - 'type' => 'number', |
|
77 | - 'default' => 0, |
|
78 | - ), |
|
79 | - 'ticketId' => array( |
|
80 | - 'type' => 'number', |
|
81 | - 'default' => 0, |
|
82 | - ), |
|
83 | - 'status' => array( |
|
84 | - 'type' => 'string', |
|
85 | - 'default' => EEM_Registration::status_id_approved, |
|
86 | - ), |
|
87 | - 'limit' => array( |
|
88 | - 'type' => 'number', |
|
89 | - 'default' => 100, |
|
90 | - ), |
|
91 | - 'order' => array( |
|
92 | - 'type' => 'string', |
|
93 | - 'default' => 'ASC' |
|
94 | - ), |
|
95 | - 'orderBy' => array( |
|
96 | - 'type' => 'string', |
|
97 | - 'default' => 'lastThenFirstName', |
|
98 | - ), |
|
99 | - 'showGravatar' => array( |
|
100 | - 'type' => 'boolean', |
|
101 | - 'default' => false, |
|
102 | - ), |
|
103 | - 'avatarClass' => array( |
|
104 | - 'type' => 'string', |
|
105 | - 'default' => 'contact', |
|
106 | - ), |
|
107 | - 'avatarSize' => array( |
|
108 | - 'type' => 'number', |
|
109 | - 'default' => 24, |
|
110 | - ), |
|
111 | - 'displayOnArchives' => array( |
|
112 | - 'type' => 'boolean', |
|
113 | - 'default' => false, |
|
114 | - ), |
|
115 | - ) |
|
116 | - ); |
|
117 | - $this->setDynamic(); |
|
118 | - } |
|
49 | + /** |
|
50 | + * Perform any early setup required by the block |
|
51 | + * including setting the block type and supported post types |
|
52 | + * |
|
53 | + * @return void |
|
54 | + */ |
|
55 | + public function initialize() |
|
56 | + { |
|
57 | + $this->setBlockType(self::BLOCK_TYPE); |
|
58 | + $this->setSupportedRoutes( |
|
59 | + array( |
|
60 | + 'EventEspresso\core\domain\entities\route_match\specifications\admin\EspressoStandardPostTypeEditor', |
|
61 | + 'EventEspresso\core\domain\entities\route_match\specifications\admin\WordPressPostTypeEditor', |
|
62 | + 'EventEspresso\core\domain\entities\route_match\specifications\frontend\EspressoBlockRenderer', |
|
63 | + 'EventEspresso\core\domain\entities\route_match\specifications\frontend\AnyFrontendRequest' |
|
64 | + ) |
|
65 | + ); |
|
66 | + $EVT_ID = $this->request->getRequestParam('page') === 'espresso_events' |
|
67 | + ? $this->request->getRequestParam('post', 0, 'int') |
|
68 | + : 0; |
|
69 | + $this->setAttributes( |
|
70 | + array( |
|
71 | + 'eventId' => array( |
|
72 | + 'type' => 'number', |
|
73 | + 'default' => $EVT_ID, |
|
74 | + ), |
|
75 | + 'datetimeId' => array( |
|
76 | + 'type' => 'number', |
|
77 | + 'default' => 0, |
|
78 | + ), |
|
79 | + 'ticketId' => array( |
|
80 | + 'type' => 'number', |
|
81 | + 'default' => 0, |
|
82 | + ), |
|
83 | + 'status' => array( |
|
84 | + 'type' => 'string', |
|
85 | + 'default' => EEM_Registration::status_id_approved, |
|
86 | + ), |
|
87 | + 'limit' => array( |
|
88 | + 'type' => 'number', |
|
89 | + 'default' => 100, |
|
90 | + ), |
|
91 | + 'order' => array( |
|
92 | + 'type' => 'string', |
|
93 | + 'default' => 'ASC' |
|
94 | + ), |
|
95 | + 'orderBy' => array( |
|
96 | + 'type' => 'string', |
|
97 | + 'default' => 'lastThenFirstName', |
|
98 | + ), |
|
99 | + 'showGravatar' => array( |
|
100 | + 'type' => 'boolean', |
|
101 | + 'default' => false, |
|
102 | + ), |
|
103 | + 'avatarClass' => array( |
|
104 | + 'type' => 'string', |
|
105 | + 'default' => 'contact', |
|
106 | + ), |
|
107 | + 'avatarSize' => array( |
|
108 | + 'type' => 'number', |
|
109 | + 'default' => 24, |
|
110 | + ), |
|
111 | + 'displayOnArchives' => array( |
|
112 | + 'type' => 'boolean', |
|
113 | + 'default' => false, |
|
114 | + ), |
|
115 | + ) |
|
116 | + ); |
|
117 | + $this->setDynamic(); |
|
118 | + } |
|
119 | 119 | |
120 | 120 | |
121 | - /** |
|
122 | - * Returns an array where the key corresponds to the incoming attribute name from the WP block |
|
123 | - * and the value corresponds to the attribute name for the existing EspressoEventAttendees shortcode |
|
124 | - * |
|
125 | - * @since 4.9.71.p |
|
126 | - * @return array |
|
127 | - */ |
|
128 | - private function getAttributesMap() |
|
129 | - { |
|
130 | - return array( |
|
131 | - 'eventId' => 'absint', |
|
132 | - 'datetimeId' => 'absint', |
|
133 | - 'ticketId' => 'absint', |
|
134 | - 'status' => 'sanitize_text_field', |
|
135 | - 'limit' => 'intval', |
|
136 | - 'showGravatar' => 'bool', |
|
137 | - 'avatarClass' => 'sanitize_text_field', |
|
138 | - 'avatarSize' => 'absint', |
|
139 | - 'displayOnArchives' => 'bool', |
|
140 | - 'order' => 'sanitize_text_field', |
|
141 | - 'orderBy' => 'sanitize_text_field', |
|
142 | - ); |
|
143 | - } |
|
121 | + /** |
|
122 | + * Returns an array where the key corresponds to the incoming attribute name from the WP block |
|
123 | + * and the value corresponds to the attribute name for the existing EspressoEventAttendees shortcode |
|
124 | + * |
|
125 | + * @since 4.9.71.p |
|
126 | + * @return array |
|
127 | + */ |
|
128 | + private function getAttributesMap() |
|
129 | + { |
|
130 | + return array( |
|
131 | + 'eventId' => 'absint', |
|
132 | + 'datetimeId' => 'absint', |
|
133 | + 'ticketId' => 'absint', |
|
134 | + 'status' => 'sanitize_text_field', |
|
135 | + 'limit' => 'intval', |
|
136 | + 'showGravatar' => 'bool', |
|
137 | + 'avatarClass' => 'sanitize_text_field', |
|
138 | + 'avatarSize' => 'absint', |
|
139 | + 'displayOnArchives' => 'bool', |
|
140 | + 'order' => 'sanitize_text_field', |
|
141 | + 'orderBy' => 'sanitize_text_field', |
|
142 | + ); |
|
143 | + } |
|
144 | 144 | |
145 | 145 | |
146 | - /** |
|
147 | - * Sanitizes attributes. |
|
148 | - * |
|
149 | - * @param array $attributes |
|
150 | - * @return array |
|
151 | - */ |
|
152 | - private function sanitizeAttributes(array $attributes) |
|
153 | - { |
|
154 | - $sanitized_attributes = array(); |
|
155 | - foreach ($attributes as $attribute => $value) { |
|
156 | - $convert = $this->getAttributesMap(); |
|
157 | - if (isset($convert[ $attribute ])) { |
|
158 | - $sanitize = $convert[ $attribute ]; |
|
159 | - if ($sanitize === 'bool') { |
|
160 | - $sanitized_attributes[ $attribute ] = filter_var( |
|
161 | - $value, |
|
162 | - FILTER_VALIDATE_BOOLEAN |
|
163 | - ); |
|
164 | - } else { |
|
165 | - $sanitized_attributes[ $attribute ] = $sanitize($value); |
|
166 | - } |
|
167 | - // don't pass along attributes with a 0 value |
|
168 | - if ($sanitized_attributes[ $attribute ] === 0) { |
|
169 | - unset($sanitized_attributes[ $attribute ]); |
|
170 | - } |
|
171 | - } |
|
172 | - } |
|
173 | - return $attributes; |
|
174 | - } |
|
146 | + /** |
|
147 | + * Sanitizes attributes. |
|
148 | + * |
|
149 | + * @param array $attributes |
|
150 | + * @return array |
|
151 | + */ |
|
152 | + private function sanitizeAttributes(array $attributes) |
|
153 | + { |
|
154 | + $sanitized_attributes = array(); |
|
155 | + foreach ($attributes as $attribute => $value) { |
|
156 | + $convert = $this->getAttributesMap(); |
|
157 | + if (isset($convert[ $attribute ])) { |
|
158 | + $sanitize = $convert[ $attribute ]; |
|
159 | + if ($sanitize === 'bool') { |
|
160 | + $sanitized_attributes[ $attribute ] = filter_var( |
|
161 | + $value, |
|
162 | + FILTER_VALIDATE_BOOLEAN |
|
163 | + ); |
|
164 | + } else { |
|
165 | + $sanitized_attributes[ $attribute ] = $sanitize($value); |
|
166 | + } |
|
167 | + // don't pass along attributes with a 0 value |
|
168 | + if ($sanitized_attributes[ $attribute ] === 0) { |
|
169 | + unset($sanitized_attributes[ $attribute ]); |
|
170 | + } |
|
171 | + } |
|
172 | + } |
|
173 | + return $attributes; |
|
174 | + } |
|
175 | 175 | |
176 | 176 | |
177 | - /** |
|
178 | - * Returns the rendered HTML for the block |
|
179 | - * |
|
180 | - * @param array $attributes |
|
181 | - * @return string |
|
182 | - * @throws DomainException |
|
183 | - * @throws EE_Error |
|
184 | - */ |
|
185 | - public function renderBlock(array $attributes = array()) |
|
186 | - { |
|
187 | - $attributes = $this->sanitizeAttributes($attributes); |
|
188 | - return (is_archive() || is_front_page() || is_home()) && ! $attributes['displayOnArchives'] |
|
189 | - ? '' |
|
190 | - : $this->renderer->render($attributes); |
|
191 | - } |
|
177 | + /** |
|
178 | + * Returns the rendered HTML for the block |
|
179 | + * |
|
180 | + * @param array $attributes |
|
181 | + * @return string |
|
182 | + * @throws DomainException |
|
183 | + * @throws EE_Error |
|
184 | + */ |
|
185 | + public function renderBlock(array $attributes = array()) |
|
186 | + { |
|
187 | + $attributes = $this->sanitizeAttributes($attributes); |
|
188 | + return (is_archive() || is_front_page() || is_home()) && ! $attributes['displayOnArchives'] |
|
189 | + ? '' |
|
190 | + : $this->renderer->render($attributes); |
|
191 | + } |
|
192 | 192 | } |