@@ -344,7 +344,7 @@ discard block |
||
344 | 344 | print( |
345 | 345 | apply_filters( |
346 | 346 | 'FHEE__EE_Front_Controller__header_meta_tag', |
347 | - '<meta name="generator" content="Event Espresso Version ' . EVENT_ESPRESSO_VERSION . "\" />\n" |
|
347 | + '<meta name="generator" content="Event Espresso Version '.EVENT_ESPRESSO_VERSION."\" />\n" |
|
348 | 348 | ) |
349 | 349 | ); |
350 | 350 | |
@@ -360,7 +360,7 @@ discard block |
||
360 | 360 | print( |
361 | 361 | apply_filters( |
362 | 362 | 'FHEE__EE_Front_Controller__header_meta_tag__noindex_for_event_type', |
363 | - '<meta name="robots" content="noindex,follow" />' . "\n" |
|
363 | + '<meta name="robots" content="noindex,follow" />'."\n" |
|
364 | 364 | ) |
365 | 365 | ); |
366 | 366 | } |
@@ -413,7 +413,7 @@ discard block |
||
413 | 413 | { |
414 | 414 | static $shown_already = false; |
415 | 415 | do_action('AHEE__EE_Front_Controller__display_errors__begin'); |
416 | - if (! $shown_already |
|
416 | + if ( ! $shown_already |
|
417 | 417 | && apply_filters('FHEE__EE_Front_Controller__display_errors', true) |
418 | 418 | && is_main_query() |
419 | 419 | && ! is_feed() |
@@ -422,7 +422,7 @@ discard block |
||
422 | 422 | ) { |
423 | 423 | echo EE_Error::get_notices(); |
424 | 424 | $shown_already = true; |
425 | - EEH_Template::display_template(EE_TEMPLATES . 'espresso-ajax-notices.template.php'); |
|
425 | + EEH_Template::display_template(EE_TEMPLATES.'espresso-ajax-notices.template.php'); |
|
426 | 426 | } |
427 | 427 | do_action('AHEE__EE_Front_Controller__display_errors__end'); |
428 | 428 | } |
@@ -26,467 +26,467 @@ |
||
26 | 26 | final class EE_Front_Controller |
27 | 27 | { |
28 | 28 | |
29 | - /** |
|
30 | - * @var string $_template_path |
|
31 | - */ |
|
32 | - private $_template_path; |
|
33 | - |
|
34 | - /** |
|
35 | - * @var string $_template |
|
36 | - */ |
|
37 | - private $_template; |
|
38 | - |
|
39 | - /** |
|
40 | - * @type EE_Registry $Registry |
|
41 | - */ |
|
42 | - protected $Registry; |
|
43 | - |
|
44 | - /** |
|
45 | - * @type EE_Request_Handler $Request_Handler |
|
46 | - */ |
|
47 | - protected $Request_Handler; |
|
48 | - |
|
49 | - /** |
|
50 | - * @type EE_Module_Request_Router $Module_Request_Router |
|
51 | - */ |
|
52 | - protected $Module_Request_Router; |
|
53 | - |
|
54 | - |
|
55 | - /** |
|
56 | - * class constructor |
|
57 | - * should fire after shortcode, module, addon, or other plugin's default priority init phases have run |
|
58 | - * |
|
59 | - * @access public |
|
60 | - * @param \EE_Registry $Registry |
|
61 | - * @param \EE_Request_Handler $Request_Handler |
|
62 | - * @param \EE_Module_Request_Router $Module_Request_Router |
|
63 | - */ |
|
64 | - public function __construct( |
|
65 | - EE_Registry $Registry, |
|
66 | - EE_Request_Handler $Request_Handler, |
|
67 | - EE_Module_Request_Router $Module_Request_Router |
|
68 | - ) { |
|
69 | - $this->Registry = $Registry; |
|
70 | - $this->Request_Handler = $Request_Handler; |
|
71 | - $this->Module_Request_Router = $Module_Request_Router; |
|
72 | - // load other resources and begin to actually run shortcodes and modules |
|
73 | - add_action('wp_loaded', array($this, 'wp_loaded'), 5); |
|
74 | - // analyse the incoming WP request |
|
75 | - add_action('parse_request', array($this, 'get_request'), 1, 1); |
|
76 | - // process request with module factory |
|
77 | - add_action('pre_get_posts', array($this, 'pre_get_posts'), 10, 1); |
|
78 | - // before headers sent |
|
79 | - add_action('wp', array($this, 'wp'), 5); |
|
80 | - // primarily used to process any content shortcodes |
|
81 | - add_action('template_redirect', array($this, 'templateRedirect'), 999); |
|
82 | - // header |
|
83 | - add_action('wp_head', array($this, 'header_meta_tag'), 5); |
|
84 | - add_action('wp_print_scripts', array($this, 'wp_print_scripts'), 10); |
|
85 | - add_filter('template_include', array($this, 'template_include'), 1); |
|
86 | - // display errors |
|
87 | - add_action('loop_start', array($this, 'display_errors'), 2); |
|
88 | - // the content |
|
89 | - // add_filter( 'the_content', array( $this, 'the_content' ), 5, 1 ); |
|
90 | - // exclude our private cpt comments |
|
91 | - add_filter('comments_clauses', array($this, 'filter_wp_comments'), 10, 1); |
|
92 | - // make sure any ajax requests will respect the url schema when requests are made against admin-ajax.php (http:// or https://) |
|
93 | - add_filter('admin_url', array($this, 'maybe_force_admin_ajax_ssl'), 200, 1); |
|
94 | - // action hook EE |
|
95 | - do_action('AHEE__EE_Front_Controller__construct__done', $this); |
|
96 | - } |
|
97 | - |
|
98 | - |
|
99 | - /** |
|
100 | - * @return EE_Request_Handler |
|
101 | - */ |
|
102 | - public function Request_Handler() |
|
103 | - { |
|
104 | - return $this->Request_Handler; |
|
105 | - } |
|
106 | - |
|
107 | - |
|
108 | - /** |
|
109 | - * @return EE_Module_Request_Router |
|
110 | - */ |
|
111 | - public function Module_Request_Router() |
|
112 | - { |
|
113 | - return $this->Module_Request_Router; |
|
114 | - } |
|
115 | - |
|
116 | - |
|
117 | - /** |
|
118 | - * @return LegacyShortcodesManager |
|
119 | - */ |
|
120 | - public function getLegacyShortcodesManager() |
|
121 | - { |
|
122 | - return EE_Config::getLegacyShortcodesManager(); |
|
123 | - } |
|
124 | - |
|
125 | - |
|
126 | - |
|
127 | - |
|
128 | - |
|
129 | - /*********************************************** INIT ACTION HOOK ***********************************************/ |
|
130 | - /** |
|
131 | - * filter_wp_comments |
|
132 | - * This simply makes sure that any "private" EE CPTs do not have their comments show up in any wp comment |
|
133 | - * widgets/queries done on frontend |
|
134 | - * |
|
135 | - * @param array $clauses array of comment clauses setup by WP_Comment_Query |
|
136 | - * @return array array of comment clauses with modifications. |
|
137 | - * @throws InvalidArgumentException |
|
138 | - * @throws InvalidDataTypeException |
|
139 | - * @throws InvalidInterfaceException |
|
140 | - */ |
|
141 | - public function filter_wp_comments($clauses) |
|
142 | - { |
|
143 | - global $wpdb; |
|
144 | - if (strpos($clauses['join'], $wpdb->posts) !== false) { |
|
145 | - /** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_types */ |
|
146 | - $custom_post_types = LoaderFactory::getLoader()->getShared( |
|
147 | - 'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' |
|
148 | - ); |
|
149 | - $cpts = $custom_post_types->getPrivateCustomPostTypes(); |
|
150 | - foreach ($cpts as $cpt => $details) { |
|
151 | - $clauses['where'] .= $wpdb->prepare(" AND $wpdb->posts.post_type != %s", $cpt); |
|
152 | - } |
|
153 | - } |
|
154 | - return $clauses; |
|
155 | - } |
|
156 | - |
|
157 | - |
|
158 | - /** |
|
159 | - * this just makes sure that if the site is using ssl that we force that for any admin ajax calls from frontend |
|
160 | - * |
|
161 | - * @param string $url incoming url |
|
162 | - * @return string final assembled url |
|
163 | - */ |
|
164 | - public function maybe_force_admin_ajax_ssl($url) |
|
165 | - { |
|
166 | - if (is_ssl() && preg_match('/admin-ajax.php/', $url)) { |
|
167 | - $url = str_replace('http://', 'https://', $url); |
|
168 | - } |
|
169 | - return $url; |
|
170 | - } |
|
171 | - |
|
172 | - |
|
173 | - |
|
174 | - |
|
175 | - |
|
176 | - |
|
177 | - /*********************************************** WP_LOADED ACTION HOOK ***********************************************/ |
|
178 | - |
|
179 | - |
|
180 | - /** |
|
181 | - * wp_loaded - should fire after shortcode, module, addon, or other plugin's have been registered and their |
|
182 | - * default priority init phases have run |
|
183 | - * |
|
184 | - * @access public |
|
185 | - * @return void |
|
186 | - */ |
|
187 | - public function wp_loaded() |
|
188 | - { |
|
189 | - } |
|
190 | - |
|
191 | - |
|
192 | - |
|
193 | - |
|
194 | - |
|
195 | - /*********************************************** PARSE_REQUEST HOOK ***********************************************/ |
|
196 | - /** |
|
197 | - * _get_request |
|
198 | - * |
|
199 | - * @access public |
|
200 | - * @param WP $WP |
|
201 | - * @return void |
|
202 | - */ |
|
203 | - public function get_request(WP $WP) |
|
204 | - { |
|
205 | - do_action('AHEE__EE_Front_Controller__get_request__start'); |
|
206 | - $this->Request_Handler->parse_request($WP); |
|
207 | - do_action('AHEE__EE_Front_Controller__get_request__complete'); |
|
208 | - } |
|
209 | - |
|
210 | - |
|
211 | - /** |
|
212 | - * pre_get_posts - basically a module factory for instantiating modules and selecting the final view template |
|
213 | - * |
|
214 | - * @access public |
|
215 | - * @param WP_Query $WP_Query |
|
216 | - * @return void |
|
217 | - */ |
|
218 | - public function pre_get_posts($WP_Query) |
|
219 | - { |
|
220 | - // only load Module_Request_Router if this is the main query |
|
221 | - if ($this->Module_Request_Router instanceof EE_Module_Request_Router |
|
222 | - && $WP_Query->is_main_query() |
|
223 | - ) { |
|
224 | - // cycle thru module routes |
|
225 | - while ($route = $this->Module_Request_Router->get_route($WP_Query)) { |
|
226 | - // determine module and method for route |
|
227 | - $module = $this->Module_Request_Router->resolve_route($route[0], $route[1]); |
|
228 | - if ($module instanceof EED_Module) { |
|
229 | - // get registered view for route |
|
230 | - $this->_template_path = $this->Module_Request_Router->get_view($route); |
|
231 | - // grab module name |
|
232 | - $module_name = $module->module_name(); |
|
233 | - // map the module to the module objects |
|
234 | - $this->Registry->modules->{$module_name} = $module; |
|
235 | - } |
|
236 | - } |
|
237 | - } |
|
238 | - } |
|
239 | - |
|
240 | - |
|
241 | - |
|
242 | - |
|
243 | - |
|
244 | - /*********************************************** WP HOOK ***********************************************/ |
|
245 | - |
|
246 | - |
|
247 | - /** |
|
248 | - * wp - basically last chance to do stuff before headers sent |
|
249 | - * |
|
250 | - * @access public |
|
251 | - * @return void |
|
252 | - */ |
|
253 | - public function wp() |
|
254 | - { |
|
255 | - } |
|
256 | - |
|
257 | - |
|
258 | - |
|
259 | - /*********************** GET_HEADER && WP_HEAD HOOK ***********************/ |
|
260 | - |
|
261 | - |
|
262 | - /** |
|
263 | - * callback for the "template_redirect" hook point |
|
264 | - * checks sidebars for EE widgets |
|
265 | - * loads resources and assets accordingly |
|
266 | - * |
|
267 | - * @return void |
|
268 | - */ |
|
269 | - public function templateRedirect() |
|
270 | - { |
|
271 | - global $wp_query; |
|
272 | - if (empty($wp_query->posts)) { |
|
273 | - return; |
|
274 | - } |
|
275 | - // if we already know this is an espresso page, then load assets |
|
276 | - $load_assets = $this->Request_Handler->is_espresso_page(); |
|
277 | - // if we are already loading assets then just move along, otherwise check for widgets |
|
278 | - $load_assets = $load_assets ? $load_assets : $this->espresso_widgets_in_active_sidebars(); |
|
279 | - if ($load_assets) { |
|
280 | - add_action('wp_enqueue_scripts', array($this, 'enqueueStyle'), 10); |
|
281 | - add_action('wp_print_footer_scripts', array($this, 'enqueueScripts'), 10); |
|
282 | - } |
|
283 | - } |
|
284 | - |
|
285 | - |
|
286 | - /** |
|
287 | - * builds list of active widgets then scans active sidebars looking for them |
|
288 | - * returns true is an EE widget is found in an active sidebar |
|
289 | - * Please Note: this does NOT mean that the sidebar or widget |
|
290 | - * is actually in use in a given template, as that is unfortunately not known |
|
291 | - * until a sidebar and it's widgets are actually loaded |
|
292 | - * |
|
293 | - * @return boolean |
|
294 | - */ |
|
295 | - private function espresso_widgets_in_active_sidebars() |
|
296 | - { |
|
297 | - $espresso_widgets = array(); |
|
298 | - foreach ($this->Registry->widgets as $widget_class => $widget) { |
|
299 | - $id_base = EspressoWidget::getIdBase($widget_class); |
|
300 | - if (is_active_widget(false, false, $id_base)) { |
|
301 | - $espresso_widgets[] = $id_base; |
|
302 | - } |
|
303 | - } |
|
304 | - $all_sidebar_widgets = wp_get_sidebars_widgets(); |
|
305 | - foreach ($all_sidebar_widgets as $sidebar_name => $sidebar_widgets) { |
|
306 | - if (is_array($sidebar_widgets) && ! empty($sidebar_widgets)) { |
|
307 | - foreach ($sidebar_widgets as $sidebar_widget) { |
|
308 | - foreach ($espresso_widgets as $espresso_widget) { |
|
309 | - if (strpos($sidebar_widget, $espresso_widget) !== false) { |
|
310 | - return true; |
|
311 | - } |
|
312 | - } |
|
313 | - } |
|
314 | - } |
|
315 | - } |
|
316 | - return false; |
|
317 | - } |
|
318 | - |
|
319 | - |
|
320 | - /** |
|
321 | - * header_meta_tag |
|
322 | - * |
|
323 | - * @access public |
|
324 | - * @return void |
|
325 | - */ |
|
326 | - public function header_meta_tag() |
|
327 | - { |
|
328 | - print( |
|
329 | - apply_filters( |
|
330 | - 'FHEE__EE_Front_Controller__header_meta_tag', |
|
331 | - '<meta name="generator" content="Event Espresso Version ' . EVENT_ESPRESSO_VERSION . "\" />\n" |
|
332 | - ) |
|
333 | - ); |
|
334 | - |
|
335 | - // let's exclude all event type taxonomy term archive pages from search engine indexing |
|
336 | - // @see https://events.codebasehq.com/projects/event-espresso/tickets/10249 |
|
337 | - // also exclude all critical pages from indexing |
|
338 | - if (( |
|
339 | - is_tax('espresso_event_type') |
|
340 | - && get_option('blog_public') !== '0' |
|
341 | - ) |
|
342 | - || is_page(EE_Registry::instance()->CFG->core->get_critical_pages_array()) |
|
343 | - ) { |
|
344 | - print( |
|
345 | - apply_filters( |
|
346 | - 'FHEE__EE_Front_Controller__header_meta_tag__noindex_for_event_type', |
|
347 | - '<meta name="robots" content="noindex,follow" />' . "\n" |
|
348 | - ) |
|
349 | - ); |
|
350 | - } |
|
351 | - } |
|
352 | - |
|
353 | - |
|
354 | - /** |
|
355 | - * wp_print_scripts |
|
356 | - * |
|
357 | - * @return void |
|
358 | - */ |
|
359 | - public function wp_print_scripts() |
|
360 | - { |
|
361 | - global $post; |
|
362 | - if (isset($post->EE_Event) |
|
363 | - && $post->EE_Event instanceof EE_Event |
|
364 | - && get_post_type() === 'espresso_events' |
|
365 | - && is_singular() |
|
366 | - ) { |
|
367 | - \EEH_Schema::add_json_linked_data_for_event($post->EE_Event); |
|
368 | - } |
|
369 | - } |
|
370 | - |
|
371 | - |
|
372 | - public function enqueueStyle() |
|
373 | - { |
|
374 | - wp_enqueue_style('espresso_default'); |
|
375 | - wp_enqueue_style('espresso_custom_css'); |
|
376 | - } |
|
377 | - |
|
378 | - |
|
379 | - |
|
380 | - /*********************************************** WP_FOOTER ***********************************************/ |
|
381 | - |
|
382 | - |
|
383 | - public function enqueueScripts() |
|
384 | - { |
|
385 | - wp_enqueue_script('espresso_core'); |
|
386 | - } |
|
387 | - |
|
388 | - |
|
389 | - /** |
|
390 | - * display_errors |
|
391 | - * |
|
392 | - * @access public |
|
393 | - * @return void |
|
394 | - * @throws DomainException |
|
395 | - */ |
|
396 | - public function display_errors() |
|
397 | - { |
|
398 | - static $shown_already = false; |
|
399 | - do_action('AHEE__EE_Front_Controller__display_errors__begin'); |
|
400 | - if (! $shown_already |
|
401 | - && apply_filters('FHEE__EE_Front_Controller__display_errors', true) |
|
402 | - && is_main_query() |
|
403 | - && ! is_feed() |
|
404 | - && in_the_loop() |
|
405 | - && did_action('wp_head') |
|
406 | - && $this->Request_Handler->is_espresso_page() |
|
407 | - ) { |
|
408 | - echo EE_Error::get_notices(); |
|
409 | - $shown_already = true; |
|
410 | - EEH_Template::display_template(EE_TEMPLATES . 'espresso-ajax-notices.template.php'); |
|
411 | - } |
|
412 | - do_action('AHEE__EE_Front_Controller__display_errors__end'); |
|
413 | - } |
|
414 | - |
|
415 | - |
|
416 | - |
|
417 | - |
|
418 | - |
|
419 | - /*********************************************** UTILITIES ***********************************************/ |
|
420 | - /** |
|
421 | - * template_include |
|
422 | - * |
|
423 | - * @access public |
|
424 | - * @param string $template_include_path |
|
425 | - * @return string |
|
426 | - */ |
|
427 | - public function template_include($template_include_path = null) |
|
428 | - { |
|
429 | - if ($this->Request_Handler->is_espresso_page()) { |
|
430 | - $this->_template_path = ! empty($this->_template_path) |
|
431 | - ? basename($this->_template_path) |
|
432 | - : basename( |
|
433 | - $template_include_path |
|
434 | - ); |
|
435 | - $template_path = EEH_Template::locate_template($this->_template_path, array(), false); |
|
436 | - $this->_template_path = ! empty($template_path) ? $template_path : $template_include_path; |
|
437 | - $this->_template = basename($this->_template_path); |
|
438 | - return $this->_template_path; |
|
439 | - } |
|
440 | - return $template_include_path; |
|
441 | - } |
|
442 | - |
|
443 | - |
|
444 | - /** |
|
445 | - * get_selected_template |
|
446 | - * |
|
447 | - * @access public |
|
448 | - * @param bool $with_path |
|
449 | - * @return string |
|
450 | - */ |
|
451 | - public function get_selected_template($with_path = false) |
|
452 | - { |
|
453 | - return $with_path ? $this->_template_path : $this->_template; |
|
454 | - } |
|
455 | - |
|
456 | - |
|
457 | - /** |
|
458 | - * @deprecated 4.9.26 |
|
459 | - * @param string $shortcode_class |
|
460 | - * @param \WP $wp |
|
461 | - */ |
|
462 | - public function initialize_shortcode($shortcode_class = '', WP $wp = null) |
|
463 | - { |
|
464 | - \EE_Error::doing_it_wrong( |
|
465 | - __METHOD__, |
|
466 | - __( |
|
467 | - 'Usage is deprecated. Please use \EventEspresso\core\services\shortcodes\LegacyShortcodesManager::initializeShortcode() instead.', |
|
468 | - 'event_espresso' |
|
469 | - ), |
|
470 | - '4.9.26' |
|
471 | - ); |
|
472 | - $this->getLegacyShortcodesManager()->initializeShortcode($shortcode_class, $wp); |
|
473 | - } |
|
474 | - |
|
475 | - |
|
476 | - /** |
|
477 | - * @return void |
|
478 | - * @deprecated 4.9.57.p |
|
479 | - */ |
|
480 | - public function loadPersistentAdminNoticeManager() |
|
481 | - { |
|
482 | - } |
|
483 | - |
|
484 | - |
|
485 | - /** |
|
486 | - * @return void |
|
487 | - * @deprecated 4.9.64.p |
|
488 | - */ |
|
489 | - public function employ_CPT_Strategy() |
|
490 | - { |
|
491 | - } |
|
29 | + /** |
|
30 | + * @var string $_template_path |
|
31 | + */ |
|
32 | + private $_template_path; |
|
33 | + |
|
34 | + /** |
|
35 | + * @var string $_template |
|
36 | + */ |
|
37 | + private $_template; |
|
38 | + |
|
39 | + /** |
|
40 | + * @type EE_Registry $Registry |
|
41 | + */ |
|
42 | + protected $Registry; |
|
43 | + |
|
44 | + /** |
|
45 | + * @type EE_Request_Handler $Request_Handler |
|
46 | + */ |
|
47 | + protected $Request_Handler; |
|
48 | + |
|
49 | + /** |
|
50 | + * @type EE_Module_Request_Router $Module_Request_Router |
|
51 | + */ |
|
52 | + protected $Module_Request_Router; |
|
53 | + |
|
54 | + |
|
55 | + /** |
|
56 | + * class constructor |
|
57 | + * should fire after shortcode, module, addon, or other plugin's default priority init phases have run |
|
58 | + * |
|
59 | + * @access public |
|
60 | + * @param \EE_Registry $Registry |
|
61 | + * @param \EE_Request_Handler $Request_Handler |
|
62 | + * @param \EE_Module_Request_Router $Module_Request_Router |
|
63 | + */ |
|
64 | + public function __construct( |
|
65 | + EE_Registry $Registry, |
|
66 | + EE_Request_Handler $Request_Handler, |
|
67 | + EE_Module_Request_Router $Module_Request_Router |
|
68 | + ) { |
|
69 | + $this->Registry = $Registry; |
|
70 | + $this->Request_Handler = $Request_Handler; |
|
71 | + $this->Module_Request_Router = $Module_Request_Router; |
|
72 | + // load other resources and begin to actually run shortcodes and modules |
|
73 | + add_action('wp_loaded', array($this, 'wp_loaded'), 5); |
|
74 | + // analyse the incoming WP request |
|
75 | + add_action('parse_request', array($this, 'get_request'), 1, 1); |
|
76 | + // process request with module factory |
|
77 | + add_action('pre_get_posts', array($this, 'pre_get_posts'), 10, 1); |
|
78 | + // before headers sent |
|
79 | + add_action('wp', array($this, 'wp'), 5); |
|
80 | + // primarily used to process any content shortcodes |
|
81 | + add_action('template_redirect', array($this, 'templateRedirect'), 999); |
|
82 | + // header |
|
83 | + add_action('wp_head', array($this, 'header_meta_tag'), 5); |
|
84 | + add_action('wp_print_scripts', array($this, 'wp_print_scripts'), 10); |
|
85 | + add_filter('template_include', array($this, 'template_include'), 1); |
|
86 | + // display errors |
|
87 | + add_action('loop_start', array($this, 'display_errors'), 2); |
|
88 | + // the content |
|
89 | + // add_filter( 'the_content', array( $this, 'the_content' ), 5, 1 ); |
|
90 | + // exclude our private cpt comments |
|
91 | + add_filter('comments_clauses', array($this, 'filter_wp_comments'), 10, 1); |
|
92 | + // make sure any ajax requests will respect the url schema when requests are made against admin-ajax.php (http:// or https://) |
|
93 | + add_filter('admin_url', array($this, 'maybe_force_admin_ajax_ssl'), 200, 1); |
|
94 | + // action hook EE |
|
95 | + do_action('AHEE__EE_Front_Controller__construct__done', $this); |
|
96 | + } |
|
97 | + |
|
98 | + |
|
99 | + /** |
|
100 | + * @return EE_Request_Handler |
|
101 | + */ |
|
102 | + public function Request_Handler() |
|
103 | + { |
|
104 | + return $this->Request_Handler; |
|
105 | + } |
|
106 | + |
|
107 | + |
|
108 | + /** |
|
109 | + * @return EE_Module_Request_Router |
|
110 | + */ |
|
111 | + public function Module_Request_Router() |
|
112 | + { |
|
113 | + return $this->Module_Request_Router; |
|
114 | + } |
|
115 | + |
|
116 | + |
|
117 | + /** |
|
118 | + * @return LegacyShortcodesManager |
|
119 | + */ |
|
120 | + public function getLegacyShortcodesManager() |
|
121 | + { |
|
122 | + return EE_Config::getLegacyShortcodesManager(); |
|
123 | + } |
|
124 | + |
|
125 | + |
|
126 | + |
|
127 | + |
|
128 | + |
|
129 | + /*********************************************** INIT ACTION HOOK ***********************************************/ |
|
130 | + /** |
|
131 | + * filter_wp_comments |
|
132 | + * This simply makes sure that any "private" EE CPTs do not have their comments show up in any wp comment |
|
133 | + * widgets/queries done on frontend |
|
134 | + * |
|
135 | + * @param array $clauses array of comment clauses setup by WP_Comment_Query |
|
136 | + * @return array array of comment clauses with modifications. |
|
137 | + * @throws InvalidArgumentException |
|
138 | + * @throws InvalidDataTypeException |
|
139 | + * @throws InvalidInterfaceException |
|
140 | + */ |
|
141 | + public function filter_wp_comments($clauses) |
|
142 | + { |
|
143 | + global $wpdb; |
|
144 | + if (strpos($clauses['join'], $wpdb->posts) !== false) { |
|
145 | + /** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_types */ |
|
146 | + $custom_post_types = LoaderFactory::getLoader()->getShared( |
|
147 | + 'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' |
|
148 | + ); |
|
149 | + $cpts = $custom_post_types->getPrivateCustomPostTypes(); |
|
150 | + foreach ($cpts as $cpt => $details) { |
|
151 | + $clauses['where'] .= $wpdb->prepare(" AND $wpdb->posts.post_type != %s", $cpt); |
|
152 | + } |
|
153 | + } |
|
154 | + return $clauses; |
|
155 | + } |
|
156 | + |
|
157 | + |
|
158 | + /** |
|
159 | + * this just makes sure that if the site is using ssl that we force that for any admin ajax calls from frontend |
|
160 | + * |
|
161 | + * @param string $url incoming url |
|
162 | + * @return string final assembled url |
|
163 | + */ |
|
164 | + public function maybe_force_admin_ajax_ssl($url) |
|
165 | + { |
|
166 | + if (is_ssl() && preg_match('/admin-ajax.php/', $url)) { |
|
167 | + $url = str_replace('http://', 'https://', $url); |
|
168 | + } |
|
169 | + return $url; |
|
170 | + } |
|
171 | + |
|
172 | + |
|
173 | + |
|
174 | + |
|
175 | + |
|
176 | + |
|
177 | + /*********************************************** WP_LOADED ACTION HOOK ***********************************************/ |
|
178 | + |
|
179 | + |
|
180 | + /** |
|
181 | + * wp_loaded - should fire after shortcode, module, addon, or other plugin's have been registered and their |
|
182 | + * default priority init phases have run |
|
183 | + * |
|
184 | + * @access public |
|
185 | + * @return void |
|
186 | + */ |
|
187 | + public function wp_loaded() |
|
188 | + { |
|
189 | + } |
|
190 | + |
|
191 | + |
|
192 | + |
|
193 | + |
|
194 | + |
|
195 | + /*********************************************** PARSE_REQUEST HOOK ***********************************************/ |
|
196 | + /** |
|
197 | + * _get_request |
|
198 | + * |
|
199 | + * @access public |
|
200 | + * @param WP $WP |
|
201 | + * @return void |
|
202 | + */ |
|
203 | + public function get_request(WP $WP) |
|
204 | + { |
|
205 | + do_action('AHEE__EE_Front_Controller__get_request__start'); |
|
206 | + $this->Request_Handler->parse_request($WP); |
|
207 | + do_action('AHEE__EE_Front_Controller__get_request__complete'); |
|
208 | + } |
|
209 | + |
|
210 | + |
|
211 | + /** |
|
212 | + * pre_get_posts - basically a module factory for instantiating modules and selecting the final view template |
|
213 | + * |
|
214 | + * @access public |
|
215 | + * @param WP_Query $WP_Query |
|
216 | + * @return void |
|
217 | + */ |
|
218 | + public function pre_get_posts($WP_Query) |
|
219 | + { |
|
220 | + // only load Module_Request_Router if this is the main query |
|
221 | + if ($this->Module_Request_Router instanceof EE_Module_Request_Router |
|
222 | + && $WP_Query->is_main_query() |
|
223 | + ) { |
|
224 | + // cycle thru module routes |
|
225 | + while ($route = $this->Module_Request_Router->get_route($WP_Query)) { |
|
226 | + // determine module and method for route |
|
227 | + $module = $this->Module_Request_Router->resolve_route($route[0], $route[1]); |
|
228 | + if ($module instanceof EED_Module) { |
|
229 | + // get registered view for route |
|
230 | + $this->_template_path = $this->Module_Request_Router->get_view($route); |
|
231 | + // grab module name |
|
232 | + $module_name = $module->module_name(); |
|
233 | + // map the module to the module objects |
|
234 | + $this->Registry->modules->{$module_name} = $module; |
|
235 | + } |
|
236 | + } |
|
237 | + } |
|
238 | + } |
|
239 | + |
|
240 | + |
|
241 | + |
|
242 | + |
|
243 | + |
|
244 | + /*********************************************** WP HOOK ***********************************************/ |
|
245 | + |
|
246 | + |
|
247 | + /** |
|
248 | + * wp - basically last chance to do stuff before headers sent |
|
249 | + * |
|
250 | + * @access public |
|
251 | + * @return void |
|
252 | + */ |
|
253 | + public function wp() |
|
254 | + { |
|
255 | + } |
|
256 | + |
|
257 | + |
|
258 | + |
|
259 | + /*********************** GET_HEADER && WP_HEAD HOOK ***********************/ |
|
260 | + |
|
261 | + |
|
262 | + /** |
|
263 | + * callback for the "template_redirect" hook point |
|
264 | + * checks sidebars for EE widgets |
|
265 | + * loads resources and assets accordingly |
|
266 | + * |
|
267 | + * @return void |
|
268 | + */ |
|
269 | + public function templateRedirect() |
|
270 | + { |
|
271 | + global $wp_query; |
|
272 | + if (empty($wp_query->posts)) { |
|
273 | + return; |
|
274 | + } |
|
275 | + // if we already know this is an espresso page, then load assets |
|
276 | + $load_assets = $this->Request_Handler->is_espresso_page(); |
|
277 | + // if we are already loading assets then just move along, otherwise check for widgets |
|
278 | + $load_assets = $load_assets ? $load_assets : $this->espresso_widgets_in_active_sidebars(); |
|
279 | + if ($load_assets) { |
|
280 | + add_action('wp_enqueue_scripts', array($this, 'enqueueStyle'), 10); |
|
281 | + add_action('wp_print_footer_scripts', array($this, 'enqueueScripts'), 10); |
|
282 | + } |
|
283 | + } |
|
284 | + |
|
285 | + |
|
286 | + /** |
|
287 | + * builds list of active widgets then scans active sidebars looking for them |
|
288 | + * returns true is an EE widget is found in an active sidebar |
|
289 | + * Please Note: this does NOT mean that the sidebar or widget |
|
290 | + * is actually in use in a given template, as that is unfortunately not known |
|
291 | + * until a sidebar and it's widgets are actually loaded |
|
292 | + * |
|
293 | + * @return boolean |
|
294 | + */ |
|
295 | + private function espresso_widgets_in_active_sidebars() |
|
296 | + { |
|
297 | + $espresso_widgets = array(); |
|
298 | + foreach ($this->Registry->widgets as $widget_class => $widget) { |
|
299 | + $id_base = EspressoWidget::getIdBase($widget_class); |
|
300 | + if (is_active_widget(false, false, $id_base)) { |
|
301 | + $espresso_widgets[] = $id_base; |
|
302 | + } |
|
303 | + } |
|
304 | + $all_sidebar_widgets = wp_get_sidebars_widgets(); |
|
305 | + foreach ($all_sidebar_widgets as $sidebar_name => $sidebar_widgets) { |
|
306 | + if (is_array($sidebar_widgets) && ! empty($sidebar_widgets)) { |
|
307 | + foreach ($sidebar_widgets as $sidebar_widget) { |
|
308 | + foreach ($espresso_widgets as $espresso_widget) { |
|
309 | + if (strpos($sidebar_widget, $espresso_widget) !== false) { |
|
310 | + return true; |
|
311 | + } |
|
312 | + } |
|
313 | + } |
|
314 | + } |
|
315 | + } |
|
316 | + return false; |
|
317 | + } |
|
318 | + |
|
319 | + |
|
320 | + /** |
|
321 | + * header_meta_tag |
|
322 | + * |
|
323 | + * @access public |
|
324 | + * @return void |
|
325 | + */ |
|
326 | + public function header_meta_tag() |
|
327 | + { |
|
328 | + print( |
|
329 | + apply_filters( |
|
330 | + 'FHEE__EE_Front_Controller__header_meta_tag', |
|
331 | + '<meta name="generator" content="Event Espresso Version ' . EVENT_ESPRESSO_VERSION . "\" />\n" |
|
332 | + ) |
|
333 | + ); |
|
334 | + |
|
335 | + // let's exclude all event type taxonomy term archive pages from search engine indexing |
|
336 | + // @see https://events.codebasehq.com/projects/event-espresso/tickets/10249 |
|
337 | + // also exclude all critical pages from indexing |
|
338 | + if (( |
|
339 | + is_tax('espresso_event_type') |
|
340 | + && get_option('blog_public') !== '0' |
|
341 | + ) |
|
342 | + || is_page(EE_Registry::instance()->CFG->core->get_critical_pages_array()) |
|
343 | + ) { |
|
344 | + print( |
|
345 | + apply_filters( |
|
346 | + 'FHEE__EE_Front_Controller__header_meta_tag__noindex_for_event_type', |
|
347 | + '<meta name="robots" content="noindex,follow" />' . "\n" |
|
348 | + ) |
|
349 | + ); |
|
350 | + } |
|
351 | + } |
|
352 | + |
|
353 | + |
|
354 | + /** |
|
355 | + * wp_print_scripts |
|
356 | + * |
|
357 | + * @return void |
|
358 | + */ |
|
359 | + public function wp_print_scripts() |
|
360 | + { |
|
361 | + global $post; |
|
362 | + if (isset($post->EE_Event) |
|
363 | + && $post->EE_Event instanceof EE_Event |
|
364 | + && get_post_type() === 'espresso_events' |
|
365 | + && is_singular() |
|
366 | + ) { |
|
367 | + \EEH_Schema::add_json_linked_data_for_event($post->EE_Event); |
|
368 | + } |
|
369 | + } |
|
370 | + |
|
371 | + |
|
372 | + public function enqueueStyle() |
|
373 | + { |
|
374 | + wp_enqueue_style('espresso_default'); |
|
375 | + wp_enqueue_style('espresso_custom_css'); |
|
376 | + } |
|
377 | + |
|
378 | + |
|
379 | + |
|
380 | + /*********************************************** WP_FOOTER ***********************************************/ |
|
381 | + |
|
382 | + |
|
383 | + public function enqueueScripts() |
|
384 | + { |
|
385 | + wp_enqueue_script('espresso_core'); |
|
386 | + } |
|
387 | + |
|
388 | + |
|
389 | + /** |
|
390 | + * display_errors |
|
391 | + * |
|
392 | + * @access public |
|
393 | + * @return void |
|
394 | + * @throws DomainException |
|
395 | + */ |
|
396 | + public function display_errors() |
|
397 | + { |
|
398 | + static $shown_already = false; |
|
399 | + do_action('AHEE__EE_Front_Controller__display_errors__begin'); |
|
400 | + if (! $shown_already |
|
401 | + && apply_filters('FHEE__EE_Front_Controller__display_errors', true) |
|
402 | + && is_main_query() |
|
403 | + && ! is_feed() |
|
404 | + && in_the_loop() |
|
405 | + && did_action('wp_head') |
|
406 | + && $this->Request_Handler->is_espresso_page() |
|
407 | + ) { |
|
408 | + echo EE_Error::get_notices(); |
|
409 | + $shown_already = true; |
|
410 | + EEH_Template::display_template(EE_TEMPLATES . 'espresso-ajax-notices.template.php'); |
|
411 | + } |
|
412 | + do_action('AHEE__EE_Front_Controller__display_errors__end'); |
|
413 | + } |
|
414 | + |
|
415 | + |
|
416 | + |
|
417 | + |
|
418 | + |
|
419 | + /*********************************************** UTILITIES ***********************************************/ |
|
420 | + /** |
|
421 | + * template_include |
|
422 | + * |
|
423 | + * @access public |
|
424 | + * @param string $template_include_path |
|
425 | + * @return string |
|
426 | + */ |
|
427 | + public function template_include($template_include_path = null) |
|
428 | + { |
|
429 | + if ($this->Request_Handler->is_espresso_page()) { |
|
430 | + $this->_template_path = ! empty($this->_template_path) |
|
431 | + ? basename($this->_template_path) |
|
432 | + : basename( |
|
433 | + $template_include_path |
|
434 | + ); |
|
435 | + $template_path = EEH_Template::locate_template($this->_template_path, array(), false); |
|
436 | + $this->_template_path = ! empty($template_path) ? $template_path : $template_include_path; |
|
437 | + $this->_template = basename($this->_template_path); |
|
438 | + return $this->_template_path; |
|
439 | + } |
|
440 | + return $template_include_path; |
|
441 | + } |
|
442 | + |
|
443 | + |
|
444 | + /** |
|
445 | + * get_selected_template |
|
446 | + * |
|
447 | + * @access public |
|
448 | + * @param bool $with_path |
|
449 | + * @return string |
|
450 | + */ |
|
451 | + public function get_selected_template($with_path = false) |
|
452 | + { |
|
453 | + return $with_path ? $this->_template_path : $this->_template; |
|
454 | + } |
|
455 | + |
|
456 | + |
|
457 | + /** |
|
458 | + * @deprecated 4.9.26 |
|
459 | + * @param string $shortcode_class |
|
460 | + * @param \WP $wp |
|
461 | + */ |
|
462 | + public function initialize_shortcode($shortcode_class = '', WP $wp = null) |
|
463 | + { |
|
464 | + \EE_Error::doing_it_wrong( |
|
465 | + __METHOD__, |
|
466 | + __( |
|
467 | + 'Usage is deprecated. Please use \EventEspresso\core\services\shortcodes\LegacyShortcodesManager::initializeShortcode() instead.', |
|
468 | + 'event_espresso' |
|
469 | + ), |
|
470 | + '4.9.26' |
|
471 | + ); |
|
472 | + $this->getLegacyShortcodesManager()->initializeShortcode($shortcode_class, $wp); |
|
473 | + } |
|
474 | + |
|
475 | + |
|
476 | + /** |
|
477 | + * @return void |
|
478 | + * @deprecated 4.9.57.p |
|
479 | + */ |
|
480 | + public function loadPersistentAdminNoticeManager() |
|
481 | + { |
|
482 | + } |
|
483 | + |
|
484 | + |
|
485 | + /** |
|
486 | + * @return void |
|
487 | + * @deprecated 4.9.64.p |
|
488 | + */ |
|
489 | + public function employ_CPT_Strategy() |
|
490 | + { |
|
491 | + } |
|
492 | 492 | } |
@@ -17,38 +17,38 @@ |
||
17 | 17 | { |
18 | 18 | |
19 | 19 | |
20 | - /** |
|
21 | - * @type \EventEspresso\core\Psr4Autoloader |
|
22 | - */ |
|
23 | - protected static $psr4_loader; |
|
24 | - |
|
25 | - |
|
26 | - /** |
|
27 | - * @return \EventEspresso\core\Psr4Autoloader |
|
28 | - */ |
|
29 | - public function initializeAutoloader() |
|
30 | - { |
|
31 | - static $initialized = false; |
|
32 | - if (! $initialized) { |
|
33 | - // instantiate PSR4 autoloader |
|
34 | - espresso_load_required('Psr4Autoloader', EE_CORE . 'Psr4Autoloader.php'); |
|
35 | - EE_Psr4AutoloaderInit::$psr4_loader = new Psr4Autoloader(); |
|
36 | - // register the autoloader |
|
37 | - EE_Psr4AutoloaderInit::$psr4_loader->register(); |
|
38 | - // register the base directories for the namespace prefix |
|
39 | - EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspresso', EE_PLUGIN_DIR_PATH); |
|
40 | - EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoBatchRequest', EE_LIBRARIES . 'batch'); |
|
41 | - EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoVendor', EE_THIRD_PARTY); |
|
42 | - $initialized = true; |
|
43 | - } |
|
44 | - } |
|
45 | - |
|
46 | - |
|
47 | - /** |
|
48 | - * @return \EventEspresso\core\Psr4Autoloader |
|
49 | - */ |
|
50 | - public static function psr4_loader() |
|
51 | - { |
|
52 | - return self::$psr4_loader; |
|
53 | - } |
|
20 | + /** |
|
21 | + * @type \EventEspresso\core\Psr4Autoloader |
|
22 | + */ |
|
23 | + protected static $psr4_loader; |
|
24 | + |
|
25 | + |
|
26 | + /** |
|
27 | + * @return \EventEspresso\core\Psr4Autoloader |
|
28 | + */ |
|
29 | + public function initializeAutoloader() |
|
30 | + { |
|
31 | + static $initialized = false; |
|
32 | + if (! $initialized) { |
|
33 | + // instantiate PSR4 autoloader |
|
34 | + espresso_load_required('Psr4Autoloader', EE_CORE . 'Psr4Autoloader.php'); |
|
35 | + EE_Psr4AutoloaderInit::$psr4_loader = new Psr4Autoloader(); |
|
36 | + // register the autoloader |
|
37 | + EE_Psr4AutoloaderInit::$psr4_loader->register(); |
|
38 | + // register the base directories for the namespace prefix |
|
39 | + EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspresso', EE_PLUGIN_DIR_PATH); |
|
40 | + EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoBatchRequest', EE_LIBRARIES . 'batch'); |
|
41 | + EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoVendor', EE_THIRD_PARTY); |
|
42 | + $initialized = true; |
|
43 | + } |
|
44 | + } |
|
45 | + |
|
46 | + |
|
47 | + /** |
|
48 | + * @return \EventEspresso\core\Psr4Autoloader |
|
49 | + */ |
|
50 | + public static function psr4_loader() |
|
51 | + { |
|
52 | + return self::$psr4_loader; |
|
53 | + } |
|
54 | 54 | } |
@@ -29,15 +29,15 @@ |
||
29 | 29 | public function initializeAutoloader() |
30 | 30 | { |
31 | 31 | static $initialized = false; |
32 | - if (! $initialized) { |
|
32 | + if ( ! $initialized) { |
|
33 | 33 | // instantiate PSR4 autoloader |
34 | - espresso_load_required('Psr4Autoloader', EE_CORE . 'Psr4Autoloader.php'); |
|
34 | + espresso_load_required('Psr4Autoloader', EE_CORE.'Psr4Autoloader.php'); |
|
35 | 35 | EE_Psr4AutoloaderInit::$psr4_loader = new Psr4Autoloader(); |
36 | 36 | // register the autoloader |
37 | 37 | EE_Psr4AutoloaderInit::$psr4_loader->register(); |
38 | 38 | // register the base directories for the namespace prefix |
39 | 39 | EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspresso', EE_PLUGIN_DIR_PATH); |
40 | - EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoBatchRequest', EE_LIBRARIES . 'batch'); |
|
40 | + EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoBatchRequest', EE_LIBRARIES.'batch'); |
|
41 | 41 | EE_Psr4AutoloaderInit::$psr4_loader->addNamespace('EventEspressoVendor', EE_THIRD_PARTY); |
42 | 42 | $initialized = true; |
43 | 43 | } |
@@ -16,98 +16,98 @@ |
||
16 | 16 | abstract class EE_Object_Repository extends EE_Object_Collection implements EEI_Repository |
17 | 17 | { |
18 | 18 | |
19 | - /** |
|
20 | - * default persist method called on repository objects if none supplied |
|
21 | - * |
|
22 | - * @type string $persist_method |
|
23 | - */ |
|
24 | - protected $persist_method; |
|
19 | + /** |
|
20 | + * default persist method called on repository objects if none supplied |
|
21 | + * |
|
22 | + * @type string $persist_method |
|
23 | + */ |
|
24 | + protected $persist_method; |
|
25 | 25 | |
26 | 26 | |
27 | - /** |
|
28 | - * _call_user_func_array_on_current |
|
29 | - * |
|
30 | - * calls the supplied callback method name on the current repository object, |
|
31 | - * an array of arguments can also be supplied that will be passed along to the callback method, |
|
32 | - * where each element of the $arguments array corresponds to a parameter for the callback method |
|
33 | - * PLZ NOTE: if the first argument of the callback requires an array, for example array( 'key' => 'value' ) |
|
34 | - * then $arguments needs to be a DOUBLE array ie: array( array( 'key' => 'value' ) ) |
|
35 | - * |
|
36 | - * @access public |
|
37 | - * @param string $callback name of method found on object to be called. |
|
38 | - * @param array $arguments arrays of arguments that will be passed to the object's callback method |
|
39 | - * @return bool | int |
|
40 | - */ |
|
41 | - protected function _call_user_func_array_on_current($callback = '', $arguments = array()) |
|
42 | - { |
|
43 | - if ($callback !== '' && method_exists($this->current(), $callback)) { |
|
44 | - return call_user_func_array(array($this->current(), $callback), $arguments); |
|
45 | - } |
|
46 | - return false; |
|
47 | - } |
|
27 | + /** |
|
28 | + * _call_user_func_array_on_current |
|
29 | + * |
|
30 | + * calls the supplied callback method name on the current repository object, |
|
31 | + * an array of arguments can also be supplied that will be passed along to the callback method, |
|
32 | + * where each element of the $arguments array corresponds to a parameter for the callback method |
|
33 | + * PLZ NOTE: if the first argument of the callback requires an array, for example array( 'key' => 'value' ) |
|
34 | + * then $arguments needs to be a DOUBLE array ie: array( array( 'key' => 'value' ) ) |
|
35 | + * |
|
36 | + * @access public |
|
37 | + * @param string $callback name of method found on object to be called. |
|
38 | + * @param array $arguments arrays of arguments that will be passed to the object's callback method |
|
39 | + * @return bool | int |
|
40 | + */ |
|
41 | + protected function _call_user_func_array_on_current($callback = '', $arguments = array()) |
|
42 | + { |
|
43 | + if ($callback !== '' && method_exists($this->current(), $callback)) { |
|
44 | + return call_user_func_array(array($this->current(), $callback), $arguments); |
|
45 | + } |
|
46 | + return false; |
|
47 | + } |
|
48 | 48 | |
49 | 49 | |
50 | - /** |
|
51 | - * _call_user_func_on_all |
|
52 | - * |
|
53 | - * calls the supplied callback method name on ALL repository objects, |
|
54 | - * |
|
55 | - * @access public |
|
56 | - * @param string $callback name of method found on repository objects to be called |
|
57 | - * @return bool | int |
|
58 | - */ |
|
59 | - protected function _call_user_func_on_all($callback = '') |
|
60 | - { |
|
61 | - $success = true; |
|
62 | - if ($this->valid()) { |
|
63 | - $this->rewind(); |
|
64 | - while ($this->valid()) { |
|
65 | - // any negative result will toggle success to false |
|
66 | - $success = $this->_call_user_func_array_on_current($callback) ? $success : false; |
|
67 | - $this->next(); |
|
68 | - } |
|
69 | - $this->rewind(); |
|
70 | - } |
|
71 | - return $success; |
|
72 | - } |
|
50 | + /** |
|
51 | + * _call_user_func_on_all |
|
52 | + * |
|
53 | + * calls the supplied callback method name on ALL repository objects, |
|
54 | + * |
|
55 | + * @access public |
|
56 | + * @param string $callback name of method found on repository objects to be called |
|
57 | + * @return bool | int |
|
58 | + */ |
|
59 | + protected function _call_user_func_on_all($callback = '') |
|
60 | + { |
|
61 | + $success = true; |
|
62 | + if ($this->valid()) { |
|
63 | + $this->rewind(); |
|
64 | + while ($this->valid()) { |
|
65 | + // any negative result will toggle success to false |
|
66 | + $success = $this->_call_user_func_array_on_current($callback) ? $success : false; |
|
67 | + $this->next(); |
|
68 | + } |
|
69 | + $this->rewind(); |
|
70 | + } |
|
71 | + return $success; |
|
72 | + } |
|
73 | 73 | |
74 | 74 | |
75 | - /** |
|
76 | - * persist |
|
77 | - * |
|
78 | - * primarily used for saving EE_Base_Class classes to the database, |
|
79 | - * but can be supplied with a "persistence callback" that can be used for classes that are not instances of |
|
80 | - * EE_Base_Class, or for providing alternate ways to persist an object such as session caching, etc... an array of |
|
81 | - * arguments can also be supplied that will be passed along to the object's persistence method |
|
82 | - * |
|
83 | - * @access public |
|
84 | - * @param string $persistence_callback name of method found on object that can |
|
85 | - * be used for persisting the object |
|
86 | - * defaults to |
|
87 | - * EE_Object_Repository::$persist_method |
|
88 | - * @param array $persistence_arguments arrays of arguments that will be passed |
|
89 | - * to the object's persistence method |
|
90 | - * @return bool | int |
|
91 | - */ |
|
92 | - public function persist($persistence_callback = '', $persistence_arguments = array()) |
|
93 | - { |
|
94 | - $persistence_callback = ! empty($persistence_callback) ? $persistence_callback : $this->persist_method; |
|
95 | - return $this->_call_user_func_array_on_current($persistence_callback, $persistence_arguments); |
|
96 | - } |
|
75 | + /** |
|
76 | + * persist |
|
77 | + * |
|
78 | + * primarily used for saving EE_Base_Class classes to the database, |
|
79 | + * but can be supplied with a "persistence callback" that can be used for classes that are not instances of |
|
80 | + * EE_Base_Class, or for providing alternate ways to persist an object such as session caching, etc... an array of |
|
81 | + * arguments can also be supplied that will be passed along to the object's persistence method |
|
82 | + * |
|
83 | + * @access public |
|
84 | + * @param string $persistence_callback name of method found on object that can |
|
85 | + * be used for persisting the object |
|
86 | + * defaults to |
|
87 | + * EE_Object_Repository::$persist_method |
|
88 | + * @param array $persistence_arguments arrays of arguments that will be passed |
|
89 | + * to the object's persistence method |
|
90 | + * @return bool | int |
|
91 | + */ |
|
92 | + public function persist($persistence_callback = '', $persistence_arguments = array()) |
|
93 | + { |
|
94 | + $persistence_callback = ! empty($persistence_callback) ? $persistence_callback : $this->persist_method; |
|
95 | + return $this->_call_user_func_array_on_current($persistence_callback, $persistence_arguments); |
|
96 | + } |
|
97 | 97 | |
98 | 98 | |
99 | - /** |
|
100 | - * persist_all |
|
101 | - * |
|
102 | - * calls \EE_Object_Repository::persist() on all objects within the repository |
|
103 | - * |
|
104 | - * @access public |
|
105 | - * @param string $persistence_callback name of method found on object that can be used for persisting the object |
|
106 | - * @return bool | int |
|
107 | - */ |
|
108 | - public function persist_all($persistence_callback = '') |
|
109 | - { |
|
110 | - $persistence_callback = ! empty($persistence_callback) ? $persistence_callback : $this->persist_method; |
|
111 | - return $this->_call_user_func_on_all($persistence_callback); |
|
112 | - } |
|
99 | + /** |
|
100 | + * persist_all |
|
101 | + * |
|
102 | + * calls \EE_Object_Repository::persist() on all objects within the repository |
|
103 | + * |
|
104 | + * @access public |
|
105 | + * @param string $persistence_callback name of method found on object that can be used for persisting the object |
|
106 | + * @return bool | int |
|
107 | + */ |
|
108 | + public function persist_all($persistence_callback = '') |
|
109 | + { |
|
110 | + $persistence_callback = ! empty($persistence_callback) ? $persistence_callback : $this->persist_method; |
|
111 | + return $this->_call_user_func_on_all($persistence_callback); |
|
112 | + } |
|
113 | 113 | } |
@@ -12,110 +12,110 @@ |
||
12 | 12 | abstract class EED_Module extends EE_Configurable implements ResettableInterface |
13 | 13 | { |
14 | 14 | |
15 | - /** |
|
16 | - * rendered output to be returned to WP |
|
17 | - * |
|
18 | - * @var string $output |
|
19 | - */ |
|
20 | - protected $output = ''; |
|
21 | - |
|
22 | - /** |
|
23 | - * the current active espresso template theme |
|
24 | - * |
|
25 | - * @var string $theme |
|
26 | - */ |
|
27 | - protected $theme = ''; |
|
28 | - |
|
29 | - |
|
30 | - /** |
|
31 | - * @return void |
|
32 | - */ |
|
33 | - public static function reset() |
|
34 | - { |
|
35 | - $module_name = get_called_class(); |
|
36 | - new $module_name(); |
|
37 | - } |
|
38 | - |
|
39 | - |
|
40 | - /** |
|
41 | - * set_hooks - for hooking into EE Core, other modules, etc |
|
42 | - * |
|
43 | - * @access public |
|
44 | - * @return void |
|
45 | - */ |
|
46 | - public static function set_hooks() |
|
47 | - { |
|
48 | - } |
|
49 | - |
|
50 | - |
|
51 | - /** |
|
52 | - * set_hooks_admin - for hooking into EE Admin Core, other modules, etc |
|
53 | - * |
|
54 | - * @access public |
|
55 | - * @return void |
|
56 | - */ |
|
57 | - public static function set_hooks_admin() |
|
58 | - { |
|
59 | - } |
|
60 | - |
|
61 | - |
|
62 | - /** |
|
63 | - * run - initial module setup |
|
64 | - * this method is primarily used for activating resources in the EE_Front_Controller thru the use of filters |
|
65 | - * |
|
66 | - * @access public |
|
67 | - * @var WP $WP |
|
68 | - * @return void |
|
69 | - */ |
|
70 | - abstract public function run($WP); |
|
71 | - |
|
72 | - |
|
73 | - /** |
|
74 | - * EED_Module constructor. |
|
75 | - */ |
|
76 | - final public function __construct() |
|
77 | - { |
|
78 | - $this->theme = EE_Config::get_current_theme(); |
|
79 | - $module_name = $this->module_name(); |
|
80 | - EE_Registry::instance()->modules->{$module_name} = $this; |
|
81 | - } |
|
82 | - |
|
83 | - |
|
84 | - /** |
|
85 | - * @param $module_name |
|
86 | - * @return EED_Module |
|
87 | - */ |
|
88 | - protected static function get_instance($module_name = '') |
|
89 | - { |
|
90 | - $module_name = ! empty($module_name) |
|
91 | - ? $module_name |
|
92 | - : get_called_class(); |
|
93 | - if (! isset(EE_Registry::instance()->modules->{$module_name}) |
|
94 | - || ! EE_Registry::instance()->modules->{$module_name} instanceof EED_Module |
|
95 | - ) { |
|
96 | - EE_Registry::instance()->add_module($module_name); |
|
97 | - } |
|
98 | - return EE_Registry::instance()->get_module($module_name); |
|
99 | - } |
|
100 | - |
|
101 | - |
|
102 | - /** |
|
103 | - * module_name |
|
104 | - * |
|
105 | - * @access public |
|
106 | - * @return string |
|
107 | - */ |
|
108 | - public function module_name() |
|
109 | - { |
|
110 | - return get_class($this); |
|
111 | - } |
|
112 | - |
|
113 | - |
|
114 | - /** |
|
115 | - * @return string |
|
116 | - */ |
|
117 | - public function theme() |
|
118 | - { |
|
119 | - return $this->theme; |
|
120 | - } |
|
15 | + /** |
|
16 | + * rendered output to be returned to WP |
|
17 | + * |
|
18 | + * @var string $output |
|
19 | + */ |
|
20 | + protected $output = ''; |
|
21 | + |
|
22 | + /** |
|
23 | + * the current active espresso template theme |
|
24 | + * |
|
25 | + * @var string $theme |
|
26 | + */ |
|
27 | + protected $theme = ''; |
|
28 | + |
|
29 | + |
|
30 | + /** |
|
31 | + * @return void |
|
32 | + */ |
|
33 | + public static function reset() |
|
34 | + { |
|
35 | + $module_name = get_called_class(); |
|
36 | + new $module_name(); |
|
37 | + } |
|
38 | + |
|
39 | + |
|
40 | + /** |
|
41 | + * set_hooks - for hooking into EE Core, other modules, etc |
|
42 | + * |
|
43 | + * @access public |
|
44 | + * @return void |
|
45 | + */ |
|
46 | + public static function set_hooks() |
|
47 | + { |
|
48 | + } |
|
49 | + |
|
50 | + |
|
51 | + /** |
|
52 | + * set_hooks_admin - for hooking into EE Admin Core, other modules, etc |
|
53 | + * |
|
54 | + * @access public |
|
55 | + * @return void |
|
56 | + */ |
|
57 | + public static function set_hooks_admin() |
|
58 | + { |
|
59 | + } |
|
60 | + |
|
61 | + |
|
62 | + /** |
|
63 | + * run - initial module setup |
|
64 | + * this method is primarily used for activating resources in the EE_Front_Controller thru the use of filters |
|
65 | + * |
|
66 | + * @access public |
|
67 | + * @var WP $WP |
|
68 | + * @return void |
|
69 | + */ |
|
70 | + abstract public function run($WP); |
|
71 | + |
|
72 | + |
|
73 | + /** |
|
74 | + * EED_Module constructor. |
|
75 | + */ |
|
76 | + final public function __construct() |
|
77 | + { |
|
78 | + $this->theme = EE_Config::get_current_theme(); |
|
79 | + $module_name = $this->module_name(); |
|
80 | + EE_Registry::instance()->modules->{$module_name} = $this; |
|
81 | + } |
|
82 | + |
|
83 | + |
|
84 | + /** |
|
85 | + * @param $module_name |
|
86 | + * @return EED_Module |
|
87 | + */ |
|
88 | + protected static function get_instance($module_name = '') |
|
89 | + { |
|
90 | + $module_name = ! empty($module_name) |
|
91 | + ? $module_name |
|
92 | + : get_called_class(); |
|
93 | + if (! isset(EE_Registry::instance()->modules->{$module_name}) |
|
94 | + || ! EE_Registry::instance()->modules->{$module_name} instanceof EED_Module |
|
95 | + ) { |
|
96 | + EE_Registry::instance()->add_module($module_name); |
|
97 | + } |
|
98 | + return EE_Registry::instance()->get_module($module_name); |
|
99 | + } |
|
100 | + |
|
101 | + |
|
102 | + /** |
|
103 | + * module_name |
|
104 | + * |
|
105 | + * @access public |
|
106 | + * @return string |
|
107 | + */ |
|
108 | + public function module_name() |
|
109 | + { |
|
110 | + return get_class($this); |
|
111 | + } |
|
112 | + |
|
113 | + |
|
114 | + /** |
|
115 | + * @return string |
|
116 | + */ |
|
117 | + public function theme() |
|
118 | + { |
|
119 | + return $this->theme; |
|
120 | + } |
|
121 | 121 | } |
@@ -90,7 +90,7 @@ |
||
90 | 90 | $module_name = ! empty($module_name) |
91 | 91 | ? $module_name |
92 | 92 | : get_called_class(); |
93 | - if (! isset(EE_Registry::instance()->modules->{$module_name}) |
|
93 | + if ( ! isset(EE_Registry::instance()->modules->{$module_name}) |
|
94 | 94 | || ! EE_Registry::instance()->modules->{$module_name} instanceof EED_Module |
95 | 95 | ) { |
96 | 96 | EE_Registry::instance()->add_module($module_name); |
@@ -11,42 +11,42 @@ |
||
11 | 11 | class EE_Base |
12 | 12 | { |
13 | 13 | |
14 | - /** |
|
15 | - * @ override magic methods |
|
16 | - * @ return void |
|
17 | - */ |
|
18 | - public function __get($a) |
|
19 | - { |
|
20 | - return false; |
|
21 | - } |
|
14 | + /** |
|
15 | + * @ override magic methods |
|
16 | + * @ return void |
|
17 | + */ |
|
18 | + public function __get($a) |
|
19 | + { |
|
20 | + return false; |
|
21 | + } |
|
22 | 22 | |
23 | - public function __set($a, $b) |
|
24 | - { |
|
25 | - return false; |
|
26 | - } |
|
23 | + public function __set($a, $b) |
|
24 | + { |
|
25 | + return false; |
|
26 | + } |
|
27 | 27 | |
28 | - public function __isset($a) |
|
29 | - { |
|
30 | - return false; |
|
31 | - } |
|
28 | + public function __isset($a) |
|
29 | + { |
|
30 | + return false; |
|
31 | + } |
|
32 | 32 | |
33 | - public function __unset($a) |
|
34 | - { |
|
35 | - return false; |
|
36 | - } |
|
33 | + public function __unset($a) |
|
34 | + { |
|
35 | + return false; |
|
36 | + } |
|
37 | 37 | |
38 | - public function __clone() |
|
39 | - { |
|
40 | - return false; |
|
41 | - } |
|
38 | + public function __clone() |
|
39 | + { |
|
40 | + return false; |
|
41 | + } |
|
42 | 42 | |
43 | - public function __wakeup() |
|
44 | - { |
|
45 | - return false; |
|
46 | - } |
|
43 | + public function __wakeup() |
|
44 | + { |
|
45 | + return false; |
|
46 | + } |
|
47 | 47 | |
48 | - public function __destruct() |
|
49 | - { |
|
50 | - return false; |
|
51 | - } |
|
48 | + public function __destruct() |
|
49 | + { |
|
50 | + return false; |
|
51 | + } |
|
52 | 52 | } |
@@ -14,333 +14,333 @@ |
||
14 | 14 | class EE_Maintenance_Mode implements ResettableInterface |
15 | 15 | { |
16 | 16 | |
17 | - /** |
|
18 | - * constants available to client code for interpreting the values of EE_Maintenance_Mode::level(). |
|
19 | - * level_0_not_in_maintenance means the site is NOT in maintenance mode (so everything's normal) |
|
20 | - */ |
|
21 | - const level_0_not_in_maintenance = 0; |
|
22 | - |
|
23 | - /** |
|
24 | - * level_1_frontend_only_maintenance means that the site's frontend EE code should be completely disabled |
|
25 | - * but the admin backend should be running as normal. Maybe an admin can view the frontend though |
|
26 | - */ |
|
27 | - const level_1_frontend_only_maintenance = 1; |
|
28 | - |
|
29 | - /** |
|
30 | - * level_2_complete_maintenance means the frontend AND EE backend code are disabled. The only system running |
|
31 | - * is the maintenance mode stuff, which will require users to update all addons, and then finish running all |
|
32 | - * migration scripts before taking the site out of maintenance mode |
|
33 | - */ |
|
34 | - const level_2_complete_maintenance = 2; |
|
35 | - |
|
36 | - /** |
|
37 | - * the name of the option which stores the current level of maintenance mode |
|
38 | - */ |
|
39 | - const option_name_maintenance_mode = 'ee_maintenance_mode'; |
|
40 | - |
|
41 | - |
|
42 | - /** |
|
43 | - * @var EE_Maintenance_Mode $_instance |
|
44 | - */ |
|
45 | - private static $_instance; |
|
46 | - |
|
47 | - /** |
|
48 | - * @var EE_Registry $EE |
|
49 | - */ |
|
50 | - protected $EE; |
|
51 | - |
|
52 | - |
|
53 | - /** |
|
54 | - * @singleton method used to instantiate class object |
|
55 | - * @return EE_Maintenance_Mode |
|
56 | - */ |
|
57 | - public static function instance() |
|
58 | - { |
|
59 | - // check if class object is instantiated |
|
60 | - if (! self::$_instance instanceof EE_Maintenance_Mode) { |
|
61 | - self::$_instance = new self(); |
|
62 | - } |
|
63 | - return self::$_instance; |
|
64 | - } |
|
65 | - |
|
66 | - |
|
67 | - /** |
|
68 | - * Resets maintenance mode (mostly just re-checks whether or not we should be in maintenance mode) |
|
69 | - * |
|
70 | - * @return EE_Maintenance_Mode |
|
71 | - */ |
|
72 | - public static function reset() |
|
73 | - { |
|
74 | - self::instance()->set_maintenance_mode_if_db_old(); |
|
75 | - return self::instance(); |
|
76 | - } |
|
77 | - |
|
78 | - |
|
79 | - /** |
|
80 | - *private constructor to prevent direct creation |
|
81 | - */ |
|
82 | - private function __construct() |
|
83 | - { |
|
84 | - // if M-Mode level 2 is engaged, we still need basic assets loaded |
|
85 | - add_action('wp_enqueue_scripts', array($this, 'load_assets_required_for_m_mode')); |
|
86 | - // shut 'er down down for maintenance ? |
|
87 | - add_filter('the_content', array($this, 'the_content'), 2); |
|
88 | - // add powered by EE msg |
|
89 | - add_action('shutdown', array($this, 'display_maintenance_mode_notice'), 10); |
|
90 | - } |
|
91 | - |
|
92 | - |
|
93 | - /** |
|
94 | - * retrieves the maintenance mode option value from the db |
|
95 | - * |
|
96 | - * @return int |
|
97 | - */ |
|
98 | - public function real_level() |
|
99 | - { |
|
100 | - return (int) get_option(self::option_name_maintenance_mode, EE_Maintenance_Mode::level_0_not_in_maintenance); |
|
101 | - } |
|
102 | - |
|
103 | - |
|
104 | - /** |
|
105 | - * Returns whether or not the models reportedly are able to run queries or not |
|
106 | - * (ie, if the system thinks their tables are present and up-to-date). |
|
107 | - * |
|
108 | - * @return boolean |
|
109 | - */ |
|
110 | - public function models_can_query() |
|
111 | - { |
|
112 | - return $this->real_level() !== EE_Maintenance_Mode::level_2_complete_maintenance; |
|
113 | - } |
|
114 | - |
|
115 | - |
|
116 | - /** |
|
117 | - * Determines whether or not we're in maintenance mode and what level. However, while the site |
|
118 | - * is in level 1 maintenance, and an admin visits the frontend, this function makes it appear |
|
119 | - * to them as if teh site isn't in maintenance mode. |
|
120 | - * EE_Maintenance_Mode::level_0_not_in_maintenance => not in maintenance mode (in normal mode) |
|
121 | - * EE_Maintenance_Mode::level_1_frontend_only_maintenance=> frontend-only maintenance mode |
|
122 | - * EE_Maintenance_Mode::level_2_complete_maintenance => frontend and backend maintenance mode |
|
123 | - * |
|
124 | - * @return int |
|
125 | - */ |
|
126 | - public function level() |
|
127 | - { |
|
128 | - $maintenance_mode_level = $this->real_level(); |
|
129 | - // if this is an admin request, we'll be honest... except if it's ajax, because that might be from the frontend |
|
130 | - if ($maintenance_mode_level === EE_Maintenance_Mode::level_1_frontend_only_maintenance// we're in level 1 |
|
131 | - && ((defined('DOING_AJAX') && DOING_AJAX) || ! is_admin()) // on non-ajax frontend requests |
|
132 | - && current_user_can('administrator') // when the user is an admin |
|
133 | - ) { |
|
134 | - $maintenance_mode_level = EE_Maintenance_Mode::level_0_not_in_maintenance; |
|
135 | - } |
|
136 | - return $maintenance_mode_level; |
|
137 | - } |
|
138 | - |
|
139 | - |
|
140 | - /** |
|
141 | - * Determines if we need to put EE in maintenance mode because the database needs updating |
|
142 | - * |
|
143 | - * @return boolean true if DB is old and maintenance mode was triggered; false otherwise |
|
144 | - */ |
|
145 | - public function set_maintenance_mode_if_db_old() |
|
146 | - { |
|
147 | - EE_Registry::instance()->load_core('Data_Migration_Manager'); |
|
148 | - if (EE_Data_Migration_Manager::instance()->check_for_applicable_data_migration_scripts()) { |
|
149 | - update_option(self::option_name_maintenance_mode, self::level_2_complete_maintenance); |
|
150 | - return true; |
|
151 | - } |
|
152 | - if ($this->level() === self::level_2_complete_maintenance) { |
|
153 | - // we also want to handle the opposite: if the site is mm2, but there aren't any migrations to run |
|
154 | - // then we shouldn't be in mm2. (Maybe an addon got deactivated?) |
|
155 | - update_option(self::option_name_maintenance_mode, self::level_0_not_in_maintenance); |
|
156 | - return false; |
|
157 | - } |
|
158 | - return false; |
|
159 | - } |
|
160 | - |
|
161 | - |
|
162 | - /** |
|
163 | - * Updates the maintenance level on the site |
|
164 | - * |
|
165 | - * @param int $level |
|
166 | - * @return void |
|
167 | - */ |
|
168 | - public function set_maintenance_level($level) |
|
169 | - { |
|
170 | - do_action('AHEE__EE_Maintenance_Mode__set_maintenance_level', $level); |
|
171 | - update_option(self::option_name_maintenance_mode, (int) $level); |
|
172 | - } |
|
173 | - |
|
174 | - |
|
175 | - /** |
|
176 | - * returns TRUE if M-Mode is engaged and the current request is not for the admin |
|
177 | - * |
|
178 | - * @return string |
|
179 | - */ |
|
180 | - public static function disable_frontend_for_maintenance() |
|
181 | - { |
|
182 | - return (! is_admin() && EE_Maintenance_Mode::instance()->level()); |
|
183 | - } |
|
184 | - |
|
185 | - |
|
186 | - /** |
|
187 | - * @return void |
|
188 | - */ |
|
189 | - public function load_assets_required_for_m_mode() |
|
190 | - { |
|
191 | - if ($this->real_level() === EE_Maintenance_Mode::level_2_complete_maintenance |
|
192 | - && ! wp_script_is('espresso_core') |
|
193 | - ) { |
|
194 | - wp_register_style( |
|
195 | - 'espresso_default', |
|
196 | - EE_GLOBAL_ASSETS_URL . 'css/espresso_default.css', |
|
197 | - array('dashicons'), |
|
198 | - EVENT_ESPRESSO_VERSION |
|
199 | - ); |
|
200 | - wp_enqueue_style('espresso_default'); |
|
201 | - wp_register_script( |
|
202 | - 'espresso_core', |
|
203 | - EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js', |
|
204 | - array('jquery'), |
|
205 | - EVENT_ESPRESSO_VERSION, |
|
206 | - true |
|
207 | - ); |
|
208 | - wp_enqueue_script('espresso_core'); |
|
209 | - } |
|
210 | - } |
|
211 | - |
|
212 | - |
|
213 | - /** |
|
214 | - * replacement EE CPT template that displays message notifying site visitors |
|
215 | - * that EE has been temporarily placed into maintenance mode |
|
216 | - * does NOT get called on non-EE-CPT requests |
|
217 | - * |
|
218 | - * @return string |
|
219 | - */ |
|
220 | - public static function template_include() |
|
221 | - { |
|
222 | - // shut 'er down down for maintenance ? then don't use any of our templates for our endpoints |
|
223 | - return get_template_directory() . '/index.php'; |
|
224 | - } |
|
225 | - |
|
226 | - |
|
227 | - /** |
|
228 | - * displays message notifying site visitors that EE has been temporarily |
|
229 | - * placed into maintenance mode when post_type != EE CPT |
|
230 | - * |
|
231 | - * @param string $the_content |
|
232 | - * @return string |
|
233 | - */ |
|
234 | - public function the_content($the_content) |
|
235 | - { |
|
236 | - // check if M-mode is engaged and for EE shortcode |
|
237 | - if ($this->level() && strpos($the_content, '[ESPRESSO_') !== false) { |
|
238 | - // this can eventually be moved to a template, or edited via admin. But for now... |
|
239 | - $the_content = sprintf( |
|
240 | - esc_html__( |
|
241 | - '%sMaintenance Mode%sEvent Registration has been temporarily closed while system maintenance is being performed. We\'re sorry for any inconveniences this may have caused. Please try back again later.%s', |
|
242 | - 'event_espresso' |
|
243 | - ), |
|
244 | - '<h3>', |
|
245 | - '</h3><p>', |
|
246 | - '</p>' |
|
247 | - ); |
|
248 | - } |
|
249 | - return $the_content; |
|
250 | - } |
|
251 | - |
|
252 | - |
|
253 | - /** |
|
254 | - * displays message on frontend of site notifying admin that EE has been temporarily placed into maintenance mode |
|
255 | - */ |
|
256 | - public function display_maintenance_mode_notice() |
|
257 | - { |
|
258 | - // check if M-mode is engaged and for EE shortcode |
|
259 | - if (! (defined('DOING_AJAX') && DOING_AJAX) |
|
260 | - && $this->real_level() |
|
261 | - && ! is_admin() |
|
262 | - && current_user_can('administrator') |
|
263 | - && EE_Registry::instance()->REQ->is_espresso_page() |
|
264 | - ) { |
|
265 | - printf( |
|
266 | - esc_html__( |
|
267 | - '%sclose%sEvent Registration is currently disabled because Event Espresso has been placed into Maintenance Mode. To change Maintenance Mode settings, click here %sEE Maintenance Mode Admin Page%s', |
|
268 | - 'event_espresso' |
|
269 | - ), |
|
270 | - '<div id="ee-m-mode-admin-notice-dv" class="ee-really-important-notice-dv"><a class="close-espresso-notice" title="', |
|
271 | - '"><span class="dashicons dashicons-no"></span></a><p>', |
|
272 | - ' » <a href="' . add_query_arg( |
|
273 | - array('page' => 'espresso_maintenance_settings'), |
|
274 | - admin_url('admin.php') |
|
275 | - ) . '">', |
|
276 | - '</a></p></div>' |
|
277 | - ); |
|
278 | - } |
|
279 | - } |
|
280 | - // espresso-notices important-notice ee-attention |
|
281 | - |
|
282 | - |
|
283 | - /** |
|
284 | - * override magic methods |
|
285 | - */ |
|
286 | - final public function __destruct() |
|
287 | - { |
|
288 | - } |
|
289 | - |
|
290 | - |
|
291 | - final public function __call($a, $b) |
|
292 | - { |
|
293 | - } |
|
294 | - |
|
295 | - |
|
296 | - final public function __get($a) |
|
297 | - { |
|
298 | - } |
|
299 | - |
|
300 | - |
|
301 | - final public function __set($a, $b) |
|
302 | - { |
|
303 | - } |
|
304 | - |
|
305 | - |
|
306 | - final public function __isset($a) |
|
307 | - { |
|
308 | - } |
|
309 | - |
|
310 | - |
|
311 | - final public function __unset($a) |
|
312 | - { |
|
313 | - } |
|
314 | - |
|
315 | - |
|
316 | - final public function __sleep() |
|
317 | - { |
|
318 | - return array(); |
|
319 | - } |
|
320 | - |
|
321 | - |
|
322 | - final public function __wakeup() |
|
323 | - { |
|
324 | - } |
|
325 | - |
|
326 | - |
|
327 | - final public function __invoke() |
|
328 | - { |
|
329 | - } |
|
330 | - |
|
331 | - |
|
332 | - final public static function __set_state($a = null) |
|
333 | - { |
|
334 | - return EE_Maintenance_Mode::instance(); |
|
335 | - } |
|
336 | - |
|
337 | - |
|
338 | - final public function __clone() |
|
339 | - { |
|
340 | - } |
|
17 | + /** |
|
18 | + * constants available to client code for interpreting the values of EE_Maintenance_Mode::level(). |
|
19 | + * level_0_not_in_maintenance means the site is NOT in maintenance mode (so everything's normal) |
|
20 | + */ |
|
21 | + const level_0_not_in_maintenance = 0; |
|
22 | + |
|
23 | + /** |
|
24 | + * level_1_frontend_only_maintenance means that the site's frontend EE code should be completely disabled |
|
25 | + * but the admin backend should be running as normal. Maybe an admin can view the frontend though |
|
26 | + */ |
|
27 | + const level_1_frontend_only_maintenance = 1; |
|
28 | + |
|
29 | + /** |
|
30 | + * level_2_complete_maintenance means the frontend AND EE backend code are disabled. The only system running |
|
31 | + * is the maintenance mode stuff, which will require users to update all addons, and then finish running all |
|
32 | + * migration scripts before taking the site out of maintenance mode |
|
33 | + */ |
|
34 | + const level_2_complete_maintenance = 2; |
|
35 | + |
|
36 | + /** |
|
37 | + * the name of the option which stores the current level of maintenance mode |
|
38 | + */ |
|
39 | + const option_name_maintenance_mode = 'ee_maintenance_mode'; |
|
40 | + |
|
41 | + |
|
42 | + /** |
|
43 | + * @var EE_Maintenance_Mode $_instance |
|
44 | + */ |
|
45 | + private static $_instance; |
|
46 | + |
|
47 | + /** |
|
48 | + * @var EE_Registry $EE |
|
49 | + */ |
|
50 | + protected $EE; |
|
51 | + |
|
52 | + |
|
53 | + /** |
|
54 | + * @singleton method used to instantiate class object |
|
55 | + * @return EE_Maintenance_Mode |
|
56 | + */ |
|
57 | + public static function instance() |
|
58 | + { |
|
59 | + // check if class object is instantiated |
|
60 | + if (! self::$_instance instanceof EE_Maintenance_Mode) { |
|
61 | + self::$_instance = new self(); |
|
62 | + } |
|
63 | + return self::$_instance; |
|
64 | + } |
|
65 | + |
|
66 | + |
|
67 | + /** |
|
68 | + * Resets maintenance mode (mostly just re-checks whether or not we should be in maintenance mode) |
|
69 | + * |
|
70 | + * @return EE_Maintenance_Mode |
|
71 | + */ |
|
72 | + public static function reset() |
|
73 | + { |
|
74 | + self::instance()->set_maintenance_mode_if_db_old(); |
|
75 | + return self::instance(); |
|
76 | + } |
|
77 | + |
|
78 | + |
|
79 | + /** |
|
80 | + *private constructor to prevent direct creation |
|
81 | + */ |
|
82 | + private function __construct() |
|
83 | + { |
|
84 | + // if M-Mode level 2 is engaged, we still need basic assets loaded |
|
85 | + add_action('wp_enqueue_scripts', array($this, 'load_assets_required_for_m_mode')); |
|
86 | + // shut 'er down down for maintenance ? |
|
87 | + add_filter('the_content', array($this, 'the_content'), 2); |
|
88 | + // add powered by EE msg |
|
89 | + add_action('shutdown', array($this, 'display_maintenance_mode_notice'), 10); |
|
90 | + } |
|
91 | + |
|
92 | + |
|
93 | + /** |
|
94 | + * retrieves the maintenance mode option value from the db |
|
95 | + * |
|
96 | + * @return int |
|
97 | + */ |
|
98 | + public function real_level() |
|
99 | + { |
|
100 | + return (int) get_option(self::option_name_maintenance_mode, EE_Maintenance_Mode::level_0_not_in_maintenance); |
|
101 | + } |
|
102 | + |
|
103 | + |
|
104 | + /** |
|
105 | + * Returns whether or not the models reportedly are able to run queries or not |
|
106 | + * (ie, if the system thinks their tables are present and up-to-date). |
|
107 | + * |
|
108 | + * @return boolean |
|
109 | + */ |
|
110 | + public function models_can_query() |
|
111 | + { |
|
112 | + return $this->real_level() !== EE_Maintenance_Mode::level_2_complete_maintenance; |
|
113 | + } |
|
114 | + |
|
115 | + |
|
116 | + /** |
|
117 | + * Determines whether or not we're in maintenance mode and what level. However, while the site |
|
118 | + * is in level 1 maintenance, and an admin visits the frontend, this function makes it appear |
|
119 | + * to them as if teh site isn't in maintenance mode. |
|
120 | + * EE_Maintenance_Mode::level_0_not_in_maintenance => not in maintenance mode (in normal mode) |
|
121 | + * EE_Maintenance_Mode::level_1_frontend_only_maintenance=> frontend-only maintenance mode |
|
122 | + * EE_Maintenance_Mode::level_2_complete_maintenance => frontend and backend maintenance mode |
|
123 | + * |
|
124 | + * @return int |
|
125 | + */ |
|
126 | + public function level() |
|
127 | + { |
|
128 | + $maintenance_mode_level = $this->real_level(); |
|
129 | + // if this is an admin request, we'll be honest... except if it's ajax, because that might be from the frontend |
|
130 | + if ($maintenance_mode_level === EE_Maintenance_Mode::level_1_frontend_only_maintenance// we're in level 1 |
|
131 | + && ((defined('DOING_AJAX') && DOING_AJAX) || ! is_admin()) // on non-ajax frontend requests |
|
132 | + && current_user_can('administrator') // when the user is an admin |
|
133 | + ) { |
|
134 | + $maintenance_mode_level = EE_Maintenance_Mode::level_0_not_in_maintenance; |
|
135 | + } |
|
136 | + return $maintenance_mode_level; |
|
137 | + } |
|
138 | + |
|
139 | + |
|
140 | + /** |
|
141 | + * Determines if we need to put EE in maintenance mode because the database needs updating |
|
142 | + * |
|
143 | + * @return boolean true if DB is old and maintenance mode was triggered; false otherwise |
|
144 | + */ |
|
145 | + public function set_maintenance_mode_if_db_old() |
|
146 | + { |
|
147 | + EE_Registry::instance()->load_core('Data_Migration_Manager'); |
|
148 | + if (EE_Data_Migration_Manager::instance()->check_for_applicable_data_migration_scripts()) { |
|
149 | + update_option(self::option_name_maintenance_mode, self::level_2_complete_maintenance); |
|
150 | + return true; |
|
151 | + } |
|
152 | + if ($this->level() === self::level_2_complete_maintenance) { |
|
153 | + // we also want to handle the opposite: if the site is mm2, but there aren't any migrations to run |
|
154 | + // then we shouldn't be in mm2. (Maybe an addon got deactivated?) |
|
155 | + update_option(self::option_name_maintenance_mode, self::level_0_not_in_maintenance); |
|
156 | + return false; |
|
157 | + } |
|
158 | + return false; |
|
159 | + } |
|
160 | + |
|
161 | + |
|
162 | + /** |
|
163 | + * Updates the maintenance level on the site |
|
164 | + * |
|
165 | + * @param int $level |
|
166 | + * @return void |
|
167 | + */ |
|
168 | + public function set_maintenance_level($level) |
|
169 | + { |
|
170 | + do_action('AHEE__EE_Maintenance_Mode__set_maintenance_level', $level); |
|
171 | + update_option(self::option_name_maintenance_mode, (int) $level); |
|
172 | + } |
|
173 | + |
|
174 | + |
|
175 | + /** |
|
176 | + * returns TRUE if M-Mode is engaged and the current request is not for the admin |
|
177 | + * |
|
178 | + * @return string |
|
179 | + */ |
|
180 | + public static function disable_frontend_for_maintenance() |
|
181 | + { |
|
182 | + return (! is_admin() && EE_Maintenance_Mode::instance()->level()); |
|
183 | + } |
|
184 | + |
|
185 | + |
|
186 | + /** |
|
187 | + * @return void |
|
188 | + */ |
|
189 | + public function load_assets_required_for_m_mode() |
|
190 | + { |
|
191 | + if ($this->real_level() === EE_Maintenance_Mode::level_2_complete_maintenance |
|
192 | + && ! wp_script_is('espresso_core') |
|
193 | + ) { |
|
194 | + wp_register_style( |
|
195 | + 'espresso_default', |
|
196 | + EE_GLOBAL_ASSETS_URL . 'css/espresso_default.css', |
|
197 | + array('dashicons'), |
|
198 | + EVENT_ESPRESSO_VERSION |
|
199 | + ); |
|
200 | + wp_enqueue_style('espresso_default'); |
|
201 | + wp_register_script( |
|
202 | + 'espresso_core', |
|
203 | + EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js', |
|
204 | + array('jquery'), |
|
205 | + EVENT_ESPRESSO_VERSION, |
|
206 | + true |
|
207 | + ); |
|
208 | + wp_enqueue_script('espresso_core'); |
|
209 | + } |
|
210 | + } |
|
211 | + |
|
212 | + |
|
213 | + /** |
|
214 | + * replacement EE CPT template that displays message notifying site visitors |
|
215 | + * that EE has been temporarily placed into maintenance mode |
|
216 | + * does NOT get called on non-EE-CPT requests |
|
217 | + * |
|
218 | + * @return string |
|
219 | + */ |
|
220 | + public static function template_include() |
|
221 | + { |
|
222 | + // shut 'er down down for maintenance ? then don't use any of our templates for our endpoints |
|
223 | + return get_template_directory() . '/index.php'; |
|
224 | + } |
|
225 | + |
|
226 | + |
|
227 | + /** |
|
228 | + * displays message notifying site visitors that EE has been temporarily |
|
229 | + * placed into maintenance mode when post_type != EE CPT |
|
230 | + * |
|
231 | + * @param string $the_content |
|
232 | + * @return string |
|
233 | + */ |
|
234 | + public function the_content($the_content) |
|
235 | + { |
|
236 | + // check if M-mode is engaged and for EE shortcode |
|
237 | + if ($this->level() && strpos($the_content, '[ESPRESSO_') !== false) { |
|
238 | + // this can eventually be moved to a template, or edited via admin. But for now... |
|
239 | + $the_content = sprintf( |
|
240 | + esc_html__( |
|
241 | + '%sMaintenance Mode%sEvent Registration has been temporarily closed while system maintenance is being performed. We\'re sorry for any inconveniences this may have caused. Please try back again later.%s', |
|
242 | + 'event_espresso' |
|
243 | + ), |
|
244 | + '<h3>', |
|
245 | + '</h3><p>', |
|
246 | + '</p>' |
|
247 | + ); |
|
248 | + } |
|
249 | + return $the_content; |
|
250 | + } |
|
251 | + |
|
252 | + |
|
253 | + /** |
|
254 | + * displays message on frontend of site notifying admin that EE has been temporarily placed into maintenance mode |
|
255 | + */ |
|
256 | + public function display_maintenance_mode_notice() |
|
257 | + { |
|
258 | + // check if M-mode is engaged and for EE shortcode |
|
259 | + if (! (defined('DOING_AJAX') && DOING_AJAX) |
|
260 | + && $this->real_level() |
|
261 | + && ! is_admin() |
|
262 | + && current_user_can('administrator') |
|
263 | + && EE_Registry::instance()->REQ->is_espresso_page() |
|
264 | + ) { |
|
265 | + printf( |
|
266 | + esc_html__( |
|
267 | + '%sclose%sEvent Registration is currently disabled because Event Espresso has been placed into Maintenance Mode. To change Maintenance Mode settings, click here %sEE Maintenance Mode Admin Page%s', |
|
268 | + 'event_espresso' |
|
269 | + ), |
|
270 | + '<div id="ee-m-mode-admin-notice-dv" class="ee-really-important-notice-dv"><a class="close-espresso-notice" title="', |
|
271 | + '"><span class="dashicons dashicons-no"></span></a><p>', |
|
272 | + ' » <a href="' . add_query_arg( |
|
273 | + array('page' => 'espresso_maintenance_settings'), |
|
274 | + admin_url('admin.php') |
|
275 | + ) . '">', |
|
276 | + '</a></p></div>' |
|
277 | + ); |
|
278 | + } |
|
279 | + } |
|
280 | + // espresso-notices important-notice ee-attention |
|
281 | + |
|
282 | + |
|
283 | + /** |
|
284 | + * override magic methods |
|
285 | + */ |
|
286 | + final public function __destruct() |
|
287 | + { |
|
288 | + } |
|
289 | + |
|
290 | + |
|
291 | + final public function __call($a, $b) |
|
292 | + { |
|
293 | + } |
|
294 | + |
|
295 | + |
|
296 | + final public function __get($a) |
|
297 | + { |
|
298 | + } |
|
299 | + |
|
300 | + |
|
301 | + final public function __set($a, $b) |
|
302 | + { |
|
303 | + } |
|
304 | + |
|
305 | + |
|
306 | + final public function __isset($a) |
|
307 | + { |
|
308 | + } |
|
309 | + |
|
310 | + |
|
311 | + final public function __unset($a) |
|
312 | + { |
|
313 | + } |
|
314 | + |
|
315 | + |
|
316 | + final public function __sleep() |
|
317 | + { |
|
318 | + return array(); |
|
319 | + } |
|
320 | + |
|
321 | + |
|
322 | + final public function __wakeup() |
|
323 | + { |
|
324 | + } |
|
325 | + |
|
326 | + |
|
327 | + final public function __invoke() |
|
328 | + { |
|
329 | + } |
|
330 | + |
|
331 | + |
|
332 | + final public static function __set_state($a = null) |
|
333 | + { |
|
334 | + return EE_Maintenance_Mode::instance(); |
|
335 | + } |
|
336 | + |
|
337 | + |
|
338 | + final public function __clone() |
|
339 | + { |
|
340 | + } |
|
341 | 341 | |
342 | 342 | |
343 | - final public static function __callStatic($a, $b) |
|
344 | - { |
|
345 | - } |
|
343 | + final public static function __callStatic($a, $b) |
|
344 | + { |
|
345 | + } |
|
346 | 346 | } |
@@ -57,7 +57,7 @@ discard block |
||
57 | 57 | public static function instance() |
58 | 58 | { |
59 | 59 | // check if class object is instantiated |
60 | - if (! self::$_instance instanceof EE_Maintenance_Mode) { |
|
60 | + if ( ! self::$_instance instanceof EE_Maintenance_Mode) { |
|
61 | 61 | self::$_instance = new self(); |
62 | 62 | } |
63 | 63 | return self::$_instance; |
@@ -179,7 +179,7 @@ discard block |
||
179 | 179 | */ |
180 | 180 | public static function disable_frontend_for_maintenance() |
181 | 181 | { |
182 | - return (! is_admin() && EE_Maintenance_Mode::instance()->level()); |
|
182 | + return ( ! is_admin() && EE_Maintenance_Mode::instance()->level()); |
|
183 | 183 | } |
184 | 184 | |
185 | 185 | |
@@ -193,14 +193,14 @@ discard block |
||
193 | 193 | ) { |
194 | 194 | wp_register_style( |
195 | 195 | 'espresso_default', |
196 | - EE_GLOBAL_ASSETS_URL . 'css/espresso_default.css', |
|
196 | + EE_GLOBAL_ASSETS_URL.'css/espresso_default.css', |
|
197 | 197 | array('dashicons'), |
198 | 198 | EVENT_ESPRESSO_VERSION |
199 | 199 | ); |
200 | 200 | wp_enqueue_style('espresso_default'); |
201 | 201 | wp_register_script( |
202 | 202 | 'espresso_core', |
203 | - EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js', |
|
203 | + EE_GLOBAL_ASSETS_URL.'scripts/espresso_core.js', |
|
204 | 204 | array('jquery'), |
205 | 205 | EVENT_ESPRESSO_VERSION, |
206 | 206 | true |
@@ -220,7 +220,7 @@ discard block |
||
220 | 220 | public static function template_include() |
221 | 221 | { |
222 | 222 | // shut 'er down down for maintenance ? then don't use any of our templates for our endpoints |
223 | - return get_template_directory() . '/index.php'; |
|
223 | + return get_template_directory().'/index.php'; |
|
224 | 224 | } |
225 | 225 | |
226 | 226 | |
@@ -256,7 +256,7 @@ discard block |
||
256 | 256 | public function display_maintenance_mode_notice() |
257 | 257 | { |
258 | 258 | // check if M-mode is engaged and for EE shortcode |
259 | - if (! (defined('DOING_AJAX') && DOING_AJAX) |
|
259 | + if ( ! (defined('DOING_AJAX') && DOING_AJAX) |
|
260 | 260 | && $this->real_level() |
261 | 261 | && ! is_admin() |
262 | 262 | && current_user_can('administrator') |
@@ -269,10 +269,10 @@ discard block |
||
269 | 269 | ), |
270 | 270 | '<div id="ee-m-mode-admin-notice-dv" class="ee-really-important-notice-dv"><a class="close-espresso-notice" title="', |
271 | 271 | '"><span class="dashicons dashicons-no"></span></a><p>', |
272 | - ' » <a href="' . add_query_arg( |
|
272 | + ' » <a href="'.add_query_arg( |
|
273 | 273 | array('page' => 'espresso_maintenance_settings'), |
274 | 274 | admin_url('admin.php') |
275 | - ) . '">', |
|
275 | + ).'">', |
|
276 | 276 | '</a></p></div>' |
277 | 277 | ); |
278 | 278 | } |
@@ -1,7 +1,7 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | if (! class_exists('WP_List_Table')) { |
4 | - require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php'; |
|
4 | + require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php'; |
|
5 | 5 | } |
6 | 6 | |
7 | 7 | |
@@ -20,847 +20,847 @@ discard block |
||
20 | 20 | abstract class EE_Admin_List_Table extends WP_List_Table |
21 | 21 | { |
22 | 22 | |
23 | - /** |
|
24 | - * holds the data that will be processed for the table |
|
25 | - * |
|
26 | - * @var array $_data |
|
27 | - */ |
|
28 | - protected $_data; |
|
29 | - |
|
30 | - |
|
31 | - /** |
|
32 | - * This holds the value of all the data available for the given view (for all pages). |
|
33 | - * |
|
34 | - * @var int $_all_data_count |
|
35 | - */ |
|
36 | - protected $_all_data_count; |
|
37 | - |
|
38 | - |
|
39 | - /** |
|
40 | - * Will contain the count of trashed items for the view label. |
|
41 | - * |
|
42 | - * @var int $_trashed_count |
|
43 | - */ |
|
44 | - protected $_trashed_count; |
|
45 | - |
|
46 | - |
|
47 | - /** |
|
48 | - * This is what will be referenced as the slug for the current screen |
|
49 | - * |
|
50 | - * @var string $_screen |
|
51 | - */ |
|
52 | - protected $_screen; |
|
53 | - |
|
54 | - |
|
55 | - /** |
|
56 | - * this is the EE_Admin_Page object |
|
57 | - * |
|
58 | - * @var EE_Admin_Page $_admin_page |
|
59 | - */ |
|
60 | - protected $_admin_page; |
|
61 | - |
|
62 | - |
|
63 | - /** |
|
64 | - * The current view |
|
65 | - * |
|
66 | - * @var string $_view |
|
67 | - */ |
|
68 | - protected $_view; |
|
69 | - |
|
70 | - |
|
71 | - /** |
|
72 | - * array of possible views for this table |
|
73 | - * |
|
74 | - * @var array $_views |
|
75 | - */ |
|
76 | - protected $_views; |
|
77 | - |
|
78 | - |
|
79 | - /** |
|
80 | - * An array of key => value pairs containing information about the current table |
|
81 | - * array( |
|
82 | - * 'plural' => 'plural label', |
|
83 | - * 'singular' => 'singular label', |
|
84 | - * 'ajax' => false, //whether to use ajax or not |
|
85 | - * 'screen' => null, //string used to reference what screen this is |
|
86 | - * (WP_List_table converts to screen object) |
|
87 | - * ) |
|
88 | - * |
|
89 | - * @var array $_wp_list_args |
|
90 | - */ |
|
91 | - protected $_wp_list_args; |
|
92 | - |
|
93 | - /** |
|
94 | - * an array of column names |
|
95 | - * array( |
|
96 | - * 'internal-name' => 'Title' |
|
97 | - * ) |
|
98 | - * |
|
99 | - * @var array $_columns |
|
100 | - */ |
|
101 | - protected $_columns; |
|
102 | - |
|
103 | - /** |
|
104 | - * An array of sortable columns |
|
105 | - * array( |
|
106 | - * 'internal-name' => 'orderby' //or |
|
107 | - * 'internal-name' => array( 'orderby', true ) |
|
108 | - * ) |
|
109 | - * |
|
110 | - * @var array $_sortable_columns |
|
111 | - */ |
|
112 | - protected $_sortable_columns; |
|
113 | - |
|
114 | - /** |
|
115 | - * callback method used to perform AJAX row reordering |
|
116 | - * |
|
117 | - * @var string $_ajax_sorting_callback |
|
118 | - */ |
|
119 | - protected $_ajax_sorting_callback; |
|
120 | - |
|
121 | - /** |
|
122 | - * An array of hidden columns (if needed) |
|
123 | - * array('internal-name', 'internal-name') |
|
124 | - * |
|
125 | - * @var array $_hidden_columns |
|
126 | - */ |
|
127 | - protected $_hidden_columns; |
|
128 | - |
|
129 | - /** |
|
130 | - * holds the per_page value |
|
131 | - * |
|
132 | - * @var int $_per_page |
|
133 | - */ |
|
134 | - protected $_per_page; |
|
135 | - |
|
136 | - /** |
|
137 | - * holds what page number is currently being viewed |
|
138 | - * |
|
139 | - * @var int $_current_page |
|
140 | - */ |
|
141 | - protected $_current_page; |
|
142 | - |
|
143 | - /** |
|
144 | - * the reference string for the nonce_action |
|
145 | - * |
|
146 | - * @var string $_nonce_action_ref |
|
147 | - */ |
|
148 | - protected $_nonce_action_ref; |
|
149 | - |
|
150 | - /** |
|
151 | - * property to hold incoming request data (as set by the admin_page_core) |
|
152 | - * |
|
153 | - * @var array $_req_data |
|
154 | - */ |
|
155 | - protected $_req_data; |
|
156 | - |
|
157 | - |
|
158 | - /** |
|
159 | - * yes / no array for admin form fields |
|
160 | - * |
|
161 | - * @var array $_yes_no |
|
162 | - */ |
|
163 | - protected $_yes_no = array(); |
|
164 | - |
|
165 | - /** |
|
166 | - * Array describing buttons that should appear at the bottom of the page |
|
167 | - * Keys are strings that represent the button's function (specifically a key in _labels['buttons']), |
|
168 | - * and the values are another array with the following keys |
|
169 | - * array( |
|
170 | - * 'route' => 'page_route', |
|
171 | - * 'extra_request' => array('evt_id' => 1 ); //extra request vars that need to be included in the button. |
|
172 | - * ) |
|
173 | - * |
|
174 | - * @var array $_bottom_buttons |
|
175 | - */ |
|
176 | - protected $_bottom_buttons = array(); |
|
177 | - |
|
178 | - |
|
179 | - /** |
|
180 | - * Used to indicate what should be the primary column for the list table. |
|
181 | - * If not present then falls back to what WP calculates |
|
182 | - * as the primary column. |
|
183 | - * |
|
184 | - * @type string $_primary_column |
|
185 | - */ |
|
186 | - protected $_primary_column = ''; |
|
187 | - |
|
188 | - |
|
189 | - /** |
|
190 | - * Used to indicate whether the table has a checkbox column or not. |
|
191 | - * |
|
192 | - * @type bool $_has_checkbox_column |
|
193 | - */ |
|
194 | - protected $_has_checkbox_column = false; |
|
195 | - |
|
196 | - |
|
197 | - /** |
|
198 | - * @param \EE_Admin_Page $admin_page we use this for obtaining everything we need in the list table |
|
199 | - */ |
|
200 | - public function __construct(EE_Admin_Page $admin_page) |
|
201 | - { |
|
202 | - $this->_admin_page = $admin_page; |
|
203 | - $this->_req_data = $this->_admin_page->get_request_data(); |
|
204 | - $this->_view = $this->_admin_page->get_view(); |
|
205 | - $this->_views = empty($this->_views) ? $this->_admin_page->get_list_table_view_RLs() : $this->_views; |
|
206 | - $this->_current_page = $this->get_pagenum(); |
|
207 | - $this->_screen = $this->_admin_page->get_current_page() . '_' . $this->_admin_page->get_current_view(); |
|
208 | - $this->_yes_no = array(__('No', 'event_espresso'), __('Yes', 'event_espresso')); |
|
209 | - |
|
210 | - $this->_per_page = $this->get_items_per_page($this->_screen . '_per_page', 10); |
|
211 | - |
|
212 | - $this->_setup_data(); |
|
213 | - $this->_add_view_counts(); |
|
214 | - |
|
215 | - $this->_nonce_action_ref = $this->_view; |
|
216 | - |
|
217 | - $this->_set_properties(); |
|
218 | - |
|
219 | - // set primary column |
|
220 | - add_filter('list_table_primary_column', array($this, 'set_primary_column')); |
|
221 | - |
|
222 | - // set parent defaults |
|
223 | - parent::__construct($this->_wp_list_args); |
|
224 | - |
|
225 | - $this->prepare_items(); |
|
226 | - } |
|
227 | - |
|
228 | - |
|
229 | - /** |
|
230 | - * _setup_data |
|
231 | - * this method is used to setup the $_data, $_all_data_count, and _per_page properties |
|
232 | - * |
|
233 | - * @uses $this->_admin_page |
|
234 | - * @return void |
|
235 | - */ |
|
236 | - abstract protected function _setup_data(); |
|
237 | - |
|
238 | - |
|
239 | - /** |
|
240 | - * set the properties that this class needs to be able to execute wp_list_table properly |
|
241 | - * properties set: |
|
242 | - * _wp_list_args = what the arguments required for the parent _wp_list_table. |
|
243 | - * _columns = set the columns in an array. |
|
244 | - * _sortable_columns = columns that are sortable (array). |
|
245 | - * _hidden_columns = columns that are hidden (array) |
|
246 | - * _default_orderby = the default orderby for sorting. |
|
247 | - * |
|
248 | - * @abstract |
|
249 | - * @access protected |
|
250 | - * @return void |
|
251 | - */ |
|
252 | - abstract protected function _set_properties(); |
|
253 | - |
|
254 | - |
|
255 | - /** |
|
256 | - * _get_table_filters |
|
257 | - * We use this to assemble and return any filters that are associated with this table that help further refine what |
|
258 | - * get's shown in the table. |
|
259 | - * |
|
260 | - * @abstract |
|
261 | - * @access protected |
|
262 | - * @return string |
|
263 | - */ |
|
264 | - abstract protected function _get_table_filters(); |
|
265 | - |
|
266 | - |
|
267 | - /** |
|
268 | - * this is a method that child class will do to add counts to the views array so when views are displayed the |
|
269 | - * counts of the views is accurate. |
|
270 | - * |
|
271 | - * @abstract |
|
272 | - * @access protected |
|
273 | - * @return void |
|
274 | - */ |
|
275 | - abstract protected function _add_view_counts(); |
|
276 | - |
|
277 | - |
|
278 | - /** |
|
279 | - * _get_hidden_fields |
|
280 | - * returns a html string of hidden fields so if any table filters are used the current view will be respected. |
|
281 | - * |
|
282 | - * @return string |
|
283 | - */ |
|
284 | - protected function _get_hidden_fields() |
|
285 | - { |
|
286 | - $action = isset($this->_req_data['route']) ? $this->_req_data['route'] : ''; |
|
287 | - $action = empty($action) && isset($this->_req_data['action']) ? $this->_req_data['action'] : $action; |
|
288 | - // if action is STILL empty, then we set it to default |
|
289 | - $action = empty($action) ? 'default' : $action; |
|
290 | - $field = '<input type="hidden" name="page" value="' . $this->_req_data['page'] . '" />' . "\n"; |
|
291 | - $field .= '<input type="hidden" name="route" value="' . $action . '" />' . "\n";/**/ |
|
292 | - $field .= '<input type="hidden" name="perpage" value="' . $this->_per_page . '" />' . "\n"; |
|
293 | - |
|
294 | - $bulk_actions = $this->_get_bulk_actions(); |
|
295 | - foreach ($bulk_actions as $bulk_action => $label) { |
|
296 | - $field .= '<input type="hidden" name="' . $bulk_action . '_nonce"' |
|
297 | - . ' value="' . wp_create_nonce($bulk_action . '_nonce') . '" />' . "\n"; |
|
298 | - } |
|
299 | - |
|
300 | - return $field; |
|
301 | - } |
|
302 | - |
|
303 | - |
|
304 | - /** |
|
305 | - * _set_column_info |
|
306 | - * we're using this to set the column headers property. |
|
307 | - * |
|
308 | - * @access protected |
|
309 | - * @return void |
|
310 | - */ |
|
311 | - protected function _set_column_info() |
|
312 | - { |
|
313 | - $columns = $this->get_columns(); |
|
314 | - $hidden = $this->get_hidden_columns(); |
|
315 | - $_sortable = $this->get_sortable_columns(); |
|
316 | - |
|
317 | - /** |
|
318 | - * Dynamic hook allowing for adding sortable columns in this list table. |
|
319 | - * Note that $this->screen->id is in the format |
|
320 | - * {sanitize_title($top_level_menu_label)}_page_{$espresso_admin_page_slug}. So for the messages list |
|
321 | - * table it is: event-espresso_page_espresso_messages. |
|
322 | - * However, take note that if the top level menu label has been translated (i.e. "Event Espresso"). then the |
|
323 | - * hook prefix ("event-espresso") will be different. |
|
324 | - * |
|
325 | - * @var array |
|
326 | - */ |
|
327 | - $_sortable = apply_filters("FHEE_manage_{$this->screen->id}_sortable_columns", $_sortable, $this->_screen); |
|
328 | - |
|
329 | - $sortable = array(); |
|
330 | - foreach ($_sortable as $id => $data) { |
|
331 | - if (empty($data)) { |
|
332 | - continue; |
|
333 | - } |
|
334 | - // fix for offset errors with WP_List_Table default get_columninfo() |
|
335 | - if (is_array($data)) { |
|
336 | - $_data[0] = key($data); |
|
337 | - $_data[1] = isset($data[1]) ? $data[1] : false; |
|
338 | - } else { |
|
339 | - $_data[0] = $data; |
|
340 | - } |
|
341 | - |
|
342 | - $data = (array) $data; |
|
343 | - |
|
344 | - if (! isset($data[1])) { |
|
345 | - $_data[1] = false; |
|
346 | - } |
|
347 | - |
|
348 | - $sortable[ $id ] = $_data; |
|
349 | - } |
|
350 | - $primary = $this->get_primary_column_name(); |
|
351 | - $this->_column_headers = array($columns, $hidden, $sortable, $primary); |
|
352 | - } |
|
353 | - |
|
354 | - |
|
355 | - /** |
|
356 | - * Added for WP4.1 backward compat (@see https://events.codebasehq.com/projects/event-espresso/tickets/8814) |
|
357 | - * |
|
358 | - * @return string |
|
359 | - */ |
|
360 | - protected function get_primary_column_name() |
|
361 | - { |
|
362 | - foreach (class_parents($this) as $parent) { |
|
363 | - if ($parent === 'WP_List_Table' && method_exists($parent, 'get_primary_column_name')) { |
|
364 | - return parent::get_primary_column_name(); |
|
365 | - } |
|
366 | - } |
|
367 | - return $this->_primary_column; |
|
368 | - } |
|
369 | - |
|
370 | - |
|
371 | - /** |
|
372 | - * Added for WP4.1 backward compat (@see https://events.codebasehq.com/projects/event-espresso/tickets/8814) |
|
373 | - * |
|
374 | - * @param EE_Base_Class $item |
|
375 | - * @param string $column_name |
|
376 | - * @param string $primary |
|
377 | - * @return string |
|
378 | - */ |
|
379 | - protected function handle_row_actions($item, $column_name, $primary) |
|
380 | - { |
|
381 | - foreach (class_parents($this) as $parent) { |
|
382 | - if ($parent === 'WP_List_Table' && method_exists($parent, 'handle_row_actions')) { |
|
383 | - return parent::handle_row_actions($item, $column_name, $primary); |
|
384 | - } |
|
385 | - } |
|
386 | - return ''; |
|
387 | - } |
|
388 | - |
|
389 | - |
|
390 | - /** |
|
391 | - * _get_bulk_actions |
|
392 | - * This is a wrapper called by WP_List_Table::get_bulk_actions() |
|
393 | - * |
|
394 | - * @access protected |
|
395 | - * @return array bulk_actions |
|
396 | - */ |
|
397 | - protected function _get_bulk_actions() |
|
398 | - { |
|
399 | - $actions = array(); |
|
400 | - // the _views property should have the bulk_actions, so let's go through and extract them into a properly |
|
401 | - // formatted array for the wp_list_table(); |
|
402 | - foreach ($this->_views as $view => $args) { |
|
403 | - if ($this->_view === $view && isset($args['bulk_action']) && is_array($args['bulk_action'])) { |
|
404 | - // each bulk action will correspond with a admin page route, so we can check whatever the capability is |
|
405 | - // for that page route and skip adding the bulk action if no access for the current logged in user. |
|
406 | - foreach ($args['bulk_action'] as $route => $label) { |
|
407 | - if ($this->_admin_page->check_user_access($route, true)) { |
|
408 | - $actions[ $route ] = $label; |
|
409 | - } |
|
410 | - } |
|
411 | - } |
|
412 | - } |
|
413 | - return $actions; |
|
414 | - } |
|
415 | - |
|
416 | - |
|
417 | - /** |
|
418 | - * Generate the table navigation above or below the table. |
|
419 | - * Overrides the parent table nav in WP_List_Table so we can hide the bulk action div if there are no bulk actions. |
|
420 | - * |
|
421 | - * @since 4.9.44.rc.001 |
|
422 | - */ |
|
423 | - public function display_tablenav($which) |
|
424 | - { |
|
425 | - if ('top' === $which) { |
|
426 | - wp_nonce_field('bulk-' . $this->_args['plural']); |
|
427 | - } |
|
428 | - ?> |
|
23 | + /** |
|
24 | + * holds the data that will be processed for the table |
|
25 | + * |
|
26 | + * @var array $_data |
|
27 | + */ |
|
28 | + protected $_data; |
|
29 | + |
|
30 | + |
|
31 | + /** |
|
32 | + * This holds the value of all the data available for the given view (for all pages). |
|
33 | + * |
|
34 | + * @var int $_all_data_count |
|
35 | + */ |
|
36 | + protected $_all_data_count; |
|
37 | + |
|
38 | + |
|
39 | + /** |
|
40 | + * Will contain the count of trashed items for the view label. |
|
41 | + * |
|
42 | + * @var int $_trashed_count |
|
43 | + */ |
|
44 | + protected $_trashed_count; |
|
45 | + |
|
46 | + |
|
47 | + /** |
|
48 | + * This is what will be referenced as the slug for the current screen |
|
49 | + * |
|
50 | + * @var string $_screen |
|
51 | + */ |
|
52 | + protected $_screen; |
|
53 | + |
|
54 | + |
|
55 | + /** |
|
56 | + * this is the EE_Admin_Page object |
|
57 | + * |
|
58 | + * @var EE_Admin_Page $_admin_page |
|
59 | + */ |
|
60 | + protected $_admin_page; |
|
61 | + |
|
62 | + |
|
63 | + /** |
|
64 | + * The current view |
|
65 | + * |
|
66 | + * @var string $_view |
|
67 | + */ |
|
68 | + protected $_view; |
|
69 | + |
|
70 | + |
|
71 | + /** |
|
72 | + * array of possible views for this table |
|
73 | + * |
|
74 | + * @var array $_views |
|
75 | + */ |
|
76 | + protected $_views; |
|
77 | + |
|
78 | + |
|
79 | + /** |
|
80 | + * An array of key => value pairs containing information about the current table |
|
81 | + * array( |
|
82 | + * 'plural' => 'plural label', |
|
83 | + * 'singular' => 'singular label', |
|
84 | + * 'ajax' => false, //whether to use ajax or not |
|
85 | + * 'screen' => null, //string used to reference what screen this is |
|
86 | + * (WP_List_table converts to screen object) |
|
87 | + * ) |
|
88 | + * |
|
89 | + * @var array $_wp_list_args |
|
90 | + */ |
|
91 | + protected $_wp_list_args; |
|
92 | + |
|
93 | + /** |
|
94 | + * an array of column names |
|
95 | + * array( |
|
96 | + * 'internal-name' => 'Title' |
|
97 | + * ) |
|
98 | + * |
|
99 | + * @var array $_columns |
|
100 | + */ |
|
101 | + protected $_columns; |
|
102 | + |
|
103 | + /** |
|
104 | + * An array of sortable columns |
|
105 | + * array( |
|
106 | + * 'internal-name' => 'orderby' //or |
|
107 | + * 'internal-name' => array( 'orderby', true ) |
|
108 | + * ) |
|
109 | + * |
|
110 | + * @var array $_sortable_columns |
|
111 | + */ |
|
112 | + protected $_sortable_columns; |
|
113 | + |
|
114 | + /** |
|
115 | + * callback method used to perform AJAX row reordering |
|
116 | + * |
|
117 | + * @var string $_ajax_sorting_callback |
|
118 | + */ |
|
119 | + protected $_ajax_sorting_callback; |
|
120 | + |
|
121 | + /** |
|
122 | + * An array of hidden columns (if needed) |
|
123 | + * array('internal-name', 'internal-name') |
|
124 | + * |
|
125 | + * @var array $_hidden_columns |
|
126 | + */ |
|
127 | + protected $_hidden_columns; |
|
128 | + |
|
129 | + /** |
|
130 | + * holds the per_page value |
|
131 | + * |
|
132 | + * @var int $_per_page |
|
133 | + */ |
|
134 | + protected $_per_page; |
|
135 | + |
|
136 | + /** |
|
137 | + * holds what page number is currently being viewed |
|
138 | + * |
|
139 | + * @var int $_current_page |
|
140 | + */ |
|
141 | + protected $_current_page; |
|
142 | + |
|
143 | + /** |
|
144 | + * the reference string for the nonce_action |
|
145 | + * |
|
146 | + * @var string $_nonce_action_ref |
|
147 | + */ |
|
148 | + protected $_nonce_action_ref; |
|
149 | + |
|
150 | + /** |
|
151 | + * property to hold incoming request data (as set by the admin_page_core) |
|
152 | + * |
|
153 | + * @var array $_req_data |
|
154 | + */ |
|
155 | + protected $_req_data; |
|
156 | + |
|
157 | + |
|
158 | + /** |
|
159 | + * yes / no array for admin form fields |
|
160 | + * |
|
161 | + * @var array $_yes_no |
|
162 | + */ |
|
163 | + protected $_yes_no = array(); |
|
164 | + |
|
165 | + /** |
|
166 | + * Array describing buttons that should appear at the bottom of the page |
|
167 | + * Keys are strings that represent the button's function (specifically a key in _labels['buttons']), |
|
168 | + * and the values are another array with the following keys |
|
169 | + * array( |
|
170 | + * 'route' => 'page_route', |
|
171 | + * 'extra_request' => array('evt_id' => 1 ); //extra request vars that need to be included in the button. |
|
172 | + * ) |
|
173 | + * |
|
174 | + * @var array $_bottom_buttons |
|
175 | + */ |
|
176 | + protected $_bottom_buttons = array(); |
|
177 | + |
|
178 | + |
|
179 | + /** |
|
180 | + * Used to indicate what should be the primary column for the list table. |
|
181 | + * If not present then falls back to what WP calculates |
|
182 | + * as the primary column. |
|
183 | + * |
|
184 | + * @type string $_primary_column |
|
185 | + */ |
|
186 | + protected $_primary_column = ''; |
|
187 | + |
|
188 | + |
|
189 | + /** |
|
190 | + * Used to indicate whether the table has a checkbox column or not. |
|
191 | + * |
|
192 | + * @type bool $_has_checkbox_column |
|
193 | + */ |
|
194 | + protected $_has_checkbox_column = false; |
|
195 | + |
|
196 | + |
|
197 | + /** |
|
198 | + * @param \EE_Admin_Page $admin_page we use this for obtaining everything we need in the list table |
|
199 | + */ |
|
200 | + public function __construct(EE_Admin_Page $admin_page) |
|
201 | + { |
|
202 | + $this->_admin_page = $admin_page; |
|
203 | + $this->_req_data = $this->_admin_page->get_request_data(); |
|
204 | + $this->_view = $this->_admin_page->get_view(); |
|
205 | + $this->_views = empty($this->_views) ? $this->_admin_page->get_list_table_view_RLs() : $this->_views; |
|
206 | + $this->_current_page = $this->get_pagenum(); |
|
207 | + $this->_screen = $this->_admin_page->get_current_page() . '_' . $this->_admin_page->get_current_view(); |
|
208 | + $this->_yes_no = array(__('No', 'event_espresso'), __('Yes', 'event_espresso')); |
|
209 | + |
|
210 | + $this->_per_page = $this->get_items_per_page($this->_screen . '_per_page', 10); |
|
211 | + |
|
212 | + $this->_setup_data(); |
|
213 | + $this->_add_view_counts(); |
|
214 | + |
|
215 | + $this->_nonce_action_ref = $this->_view; |
|
216 | + |
|
217 | + $this->_set_properties(); |
|
218 | + |
|
219 | + // set primary column |
|
220 | + add_filter('list_table_primary_column', array($this, 'set_primary_column')); |
|
221 | + |
|
222 | + // set parent defaults |
|
223 | + parent::__construct($this->_wp_list_args); |
|
224 | + |
|
225 | + $this->prepare_items(); |
|
226 | + } |
|
227 | + |
|
228 | + |
|
229 | + /** |
|
230 | + * _setup_data |
|
231 | + * this method is used to setup the $_data, $_all_data_count, and _per_page properties |
|
232 | + * |
|
233 | + * @uses $this->_admin_page |
|
234 | + * @return void |
|
235 | + */ |
|
236 | + abstract protected function _setup_data(); |
|
237 | + |
|
238 | + |
|
239 | + /** |
|
240 | + * set the properties that this class needs to be able to execute wp_list_table properly |
|
241 | + * properties set: |
|
242 | + * _wp_list_args = what the arguments required for the parent _wp_list_table. |
|
243 | + * _columns = set the columns in an array. |
|
244 | + * _sortable_columns = columns that are sortable (array). |
|
245 | + * _hidden_columns = columns that are hidden (array) |
|
246 | + * _default_orderby = the default orderby for sorting. |
|
247 | + * |
|
248 | + * @abstract |
|
249 | + * @access protected |
|
250 | + * @return void |
|
251 | + */ |
|
252 | + abstract protected function _set_properties(); |
|
253 | + |
|
254 | + |
|
255 | + /** |
|
256 | + * _get_table_filters |
|
257 | + * We use this to assemble and return any filters that are associated with this table that help further refine what |
|
258 | + * get's shown in the table. |
|
259 | + * |
|
260 | + * @abstract |
|
261 | + * @access protected |
|
262 | + * @return string |
|
263 | + */ |
|
264 | + abstract protected function _get_table_filters(); |
|
265 | + |
|
266 | + |
|
267 | + /** |
|
268 | + * this is a method that child class will do to add counts to the views array so when views are displayed the |
|
269 | + * counts of the views is accurate. |
|
270 | + * |
|
271 | + * @abstract |
|
272 | + * @access protected |
|
273 | + * @return void |
|
274 | + */ |
|
275 | + abstract protected function _add_view_counts(); |
|
276 | + |
|
277 | + |
|
278 | + /** |
|
279 | + * _get_hidden_fields |
|
280 | + * returns a html string of hidden fields so if any table filters are used the current view will be respected. |
|
281 | + * |
|
282 | + * @return string |
|
283 | + */ |
|
284 | + protected function _get_hidden_fields() |
|
285 | + { |
|
286 | + $action = isset($this->_req_data['route']) ? $this->_req_data['route'] : ''; |
|
287 | + $action = empty($action) && isset($this->_req_data['action']) ? $this->_req_data['action'] : $action; |
|
288 | + // if action is STILL empty, then we set it to default |
|
289 | + $action = empty($action) ? 'default' : $action; |
|
290 | + $field = '<input type="hidden" name="page" value="' . $this->_req_data['page'] . '" />' . "\n"; |
|
291 | + $field .= '<input type="hidden" name="route" value="' . $action . '" />' . "\n";/**/ |
|
292 | + $field .= '<input type="hidden" name="perpage" value="' . $this->_per_page . '" />' . "\n"; |
|
293 | + |
|
294 | + $bulk_actions = $this->_get_bulk_actions(); |
|
295 | + foreach ($bulk_actions as $bulk_action => $label) { |
|
296 | + $field .= '<input type="hidden" name="' . $bulk_action . '_nonce"' |
|
297 | + . ' value="' . wp_create_nonce($bulk_action . '_nonce') . '" />' . "\n"; |
|
298 | + } |
|
299 | + |
|
300 | + return $field; |
|
301 | + } |
|
302 | + |
|
303 | + |
|
304 | + /** |
|
305 | + * _set_column_info |
|
306 | + * we're using this to set the column headers property. |
|
307 | + * |
|
308 | + * @access protected |
|
309 | + * @return void |
|
310 | + */ |
|
311 | + protected function _set_column_info() |
|
312 | + { |
|
313 | + $columns = $this->get_columns(); |
|
314 | + $hidden = $this->get_hidden_columns(); |
|
315 | + $_sortable = $this->get_sortable_columns(); |
|
316 | + |
|
317 | + /** |
|
318 | + * Dynamic hook allowing for adding sortable columns in this list table. |
|
319 | + * Note that $this->screen->id is in the format |
|
320 | + * {sanitize_title($top_level_menu_label)}_page_{$espresso_admin_page_slug}. So for the messages list |
|
321 | + * table it is: event-espresso_page_espresso_messages. |
|
322 | + * However, take note that if the top level menu label has been translated (i.e. "Event Espresso"). then the |
|
323 | + * hook prefix ("event-espresso") will be different. |
|
324 | + * |
|
325 | + * @var array |
|
326 | + */ |
|
327 | + $_sortable = apply_filters("FHEE_manage_{$this->screen->id}_sortable_columns", $_sortable, $this->_screen); |
|
328 | + |
|
329 | + $sortable = array(); |
|
330 | + foreach ($_sortable as $id => $data) { |
|
331 | + if (empty($data)) { |
|
332 | + continue; |
|
333 | + } |
|
334 | + // fix for offset errors with WP_List_Table default get_columninfo() |
|
335 | + if (is_array($data)) { |
|
336 | + $_data[0] = key($data); |
|
337 | + $_data[1] = isset($data[1]) ? $data[1] : false; |
|
338 | + } else { |
|
339 | + $_data[0] = $data; |
|
340 | + } |
|
341 | + |
|
342 | + $data = (array) $data; |
|
343 | + |
|
344 | + if (! isset($data[1])) { |
|
345 | + $_data[1] = false; |
|
346 | + } |
|
347 | + |
|
348 | + $sortable[ $id ] = $_data; |
|
349 | + } |
|
350 | + $primary = $this->get_primary_column_name(); |
|
351 | + $this->_column_headers = array($columns, $hidden, $sortable, $primary); |
|
352 | + } |
|
353 | + |
|
354 | + |
|
355 | + /** |
|
356 | + * Added for WP4.1 backward compat (@see https://events.codebasehq.com/projects/event-espresso/tickets/8814) |
|
357 | + * |
|
358 | + * @return string |
|
359 | + */ |
|
360 | + protected function get_primary_column_name() |
|
361 | + { |
|
362 | + foreach (class_parents($this) as $parent) { |
|
363 | + if ($parent === 'WP_List_Table' && method_exists($parent, 'get_primary_column_name')) { |
|
364 | + return parent::get_primary_column_name(); |
|
365 | + } |
|
366 | + } |
|
367 | + return $this->_primary_column; |
|
368 | + } |
|
369 | + |
|
370 | + |
|
371 | + /** |
|
372 | + * Added for WP4.1 backward compat (@see https://events.codebasehq.com/projects/event-espresso/tickets/8814) |
|
373 | + * |
|
374 | + * @param EE_Base_Class $item |
|
375 | + * @param string $column_name |
|
376 | + * @param string $primary |
|
377 | + * @return string |
|
378 | + */ |
|
379 | + protected function handle_row_actions($item, $column_name, $primary) |
|
380 | + { |
|
381 | + foreach (class_parents($this) as $parent) { |
|
382 | + if ($parent === 'WP_List_Table' && method_exists($parent, 'handle_row_actions')) { |
|
383 | + return parent::handle_row_actions($item, $column_name, $primary); |
|
384 | + } |
|
385 | + } |
|
386 | + return ''; |
|
387 | + } |
|
388 | + |
|
389 | + |
|
390 | + /** |
|
391 | + * _get_bulk_actions |
|
392 | + * This is a wrapper called by WP_List_Table::get_bulk_actions() |
|
393 | + * |
|
394 | + * @access protected |
|
395 | + * @return array bulk_actions |
|
396 | + */ |
|
397 | + protected function _get_bulk_actions() |
|
398 | + { |
|
399 | + $actions = array(); |
|
400 | + // the _views property should have the bulk_actions, so let's go through and extract them into a properly |
|
401 | + // formatted array for the wp_list_table(); |
|
402 | + foreach ($this->_views as $view => $args) { |
|
403 | + if ($this->_view === $view && isset($args['bulk_action']) && is_array($args['bulk_action'])) { |
|
404 | + // each bulk action will correspond with a admin page route, so we can check whatever the capability is |
|
405 | + // for that page route and skip adding the bulk action if no access for the current logged in user. |
|
406 | + foreach ($args['bulk_action'] as $route => $label) { |
|
407 | + if ($this->_admin_page->check_user_access($route, true)) { |
|
408 | + $actions[ $route ] = $label; |
|
409 | + } |
|
410 | + } |
|
411 | + } |
|
412 | + } |
|
413 | + return $actions; |
|
414 | + } |
|
415 | + |
|
416 | + |
|
417 | + /** |
|
418 | + * Generate the table navigation above or below the table. |
|
419 | + * Overrides the parent table nav in WP_List_Table so we can hide the bulk action div if there are no bulk actions. |
|
420 | + * |
|
421 | + * @since 4.9.44.rc.001 |
|
422 | + */ |
|
423 | + public function display_tablenav($which) |
|
424 | + { |
|
425 | + if ('top' === $which) { |
|
426 | + wp_nonce_field('bulk-' . $this->_args['plural']); |
|
427 | + } |
|
428 | + ?> |
|
429 | 429 | <div class="tablenav <?php echo esc_attr($which); ?>"> |
430 | 430 | <?php if ($this->_get_bulk_actions()) { ?> |
431 | 431 | <div class="alignleft actions bulkactions"> |
432 | 432 | <?php $this->bulk_actions(); ?> |
433 | 433 | </div> |
434 | 434 | <?php } |
435 | - $this->extra_tablenav($which); |
|
436 | - $this->pagination($which); |
|
437 | - ?> |
|
435 | + $this->extra_tablenav($which); |
|
436 | + $this->pagination($which); |
|
437 | + ?> |
|
438 | 438 | |
439 | 439 | <br class="clear"/> |
440 | 440 | </div> |
441 | 441 | <?php |
442 | - } |
|
443 | - |
|
444 | - |
|
445 | - /** |
|
446 | - * _filters |
|
447 | - * This receives the filters array from children _get_table_filters() and assembles the string including the filter |
|
448 | - * button. |
|
449 | - * |
|
450 | - * @access private |
|
451 | - * @return string html showing filters |
|
452 | - */ |
|
453 | - private function _filters() |
|
454 | - { |
|
455 | - $classname = get_class($this); |
|
456 | - $filters = apply_filters( |
|
457 | - "FHEE__{$classname}__filters", |
|
458 | - (array) $this->_get_table_filters(), |
|
459 | - $this, |
|
460 | - $this->_screen |
|
461 | - ); |
|
462 | - |
|
463 | - if (empty($filters)) { |
|
464 | - return; |
|
465 | - } |
|
466 | - foreach ($filters as $filter) { |
|
467 | - echo $filter; |
|
468 | - } |
|
469 | - // add filter button at end |
|
470 | - echo '<input type="submit" class="button-secondary" value="' |
|
471 | - . esc_html__('Filter', 'event_espresso') |
|
472 | - . '" id="post-query-submit" />'; |
|
473 | - // add reset filters button at end |
|
474 | - echo '<a class="button button-secondary" href="' |
|
475 | - . $this->_admin_page->get_current_page_view_url() |
|
476 | - . '" style="display:inline-block">' |
|
477 | - . esc_html__('Reset Filters', 'event_espresso') |
|
478 | - . '</a>'; |
|
479 | - } |
|
480 | - |
|
481 | - |
|
482 | - /** |
|
483 | - * Callback for 'list_table_primary_column' WordPress filter |
|
484 | - * If child EE_Admin_List_Table classes set the _primary_column property then that will be set as the primary |
|
485 | - * column when class is instantiated. |
|
486 | - * |
|
487 | - * @see WP_List_Table::get_primary_column_name |
|
488 | - * @param string $column_name |
|
489 | - * @return string |
|
490 | - */ |
|
491 | - public function set_primary_column($column_name) |
|
492 | - { |
|
493 | - return ! empty($this->_primary_column) ? $this->_primary_column : $column_name; |
|
494 | - } |
|
495 | - |
|
496 | - |
|
497 | - /** |
|
498 | - * |
|
499 | - */ |
|
500 | - public function prepare_items() |
|
501 | - { |
|
502 | - |
|
503 | - $this->_set_column_info(); |
|
504 | - // $this->_column_headers = $this->get_column_info(); |
|
505 | - $total_items = $this->_all_data_count; |
|
506 | - $this->process_bulk_action(); |
|
507 | - |
|
508 | - $this->items = $this->_data; |
|
509 | - $this->set_pagination_args( |
|
510 | - array( |
|
511 | - 'total_items' => $total_items, |
|
512 | - 'per_page' => $this->_per_page, |
|
513 | - 'total_pages' => ceil($total_items / $this->_per_page), |
|
514 | - ) |
|
515 | - ); |
|
516 | - } |
|
517 | - |
|
518 | - |
|
519 | - /** |
|
520 | - * This column is the default for when there is no defined column method for a registered column. |
|
521 | - * This can be overridden by child classes, but allows for hooking in for custom columns. |
|
522 | - * |
|
523 | - * @param EE_Base_Class $item |
|
524 | - * @param string $column_name The column being called. |
|
525 | - * @return string html content for the column |
|
526 | - */ |
|
527 | - public function column_default($item, $column_name) |
|
528 | - { |
|
529 | - /** |
|
530 | - * Dynamic hook allowing for adding additional column content in this list table. |
|
531 | - * Note that $this->screen->id is in the format |
|
532 | - * {sanitize_title($top_level_menu_label)}_page_{$espresso_admin_page_slug}. So for the messages list |
|
533 | - * table it is: event-espresso_page_espresso_messages. |
|
534 | - * However, take note that if the top level menu label has been translated (i.e. "Event Espresso"). then the |
|
535 | - * hook prefix ("event-espresso") will be different. |
|
536 | - */ |
|
537 | - do_action( |
|
538 | - 'AHEE__EE_Admin_List_Table__column_' . $column_name . '__' . $this->screen->id, |
|
539 | - $item, |
|
540 | - $this->_screen |
|
541 | - ); |
|
542 | - } |
|
543 | - |
|
544 | - |
|
545 | - /** |
|
546 | - * Get a list of columns. The format is: |
|
547 | - * 'internal-name' => 'Title' |
|
548 | - * |
|
549 | - * @since 3.1.0 |
|
550 | - * @access public |
|
551 | - * @abstract |
|
552 | - * @return array |
|
553 | - */ |
|
554 | - public function get_columns() |
|
555 | - { |
|
556 | - /** |
|
557 | - * Dynamic hook allowing for adding additional columns in this list table. |
|
558 | - * Note that $this->screen->id is in the format |
|
559 | - * {sanitize_title($top_level_menu_label)}_page_{$espresso_admin_page_slug}. So for the messages list |
|
560 | - * table it is: event-espresso_page_espresso_messages. |
|
561 | - * However, take note that if the top level menu label has been translated (i.e. "Event Espresso"). then the |
|
562 | - * hook prefix ("event-espresso") will be different. |
|
563 | - * |
|
564 | - * @var array |
|
565 | - */ |
|
566 | - $columns = apply_filters('FHEE_manage_' . $this->screen->id . '_columns', $this->_columns, $this->_screen); |
|
567 | - return $columns; |
|
568 | - } |
|
569 | - |
|
570 | - |
|
571 | - /** |
|
572 | - * Get an associative array ( id => link ) with the list |
|
573 | - * of views available on this table. |
|
574 | - * |
|
575 | - * @since 3.1.0 |
|
576 | - * @access protected |
|
577 | - * @return array |
|
578 | - */ |
|
579 | - public function get_views() |
|
580 | - { |
|
581 | - return $this->_views; |
|
582 | - } |
|
583 | - |
|
584 | - |
|
585 | - /** |
|
586 | - * Generate the views html. |
|
587 | - */ |
|
588 | - public function display_views() |
|
589 | - { |
|
590 | - $views = $this->get_views(); |
|
591 | - $assembled_views = array(); |
|
592 | - |
|
593 | - if (empty($views)) { |
|
594 | - return; |
|
595 | - } |
|
596 | - echo "<ul class='subsubsub'>\n"; |
|
597 | - foreach ($views as $view) { |
|
598 | - $count = isset($view['count']) && ! empty($view['count']) ? absint($view['count']) : 0; |
|
599 | - if (isset($view['slug'], $view['class'], $view['url'], $view['label'])) { |
|
600 | - $assembled_views[ $view['slug'] ] = "\t<li class='" . $view['class'] . "'>" |
|
601 | - . '<a href="' . $view['url'] . '">' . $view['label'] . '</a>' |
|
602 | - . ' <span class="count">(' . $count . ')</span>'; |
|
603 | - } |
|
604 | - } |
|
605 | - |
|
606 | - echo ! empty($assembled_views) ? implode(" |</li>\n", $assembled_views) . "</li>\n" : ''; |
|
607 | - echo "</ul>"; |
|
608 | - } |
|
609 | - |
|
610 | - |
|
611 | - /** |
|
612 | - * Generates content for a single row of the table |
|
613 | - * |
|
614 | - * @since 4.1 |
|
615 | - * @access public |
|
616 | - * @param EE_Base_Class $item The current item |
|
617 | - */ |
|
618 | - public function single_row($item) |
|
619 | - { |
|
620 | - $row_class = $this->_get_row_class($item); |
|
621 | - echo '<tr class="' . esc_attr($row_class) . '">'; |
|
622 | - $this->single_row_columns($item); |
|
623 | - echo '</tr>'; |
|
624 | - } |
|
625 | - |
|
626 | - |
|
627 | - /** |
|
628 | - * This simply sets up the row class for the table rows. |
|
629 | - * Allows for easier overriding of child methods for setting up sorting. |
|
630 | - * |
|
631 | - * @param EE_Base_Class $item the current item |
|
632 | - * @return string |
|
633 | - */ |
|
634 | - protected function _get_row_class($item) |
|
635 | - { |
|
636 | - static $row_class = ''; |
|
637 | - $row_class = ($row_class === '' ? 'alternate' : ''); |
|
638 | - |
|
639 | - $new_row_class = $row_class; |
|
640 | - |
|
641 | - if (! empty($this->_ajax_sorting_callback)) { |
|
642 | - $new_row_class .= ' rowsortable'; |
|
643 | - } |
|
644 | - |
|
645 | - return $new_row_class; |
|
646 | - } |
|
647 | - |
|
648 | - |
|
649 | - /** |
|
650 | - * @return array |
|
651 | - */ |
|
652 | - public function get_sortable_columns() |
|
653 | - { |
|
654 | - return (array) $this->_sortable_columns; |
|
655 | - } |
|
656 | - |
|
657 | - |
|
658 | - /** |
|
659 | - * @return string |
|
660 | - */ |
|
661 | - public function get_ajax_sorting_callback() |
|
662 | - { |
|
663 | - return $this->_ajax_sorting_callback; |
|
664 | - } |
|
665 | - |
|
666 | - |
|
667 | - /** |
|
668 | - * @return array |
|
669 | - */ |
|
670 | - public function get_hidden_columns() |
|
671 | - { |
|
672 | - $user_id = get_current_user_id(); |
|
673 | - $has_default = get_user_option('default' . $this->screen->id . 'columnshidden', $user_id); |
|
674 | - if (empty($has_default) && ! empty($this->_hidden_columns)) { |
|
675 | - update_user_option($user_id, 'default' . $this->screen->id . 'columnshidden', true); |
|
676 | - update_user_option($user_id, 'manage' . $this->screen->id . 'columnshidden', $this->_hidden_columns, true); |
|
677 | - } |
|
678 | - $ref = 'manage' . $this->screen->id . 'columnshidden'; |
|
679 | - return (array) get_user_option($ref, $user_id); |
|
680 | - } |
|
681 | - |
|
682 | - |
|
683 | - /** |
|
684 | - * Generates the columns for a single row of the table. |
|
685 | - * Overridden from wp_list_table so as to allow us to filter the column content for a given |
|
686 | - * column. |
|
687 | - * |
|
688 | - * @since 3.1.0 |
|
689 | - * @param EE_Base_Class $item The current item |
|
690 | - */ |
|
691 | - public function single_row_columns($item) |
|
692 | - { |
|
693 | - list($columns, $hidden, $sortable, $primary) = $this->get_column_info(); |
|
694 | - |
|
695 | - global $wp_version; |
|
696 | - $use_hidden_class = version_compare($wp_version, '4.3-RC', '>='); |
|
697 | - |
|
698 | - foreach ($columns as $column_name => $column_display_name) { |
|
699 | - |
|
700 | - /** |
|
701 | - * With WordPress version 4.3.RC+ WordPress started using the hidden css class to control whether columns |
|
702 | - * are hidden or not instead of using "display:none;". This bit of code provides backward compat. |
|
703 | - */ |
|
704 | - $hidden_class = $use_hidden_class && in_array($column_name, $hidden) ? ' hidden' : ''; |
|
705 | - $style = ! $use_hidden_class && in_array($column_name, $hidden) ? ' style="display:none;"' : ''; |
|
706 | - |
|
707 | - $classes = $column_name . ' column-' . $column_name . $hidden_class; |
|
708 | - if ($primary === $column_name) { |
|
709 | - $classes .= ' has-row-actions column-primary'; |
|
710 | - } |
|
711 | - |
|
712 | - $data = ' data-colname="' . wp_strip_all_tags($column_display_name) . '"'; |
|
713 | - |
|
714 | - $class = "class='$classes'"; |
|
715 | - |
|
716 | - $attributes = "$class$style$data"; |
|
717 | - |
|
718 | - if ($column_name === 'cb') { |
|
719 | - echo '<th scope="row" class="check-column">'; |
|
720 | - echo apply_filters( |
|
721 | - 'FHEE__EE_Admin_List_Table__single_row_columns__column_cb_content', |
|
722 | - $this->column_cb($item), |
|
723 | - $item, |
|
724 | - $this |
|
725 | - ); |
|
726 | - echo '</th>'; |
|
727 | - } elseif (method_exists($this, 'column_' . $column_name)) { |
|
728 | - echo "<td $attributes>"; |
|
729 | - echo apply_filters( |
|
730 | - 'FHEE__EE_Admin_List_Table__single_row_columns__column_' . $column_name . '__column_content', |
|
731 | - call_user_func(array($this, 'column_' . $column_name), $item), |
|
732 | - $item, |
|
733 | - $this |
|
734 | - ); |
|
735 | - echo $this->handle_row_actions($item, $column_name, $primary); |
|
736 | - echo "</td>"; |
|
737 | - } else { |
|
738 | - echo "<td $attributes>"; |
|
739 | - echo apply_filters( |
|
740 | - 'FHEE__EE_Admin_List_Table__single_row_columns__column_default__column_content', |
|
741 | - $this->column_default($item, $column_name), |
|
742 | - $item, |
|
743 | - $column_name, |
|
744 | - $this |
|
745 | - ); |
|
746 | - echo $this->handle_row_actions($item, $column_name, $primary); |
|
747 | - echo "</td>"; |
|
748 | - } |
|
749 | - } |
|
750 | - } |
|
751 | - |
|
752 | - |
|
753 | - /** |
|
754 | - * Extra controls to be displayed between bulk actions and pagination |
|
755 | - * |
|
756 | - * @access public |
|
757 | - * @param string $which |
|
758 | - * @throws \EE_Error |
|
759 | - */ |
|
760 | - public function extra_tablenav($which) |
|
761 | - { |
|
762 | - if ($which === 'top') { |
|
763 | - $this->_filters(); |
|
764 | - echo $this->_get_hidden_fields(); |
|
765 | - } else { |
|
766 | - echo '<div class="list-table-bottom-buttons alignleft actions">'; |
|
767 | - foreach ($this->_bottom_buttons as $type => $action) { |
|
768 | - $route = isset($action['route']) ? $action['route'] : ''; |
|
769 | - $extra_request = isset($action['extra_request']) ? $action['extra_request'] : ''; |
|
770 | - echo $this->_admin_page->get_action_link_or_button( |
|
771 | - $route, |
|
772 | - $type, |
|
773 | - $extra_request, |
|
774 | - 'button button-secondary', |
|
775 | - '', |
|
776 | - false |
|
777 | - ); |
|
778 | - } |
|
779 | - do_action('AHEE__EE_Admin_List_Table__extra_tablenav__after_bottom_buttons', $this, $this->_screen); |
|
780 | - echo '</div>'; |
|
781 | - } |
|
782 | - // echo $this->_entries_per_page_dropdown; |
|
783 | - } |
|
784 | - |
|
785 | - |
|
786 | - /** |
|
787 | - * Get an associative array ( option_name => option_title ) with the list |
|
788 | - * of bulk actions available on this table. |
|
789 | - * |
|
790 | - * @since 3.1.0 |
|
791 | - * @access protected |
|
792 | - * @return array |
|
793 | - */ |
|
794 | - public function get_bulk_actions() |
|
795 | - { |
|
796 | - return (array) $this->_get_bulk_actions(); |
|
797 | - } |
|
798 | - |
|
799 | - /** |
|
800 | - * Processing bulk actions. |
|
801 | - */ |
|
802 | - public function process_bulk_action() |
|
803 | - { |
|
804 | - // this is not used it is handled by the child EE_Admin_Page class (routes). However, including here for |
|
805 | - // reference in case there is a case where it gets used. |
|
806 | - } |
|
807 | - |
|
808 | - |
|
809 | - /** |
|
810 | - * returns the EE admin page this list table is associated with |
|
811 | - * |
|
812 | - * @return EE_Admin_Page |
|
813 | - */ |
|
814 | - public function get_admin_page() |
|
815 | - { |
|
816 | - return $this->_admin_page; |
|
817 | - } |
|
818 | - |
|
819 | - |
|
820 | - /** |
|
821 | - * A "helper" function for all children to provide an html string of |
|
822 | - * actions to output in their content. It is preferable for child classes |
|
823 | - * to use this method for generating their actions content so that it's |
|
824 | - * filterable by plugins |
|
825 | - * |
|
826 | - * @param string $action_container what are the html container |
|
827 | - * elements for this actions string? |
|
828 | - * @param string $action_class What class is for the container |
|
829 | - * element. |
|
830 | - * @param string $action_items The contents for the action items |
|
831 | - * container. This is filtered before |
|
832 | - * returned. |
|
833 | - * @param string $action_id What id (optional) is used for the |
|
834 | - * container element. |
|
835 | - * @param EE_Base_Class $item The object for the column displaying |
|
836 | - * the actions. |
|
837 | - * @return string The assembled action elements container. |
|
838 | - */ |
|
839 | - protected function _action_string( |
|
840 | - $action_items, |
|
841 | - $item, |
|
842 | - $action_container = 'ul', |
|
843 | - $action_class = '', |
|
844 | - $action_id = '' |
|
845 | - ) { |
|
846 | - $content = ''; |
|
847 | - $action_class = ! empty($action_class) ? ' class="' . $action_class . '"' : ''; |
|
848 | - $action_id = ! empty($action_id) ? ' id="' . $action_id . '"' : ''; |
|
849 | - $content .= ! empty($action_container) ? '<' . $action_container . $action_class . $action_id . '>' : ''; |
|
850 | - try { |
|
851 | - $content .= apply_filters( |
|
852 | - 'FHEE__EE_Admin_List_Table___action_string__action_items', |
|
853 | - $action_items, |
|
854 | - $item, |
|
855 | - $this |
|
856 | - ); |
|
857 | - } catch (\Exception $e) { |
|
858 | - if (WP_DEBUG) { |
|
859 | - \EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
860 | - } |
|
861 | - $content .= $action_items; |
|
862 | - } |
|
863 | - $content .= ! empty($action_container) ? '</' . $action_container . '>' : ''; |
|
864 | - return $content; |
|
865 | - } |
|
442 | + } |
|
443 | + |
|
444 | + |
|
445 | + /** |
|
446 | + * _filters |
|
447 | + * This receives the filters array from children _get_table_filters() and assembles the string including the filter |
|
448 | + * button. |
|
449 | + * |
|
450 | + * @access private |
|
451 | + * @return string html showing filters |
|
452 | + */ |
|
453 | + private function _filters() |
|
454 | + { |
|
455 | + $classname = get_class($this); |
|
456 | + $filters = apply_filters( |
|
457 | + "FHEE__{$classname}__filters", |
|
458 | + (array) $this->_get_table_filters(), |
|
459 | + $this, |
|
460 | + $this->_screen |
|
461 | + ); |
|
462 | + |
|
463 | + if (empty($filters)) { |
|
464 | + return; |
|
465 | + } |
|
466 | + foreach ($filters as $filter) { |
|
467 | + echo $filter; |
|
468 | + } |
|
469 | + // add filter button at end |
|
470 | + echo '<input type="submit" class="button-secondary" value="' |
|
471 | + . esc_html__('Filter', 'event_espresso') |
|
472 | + . '" id="post-query-submit" />'; |
|
473 | + // add reset filters button at end |
|
474 | + echo '<a class="button button-secondary" href="' |
|
475 | + . $this->_admin_page->get_current_page_view_url() |
|
476 | + . '" style="display:inline-block">' |
|
477 | + . esc_html__('Reset Filters', 'event_espresso') |
|
478 | + . '</a>'; |
|
479 | + } |
|
480 | + |
|
481 | + |
|
482 | + /** |
|
483 | + * Callback for 'list_table_primary_column' WordPress filter |
|
484 | + * If child EE_Admin_List_Table classes set the _primary_column property then that will be set as the primary |
|
485 | + * column when class is instantiated. |
|
486 | + * |
|
487 | + * @see WP_List_Table::get_primary_column_name |
|
488 | + * @param string $column_name |
|
489 | + * @return string |
|
490 | + */ |
|
491 | + public function set_primary_column($column_name) |
|
492 | + { |
|
493 | + return ! empty($this->_primary_column) ? $this->_primary_column : $column_name; |
|
494 | + } |
|
495 | + |
|
496 | + |
|
497 | + /** |
|
498 | + * |
|
499 | + */ |
|
500 | + public function prepare_items() |
|
501 | + { |
|
502 | + |
|
503 | + $this->_set_column_info(); |
|
504 | + // $this->_column_headers = $this->get_column_info(); |
|
505 | + $total_items = $this->_all_data_count; |
|
506 | + $this->process_bulk_action(); |
|
507 | + |
|
508 | + $this->items = $this->_data; |
|
509 | + $this->set_pagination_args( |
|
510 | + array( |
|
511 | + 'total_items' => $total_items, |
|
512 | + 'per_page' => $this->_per_page, |
|
513 | + 'total_pages' => ceil($total_items / $this->_per_page), |
|
514 | + ) |
|
515 | + ); |
|
516 | + } |
|
517 | + |
|
518 | + |
|
519 | + /** |
|
520 | + * This column is the default for when there is no defined column method for a registered column. |
|
521 | + * This can be overridden by child classes, but allows for hooking in for custom columns. |
|
522 | + * |
|
523 | + * @param EE_Base_Class $item |
|
524 | + * @param string $column_name The column being called. |
|
525 | + * @return string html content for the column |
|
526 | + */ |
|
527 | + public function column_default($item, $column_name) |
|
528 | + { |
|
529 | + /** |
|
530 | + * Dynamic hook allowing for adding additional column content in this list table. |
|
531 | + * Note that $this->screen->id is in the format |
|
532 | + * {sanitize_title($top_level_menu_label)}_page_{$espresso_admin_page_slug}. So for the messages list |
|
533 | + * table it is: event-espresso_page_espresso_messages. |
|
534 | + * However, take note that if the top level menu label has been translated (i.e. "Event Espresso"). then the |
|
535 | + * hook prefix ("event-espresso") will be different. |
|
536 | + */ |
|
537 | + do_action( |
|
538 | + 'AHEE__EE_Admin_List_Table__column_' . $column_name . '__' . $this->screen->id, |
|
539 | + $item, |
|
540 | + $this->_screen |
|
541 | + ); |
|
542 | + } |
|
543 | + |
|
544 | + |
|
545 | + /** |
|
546 | + * Get a list of columns. The format is: |
|
547 | + * 'internal-name' => 'Title' |
|
548 | + * |
|
549 | + * @since 3.1.0 |
|
550 | + * @access public |
|
551 | + * @abstract |
|
552 | + * @return array |
|
553 | + */ |
|
554 | + public function get_columns() |
|
555 | + { |
|
556 | + /** |
|
557 | + * Dynamic hook allowing for adding additional columns in this list table. |
|
558 | + * Note that $this->screen->id is in the format |
|
559 | + * {sanitize_title($top_level_menu_label)}_page_{$espresso_admin_page_slug}. So for the messages list |
|
560 | + * table it is: event-espresso_page_espresso_messages. |
|
561 | + * However, take note that if the top level menu label has been translated (i.e. "Event Espresso"). then the |
|
562 | + * hook prefix ("event-espresso") will be different. |
|
563 | + * |
|
564 | + * @var array |
|
565 | + */ |
|
566 | + $columns = apply_filters('FHEE_manage_' . $this->screen->id . '_columns', $this->_columns, $this->_screen); |
|
567 | + return $columns; |
|
568 | + } |
|
569 | + |
|
570 | + |
|
571 | + /** |
|
572 | + * Get an associative array ( id => link ) with the list |
|
573 | + * of views available on this table. |
|
574 | + * |
|
575 | + * @since 3.1.0 |
|
576 | + * @access protected |
|
577 | + * @return array |
|
578 | + */ |
|
579 | + public function get_views() |
|
580 | + { |
|
581 | + return $this->_views; |
|
582 | + } |
|
583 | + |
|
584 | + |
|
585 | + /** |
|
586 | + * Generate the views html. |
|
587 | + */ |
|
588 | + public function display_views() |
|
589 | + { |
|
590 | + $views = $this->get_views(); |
|
591 | + $assembled_views = array(); |
|
592 | + |
|
593 | + if (empty($views)) { |
|
594 | + return; |
|
595 | + } |
|
596 | + echo "<ul class='subsubsub'>\n"; |
|
597 | + foreach ($views as $view) { |
|
598 | + $count = isset($view['count']) && ! empty($view['count']) ? absint($view['count']) : 0; |
|
599 | + if (isset($view['slug'], $view['class'], $view['url'], $view['label'])) { |
|
600 | + $assembled_views[ $view['slug'] ] = "\t<li class='" . $view['class'] . "'>" |
|
601 | + . '<a href="' . $view['url'] . '">' . $view['label'] . '</a>' |
|
602 | + . ' <span class="count">(' . $count . ')</span>'; |
|
603 | + } |
|
604 | + } |
|
605 | + |
|
606 | + echo ! empty($assembled_views) ? implode(" |</li>\n", $assembled_views) . "</li>\n" : ''; |
|
607 | + echo "</ul>"; |
|
608 | + } |
|
609 | + |
|
610 | + |
|
611 | + /** |
|
612 | + * Generates content for a single row of the table |
|
613 | + * |
|
614 | + * @since 4.1 |
|
615 | + * @access public |
|
616 | + * @param EE_Base_Class $item The current item |
|
617 | + */ |
|
618 | + public function single_row($item) |
|
619 | + { |
|
620 | + $row_class = $this->_get_row_class($item); |
|
621 | + echo '<tr class="' . esc_attr($row_class) . '">'; |
|
622 | + $this->single_row_columns($item); |
|
623 | + echo '</tr>'; |
|
624 | + } |
|
625 | + |
|
626 | + |
|
627 | + /** |
|
628 | + * This simply sets up the row class for the table rows. |
|
629 | + * Allows for easier overriding of child methods for setting up sorting. |
|
630 | + * |
|
631 | + * @param EE_Base_Class $item the current item |
|
632 | + * @return string |
|
633 | + */ |
|
634 | + protected function _get_row_class($item) |
|
635 | + { |
|
636 | + static $row_class = ''; |
|
637 | + $row_class = ($row_class === '' ? 'alternate' : ''); |
|
638 | + |
|
639 | + $new_row_class = $row_class; |
|
640 | + |
|
641 | + if (! empty($this->_ajax_sorting_callback)) { |
|
642 | + $new_row_class .= ' rowsortable'; |
|
643 | + } |
|
644 | + |
|
645 | + return $new_row_class; |
|
646 | + } |
|
647 | + |
|
648 | + |
|
649 | + /** |
|
650 | + * @return array |
|
651 | + */ |
|
652 | + public function get_sortable_columns() |
|
653 | + { |
|
654 | + return (array) $this->_sortable_columns; |
|
655 | + } |
|
656 | + |
|
657 | + |
|
658 | + /** |
|
659 | + * @return string |
|
660 | + */ |
|
661 | + public function get_ajax_sorting_callback() |
|
662 | + { |
|
663 | + return $this->_ajax_sorting_callback; |
|
664 | + } |
|
665 | + |
|
666 | + |
|
667 | + /** |
|
668 | + * @return array |
|
669 | + */ |
|
670 | + public function get_hidden_columns() |
|
671 | + { |
|
672 | + $user_id = get_current_user_id(); |
|
673 | + $has_default = get_user_option('default' . $this->screen->id . 'columnshidden', $user_id); |
|
674 | + if (empty($has_default) && ! empty($this->_hidden_columns)) { |
|
675 | + update_user_option($user_id, 'default' . $this->screen->id . 'columnshidden', true); |
|
676 | + update_user_option($user_id, 'manage' . $this->screen->id . 'columnshidden', $this->_hidden_columns, true); |
|
677 | + } |
|
678 | + $ref = 'manage' . $this->screen->id . 'columnshidden'; |
|
679 | + return (array) get_user_option($ref, $user_id); |
|
680 | + } |
|
681 | + |
|
682 | + |
|
683 | + /** |
|
684 | + * Generates the columns for a single row of the table. |
|
685 | + * Overridden from wp_list_table so as to allow us to filter the column content for a given |
|
686 | + * column. |
|
687 | + * |
|
688 | + * @since 3.1.0 |
|
689 | + * @param EE_Base_Class $item The current item |
|
690 | + */ |
|
691 | + public function single_row_columns($item) |
|
692 | + { |
|
693 | + list($columns, $hidden, $sortable, $primary) = $this->get_column_info(); |
|
694 | + |
|
695 | + global $wp_version; |
|
696 | + $use_hidden_class = version_compare($wp_version, '4.3-RC', '>='); |
|
697 | + |
|
698 | + foreach ($columns as $column_name => $column_display_name) { |
|
699 | + |
|
700 | + /** |
|
701 | + * With WordPress version 4.3.RC+ WordPress started using the hidden css class to control whether columns |
|
702 | + * are hidden or not instead of using "display:none;". This bit of code provides backward compat. |
|
703 | + */ |
|
704 | + $hidden_class = $use_hidden_class && in_array($column_name, $hidden) ? ' hidden' : ''; |
|
705 | + $style = ! $use_hidden_class && in_array($column_name, $hidden) ? ' style="display:none;"' : ''; |
|
706 | + |
|
707 | + $classes = $column_name . ' column-' . $column_name . $hidden_class; |
|
708 | + if ($primary === $column_name) { |
|
709 | + $classes .= ' has-row-actions column-primary'; |
|
710 | + } |
|
711 | + |
|
712 | + $data = ' data-colname="' . wp_strip_all_tags($column_display_name) . '"'; |
|
713 | + |
|
714 | + $class = "class='$classes'"; |
|
715 | + |
|
716 | + $attributes = "$class$style$data"; |
|
717 | + |
|
718 | + if ($column_name === 'cb') { |
|
719 | + echo '<th scope="row" class="check-column">'; |
|
720 | + echo apply_filters( |
|
721 | + 'FHEE__EE_Admin_List_Table__single_row_columns__column_cb_content', |
|
722 | + $this->column_cb($item), |
|
723 | + $item, |
|
724 | + $this |
|
725 | + ); |
|
726 | + echo '</th>'; |
|
727 | + } elseif (method_exists($this, 'column_' . $column_name)) { |
|
728 | + echo "<td $attributes>"; |
|
729 | + echo apply_filters( |
|
730 | + 'FHEE__EE_Admin_List_Table__single_row_columns__column_' . $column_name . '__column_content', |
|
731 | + call_user_func(array($this, 'column_' . $column_name), $item), |
|
732 | + $item, |
|
733 | + $this |
|
734 | + ); |
|
735 | + echo $this->handle_row_actions($item, $column_name, $primary); |
|
736 | + echo "</td>"; |
|
737 | + } else { |
|
738 | + echo "<td $attributes>"; |
|
739 | + echo apply_filters( |
|
740 | + 'FHEE__EE_Admin_List_Table__single_row_columns__column_default__column_content', |
|
741 | + $this->column_default($item, $column_name), |
|
742 | + $item, |
|
743 | + $column_name, |
|
744 | + $this |
|
745 | + ); |
|
746 | + echo $this->handle_row_actions($item, $column_name, $primary); |
|
747 | + echo "</td>"; |
|
748 | + } |
|
749 | + } |
|
750 | + } |
|
751 | + |
|
752 | + |
|
753 | + /** |
|
754 | + * Extra controls to be displayed between bulk actions and pagination |
|
755 | + * |
|
756 | + * @access public |
|
757 | + * @param string $which |
|
758 | + * @throws \EE_Error |
|
759 | + */ |
|
760 | + public function extra_tablenav($which) |
|
761 | + { |
|
762 | + if ($which === 'top') { |
|
763 | + $this->_filters(); |
|
764 | + echo $this->_get_hidden_fields(); |
|
765 | + } else { |
|
766 | + echo '<div class="list-table-bottom-buttons alignleft actions">'; |
|
767 | + foreach ($this->_bottom_buttons as $type => $action) { |
|
768 | + $route = isset($action['route']) ? $action['route'] : ''; |
|
769 | + $extra_request = isset($action['extra_request']) ? $action['extra_request'] : ''; |
|
770 | + echo $this->_admin_page->get_action_link_or_button( |
|
771 | + $route, |
|
772 | + $type, |
|
773 | + $extra_request, |
|
774 | + 'button button-secondary', |
|
775 | + '', |
|
776 | + false |
|
777 | + ); |
|
778 | + } |
|
779 | + do_action('AHEE__EE_Admin_List_Table__extra_tablenav__after_bottom_buttons', $this, $this->_screen); |
|
780 | + echo '</div>'; |
|
781 | + } |
|
782 | + // echo $this->_entries_per_page_dropdown; |
|
783 | + } |
|
784 | + |
|
785 | + |
|
786 | + /** |
|
787 | + * Get an associative array ( option_name => option_title ) with the list |
|
788 | + * of bulk actions available on this table. |
|
789 | + * |
|
790 | + * @since 3.1.0 |
|
791 | + * @access protected |
|
792 | + * @return array |
|
793 | + */ |
|
794 | + public function get_bulk_actions() |
|
795 | + { |
|
796 | + return (array) $this->_get_bulk_actions(); |
|
797 | + } |
|
798 | + |
|
799 | + /** |
|
800 | + * Processing bulk actions. |
|
801 | + */ |
|
802 | + public function process_bulk_action() |
|
803 | + { |
|
804 | + // this is not used it is handled by the child EE_Admin_Page class (routes). However, including here for |
|
805 | + // reference in case there is a case where it gets used. |
|
806 | + } |
|
807 | + |
|
808 | + |
|
809 | + /** |
|
810 | + * returns the EE admin page this list table is associated with |
|
811 | + * |
|
812 | + * @return EE_Admin_Page |
|
813 | + */ |
|
814 | + public function get_admin_page() |
|
815 | + { |
|
816 | + return $this->_admin_page; |
|
817 | + } |
|
818 | + |
|
819 | + |
|
820 | + /** |
|
821 | + * A "helper" function for all children to provide an html string of |
|
822 | + * actions to output in their content. It is preferable for child classes |
|
823 | + * to use this method for generating their actions content so that it's |
|
824 | + * filterable by plugins |
|
825 | + * |
|
826 | + * @param string $action_container what are the html container |
|
827 | + * elements for this actions string? |
|
828 | + * @param string $action_class What class is for the container |
|
829 | + * element. |
|
830 | + * @param string $action_items The contents for the action items |
|
831 | + * container. This is filtered before |
|
832 | + * returned. |
|
833 | + * @param string $action_id What id (optional) is used for the |
|
834 | + * container element. |
|
835 | + * @param EE_Base_Class $item The object for the column displaying |
|
836 | + * the actions. |
|
837 | + * @return string The assembled action elements container. |
|
838 | + */ |
|
839 | + protected function _action_string( |
|
840 | + $action_items, |
|
841 | + $item, |
|
842 | + $action_container = 'ul', |
|
843 | + $action_class = '', |
|
844 | + $action_id = '' |
|
845 | + ) { |
|
846 | + $content = ''; |
|
847 | + $action_class = ! empty($action_class) ? ' class="' . $action_class . '"' : ''; |
|
848 | + $action_id = ! empty($action_id) ? ' id="' . $action_id . '"' : ''; |
|
849 | + $content .= ! empty($action_container) ? '<' . $action_container . $action_class . $action_id . '>' : ''; |
|
850 | + try { |
|
851 | + $content .= apply_filters( |
|
852 | + 'FHEE__EE_Admin_List_Table___action_string__action_items', |
|
853 | + $action_items, |
|
854 | + $item, |
|
855 | + $this |
|
856 | + ); |
|
857 | + } catch (\Exception $e) { |
|
858 | + if (WP_DEBUG) { |
|
859 | + \EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
860 | + } |
|
861 | + $content .= $action_items; |
|
862 | + } |
|
863 | + $content .= ! empty($action_container) ? '</' . $action_container . '>' : ''; |
|
864 | + return $content; |
|
865 | + } |
|
866 | 866 | } |
@@ -1,7 +1,7 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | |
3 | -if (! class_exists('WP_List_Table')) { |
|
4 | - require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php'; |
|
3 | +if ( ! class_exists('WP_List_Table')) { |
|
4 | + require_once ABSPATH.'wp-admin/includes/class-wp-list-table.php'; |
|
5 | 5 | } |
6 | 6 | |
7 | 7 | |
@@ -204,10 +204,10 @@ discard block |
||
204 | 204 | $this->_view = $this->_admin_page->get_view(); |
205 | 205 | $this->_views = empty($this->_views) ? $this->_admin_page->get_list_table_view_RLs() : $this->_views; |
206 | 206 | $this->_current_page = $this->get_pagenum(); |
207 | - $this->_screen = $this->_admin_page->get_current_page() . '_' . $this->_admin_page->get_current_view(); |
|
207 | + $this->_screen = $this->_admin_page->get_current_page().'_'.$this->_admin_page->get_current_view(); |
|
208 | 208 | $this->_yes_no = array(__('No', 'event_espresso'), __('Yes', 'event_espresso')); |
209 | 209 | |
210 | - $this->_per_page = $this->get_items_per_page($this->_screen . '_per_page', 10); |
|
210 | + $this->_per_page = $this->get_items_per_page($this->_screen.'_per_page', 10); |
|
211 | 211 | |
212 | 212 | $this->_setup_data(); |
213 | 213 | $this->_add_view_counts(); |
@@ -287,14 +287,14 @@ discard block |
||
287 | 287 | $action = empty($action) && isset($this->_req_data['action']) ? $this->_req_data['action'] : $action; |
288 | 288 | // if action is STILL empty, then we set it to default |
289 | 289 | $action = empty($action) ? 'default' : $action; |
290 | - $field = '<input type="hidden" name="page" value="' . $this->_req_data['page'] . '" />' . "\n"; |
|
291 | - $field .= '<input type="hidden" name="route" value="' . $action . '" />' . "\n";/**/ |
|
292 | - $field .= '<input type="hidden" name="perpage" value="' . $this->_per_page . '" />' . "\n"; |
|
290 | + $field = '<input type="hidden" name="page" value="'.$this->_req_data['page'].'" />'."\n"; |
|
291 | + $field .= '<input type="hidden" name="route" value="'.$action.'" />'."\n"; /**/ |
|
292 | + $field .= '<input type="hidden" name="perpage" value="'.$this->_per_page.'" />'."\n"; |
|
293 | 293 | |
294 | 294 | $bulk_actions = $this->_get_bulk_actions(); |
295 | 295 | foreach ($bulk_actions as $bulk_action => $label) { |
296 | - $field .= '<input type="hidden" name="' . $bulk_action . '_nonce"' |
|
297 | - . ' value="' . wp_create_nonce($bulk_action . '_nonce') . '" />' . "\n"; |
|
296 | + $field .= '<input type="hidden" name="'.$bulk_action.'_nonce"' |
|
297 | + . ' value="'.wp_create_nonce($bulk_action.'_nonce').'" />'."\n"; |
|
298 | 298 | } |
299 | 299 | |
300 | 300 | return $field; |
@@ -341,11 +341,11 @@ discard block |
||
341 | 341 | |
342 | 342 | $data = (array) $data; |
343 | 343 | |
344 | - if (! isset($data[1])) { |
|
344 | + if ( ! isset($data[1])) { |
|
345 | 345 | $_data[1] = false; |
346 | 346 | } |
347 | 347 | |
348 | - $sortable[ $id ] = $_data; |
|
348 | + $sortable[$id] = $_data; |
|
349 | 349 | } |
350 | 350 | $primary = $this->get_primary_column_name(); |
351 | 351 | $this->_column_headers = array($columns, $hidden, $sortable, $primary); |
@@ -405,7 +405,7 @@ discard block |
||
405 | 405 | // for that page route and skip adding the bulk action if no access for the current logged in user. |
406 | 406 | foreach ($args['bulk_action'] as $route => $label) { |
407 | 407 | if ($this->_admin_page->check_user_access($route, true)) { |
408 | - $actions[ $route ] = $label; |
|
408 | + $actions[$route] = $label; |
|
409 | 409 | } |
410 | 410 | } |
411 | 411 | } |
@@ -423,7 +423,7 @@ discard block |
||
423 | 423 | public function display_tablenav($which) |
424 | 424 | { |
425 | 425 | if ('top' === $which) { |
426 | - wp_nonce_field('bulk-' . $this->_args['plural']); |
|
426 | + wp_nonce_field('bulk-'.$this->_args['plural']); |
|
427 | 427 | } |
428 | 428 | ?> |
429 | 429 | <div class="tablenav <?php echo esc_attr($which); ?>"> |
@@ -535,7 +535,7 @@ discard block |
||
535 | 535 | * hook prefix ("event-espresso") will be different. |
536 | 536 | */ |
537 | 537 | do_action( |
538 | - 'AHEE__EE_Admin_List_Table__column_' . $column_name . '__' . $this->screen->id, |
|
538 | + 'AHEE__EE_Admin_List_Table__column_'.$column_name.'__'.$this->screen->id, |
|
539 | 539 | $item, |
540 | 540 | $this->_screen |
541 | 541 | ); |
@@ -563,7 +563,7 @@ discard block |
||
563 | 563 | * |
564 | 564 | * @var array |
565 | 565 | */ |
566 | - $columns = apply_filters('FHEE_manage_' . $this->screen->id . '_columns', $this->_columns, $this->_screen); |
|
566 | + $columns = apply_filters('FHEE_manage_'.$this->screen->id.'_columns', $this->_columns, $this->_screen); |
|
567 | 567 | return $columns; |
568 | 568 | } |
569 | 569 | |
@@ -597,13 +597,13 @@ discard block |
||
597 | 597 | foreach ($views as $view) { |
598 | 598 | $count = isset($view['count']) && ! empty($view['count']) ? absint($view['count']) : 0; |
599 | 599 | if (isset($view['slug'], $view['class'], $view['url'], $view['label'])) { |
600 | - $assembled_views[ $view['slug'] ] = "\t<li class='" . $view['class'] . "'>" |
|
601 | - . '<a href="' . $view['url'] . '">' . $view['label'] . '</a>' |
|
602 | - . ' <span class="count">(' . $count . ')</span>'; |
|
600 | + $assembled_views[$view['slug']] = "\t<li class='".$view['class']."'>" |
|
601 | + . '<a href="'.$view['url'].'">'.$view['label'].'</a>' |
|
602 | + . ' <span class="count">('.$count.')</span>'; |
|
603 | 603 | } |
604 | 604 | } |
605 | 605 | |
606 | - echo ! empty($assembled_views) ? implode(" |</li>\n", $assembled_views) . "</li>\n" : ''; |
|
606 | + echo ! empty($assembled_views) ? implode(" |</li>\n", $assembled_views)."</li>\n" : ''; |
|
607 | 607 | echo "</ul>"; |
608 | 608 | } |
609 | 609 | |
@@ -618,7 +618,7 @@ discard block |
||
618 | 618 | public function single_row($item) |
619 | 619 | { |
620 | 620 | $row_class = $this->_get_row_class($item); |
621 | - echo '<tr class="' . esc_attr($row_class) . '">'; |
|
621 | + echo '<tr class="'.esc_attr($row_class).'">'; |
|
622 | 622 | $this->single_row_columns($item); |
623 | 623 | echo '</tr>'; |
624 | 624 | } |
@@ -638,7 +638,7 @@ discard block |
||
638 | 638 | |
639 | 639 | $new_row_class = $row_class; |
640 | 640 | |
641 | - if (! empty($this->_ajax_sorting_callback)) { |
|
641 | + if ( ! empty($this->_ajax_sorting_callback)) { |
|
642 | 642 | $new_row_class .= ' rowsortable'; |
643 | 643 | } |
644 | 644 | |
@@ -670,12 +670,12 @@ discard block |
||
670 | 670 | public function get_hidden_columns() |
671 | 671 | { |
672 | 672 | $user_id = get_current_user_id(); |
673 | - $has_default = get_user_option('default' . $this->screen->id . 'columnshidden', $user_id); |
|
673 | + $has_default = get_user_option('default'.$this->screen->id.'columnshidden', $user_id); |
|
674 | 674 | if (empty($has_default) && ! empty($this->_hidden_columns)) { |
675 | - update_user_option($user_id, 'default' . $this->screen->id . 'columnshidden', true); |
|
676 | - update_user_option($user_id, 'manage' . $this->screen->id . 'columnshidden', $this->_hidden_columns, true); |
|
675 | + update_user_option($user_id, 'default'.$this->screen->id.'columnshidden', true); |
|
676 | + update_user_option($user_id, 'manage'.$this->screen->id.'columnshidden', $this->_hidden_columns, true); |
|
677 | 677 | } |
678 | - $ref = 'manage' . $this->screen->id . 'columnshidden'; |
|
678 | + $ref = 'manage'.$this->screen->id.'columnshidden'; |
|
679 | 679 | return (array) get_user_option($ref, $user_id); |
680 | 680 | } |
681 | 681 | |
@@ -704,12 +704,12 @@ discard block |
||
704 | 704 | $hidden_class = $use_hidden_class && in_array($column_name, $hidden) ? ' hidden' : ''; |
705 | 705 | $style = ! $use_hidden_class && in_array($column_name, $hidden) ? ' style="display:none;"' : ''; |
706 | 706 | |
707 | - $classes = $column_name . ' column-' . $column_name . $hidden_class; |
|
707 | + $classes = $column_name.' column-'.$column_name.$hidden_class; |
|
708 | 708 | if ($primary === $column_name) { |
709 | 709 | $classes .= ' has-row-actions column-primary'; |
710 | 710 | } |
711 | 711 | |
712 | - $data = ' data-colname="' . wp_strip_all_tags($column_display_name) . '"'; |
|
712 | + $data = ' data-colname="'.wp_strip_all_tags($column_display_name).'"'; |
|
713 | 713 | |
714 | 714 | $class = "class='$classes'"; |
715 | 715 | |
@@ -724,11 +724,11 @@ discard block |
||
724 | 724 | $this |
725 | 725 | ); |
726 | 726 | echo '</th>'; |
727 | - } elseif (method_exists($this, 'column_' . $column_name)) { |
|
727 | + } elseif (method_exists($this, 'column_'.$column_name)) { |
|
728 | 728 | echo "<td $attributes>"; |
729 | 729 | echo apply_filters( |
730 | - 'FHEE__EE_Admin_List_Table__single_row_columns__column_' . $column_name . '__column_content', |
|
731 | - call_user_func(array($this, 'column_' . $column_name), $item), |
|
730 | + 'FHEE__EE_Admin_List_Table__single_row_columns__column_'.$column_name.'__column_content', |
|
731 | + call_user_func(array($this, 'column_'.$column_name), $item), |
|
732 | 732 | $item, |
733 | 733 | $this |
734 | 734 | ); |
@@ -844,9 +844,9 @@ discard block |
||
844 | 844 | $action_id = '' |
845 | 845 | ) { |
846 | 846 | $content = ''; |
847 | - $action_class = ! empty($action_class) ? ' class="' . $action_class . '"' : ''; |
|
848 | - $action_id = ! empty($action_id) ? ' id="' . $action_id . '"' : ''; |
|
849 | - $content .= ! empty($action_container) ? '<' . $action_container . $action_class . $action_id . '>' : ''; |
|
847 | + $action_class = ! empty($action_class) ? ' class="'.$action_class.'"' : ''; |
|
848 | + $action_id = ! empty($action_id) ? ' id="'.$action_id.'"' : ''; |
|
849 | + $content .= ! empty($action_container) ? '<'.$action_container.$action_class.$action_id.'>' : ''; |
|
850 | 850 | try { |
851 | 851 | $content .= apply_filters( |
852 | 852 | 'FHEE__EE_Admin_List_Table___action_string__action_items', |
@@ -860,7 +860,7 @@ discard block |
||
860 | 860 | } |
861 | 861 | $content .= $action_items; |
862 | 862 | } |
863 | - $content .= ! empty($action_container) ? '</' . $action_container . '>' : ''; |
|
863 | + $content .= ! empty($action_container) ? '</'.$action_container.'>' : ''; |
|
864 | 864 | return $content; |
865 | 865 | } |
866 | 866 | } |
@@ -14,43 +14,43 @@ |
||
14 | 14 | { |
15 | 15 | |
16 | 16 | |
17 | - public function do_initial_loads() |
|
18 | - { |
|
19 | - // we want to use the corresponding admin page object (but not route it!). To do this we just set _routing to false. That way this page object is being loaded on all pages to make sure we hook into admin properly. But note... we are ONLY doing this if the given page is NOT pages we WANT to load ;) |
|
20 | - // This is important because we have hooks that help redirect custom post type saves |
|
21 | - if (! isset($_REQUEST['page']) |
|
22 | - || (isset($_REQUEST['page']) |
|
23 | - && $_REQUEST['page'] |
|
24 | - != $this->_menu_map->menu_slug)) { |
|
25 | - $this->_routing = false; |
|
26 | - $this->_initialize_admin_page(); |
|
27 | - } else { |
|
28 | - // normal init loads |
|
29 | - $this->_initialize_admin_page(); |
|
30 | - // added for 4.1 to completely disable autosave for our pages. This can be removed once we fully enable autosave functionality |
|
31 | - remove_filter('wp_print_scripts', 'wp_just_in_time_script_localization'); |
|
32 | - add_filter('wp_print_scripts', array($this, 'wp_just_in_time_script_localization'), 100); |
|
33 | - // end removal of autosave functionality. |
|
34 | - } |
|
35 | - } |
|
17 | + public function do_initial_loads() |
|
18 | + { |
|
19 | + // we want to use the corresponding admin page object (but not route it!). To do this we just set _routing to false. That way this page object is being loaded on all pages to make sure we hook into admin properly. But note... we are ONLY doing this if the given page is NOT pages we WANT to load ;) |
|
20 | + // This is important because we have hooks that help redirect custom post type saves |
|
21 | + if (! isset($_REQUEST['page']) |
|
22 | + || (isset($_REQUEST['page']) |
|
23 | + && $_REQUEST['page'] |
|
24 | + != $this->_menu_map->menu_slug)) { |
|
25 | + $this->_routing = false; |
|
26 | + $this->_initialize_admin_page(); |
|
27 | + } else { |
|
28 | + // normal init loads |
|
29 | + $this->_initialize_admin_page(); |
|
30 | + // added for 4.1 to completely disable autosave for our pages. This can be removed once we fully enable autosave functionality |
|
31 | + remove_filter('wp_print_scripts', 'wp_just_in_time_script_localization'); |
|
32 | + add_filter('wp_print_scripts', array($this, 'wp_just_in_time_script_localization'), 100); |
|
33 | + // end removal of autosave functionality. |
|
34 | + } |
|
35 | + } |
|
36 | 36 | |
37 | 37 | |
38 | - public function wp_just_in_time_script_localization() |
|
39 | - { |
|
40 | - wp_localize_script( |
|
41 | - 'autosave', |
|
42 | - 'autosaveL10n', |
|
43 | - array( |
|
44 | - 'autosaveInterval' => 172800, |
|
45 | - 'savingText' => __('Saving Draft…', 'event_espresso'), |
|
46 | - 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.', 'event_espresso'), |
|
47 | - ) |
|
48 | - ); |
|
49 | - } |
|
38 | + public function wp_just_in_time_script_localization() |
|
39 | + { |
|
40 | + wp_localize_script( |
|
41 | + 'autosave', |
|
42 | + 'autosaveL10n', |
|
43 | + array( |
|
44 | + 'autosaveInterval' => 172800, |
|
45 | + 'savingText' => __('Saving Draft…', 'event_espresso'), |
|
46 | + 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.', 'event_espresso'), |
|
47 | + ) |
|
48 | + ); |
|
49 | + } |
|
50 | 50 | |
51 | 51 | |
52 | - public function adjust_post_lock_window($interval) |
|
53 | - { |
|
54 | - return 172800; |
|
55 | - } |
|
52 | + public function adjust_post_lock_window($interval) |
|
53 | + { |
|
54 | + return 172800; |
|
55 | + } |
|
56 | 56 | } |
@@ -18,7 +18,7 @@ |
||
18 | 18 | { |
19 | 19 | // we want to use the corresponding admin page object (but not route it!). To do this we just set _routing to false. That way this page object is being loaded on all pages to make sure we hook into admin properly. But note... we are ONLY doing this if the given page is NOT pages we WANT to load ;) |
20 | 20 | // This is important because we have hooks that help redirect custom post type saves |
21 | - if (! isset($_REQUEST['page']) |
|
21 | + if ( ! isset($_REQUEST['page']) |
|
22 | 22 | || (isset($_REQUEST['page']) |
23 | 23 | && $_REQUEST['page'] |
24 | 24 | != $this->_menu_map->menu_slug)) { |
@@ -4,19 +4,19 @@ |
||
4 | 4 | <div class="about-text"><?php echo ! empty($admin_page_subtitle) ? $admin_page_subtitle : ''; ?></div> |
5 | 5 | <div class="ee-badge"><img class="" src=" <?php echo EE_GLOBAL_ASSETS_URL; ?>images/event-espresso-cup-90x90.png" |
6 | 6 | width="90" height="90" alt="<?php |
7 | - printf( |
|
8 | - esc_attr__('%s Logo', 'event_espresso'), |
|
9 | - 'Event Espresso' |
|
10 | - ); ?>"/> |
|
7 | + printf( |
|
8 | + esc_attr__('%s Logo', 'event_espresso'), |
|
9 | + 'Event Espresso' |
|
10 | + ); ?>"/> |
|
11 | 11 | <br/><?php printf(__('Version %s', 'event_espresso'), EVENT_ESPRESSO_VERSION); ?></div> |
12 | 12 | |
13 | 13 | <?php echo $nav_tabs; ?> |
14 | 14 | |
15 | 15 | |
16 | 16 | <?php |
17 | - do_action('AHEE__admin_wrapper__template__before_about_admin_page_content'); |
|
18 | - echo $about_admin_page_content; |
|
19 | - do_action('AHEE__admin_wrapper__template__after_about_admin_page_content'); |
|
20 | - ?> |
|
17 | + do_action('AHEE__admin_wrapper__template__before_about_admin_page_content'); |
|
18 | + echo $about_admin_page_content; |
|
19 | + do_action('AHEE__admin_wrapper__template__after_about_admin_page_content'); |
|
20 | + ?> |
|
21 | 21 | |
22 | 22 | </div> |