@@ -805,7 +805,7 @@ discard block |
||
805 | 805 | * @since 4.5.0 |
806 | 806 | * |
807 | 807 | * @param string $meta_cap What meta capability is this mapping. |
808 | - * @param array $map_values array { |
|
808 | + * @param string[] $map_values array { |
|
809 | 809 | * //array of values that MUST match a count of 4. It's okay to send an empty string for |
810 | 810 | * capabilities that don't get mapped to. |
811 | 811 | * |
@@ -880,8 +880,8 @@ discard block |
||
880 | 880 | * @since 4.6.x |
881 | 881 | * |
882 | 882 | * @param $caps |
883 | - * @param $cap |
|
884 | - * @param $user_id |
|
883 | + * @param string $cap |
|
884 | + * @param integer $user_id |
|
885 | 885 | * @param $args |
886 | 886 | * |
887 | 887 | * @return array |
@@ -18,1001 +18,1001 @@ discard block |
||
18 | 18 | final class EE_Capabilities extends EE_Base |
19 | 19 | { |
20 | 20 | |
21 | - /** |
|
22 | - * the name of the wp option used to store caps previously initialized |
|
23 | - */ |
|
24 | - const option_name = 'ee_caps_initialized'; |
|
25 | - |
|
26 | - /** |
|
27 | - * instance of EE_Capabilities object |
|
28 | - * |
|
29 | - * @var EE_Capabilities |
|
30 | - */ |
|
31 | - private static $_instance; |
|
32 | - |
|
33 | - |
|
34 | - /** |
|
35 | - * This is a map of caps that correspond to a default WP_Role. |
|
36 | - * Array is indexed by Role and values are ee capabilities. |
|
37 | - * |
|
38 | - * @since 4.5.0 |
|
39 | - * |
|
40 | - * @var array |
|
41 | - */ |
|
42 | - private $capabilities_map = array(); |
|
43 | - |
|
44 | - /** |
|
45 | - * This used to hold an array of EE_Meta_Capability_Map objects |
|
46 | - * that define the granular capabilities mapped to for a user depending on context. |
|
47 | - * |
|
48 | - * @var EE_Meta_Capability_Map[] |
|
49 | - */ |
|
50 | - private $_meta_caps = array(); |
|
51 | - |
|
52 | - /** |
|
53 | - * The internal $capabilities_map needs to be initialized before it can be used. |
|
54 | - * This flag tracks whether that has happened or not. |
|
55 | - * But for this to work, we need three states to indicate: |
|
56 | - * initialization has not occurred at all |
|
57 | - * initialization has started but is not complete |
|
58 | - * initialization is complete |
|
59 | - * The reason this is needed is because the addCaps() method |
|
60 | - * normally requires the $capabilities_map to be initialized, |
|
61 | - * but is also used during the initialization process. |
|
62 | - * So: |
|
63 | - * If initialized === null, init_caps() will be called before any other methods will run. |
|
64 | - * If initialized === false, then init_caps() is in the process of running it's logic. |
|
65 | - * If initialized === true, then init_caps() has completed the initialization process. |
|
66 | - * |
|
67 | - * @var boolean|null $initialized |
|
68 | - */ |
|
69 | - private $initialized; |
|
70 | - |
|
71 | - /** |
|
72 | - * @var boolean $reset |
|
73 | - */ |
|
74 | - private $reset = false; |
|
75 | - |
|
76 | - |
|
77 | - |
|
78 | - /** |
|
79 | - * singleton method used to instantiate class object |
|
80 | - * |
|
81 | - * @since 4.5.0 |
|
82 | - * |
|
83 | - * @return EE_Capabilities |
|
84 | - */ |
|
85 | - public static function instance() |
|
86 | - { |
|
87 | - //check if instantiated, and if not do so. |
|
88 | - if (! self::$_instance instanceof EE_Capabilities) { |
|
89 | - self::$_instance = new self(); |
|
90 | - } |
|
91 | - return self::$_instance; |
|
92 | - } |
|
93 | - |
|
94 | - |
|
95 | - |
|
96 | - /** |
|
97 | - * private constructor |
|
98 | - * |
|
99 | - * @since 4.5.0 |
|
100 | - */ |
|
101 | - private function __construct() |
|
102 | - { |
|
103 | - } |
|
104 | - |
|
105 | - |
|
106 | - |
|
107 | - /** |
|
108 | - * This delays the initialization of the capabilities class until EE_System core is loaded and ready. |
|
109 | - * |
|
110 | - * @param bool $reset allows for resetting the default capabilities saved on roles. Note that this doesn't |
|
111 | - * actually REMOVE any capabilities from existing roles, it just resaves defaults roles and |
|
112 | - * ensures that they are up to date. |
|
113 | - * |
|
114 | - * @since 4.5.0 |
|
115 | - * @return bool |
|
116 | - * @throws EE_Error |
|
117 | - */ |
|
118 | - public function init_caps($reset = false) |
|
119 | - { |
|
120 | - if(! EE_Maintenance_Mode::instance()->models_can_query()){ |
|
121 | - return false; |
|
122 | - } |
|
123 | - $this->reset = filter_var($reset, FILTER_VALIDATE_BOOLEAN); |
|
124 | - // if reset, then completely delete the cache option and clear the $capabilities_map property. |
|
125 | - if ($this->reset) { |
|
126 | - $this->initialized = null; |
|
127 | - $this->capabilities_map = array(); |
|
128 | - delete_option(self::option_name); |
|
129 | - } |
|
130 | - if ($this->initialized === null) { |
|
131 | - $this->initialized = false; |
|
132 | - do_action( |
|
133 | - 'AHEE__EE_Capabilities__init_caps__before_initialization', |
|
134 | - $this->reset |
|
135 | - ); |
|
136 | - $this->addCaps($this->_init_caps_map()); |
|
137 | - $this->_set_meta_caps(); |
|
138 | - do_action( |
|
139 | - 'AHEE__EE_Capabilities__init_caps__after_initialization', |
|
140 | - $this->capabilities_map |
|
141 | - ); |
|
142 | - $this->initialized = true; |
|
143 | - } |
|
144 | - // reset $this->reset so that it's not stuck on true if init_caps() gets called again |
|
145 | - $this->reset = false; |
|
146 | - return true; |
|
147 | - } |
|
148 | - |
|
149 | - |
|
150 | - |
|
151 | - |
|
152 | - /** |
|
153 | - * This sets the meta caps property. |
|
154 | - * |
|
155 | - * @since 4.5.0 |
|
156 | - * @return void |
|
157 | - * @throws EE_Error |
|
158 | - */ |
|
159 | - private function _set_meta_caps() |
|
160 | - { |
|
161 | - // get default meta caps and filter the returned array |
|
162 | - $this->_meta_caps = apply_filters( |
|
163 | - 'FHEE__EE_Capabilities___set_meta_caps__meta_caps', |
|
164 | - $this->_get_default_meta_caps_array() |
|
165 | - ); |
|
166 | - //add filter for map_meta_caps but only if models can query. |
|
167 | - if (! has_filter('map_meta_cap', array($this, 'map_meta_caps'))) { |
|
168 | - add_filter('map_meta_cap', array($this, 'map_meta_caps'), 10, 4); |
|
169 | - } |
|
170 | - } |
|
171 | - |
|
172 | - |
|
173 | - |
|
174 | - /** |
|
175 | - * This builds and returns the default meta_caps array only once. |
|
176 | - * |
|
177 | - * @since 4.8.28.rc.012 |
|
178 | - * @return array |
|
179 | - * @throws EE_Error |
|
180 | - */ |
|
181 | - private function _get_default_meta_caps_array() |
|
182 | - { |
|
183 | - static $default_meta_caps = array(); |
|
184 | - // make sure we're only ever initializing the default _meta_caps array once if it's empty. |
|
185 | - if (empty($default_meta_caps)) { |
|
186 | - $default_meta_caps = array( |
|
187 | - //edits |
|
188 | - new EE_Meta_Capability_Map_Edit( |
|
189 | - 'ee_edit_event', |
|
190 | - array('Event', 'ee_edit_published_events', 'ee_edit_others_events', 'ee_edit_private_events') |
|
191 | - ), |
|
192 | - new EE_Meta_Capability_Map_Edit( |
|
193 | - 'ee_edit_venue', |
|
194 | - array('Venue', 'ee_edit_published_venues', 'ee_edit_others_venues', 'ee_edit_private_venues') |
|
195 | - ), |
|
196 | - new EE_Meta_Capability_Map_Edit( |
|
197 | - 'ee_edit_registration', |
|
198 | - array('Registration', '', 'ee_edit_others_registrations', '') |
|
199 | - ), |
|
200 | - new EE_Meta_Capability_Map_Edit( |
|
201 | - 'ee_edit_checkin', |
|
202 | - array('Registration', '', 'ee_edit_others_checkins', '') |
|
203 | - ), |
|
204 | - new EE_Meta_Capability_Map_Messages_Cap( |
|
205 | - 'ee_edit_message', |
|
206 | - array('Message_Template_Group', '', 'ee_edit_others_messages', 'ee_edit_global_messages') |
|
207 | - ), |
|
208 | - new EE_Meta_Capability_Map_Edit( |
|
209 | - 'ee_edit_default_ticket', |
|
210 | - array('Ticket', '', 'ee_edit_others_default_tickets', '') |
|
211 | - ), |
|
212 | - new EE_Meta_Capability_Map_Registration_Form_Cap( |
|
213 | - 'ee_edit_question', |
|
214 | - array('Question', '', '', 'ee_edit_system_questions') |
|
215 | - ), |
|
216 | - new EE_Meta_Capability_Map_Registration_Form_Cap( |
|
217 | - 'ee_edit_question_group', |
|
218 | - array('Question_Group', '', '', 'ee_edit_system_question_groups') |
|
219 | - ), |
|
220 | - new EE_Meta_Capability_Map_Edit( |
|
221 | - 'ee_edit_payment_method', |
|
222 | - array('Payment_Method', '', 'ee_edit_others_payment_methods', '') |
|
223 | - ), |
|
224 | - //reads |
|
225 | - new EE_Meta_Capability_Map_Read( |
|
226 | - 'ee_read_event', |
|
227 | - array('Event', '', 'ee_read_others_events', 'ee_read_private_events') |
|
228 | - ), |
|
229 | - new EE_Meta_Capability_Map_Read( |
|
230 | - 'ee_read_venue', |
|
231 | - array('Venue', '', 'ee_read_others_venues', 'ee_read_private_venues') |
|
232 | - ), |
|
233 | - new EE_Meta_Capability_Map_Read( |
|
234 | - 'ee_read_registration', |
|
235 | - array('Registration', '', 'ee_read_others_registrations', '') |
|
236 | - ), |
|
237 | - new EE_Meta_Capability_Map_Read( |
|
238 | - 'ee_read_checkin', |
|
239 | - array('Registration', '', 'ee_read_others_checkins', '') |
|
240 | - ), |
|
241 | - new EE_Meta_Capability_Map_Messages_Cap( |
|
242 | - 'ee_read_message', |
|
243 | - array('Message_Template_Group', '', 'ee_read_others_messages', 'ee_read_global_messages') |
|
244 | - ), |
|
245 | - new EE_Meta_Capability_Map_Read( |
|
246 | - 'ee_read_default_ticket', |
|
247 | - array('Ticket', '', 'ee_read_others_default_tickets', '') |
|
248 | - ), |
|
249 | - new EE_Meta_Capability_Map_Read( |
|
250 | - 'ee_read_payment_method', |
|
251 | - array('Payment_Method', '', 'ee_read_others_payment_methods', '') |
|
252 | - ), |
|
253 | - //deletes |
|
254 | - new EE_Meta_Capability_Map_Delete( |
|
255 | - 'ee_delete_event', |
|
256 | - array( |
|
257 | - 'Event', |
|
258 | - 'ee_delete_published_events', |
|
259 | - 'ee_delete_others_events', |
|
260 | - 'ee_delete_private_events', |
|
261 | - ) |
|
262 | - ), |
|
263 | - new EE_Meta_Capability_Map_Delete( |
|
264 | - 'ee_delete_venue', |
|
265 | - array( |
|
266 | - 'Venue', |
|
267 | - 'ee_delete_published_venues', |
|
268 | - 'ee_delete_others_venues', |
|
269 | - 'ee_delete_private_venues', |
|
270 | - ) |
|
271 | - ), |
|
272 | - new EE_Meta_Capability_Map_Delete( |
|
273 | - 'ee_delete_registration', |
|
274 | - array('Registration', '', 'ee_delete_others_registrations', '') |
|
275 | - ), |
|
276 | - new EE_Meta_Capability_Map_Delete( |
|
277 | - 'ee_delete_checkin', |
|
278 | - array('Registration', '', 'ee_delete_others_checkins', '') |
|
279 | - ), |
|
280 | - new EE_Meta_Capability_Map_Messages_Cap( |
|
281 | - 'ee_delete_message', |
|
282 | - array('Message_Template_Group', '', 'ee_delete_others_messages', 'ee_delete_global_messages') |
|
283 | - ), |
|
284 | - new EE_Meta_Capability_Map_Delete( |
|
285 | - 'ee_delete_default_ticket', |
|
286 | - array('Ticket', '', 'ee_delete_others_default_tickets', '') |
|
287 | - ), |
|
288 | - new EE_Meta_Capability_Map_Registration_Form_Cap( |
|
289 | - 'ee_delete_question', |
|
290 | - array('Question', '', '', 'delete_system_questions') |
|
291 | - ), |
|
292 | - new EE_Meta_Capability_Map_Registration_Form_Cap( |
|
293 | - 'ee_delete_question_group', |
|
294 | - array('Question_Group', '', '', 'delete_system_question_groups') |
|
295 | - ), |
|
296 | - new EE_Meta_Capability_Map_Delete( |
|
297 | - 'ee_delete_payment_method', |
|
298 | - array('Payment_Method', '', 'ee_delete_others_payment_methods', '') |
|
299 | - ), |
|
300 | - ); |
|
301 | - } |
|
302 | - return $default_meta_caps; |
|
303 | - } |
|
304 | - |
|
305 | - |
|
306 | - |
|
307 | - /** |
|
308 | - * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
309 | - * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
310 | - * |
|
311 | - * The actual logic is carried out by implementer classes in their definition of _map_meta_caps. |
|
312 | - * |
|
313 | - * @since 4.5.0 |
|
314 | - * @see wp-includes/capabilities.php |
|
315 | - * |
|
316 | - * @param array $caps actual users capabilities |
|
317 | - * @param string $cap initial capability name that is being checked (the "map" key) |
|
318 | - * @param int $user_id The user id |
|
319 | - * @param array $args Adds context to the cap. Typically the object ID. |
|
320 | - * @return array actual users capabilities |
|
321 | - * @throws EE_Error |
|
322 | - */ |
|
323 | - public function map_meta_caps($caps, $cap, $user_id, $args) |
|
324 | - { |
|
325 | - if (did_action('AHEE__EE_System__load_espresso_addons__complete')) { |
|
326 | - //loop through our _meta_caps array |
|
327 | - foreach ($this->_meta_caps as $meta_map) { |
|
328 | - if (! $meta_map instanceof EE_Meta_Capability_Map) { |
|
329 | - continue; |
|
330 | - } |
|
331 | - // don't load models if there is no object ID in the args |
|
332 | - if (! empty($args[0])) { |
|
333 | - $meta_map->ensure_is_model(); |
|
334 | - } |
|
335 | - $caps = $meta_map->map_meta_caps($caps, $cap, $user_id, $args); |
|
336 | - } |
|
337 | - } |
|
338 | - return $caps; |
|
339 | - } |
|
340 | - |
|
341 | - |
|
342 | - |
|
343 | - /** |
|
344 | - * This sets up and returns the initial capabilities map for Event Espresso |
|
345 | - * Note this array is filtered. |
|
346 | - * It is assumed that all available EE capabilities are assigned to the administrator role. |
|
347 | - * |
|
348 | - * @since 4.5.0 |
|
349 | - * |
|
350 | - * @return array |
|
351 | - */ |
|
352 | - private function _init_caps_map() |
|
353 | - { |
|
354 | - return apply_filters( |
|
355 | - 'FHEE__EE_Capabilities__init_caps_map__caps', |
|
356 | - array( |
|
357 | - 'administrator' => array( |
|
358 | - //basic access |
|
359 | - 'ee_read_ee', |
|
360 | - //gateways |
|
361 | - /** |
|
362 | - * note that with payment method capabilities, although we've implemented |
|
363 | - * capability mapping which will be used for accessing payment methods owned by |
|
364 | - * other users. This is not fully implemented yet in the payment method ui. |
|
365 | - * Currently only the "plural" caps are in active use. |
|
366 | - * (Specific payment method caps are in use as well). |
|
367 | - **/ |
|
368 | - 'ee_manage_gateways', |
|
369 | - 'ee_read_payment_methods', |
|
370 | - 'ee_read_others_payment_methods', |
|
371 | - 'ee_edit_payment_methods', |
|
372 | - 'ee_edit_others_payment_methods', |
|
373 | - 'ee_delete_payment_methods', |
|
374 | - //events |
|
375 | - 'ee_publish_events', |
|
376 | - 'ee_read_private_events', |
|
377 | - 'ee_read_others_events', |
|
378 | - 'ee_read_events', |
|
379 | - 'ee_edit_events', |
|
380 | - 'ee_edit_published_events', |
|
381 | - 'ee_edit_others_events', |
|
382 | - 'ee_edit_private_events', |
|
383 | - 'ee_delete_published_events', |
|
384 | - 'ee_delete_private_events', |
|
385 | - 'ee_delete_events', |
|
386 | - 'ee_delete_others_events', |
|
387 | - //event categories |
|
388 | - 'ee_manage_event_categories', |
|
389 | - 'ee_edit_event_category', |
|
390 | - 'ee_delete_event_category', |
|
391 | - 'ee_assign_event_category', |
|
392 | - //venues |
|
393 | - 'ee_publish_venues', |
|
394 | - 'ee_read_venues', |
|
395 | - 'ee_read_others_venues', |
|
396 | - 'ee_read_private_venues', |
|
397 | - 'ee_edit_venues', |
|
398 | - 'ee_edit_others_venues', |
|
399 | - 'ee_edit_published_venues', |
|
400 | - 'ee_edit_private_venues', |
|
401 | - 'ee_delete_venues', |
|
402 | - 'ee_delete_others_venues', |
|
403 | - 'ee_delete_private_venues', |
|
404 | - 'ee_delete_published_venues', |
|
405 | - //venue categories |
|
406 | - 'ee_manage_venue_categories', |
|
407 | - 'ee_edit_venue_category', |
|
408 | - 'ee_delete_venue_category', |
|
409 | - 'ee_assign_venue_category', |
|
410 | - //contacts |
|
411 | - 'ee_read_contacts', |
|
412 | - 'ee_edit_contacts', |
|
413 | - 'ee_delete_contacts', |
|
414 | - //registrations |
|
415 | - 'ee_read_registrations', |
|
416 | - 'ee_read_others_registrations', |
|
417 | - 'ee_edit_registrations', |
|
418 | - 'ee_edit_others_registrations', |
|
419 | - 'ee_delete_registrations', |
|
420 | - //checkins |
|
421 | - 'ee_read_others_checkins', |
|
422 | - 'ee_read_checkins', |
|
423 | - 'ee_edit_checkins', |
|
424 | - 'ee_edit_others_checkins', |
|
425 | - 'ee_delete_checkins', |
|
426 | - 'ee_delete_others_checkins', |
|
427 | - //transactions && payments |
|
428 | - 'ee_read_transaction', |
|
429 | - 'ee_read_transactions', |
|
430 | - 'ee_edit_payments', |
|
431 | - 'ee_delete_payments', |
|
432 | - //messages |
|
433 | - 'ee_read_messages', |
|
434 | - 'ee_read_others_messages', |
|
435 | - 'ee_read_global_messages', |
|
436 | - 'ee_edit_global_messages', |
|
437 | - 'ee_edit_messages', |
|
438 | - 'ee_edit_others_messages', |
|
439 | - 'ee_delete_messages', |
|
440 | - 'ee_delete_others_messages', |
|
441 | - 'ee_delete_global_messages', |
|
442 | - 'ee_send_message', |
|
443 | - //tickets |
|
444 | - 'ee_read_default_tickets', |
|
445 | - 'ee_read_others_default_tickets', |
|
446 | - 'ee_edit_default_tickets', |
|
447 | - 'ee_edit_others_default_tickets', |
|
448 | - 'ee_delete_default_tickets', |
|
449 | - 'ee_delete_others_default_tickets', |
|
450 | - //prices |
|
451 | - 'ee_edit_default_price', |
|
452 | - 'ee_edit_default_prices', |
|
453 | - 'ee_delete_default_price', |
|
454 | - 'ee_delete_default_prices', |
|
455 | - 'ee_edit_default_price_type', |
|
456 | - 'ee_edit_default_price_types', |
|
457 | - 'ee_delete_default_price_type', |
|
458 | - 'ee_delete_default_price_types', |
|
459 | - 'ee_read_default_prices', |
|
460 | - 'ee_read_default_price_types', |
|
461 | - //registration form |
|
462 | - 'ee_edit_questions', |
|
463 | - 'ee_edit_system_questions', |
|
464 | - 'ee_read_questions', |
|
465 | - 'ee_delete_questions', |
|
466 | - 'ee_edit_question_groups', |
|
467 | - 'ee_read_question_groups', |
|
468 | - 'ee_edit_system_question_groups', |
|
469 | - 'ee_delete_question_groups', |
|
470 | - //event_type taxonomy |
|
471 | - 'ee_assign_event_type', |
|
472 | - 'ee_manage_event_types', |
|
473 | - 'ee_edit_event_type', |
|
474 | - 'ee_delete_event_type', |
|
475 | - ), |
|
476 | - 'ee_events_administrator' => array( |
|
477 | - //core wp caps |
|
478 | - 'read', |
|
479 | - 'read_private_pages', |
|
480 | - 'read_private_posts', |
|
481 | - 'edit_users', |
|
482 | - 'edit_posts', |
|
483 | - 'edit_pages', |
|
484 | - 'edit_published_posts', |
|
485 | - 'edit_published_pages', |
|
486 | - 'edit_private_pages', |
|
487 | - 'edit_private_posts', |
|
488 | - 'edit_others_posts', |
|
489 | - 'edit_others_pages', |
|
490 | - 'publish_posts', |
|
491 | - 'publish_pages', |
|
492 | - 'delete_posts', |
|
493 | - 'delete_pages', |
|
494 | - 'delete_private_pages', |
|
495 | - 'delete_private_posts', |
|
496 | - 'delete_published_pages', |
|
497 | - 'delete_published_posts', |
|
498 | - 'delete_others_posts', |
|
499 | - 'delete_others_pages', |
|
500 | - 'manage_categories', |
|
501 | - 'manage_links', |
|
502 | - 'moderate_comments', |
|
503 | - 'unfiltered_html', |
|
504 | - 'upload_files', |
|
505 | - 'export', |
|
506 | - 'import', |
|
507 | - 'list_users', |
|
508 | - 'level_1', //required if user with this role shows up in author dropdowns |
|
509 | - //basic ee access |
|
510 | - 'ee_read_ee', |
|
511 | - //events |
|
512 | - 'ee_publish_events', |
|
513 | - 'ee_read_private_events', |
|
514 | - 'ee_read_others_events', |
|
515 | - 'ee_read_event', |
|
516 | - 'ee_read_events', |
|
517 | - 'ee_edit_event', |
|
518 | - 'ee_edit_events', |
|
519 | - 'ee_edit_published_events', |
|
520 | - 'ee_edit_others_events', |
|
521 | - 'ee_edit_private_events', |
|
522 | - 'ee_delete_published_events', |
|
523 | - 'ee_delete_private_events', |
|
524 | - 'ee_delete_event', |
|
525 | - 'ee_delete_events', |
|
526 | - 'ee_delete_others_events', |
|
527 | - //event categories |
|
528 | - 'ee_manage_event_categories', |
|
529 | - 'ee_edit_event_category', |
|
530 | - 'ee_delete_event_category', |
|
531 | - 'ee_assign_event_category', |
|
532 | - //venues |
|
533 | - 'ee_publish_venues', |
|
534 | - 'ee_read_venue', |
|
535 | - 'ee_read_venues', |
|
536 | - 'ee_read_others_venues', |
|
537 | - 'ee_read_private_venues', |
|
538 | - 'ee_edit_venue', |
|
539 | - 'ee_edit_venues', |
|
540 | - 'ee_edit_others_venues', |
|
541 | - 'ee_edit_published_venues', |
|
542 | - 'ee_edit_private_venues', |
|
543 | - 'ee_delete_venue', |
|
544 | - 'ee_delete_venues', |
|
545 | - 'ee_delete_others_venues', |
|
546 | - 'ee_delete_private_venues', |
|
547 | - 'ee_delete_published_venues', |
|
548 | - //venue categories |
|
549 | - 'ee_manage_venue_categories', |
|
550 | - 'ee_edit_venue_category', |
|
551 | - 'ee_delete_venue_category', |
|
552 | - 'ee_assign_venue_category', |
|
553 | - //contacts |
|
554 | - 'ee_read_contacts', |
|
555 | - 'ee_edit_contacts', |
|
556 | - 'ee_delete_contacts', |
|
557 | - //registrations |
|
558 | - 'ee_read_registrations', |
|
559 | - 'ee_read_others_registrations', |
|
560 | - 'ee_edit_registration', |
|
561 | - 'ee_edit_registrations', |
|
562 | - 'ee_edit_others_registrations', |
|
563 | - 'ee_delete_registration', |
|
564 | - 'ee_delete_registrations', |
|
565 | - //checkins |
|
566 | - 'ee_read_others_checkins', |
|
567 | - 'ee_read_checkins', |
|
568 | - 'ee_edit_checkins', |
|
569 | - 'ee_edit_others_checkins', |
|
570 | - 'ee_delete_checkins', |
|
571 | - 'ee_delete_others_checkins', |
|
572 | - //transactions && payments |
|
573 | - 'ee_read_transaction', |
|
574 | - 'ee_read_transactions', |
|
575 | - 'ee_edit_payments', |
|
576 | - 'ee_delete_payments', |
|
577 | - //messages |
|
578 | - 'ee_read_messages', |
|
579 | - 'ee_read_others_messages', |
|
580 | - 'ee_read_global_messages', |
|
581 | - 'ee_edit_global_messages', |
|
582 | - 'ee_edit_messages', |
|
583 | - 'ee_edit_others_messages', |
|
584 | - 'ee_delete_messages', |
|
585 | - 'ee_delete_others_messages', |
|
586 | - 'ee_delete_global_messages', |
|
587 | - 'ee_send_message', |
|
588 | - //tickets |
|
589 | - 'ee_read_default_tickets', |
|
590 | - 'ee_read_others_default_tickets', |
|
591 | - 'ee_edit_default_tickets', |
|
592 | - 'ee_edit_others_default_tickets', |
|
593 | - 'ee_delete_default_tickets', |
|
594 | - 'ee_delete_others_default_tickets', |
|
595 | - //prices |
|
596 | - 'ee_edit_default_price', |
|
597 | - 'ee_edit_default_prices', |
|
598 | - 'ee_delete_default_price', |
|
599 | - 'ee_delete_default_prices', |
|
600 | - 'ee_edit_default_price_type', |
|
601 | - 'ee_edit_default_price_types', |
|
602 | - 'ee_delete_default_price_type', |
|
603 | - 'ee_delete_default_price_types', |
|
604 | - 'ee_read_default_prices', |
|
605 | - 'ee_read_default_price_types', |
|
606 | - //registration form |
|
607 | - 'ee_edit_questions', |
|
608 | - 'ee_edit_system_questions', |
|
609 | - 'ee_read_questions', |
|
610 | - 'ee_delete_questions', |
|
611 | - 'ee_edit_question_groups', |
|
612 | - 'ee_read_question_groups', |
|
613 | - 'ee_edit_system_question_groups', |
|
614 | - 'ee_delete_question_groups', |
|
615 | - //event_type taxonomy |
|
616 | - 'ee_assign_event_type', |
|
617 | - 'ee_manage_event_types', |
|
618 | - 'ee_edit_event_type', |
|
619 | - 'ee_delete_event_type', |
|
620 | - ) |
|
621 | - ) |
|
622 | - ); |
|
623 | - } |
|
624 | - |
|
625 | - |
|
626 | - |
|
627 | - /** |
|
628 | - * @return bool |
|
629 | - * @throws EE_Error |
|
630 | - */ |
|
631 | - private function setupCapabilitiesMap() |
|
632 | - { |
|
633 | - // if the initialization process hasn't even started, then we need to call init_caps() |
|
634 | - if($this->initialized === null) { |
|
635 | - return $this->init_caps(); |
|
636 | - } |
|
637 | - // unless resetting, get caps from db if we haven't already |
|
638 | - $this->capabilities_map = $this->reset || ! empty($this->capabilities_map) |
|
639 | - ? $this->capabilities_map |
|
640 | - : get_option(self::option_name, array()); |
|
641 | - return true; |
|
642 | - } |
|
643 | - |
|
644 | - |
|
645 | - |
|
646 | - /** |
|
647 | - * @param bool $update |
|
648 | - * @return bool |
|
649 | - */ |
|
650 | - private function updateCapabilitiesMap($update = true) |
|
651 | - { |
|
652 | - return $update ? update_option(self::option_name, $this->capabilities_map) : false; |
|
653 | - } |
|
654 | - |
|
655 | - |
|
656 | - |
|
657 | - /** |
|
658 | - * Adds capabilities to roles. |
|
659 | - * |
|
660 | - * @since 4.9.42 |
|
661 | - * @param array $capabilities_to_add array of capabilities to add, indexed by roles. |
|
662 | - * Note that this should ONLY be called on activation hook |
|
663 | - * otherwise the caps will be added on every request. |
|
664 | - * @return bool |
|
665 | - * @throws \EE_Error |
|
666 | - */ |
|
667 | - public function addCaps(array $capabilities_to_add) |
|
668 | - { |
|
669 | - // don't do anything if the capabilities map can not be initialized |
|
670 | - if (! $this->setupCapabilitiesMap()) { |
|
671 | - return false; |
|
672 | - } |
|
673 | - // and filter the array so others can get in on the fun during resets |
|
674 | - $capabilities_to_add = apply_filters( |
|
675 | - 'FHEE__EE_Capabilities__addCaps__capabilities_to_add', |
|
676 | - $capabilities_to_add, |
|
677 | - $this->reset, |
|
678 | - $this->capabilities_map |
|
679 | - ); |
|
680 | - $update_capabilities_map = false; |
|
681 | - // if not reset, see what caps are new for each role. if they're new, add them. |
|
682 | - foreach ($capabilities_to_add as $role => $caps_for_role) { |
|
683 | - if (is_array($caps_for_role)) { |
|
684 | - foreach ($caps_for_role as $cap) { |
|
685 | - if ( |
|
686 | - ! $this->capHasBeenAddedToRole($role, $cap) |
|
687 | - && $this->add_cap_to_role($role, $cap, true, false) |
|
688 | - ) { |
|
689 | - $update_capabilities_map = true; |
|
690 | - } |
|
691 | - } |
|
692 | - } |
|
693 | - } |
|
694 | - // now let's just save the cap that has been set but only if there's been a change. |
|
695 | - $updated = $this->updateCapabilitiesMap($update_capabilities_map); |
|
696 | - $this->flushWpUser($updated); |
|
697 | - do_action('AHEE__EE_Capabilities__addCaps__complete', $this->capabilities_map, $updated); |
|
698 | - return $updated; |
|
699 | - } |
|
700 | - |
|
701 | - |
|
702 | - |
|
703 | - /** |
|
704 | - * Loops through the capabilities map and removes the role caps specified by the incoming array |
|
705 | - * |
|
706 | - * @param array $caps_map map of capabilities to be removed (indexed by roles) |
|
707 | - * @return bool |
|
708 | - * @throws \EE_Error |
|
709 | - */ |
|
710 | - public function removeCaps($caps_map) |
|
711 | - { |
|
712 | - // don't do anything if the capabilities map can not be initialized |
|
713 | - if (! $this->setupCapabilitiesMap()) { |
|
714 | - return false; |
|
715 | - } |
|
716 | - $update_capabilities_map = false; |
|
717 | - foreach ($caps_map as $role => $caps_for_role) { |
|
718 | - if (is_array($caps_for_role)) { |
|
719 | - foreach ($caps_for_role as $cap) { |
|
720 | - if ($this->capHasBeenAddedToRole($role, $cap) |
|
721 | - && $this->remove_cap_from_role($role, $cap, false) |
|
722 | - ) { |
|
723 | - $update_capabilities_map = true; |
|
724 | - } |
|
725 | - } |
|
726 | - } |
|
727 | - } |
|
728 | - // maybe resave the caps |
|
729 | - $updated = $this->updateCapabilitiesMap($update_capabilities_map); |
|
730 | - $this->flushWpUser($updated); |
|
731 | - return $updated; |
|
732 | - } |
|
733 | - |
|
734 | - |
|
735 | - /** |
|
736 | - * This ensures that the WP User object cached on the $current_user global in WP has the latest capabilities from |
|
737 | - * the roles on that user. |
|
738 | - * |
|
739 | - * @param bool $flush Default is to flush the WP_User object. If false, then this method effectively does nothing. |
|
740 | - */ |
|
741 | - private function flushWpUser($flush = true) |
|
742 | - { |
|
743 | - if ($flush) { |
|
744 | - $user = wp_get_current_user(); |
|
745 | - if ($user instanceof WP_User) { |
|
746 | - $user->get_role_caps(); |
|
747 | - } |
|
748 | - } |
|
749 | - } |
|
750 | - |
|
751 | - |
|
752 | - |
|
753 | - /** |
|
754 | - * This method sets a capability on a role. Note this should only be done on activation, or if you have something |
|
755 | - * specific to prevent the cap from being added on every page load (adding caps are persistent to the db). Note. |
|
756 | - * this is a wrapper for $wp_role->add_cap() |
|
757 | - * |
|
758 | - * @see wp-includes/capabilities.php |
|
759 | - * @since 4.5.0 |
|
760 | - * @param string|WP_Role $role A WordPress role the capability is being added to |
|
761 | - * @param string $cap The capability being added to the role |
|
762 | - * @param bool $grant Whether to grant access to this cap on this role. |
|
763 | - * @param bool $update_capabilities_map |
|
764 | - * @return bool |
|
765 | - * @throws \EE_Error |
|
766 | - */ |
|
767 | - public function add_cap_to_role($role, $cap, $grant = true, $update_capabilities_map = true) |
|
768 | - { |
|
769 | - // capture incoming value for $role because we may need it to create a new WP_Role |
|
770 | - $orig_role = $role; |
|
771 | - $role = $role instanceof WP_Role ? $role : get_role($role); |
|
772 | - //if the role isn't available then we create it. |
|
773 | - if (! $role instanceof WP_Role) { |
|
774 | - // if a plugin wants to create a specific role name then they should create the role before |
|
775 | - // EE_Capabilities does. Otherwise this function will create the role name from the slug: |
|
776 | - // - removes any `ee_` namespacing from the start of the slug. |
|
777 | - // - replaces `_` with ` ` (empty space). |
|
778 | - // - sentence case on the resulting string. |
|
779 | - $role_label = ucwords(str_replace(array('ee_', '_'), array('', ' '), $orig_role)); |
|
780 | - $role = add_role($orig_role, $role_label); |
|
781 | - } |
|
782 | - if ($role instanceof WP_Role) { |
|
783 | - // don't do anything if the capabilities map can not be initialized |
|
784 | - if (! $this->setupCapabilitiesMap()) { |
|
785 | - return false; |
|
786 | - } |
|
787 | - if (! $this->capHasBeenAddedToRole($role->name, $cap)) { |
|
788 | - $role->add_cap($cap, $grant); |
|
789 | - $this->capabilities_map[ $role->name ][] = $cap; |
|
790 | - $this->updateCapabilitiesMap($update_capabilities_map); |
|
791 | - return true; |
|
792 | - } |
|
793 | - } |
|
794 | - return false; |
|
795 | - } |
|
796 | - |
|
797 | - |
|
798 | - |
|
799 | - /** |
|
800 | - * Functions similarly to add_cap_to_role except removes cap from given role. |
|
801 | - * Wrapper for $wp_role->remove_cap() |
|
802 | - * |
|
803 | - * @see wp-includes/capabilities.php |
|
804 | - * @since 4.5.0 |
|
805 | - * @param string|WP_Role $role A WordPress role the capability is being removed from. |
|
806 | - * @param string $cap The capability being removed |
|
807 | - * @param bool $update_capabilities_map |
|
808 | - * @return bool |
|
809 | - * @throws \EE_Error |
|
810 | - */ |
|
811 | - public function remove_cap_from_role($role, $cap, $update_capabilities_map = true) |
|
812 | - { |
|
813 | - // don't do anything if the capabilities map can not be initialized |
|
814 | - if (! $this->setupCapabilitiesMap()) { |
|
815 | - return false; |
|
816 | - } |
|
817 | - |
|
818 | - $role = $role instanceof WP_Role ? $role : get_role($role); |
|
819 | - if ($role instanceof WP_Role && $index = $this->capHasBeenAddedToRole($role->name, $cap, true)) { |
|
820 | - $role->remove_cap($cap); |
|
821 | - unset($this->capabilities_map[ $role->name ][ $index ]); |
|
822 | - $this->updateCapabilitiesMap($update_capabilities_map); |
|
823 | - return true; |
|
824 | - } |
|
825 | - return false; |
|
826 | - } |
|
827 | - |
|
828 | - |
|
829 | - |
|
830 | - /** |
|
831 | - * @param string $role_name |
|
832 | - * @param string $cap |
|
833 | - * @param bool $get_index |
|
834 | - * @return bool|mixed |
|
835 | - */ |
|
836 | - private function capHasBeenAddedToRole($role_name='', $cap='', $get_index = false) |
|
837 | - { |
|
838 | - if ( |
|
839 | - isset($this->capabilities_map[$role_name]) |
|
840 | - && ($index = array_search($cap, $this->capabilities_map[$role_name], true)) !== false |
|
841 | - ) { |
|
842 | - return $get_index ? $index : true; |
|
843 | - } |
|
844 | - return false; |
|
845 | - } |
|
846 | - |
|
847 | - |
|
848 | - |
|
849 | - /** |
|
850 | - * Wrapper for the native WP current_user_can() method. |
|
851 | - * This is provided as a handy method for a couple things: |
|
852 | - * 1. Using the context string it allows for targeted filtering by addons for a specific check (without having to |
|
853 | - * write those filters wherever current_user_can is called). |
|
854 | - * 2. Explicit passing of $id from a given context ( useful in the cases of map_meta_cap filters ) |
|
855 | - * |
|
856 | - * @since 4.5.0 |
|
857 | - * |
|
858 | - * @param string $cap The cap being checked. |
|
859 | - * @param string $context The context where the current_user_can is being called from. |
|
860 | - * @param int $id Optional. Id for item where current_user_can is being called from (used in map_meta_cap() |
|
861 | - * filters. |
|
862 | - * |
|
863 | - * @return bool Whether user can or not. |
|
864 | - */ |
|
865 | - public function current_user_can($cap, $context, $id = 0) |
|
866 | - { |
|
867 | - //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
|
868 | - $filtered_cap = apply_filters('FHEE__EE_Capabilities__current_user_can__cap__' . $context, $cap, $id); |
|
869 | - $filtered_cap = apply_filters( |
|
870 | - 'FHEE__EE_Capabilities__current_user_can__cap', |
|
871 | - $filtered_cap, |
|
872 | - $context, |
|
873 | - $cap, |
|
874 | - $id |
|
875 | - ); |
|
876 | - return ! empty($id) |
|
877 | - ? current_user_can($filtered_cap, $id) |
|
878 | - : current_user_can($filtered_cap); |
|
879 | - } |
|
880 | - |
|
881 | - |
|
882 | - |
|
883 | - /** |
|
884 | - * This is a wrapper for the WP user_can() function and follows the same style as the other wrappers in this class. |
|
885 | - * |
|
886 | - * @param int|WP_User $user Either the user_id or a WP_User object |
|
887 | - * @param string $cap The capability string being checked |
|
888 | - * @param string $context The context where the user_can is being called from (used in filters). |
|
889 | - * @param int $id Optional. Id for item where user_can is being called from ( used in map_meta_cap() |
|
890 | - * filters) |
|
891 | - * |
|
892 | - * @return bool Whether user can or not. |
|
893 | - */ |
|
894 | - public function user_can($user, $cap, $context, $id = 0) |
|
895 | - { |
|
896 | - //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
|
897 | - $filtered_cap = apply_filters('FHEE__EE_Capabilities__user_can__cap__' . $context, $cap, $user, $id); |
|
898 | - $filtered_cap = apply_filters( |
|
899 | - 'FHEE__EE_Capabilities__user_can__cap', |
|
900 | - $filtered_cap, |
|
901 | - $context, |
|
902 | - $cap, |
|
903 | - $user, |
|
904 | - $id |
|
905 | - ); |
|
906 | - return ! empty($id) |
|
907 | - ? user_can($user, $filtered_cap, $id) |
|
908 | - : user_can($user, $filtered_cap); |
|
909 | - } |
|
910 | - |
|
911 | - |
|
912 | - |
|
913 | - /** |
|
914 | - * Wrapper for the native WP current_user_can_for_blog() method. |
|
915 | - * This is provided as a handy method for a couple things: |
|
916 | - * 1. Using the context string it allows for targeted filtering by addons for a specific check (without having to |
|
917 | - * write those filters wherever current_user_can is called). |
|
918 | - * 2. Explicit passing of $id from a given context ( useful in the cases of map_meta_cap filters ) |
|
919 | - * |
|
920 | - * @since 4.5.0 |
|
921 | - * |
|
922 | - * @param int $blog_id The blog id that is being checked for. |
|
923 | - * @param string $cap The cap being checked. |
|
924 | - * @param string $context The context where the current_user_can is being called from. |
|
925 | - * @param int $id Optional. Id for item where current_user_can is being called from (used in map_meta_cap() |
|
926 | - * filters. |
|
927 | - * |
|
928 | - * @return bool Whether user can or not. |
|
929 | - */ |
|
930 | - public function current_user_can_for_blog($blog_id, $cap, $context, $id = 0) |
|
931 | - { |
|
932 | - $user_can = ! empty($id) |
|
933 | - ? current_user_can_for_blog($blog_id, $cap, $id) |
|
934 | - : current_user_can($blog_id, $cap); |
|
935 | - //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
|
936 | - $user_can = apply_filters( |
|
937 | - 'FHEE__EE_Capabilities__current_user_can_for_blog__user_can__' . $context, |
|
938 | - $user_can, |
|
939 | - $blog_id, |
|
940 | - $cap, |
|
941 | - $id |
|
942 | - ); |
|
943 | - $user_can = apply_filters( |
|
944 | - 'FHEE__EE_Capabilities__current_user_can_for_blog__user_can', |
|
945 | - $user_can, |
|
946 | - $context, |
|
947 | - $blog_id, |
|
948 | - $cap, |
|
949 | - $id |
|
950 | - ); |
|
951 | - return $user_can; |
|
952 | - } |
|
953 | - |
|
954 | - |
|
955 | - |
|
956 | - /** |
|
957 | - * This helper method just returns an array of registered EE capabilities. |
|
958 | - * |
|
959 | - * @since 4.5.0 |
|
960 | - * @param string $role If empty then the entire role/capability map is returned. |
|
961 | - * Otherwise just the capabilities for the given role are returned. |
|
962 | - * @return array |
|
963 | - * @throws EE_Error |
|
964 | - */ |
|
965 | - public function get_ee_capabilities($role = 'administrator') |
|
966 | - { |
|
967 | - if (! $this->initialized) { |
|
968 | - $this->init_caps(); |
|
969 | - } |
|
970 | - if (empty($role)) { |
|
971 | - return $this->capabilities_map; |
|
972 | - } |
|
973 | - return isset($this->capabilities_map[ $role ]) |
|
974 | - ? $this->capabilities_map[ $role ] |
|
975 | - : array(); |
|
976 | - } |
|
977 | - |
|
978 | - |
|
979 | - |
|
980 | - /** |
|
981 | - * @deprecated 4.9.42 |
|
982 | - * @param bool $reset If you need to reset Event Espresso's capabilities, |
|
983 | - * then please use the init_caps() method with the "$reset" parameter set to "true" |
|
984 | - * @param array $caps_map Optional. |
|
985 | - * Can be used to send a custom map of roles and capabilities for setting them up. |
|
986 | - * Note that this should ONLY be called on activation hook or some other one-time |
|
987 | - * task otherwise the caps will be added on every request. |
|
988 | - * @return void |
|
989 | - * @throws EE_Error |
|
990 | - */ |
|
991 | - public function init_role_caps($reset = false, $caps_map = array()) |
|
992 | - { |
|
993 | - // If this method is called directly and reset is set as 'true', |
|
994 | - // then display a doing it wrong notice, because we want resets to go through init_caps() |
|
995 | - // to guarantee that everything is set up correctly. |
|
996 | - // This prevents the capabilities map getting reset incorrectly by direct calls to this method. |
|
997 | - if ($reset) { |
|
998 | - EE_Error::doing_it_wrong( |
|
999 | - __METHOD__, |
|
1000 | - sprintf( |
|
1001 | - esc_html__( |
|
1002 | - 'The "%1$s" parameter for the "%2$s" method is deprecated. If you need to reset Event Espresso\'s capabilities, then please use the "%3$s" method with the "%1$s" parameter set to "%4$s".', |
|
1003 | - 'event_espresso' |
|
1004 | - ), |
|
1005 | - '$reset', |
|
1006 | - __METHOD__ . '()', |
|
1007 | - 'EE_Capabilities::init_caps()', |
|
1008 | - 'true' |
|
1009 | - ), |
|
1010 | - '4.9.42', |
|
1011 | - '5.0.0' |
|
1012 | - ); |
|
1013 | - } |
|
1014 | - $this->addCaps($caps_map); |
|
1015 | - } |
|
21 | + /** |
|
22 | + * the name of the wp option used to store caps previously initialized |
|
23 | + */ |
|
24 | + const option_name = 'ee_caps_initialized'; |
|
25 | + |
|
26 | + /** |
|
27 | + * instance of EE_Capabilities object |
|
28 | + * |
|
29 | + * @var EE_Capabilities |
|
30 | + */ |
|
31 | + private static $_instance; |
|
32 | + |
|
33 | + |
|
34 | + /** |
|
35 | + * This is a map of caps that correspond to a default WP_Role. |
|
36 | + * Array is indexed by Role and values are ee capabilities. |
|
37 | + * |
|
38 | + * @since 4.5.0 |
|
39 | + * |
|
40 | + * @var array |
|
41 | + */ |
|
42 | + private $capabilities_map = array(); |
|
43 | + |
|
44 | + /** |
|
45 | + * This used to hold an array of EE_Meta_Capability_Map objects |
|
46 | + * that define the granular capabilities mapped to for a user depending on context. |
|
47 | + * |
|
48 | + * @var EE_Meta_Capability_Map[] |
|
49 | + */ |
|
50 | + private $_meta_caps = array(); |
|
51 | + |
|
52 | + /** |
|
53 | + * The internal $capabilities_map needs to be initialized before it can be used. |
|
54 | + * This flag tracks whether that has happened or not. |
|
55 | + * But for this to work, we need three states to indicate: |
|
56 | + * initialization has not occurred at all |
|
57 | + * initialization has started but is not complete |
|
58 | + * initialization is complete |
|
59 | + * The reason this is needed is because the addCaps() method |
|
60 | + * normally requires the $capabilities_map to be initialized, |
|
61 | + * but is also used during the initialization process. |
|
62 | + * So: |
|
63 | + * If initialized === null, init_caps() will be called before any other methods will run. |
|
64 | + * If initialized === false, then init_caps() is in the process of running it's logic. |
|
65 | + * If initialized === true, then init_caps() has completed the initialization process. |
|
66 | + * |
|
67 | + * @var boolean|null $initialized |
|
68 | + */ |
|
69 | + private $initialized; |
|
70 | + |
|
71 | + /** |
|
72 | + * @var boolean $reset |
|
73 | + */ |
|
74 | + private $reset = false; |
|
75 | + |
|
76 | + |
|
77 | + |
|
78 | + /** |
|
79 | + * singleton method used to instantiate class object |
|
80 | + * |
|
81 | + * @since 4.5.0 |
|
82 | + * |
|
83 | + * @return EE_Capabilities |
|
84 | + */ |
|
85 | + public static function instance() |
|
86 | + { |
|
87 | + //check if instantiated, and if not do so. |
|
88 | + if (! self::$_instance instanceof EE_Capabilities) { |
|
89 | + self::$_instance = new self(); |
|
90 | + } |
|
91 | + return self::$_instance; |
|
92 | + } |
|
93 | + |
|
94 | + |
|
95 | + |
|
96 | + /** |
|
97 | + * private constructor |
|
98 | + * |
|
99 | + * @since 4.5.0 |
|
100 | + */ |
|
101 | + private function __construct() |
|
102 | + { |
|
103 | + } |
|
104 | + |
|
105 | + |
|
106 | + |
|
107 | + /** |
|
108 | + * This delays the initialization of the capabilities class until EE_System core is loaded and ready. |
|
109 | + * |
|
110 | + * @param bool $reset allows for resetting the default capabilities saved on roles. Note that this doesn't |
|
111 | + * actually REMOVE any capabilities from existing roles, it just resaves defaults roles and |
|
112 | + * ensures that they are up to date. |
|
113 | + * |
|
114 | + * @since 4.5.0 |
|
115 | + * @return bool |
|
116 | + * @throws EE_Error |
|
117 | + */ |
|
118 | + public function init_caps($reset = false) |
|
119 | + { |
|
120 | + if(! EE_Maintenance_Mode::instance()->models_can_query()){ |
|
121 | + return false; |
|
122 | + } |
|
123 | + $this->reset = filter_var($reset, FILTER_VALIDATE_BOOLEAN); |
|
124 | + // if reset, then completely delete the cache option and clear the $capabilities_map property. |
|
125 | + if ($this->reset) { |
|
126 | + $this->initialized = null; |
|
127 | + $this->capabilities_map = array(); |
|
128 | + delete_option(self::option_name); |
|
129 | + } |
|
130 | + if ($this->initialized === null) { |
|
131 | + $this->initialized = false; |
|
132 | + do_action( |
|
133 | + 'AHEE__EE_Capabilities__init_caps__before_initialization', |
|
134 | + $this->reset |
|
135 | + ); |
|
136 | + $this->addCaps($this->_init_caps_map()); |
|
137 | + $this->_set_meta_caps(); |
|
138 | + do_action( |
|
139 | + 'AHEE__EE_Capabilities__init_caps__after_initialization', |
|
140 | + $this->capabilities_map |
|
141 | + ); |
|
142 | + $this->initialized = true; |
|
143 | + } |
|
144 | + // reset $this->reset so that it's not stuck on true if init_caps() gets called again |
|
145 | + $this->reset = false; |
|
146 | + return true; |
|
147 | + } |
|
148 | + |
|
149 | + |
|
150 | + |
|
151 | + |
|
152 | + /** |
|
153 | + * This sets the meta caps property. |
|
154 | + * |
|
155 | + * @since 4.5.0 |
|
156 | + * @return void |
|
157 | + * @throws EE_Error |
|
158 | + */ |
|
159 | + private function _set_meta_caps() |
|
160 | + { |
|
161 | + // get default meta caps and filter the returned array |
|
162 | + $this->_meta_caps = apply_filters( |
|
163 | + 'FHEE__EE_Capabilities___set_meta_caps__meta_caps', |
|
164 | + $this->_get_default_meta_caps_array() |
|
165 | + ); |
|
166 | + //add filter for map_meta_caps but only if models can query. |
|
167 | + if (! has_filter('map_meta_cap', array($this, 'map_meta_caps'))) { |
|
168 | + add_filter('map_meta_cap', array($this, 'map_meta_caps'), 10, 4); |
|
169 | + } |
|
170 | + } |
|
171 | + |
|
172 | + |
|
173 | + |
|
174 | + /** |
|
175 | + * This builds and returns the default meta_caps array only once. |
|
176 | + * |
|
177 | + * @since 4.8.28.rc.012 |
|
178 | + * @return array |
|
179 | + * @throws EE_Error |
|
180 | + */ |
|
181 | + private function _get_default_meta_caps_array() |
|
182 | + { |
|
183 | + static $default_meta_caps = array(); |
|
184 | + // make sure we're only ever initializing the default _meta_caps array once if it's empty. |
|
185 | + if (empty($default_meta_caps)) { |
|
186 | + $default_meta_caps = array( |
|
187 | + //edits |
|
188 | + new EE_Meta_Capability_Map_Edit( |
|
189 | + 'ee_edit_event', |
|
190 | + array('Event', 'ee_edit_published_events', 'ee_edit_others_events', 'ee_edit_private_events') |
|
191 | + ), |
|
192 | + new EE_Meta_Capability_Map_Edit( |
|
193 | + 'ee_edit_venue', |
|
194 | + array('Venue', 'ee_edit_published_venues', 'ee_edit_others_venues', 'ee_edit_private_venues') |
|
195 | + ), |
|
196 | + new EE_Meta_Capability_Map_Edit( |
|
197 | + 'ee_edit_registration', |
|
198 | + array('Registration', '', 'ee_edit_others_registrations', '') |
|
199 | + ), |
|
200 | + new EE_Meta_Capability_Map_Edit( |
|
201 | + 'ee_edit_checkin', |
|
202 | + array('Registration', '', 'ee_edit_others_checkins', '') |
|
203 | + ), |
|
204 | + new EE_Meta_Capability_Map_Messages_Cap( |
|
205 | + 'ee_edit_message', |
|
206 | + array('Message_Template_Group', '', 'ee_edit_others_messages', 'ee_edit_global_messages') |
|
207 | + ), |
|
208 | + new EE_Meta_Capability_Map_Edit( |
|
209 | + 'ee_edit_default_ticket', |
|
210 | + array('Ticket', '', 'ee_edit_others_default_tickets', '') |
|
211 | + ), |
|
212 | + new EE_Meta_Capability_Map_Registration_Form_Cap( |
|
213 | + 'ee_edit_question', |
|
214 | + array('Question', '', '', 'ee_edit_system_questions') |
|
215 | + ), |
|
216 | + new EE_Meta_Capability_Map_Registration_Form_Cap( |
|
217 | + 'ee_edit_question_group', |
|
218 | + array('Question_Group', '', '', 'ee_edit_system_question_groups') |
|
219 | + ), |
|
220 | + new EE_Meta_Capability_Map_Edit( |
|
221 | + 'ee_edit_payment_method', |
|
222 | + array('Payment_Method', '', 'ee_edit_others_payment_methods', '') |
|
223 | + ), |
|
224 | + //reads |
|
225 | + new EE_Meta_Capability_Map_Read( |
|
226 | + 'ee_read_event', |
|
227 | + array('Event', '', 'ee_read_others_events', 'ee_read_private_events') |
|
228 | + ), |
|
229 | + new EE_Meta_Capability_Map_Read( |
|
230 | + 'ee_read_venue', |
|
231 | + array('Venue', '', 'ee_read_others_venues', 'ee_read_private_venues') |
|
232 | + ), |
|
233 | + new EE_Meta_Capability_Map_Read( |
|
234 | + 'ee_read_registration', |
|
235 | + array('Registration', '', 'ee_read_others_registrations', '') |
|
236 | + ), |
|
237 | + new EE_Meta_Capability_Map_Read( |
|
238 | + 'ee_read_checkin', |
|
239 | + array('Registration', '', 'ee_read_others_checkins', '') |
|
240 | + ), |
|
241 | + new EE_Meta_Capability_Map_Messages_Cap( |
|
242 | + 'ee_read_message', |
|
243 | + array('Message_Template_Group', '', 'ee_read_others_messages', 'ee_read_global_messages') |
|
244 | + ), |
|
245 | + new EE_Meta_Capability_Map_Read( |
|
246 | + 'ee_read_default_ticket', |
|
247 | + array('Ticket', '', 'ee_read_others_default_tickets', '') |
|
248 | + ), |
|
249 | + new EE_Meta_Capability_Map_Read( |
|
250 | + 'ee_read_payment_method', |
|
251 | + array('Payment_Method', '', 'ee_read_others_payment_methods', '') |
|
252 | + ), |
|
253 | + //deletes |
|
254 | + new EE_Meta_Capability_Map_Delete( |
|
255 | + 'ee_delete_event', |
|
256 | + array( |
|
257 | + 'Event', |
|
258 | + 'ee_delete_published_events', |
|
259 | + 'ee_delete_others_events', |
|
260 | + 'ee_delete_private_events', |
|
261 | + ) |
|
262 | + ), |
|
263 | + new EE_Meta_Capability_Map_Delete( |
|
264 | + 'ee_delete_venue', |
|
265 | + array( |
|
266 | + 'Venue', |
|
267 | + 'ee_delete_published_venues', |
|
268 | + 'ee_delete_others_venues', |
|
269 | + 'ee_delete_private_venues', |
|
270 | + ) |
|
271 | + ), |
|
272 | + new EE_Meta_Capability_Map_Delete( |
|
273 | + 'ee_delete_registration', |
|
274 | + array('Registration', '', 'ee_delete_others_registrations', '') |
|
275 | + ), |
|
276 | + new EE_Meta_Capability_Map_Delete( |
|
277 | + 'ee_delete_checkin', |
|
278 | + array('Registration', '', 'ee_delete_others_checkins', '') |
|
279 | + ), |
|
280 | + new EE_Meta_Capability_Map_Messages_Cap( |
|
281 | + 'ee_delete_message', |
|
282 | + array('Message_Template_Group', '', 'ee_delete_others_messages', 'ee_delete_global_messages') |
|
283 | + ), |
|
284 | + new EE_Meta_Capability_Map_Delete( |
|
285 | + 'ee_delete_default_ticket', |
|
286 | + array('Ticket', '', 'ee_delete_others_default_tickets', '') |
|
287 | + ), |
|
288 | + new EE_Meta_Capability_Map_Registration_Form_Cap( |
|
289 | + 'ee_delete_question', |
|
290 | + array('Question', '', '', 'delete_system_questions') |
|
291 | + ), |
|
292 | + new EE_Meta_Capability_Map_Registration_Form_Cap( |
|
293 | + 'ee_delete_question_group', |
|
294 | + array('Question_Group', '', '', 'delete_system_question_groups') |
|
295 | + ), |
|
296 | + new EE_Meta_Capability_Map_Delete( |
|
297 | + 'ee_delete_payment_method', |
|
298 | + array('Payment_Method', '', 'ee_delete_others_payment_methods', '') |
|
299 | + ), |
|
300 | + ); |
|
301 | + } |
|
302 | + return $default_meta_caps; |
|
303 | + } |
|
304 | + |
|
305 | + |
|
306 | + |
|
307 | + /** |
|
308 | + * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
309 | + * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
310 | + * |
|
311 | + * The actual logic is carried out by implementer classes in their definition of _map_meta_caps. |
|
312 | + * |
|
313 | + * @since 4.5.0 |
|
314 | + * @see wp-includes/capabilities.php |
|
315 | + * |
|
316 | + * @param array $caps actual users capabilities |
|
317 | + * @param string $cap initial capability name that is being checked (the "map" key) |
|
318 | + * @param int $user_id The user id |
|
319 | + * @param array $args Adds context to the cap. Typically the object ID. |
|
320 | + * @return array actual users capabilities |
|
321 | + * @throws EE_Error |
|
322 | + */ |
|
323 | + public function map_meta_caps($caps, $cap, $user_id, $args) |
|
324 | + { |
|
325 | + if (did_action('AHEE__EE_System__load_espresso_addons__complete')) { |
|
326 | + //loop through our _meta_caps array |
|
327 | + foreach ($this->_meta_caps as $meta_map) { |
|
328 | + if (! $meta_map instanceof EE_Meta_Capability_Map) { |
|
329 | + continue; |
|
330 | + } |
|
331 | + // don't load models if there is no object ID in the args |
|
332 | + if (! empty($args[0])) { |
|
333 | + $meta_map->ensure_is_model(); |
|
334 | + } |
|
335 | + $caps = $meta_map->map_meta_caps($caps, $cap, $user_id, $args); |
|
336 | + } |
|
337 | + } |
|
338 | + return $caps; |
|
339 | + } |
|
340 | + |
|
341 | + |
|
342 | + |
|
343 | + /** |
|
344 | + * This sets up and returns the initial capabilities map for Event Espresso |
|
345 | + * Note this array is filtered. |
|
346 | + * It is assumed that all available EE capabilities are assigned to the administrator role. |
|
347 | + * |
|
348 | + * @since 4.5.0 |
|
349 | + * |
|
350 | + * @return array |
|
351 | + */ |
|
352 | + private function _init_caps_map() |
|
353 | + { |
|
354 | + return apply_filters( |
|
355 | + 'FHEE__EE_Capabilities__init_caps_map__caps', |
|
356 | + array( |
|
357 | + 'administrator' => array( |
|
358 | + //basic access |
|
359 | + 'ee_read_ee', |
|
360 | + //gateways |
|
361 | + /** |
|
362 | + * note that with payment method capabilities, although we've implemented |
|
363 | + * capability mapping which will be used for accessing payment methods owned by |
|
364 | + * other users. This is not fully implemented yet in the payment method ui. |
|
365 | + * Currently only the "plural" caps are in active use. |
|
366 | + * (Specific payment method caps are in use as well). |
|
367 | + **/ |
|
368 | + 'ee_manage_gateways', |
|
369 | + 'ee_read_payment_methods', |
|
370 | + 'ee_read_others_payment_methods', |
|
371 | + 'ee_edit_payment_methods', |
|
372 | + 'ee_edit_others_payment_methods', |
|
373 | + 'ee_delete_payment_methods', |
|
374 | + //events |
|
375 | + 'ee_publish_events', |
|
376 | + 'ee_read_private_events', |
|
377 | + 'ee_read_others_events', |
|
378 | + 'ee_read_events', |
|
379 | + 'ee_edit_events', |
|
380 | + 'ee_edit_published_events', |
|
381 | + 'ee_edit_others_events', |
|
382 | + 'ee_edit_private_events', |
|
383 | + 'ee_delete_published_events', |
|
384 | + 'ee_delete_private_events', |
|
385 | + 'ee_delete_events', |
|
386 | + 'ee_delete_others_events', |
|
387 | + //event categories |
|
388 | + 'ee_manage_event_categories', |
|
389 | + 'ee_edit_event_category', |
|
390 | + 'ee_delete_event_category', |
|
391 | + 'ee_assign_event_category', |
|
392 | + //venues |
|
393 | + 'ee_publish_venues', |
|
394 | + 'ee_read_venues', |
|
395 | + 'ee_read_others_venues', |
|
396 | + 'ee_read_private_venues', |
|
397 | + 'ee_edit_venues', |
|
398 | + 'ee_edit_others_venues', |
|
399 | + 'ee_edit_published_venues', |
|
400 | + 'ee_edit_private_venues', |
|
401 | + 'ee_delete_venues', |
|
402 | + 'ee_delete_others_venues', |
|
403 | + 'ee_delete_private_venues', |
|
404 | + 'ee_delete_published_venues', |
|
405 | + //venue categories |
|
406 | + 'ee_manage_venue_categories', |
|
407 | + 'ee_edit_venue_category', |
|
408 | + 'ee_delete_venue_category', |
|
409 | + 'ee_assign_venue_category', |
|
410 | + //contacts |
|
411 | + 'ee_read_contacts', |
|
412 | + 'ee_edit_contacts', |
|
413 | + 'ee_delete_contacts', |
|
414 | + //registrations |
|
415 | + 'ee_read_registrations', |
|
416 | + 'ee_read_others_registrations', |
|
417 | + 'ee_edit_registrations', |
|
418 | + 'ee_edit_others_registrations', |
|
419 | + 'ee_delete_registrations', |
|
420 | + //checkins |
|
421 | + 'ee_read_others_checkins', |
|
422 | + 'ee_read_checkins', |
|
423 | + 'ee_edit_checkins', |
|
424 | + 'ee_edit_others_checkins', |
|
425 | + 'ee_delete_checkins', |
|
426 | + 'ee_delete_others_checkins', |
|
427 | + //transactions && payments |
|
428 | + 'ee_read_transaction', |
|
429 | + 'ee_read_transactions', |
|
430 | + 'ee_edit_payments', |
|
431 | + 'ee_delete_payments', |
|
432 | + //messages |
|
433 | + 'ee_read_messages', |
|
434 | + 'ee_read_others_messages', |
|
435 | + 'ee_read_global_messages', |
|
436 | + 'ee_edit_global_messages', |
|
437 | + 'ee_edit_messages', |
|
438 | + 'ee_edit_others_messages', |
|
439 | + 'ee_delete_messages', |
|
440 | + 'ee_delete_others_messages', |
|
441 | + 'ee_delete_global_messages', |
|
442 | + 'ee_send_message', |
|
443 | + //tickets |
|
444 | + 'ee_read_default_tickets', |
|
445 | + 'ee_read_others_default_tickets', |
|
446 | + 'ee_edit_default_tickets', |
|
447 | + 'ee_edit_others_default_tickets', |
|
448 | + 'ee_delete_default_tickets', |
|
449 | + 'ee_delete_others_default_tickets', |
|
450 | + //prices |
|
451 | + 'ee_edit_default_price', |
|
452 | + 'ee_edit_default_prices', |
|
453 | + 'ee_delete_default_price', |
|
454 | + 'ee_delete_default_prices', |
|
455 | + 'ee_edit_default_price_type', |
|
456 | + 'ee_edit_default_price_types', |
|
457 | + 'ee_delete_default_price_type', |
|
458 | + 'ee_delete_default_price_types', |
|
459 | + 'ee_read_default_prices', |
|
460 | + 'ee_read_default_price_types', |
|
461 | + //registration form |
|
462 | + 'ee_edit_questions', |
|
463 | + 'ee_edit_system_questions', |
|
464 | + 'ee_read_questions', |
|
465 | + 'ee_delete_questions', |
|
466 | + 'ee_edit_question_groups', |
|
467 | + 'ee_read_question_groups', |
|
468 | + 'ee_edit_system_question_groups', |
|
469 | + 'ee_delete_question_groups', |
|
470 | + //event_type taxonomy |
|
471 | + 'ee_assign_event_type', |
|
472 | + 'ee_manage_event_types', |
|
473 | + 'ee_edit_event_type', |
|
474 | + 'ee_delete_event_type', |
|
475 | + ), |
|
476 | + 'ee_events_administrator' => array( |
|
477 | + //core wp caps |
|
478 | + 'read', |
|
479 | + 'read_private_pages', |
|
480 | + 'read_private_posts', |
|
481 | + 'edit_users', |
|
482 | + 'edit_posts', |
|
483 | + 'edit_pages', |
|
484 | + 'edit_published_posts', |
|
485 | + 'edit_published_pages', |
|
486 | + 'edit_private_pages', |
|
487 | + 'edit_private_posts', |
|
488 | + 'edit_others_posts', |
|
489 | + 'edit_others_pages', |
|
490 | + 'publish_posts', |
|
491 | + 'publish_pages', |
|
492 | + 'delete_posts', |
|
493 | + 'delete_pages', |
|
494 | + 'delete_private_pages', |
|
495 | + 'delete_private_posts', |
|
496 | + 'delete_published_pages', |
|
497 | + 'delete_published_posts', |
|
498 | + 'delete_others_posts', |
|
499 | + 'delete_others_pages', |
|
500 | + 'manage_categories', |
|
501 | + 'manage_links', |
|
502 | + 'moderate_comments', |
|
503 | + 'unfiltered_html', |
|
504 | + 'upload_files', |
|
505 | + 'export', |
|
506 | + 'import', |
|
507 | + 'list_users', |
|
508 | + 'level_1', //required if user with this role shows up in author dropdowns |
|
509 | + //basic ee access |
|
510 | + 'ee_read_ee', |
|
511 | + //events |
|
512 | + 'ee_publish_events', |
|
513 | + 'ee_read_private_events', |
|
514 | + 'ee_read_others_events', |
|
515 | + 'ee_read_event', |
|
516 | + 'ee_read_events', |
|
517 | + 'ee_edit_event', |
|
518 | + 'ee_edit_events', |
|
519 | + 'ee_edit_published_events', |
|
520 | + 'ee_edit_others_events', |
|
521 | + 'ee_edit_private_events', |
|
522 | + 'ee_delete_published_events', |
|
523 | + 'ee_delete_private_events', |
|
524 | + 'ee_delete_event', |
|
525 | + 'ee_delete_events', |
|
526 | + 'ee_delete_others_events', |
|
527 | + //event categories |
|
528 | + 'ee_manage_event_categories', |
|
529 | + 'ee_edit_event_category', |
|
530 | + 'ee_delete_event_category', |
|
531 | + 'ee_assign_event_category', |
|
532 | + //venues |
|
533 | + 'ee_publish_venues', |
|
534 | + 'ee_read_venue', |
|
535 | + 'ee_read_venues', |
|
536 | + 'ee_read_others_venues', |
|
537 | + 'ee_read_private_venues', |
|
538 | + 'ee_edit_venue', |
|
539 | + 'ee_edit_venues', |
|
540 | + 'ee_edit_others_venues', |
|
541 | + 'ee_edit_published_venues', |
|
542 | + 'ee_edit_private_venues', |
|
543 | + 'ee_delete_venue', |
|
544 | + 'ee_delete_venues', |
|
545 | + 'ee_delete_others_venues', |
|
546 | + 'ee_delete_private_venues', |
|
547 | + 'ee_delete_published_venues', |
|
548 | + //venue categories |
|
549 | + 'ee_manage_venue_categories', |
|
550 | + 'ee_edit_venue_category', |
|
551 | + 'ee_delete_venue_category', |
|
552 | + 'ee_assign_venue_category', |
|
553 | + //contacts |
|
554 | + 'ee_read_contacts', |
|
555 | + 'ee_edit_contacts', |
|
556 | + 'ee_delete_contacts', |
|
557 | + //registrations |
|
558 | + 'ee_read_registrations', |
|
559 | + 'ee_read_others_registrations', |
|
560 | + 'ee_edit_registration', |
|
561 | + 'ee_edit_registrations', |
|
562 | + 'ee_edit_others_registrations', |
|
563 | + 'ee_delete_registration', |
|
564 | + 'ee_delete_registrations', |
|
565 | + //checkins |
|
566 | + 'ee_read_others_checkins', |
|
567 | + 'ee_read_checkins', |
|
568 | + 'ee_edit_checkins', |
|
569 | + 'ee_edit_others_checkins', |
|
570 | + 'ee_delete_checkins', |
|
571 | + 'ee_delete_others_checkins', |
|
572 | + //transactions && payments |
|
573 | + 'ee_read_transaction', |
|
574 | + 'ee_read_transactions', |
|
575 | + 'ee_edit_payments', |
|
576 | + 'ee_delete_payments', |
|
577 | + //messages |
|
578 | + 'ee_read_messages', |
|
579 | + 'ee_read_others_messages', |
|
580 | + 'ee_read_global_messages', |
|
581 | + 'ee_edit_global_messages', |
|
582 | + 'ee_edit_messages', |
|
583 | + 'ee_edit_others_messages', |
|
584 | + 'ee_delete_messages', |
|
585 | + 'ee_delete_others_messages', |
|
586 | + 'ee_delete_global_messages', |
|
587 | + 'ee_send_message', |
|
588 | + //tickets |
|
589 | + 'ee_read_default_tickets', |
|
590 | + 'ee_read_others_default_tickets', |
|
591 | + 'ee_edit_default_tickets', |
|
592 | + 'ee_edit_others_default_tickets', |
|
593 | + 'ee_delete_default_tickets', |
|
594 | + 'ee_delete_others_default_tickets', |
|
595 | + //prices |
|
596 | + 'ee_edit_default_price', |
|
597 | + 'ee_edit_default_prices', |
|
598 | + 'ee_delete_default_price', |
|
599 | + 'ee_delete_default_prices', |
|
600 | + 'ee_edit_default_price_type', |
|
601 | + 'ee_edit_default_price_types', |
|
602 | + 'ee_delete_default_price_type', |
|
603 | + 'ee_delete_default_price_types', |
|
604 | + 'ee_read_default_prices', |
|
605 | + 'ee_read_default_price_types', |
|
606 | + //registration form |
|
607 | + 'ee_edit_questions', |
|
608 | + 'ee_edit_system_questions', |
|
609 | + 'ee_read_questions', |
|
610 | + 'ee_delete_questions', |
|
611 | + 'ee_edit_question_groups', |
|
612 | + 'ee_read_question_groups', |
|
613 | + 'ee_edit_system_question_groups', |
|
614 | + 'ee_delete_question_groups', |
|
615 | + //event_type taxonomy |
|
616 | + 'ee_assign_event_type', |
|
617 | + 'ee_manage_event_types', |
|
618 | + 'ee_edit_event_type', |
|
619 | + 'ee_delete_event_type', |
|
620 | + ) |
|
621 | + ) |
|
622 | + ); |
|
623 | + } |
|
624 | + |
|
625 | + |
|
626 | + |
|
627 | + /** |
|
628 | + * @return bool |
|
629 | + * @throws EE_Error |
|
630 | + */ |
|
631 | + private function setupCapabilitiesMap() |
|
632 | + { |
|
633 | + // if the initialization process hasn't even started, then we need to call init_caps() |
|
634 | + if($this->initialized === null) { |
|
635 | + return $this->init_caps(); |
|
636 | + } |
|
637 | + // unless resetting, get caps from db if we haven't already |
|
638 | + $this->capabilities_map = $this->reset || ! empty($this->capabilities_map) |
|
639 | + ? $this->capabilities_map |
|
640 | + : get_option(self::option_name, array()); |
|
641 | + return true; |
|
642 | + } |
|
643 | + |
|
644 | + |
|
645 | + |
|
646 | + /** |
|
647 | + * @param bool $update |
|
648 | + * @return bool |
|
649 | + */ |
|
650 | + private function updateCapabilitiesMap($update = true) |
|
651 | + { |
|
652 | + return $update ? update_option(self::option_name, $this->capabilities_map) : false; |
|
653 | + } |
|
654 | + |
|
655 | + |
|
656 | + |
|
657 | + /** |
|
658 | + * Adds capabilities to roles. |
|
659 | + * |
|
660 | + * @since 4.9.42 |
|
661 | + * @param array $capabilities_to_add array of capabilities to add, indexed by roles. |
|
662 | + * Note that this should ONLY be called on activation hook |
|
663 | + * otherwise the caps will be added on every request. |
|
664 | + * @return bool |
|
665 | + * @throws \EE_Error |
|
666 | + */ |
|
667 | + public function addCaps(array $capabilities_to_add) |
|
668 | + { |
|
669 | + // don't do anything if the capabilities map can not be initialized |
|
670 | + if (! $this->setupCapabilitiesMap()) { |
|
671 | + return false; |
|
672 | + } |
|
673 | + // and filter the array so others can get in on the fun during resets |
|
674 | + $capabilities_to_add = apply_filters( |
|
675 | + 'FHEE__EE_Capabilities__addCaps__capabilities_to_add', |
|
676 | + $capabilities_to_add, |
|
677 | + $this->reset, |
|
678 | + $this->capabilities_map |
|
679 | + ); |
|
680 | + $update_capabilities_map = false; |
|
681 | + // if not reset, see what caps are new for each role. if they're new, add them. |
|
682 | + foreach ($capabilities_to_add as $role => $caps_for_role) { |
|
683 | + if (is_array($caps_for_role)) { |
|
684 | + foreach ($caps_for_role as $cap) { |
|
685 | + if ( |
|
686 | + ! $this->capHasBeenAddedToRole($role, $cap) |
|
687 | + && $this->add_cap_to_role($role, $cap, true, false) |
|
688 | + ) { |
|
689 | + $update_capabilities_map = true; |
|
690 | + } |
|
691 | + } |
|
692 | + } |
|
693 | + } |
|
694 | + // now let's just save the cap that has been set but only if there's been a change. |
|
695 | + $updated = $this->updateCapabilitiesMap($update_capabilities_map); |
|
696 | + $this->flushWpUser($updated); |
|
697 | + do_action('AHEE__EE_Capabilities__addCaps__complete', $this->capabilities_map, $updated); |
|
698 | + return $updated; |
|
699 | + } |
|
700 | + |
|
701 | + |
|
702 | + |
|
703 | + /** |
|
704 | + * Loops through the capabilities map and removes the role caps specified by the incoming array |
|
705 | + * |
|
706 | + * @param array $caps_map map of capabilities to be removed (indexed by roles) |
|
707 | + * @return bool |
|
708 | + * @throws \EE_Error |
|
709 | + */ |
|
710 | + public function removeCaps($caps_map) |
|
711 | + { |
|
712 | + // don't do anything if the capabilities map can not be initialized |
|
713 | + if (! $this->setupCapabilitiesMap()) { |
|
714 | + return false; |
|
715 | + } |
|
716 | + $update_capabilities_map = false; |
|
717 | + foreach ($caps_map as $role => $caps_for_role) { |
|
718 | + if (is_array($caps_for_role)) { |
|
719 | + foreach ($caps_for_role as $cap) { |
|
720 | + if ($this->capHasBeenAddedToRole($role, $cap) |
|
721 | + && $this->remove_cap_from_role($role, $cap, false) |
|
722 | + ) { |
|
723 | + $update_capabilities_map = true; |
|
724 | + } |
|
725 | + } |
|
726 | + } |
|
727 | + } |
|
728 | + // maybe resave the caps |
|
729 | + $updated = $this->updateCapabilitiesMap($update_capabilities_map); |
|
730 | + $this->flushWpUser($updated); |
|
731 | + return $updated; |
|
732 | + } |
|
733 | + |
|
734 | + |
|
735 | + /** |
|
736 | + * This ensures that the WP User object cached on the $current_user global in WP has the latest capabilities from |
|
737 | + * the roles on that user. |
|
738 | + * |
|
739 | + * @param bool $flush Default is to flush the WP_User object. If false, then this method effectively does nothing. |
|
740 | + */ |
|
741 | + private function flushWpUser($flush = true) |
|
742 | + { |
|
743 | + if ($flush) { |
|
744 | + $user = wp_get_current_user(); |
|
745 | + if ($user instanceof WP_User) { |
|
746 | + $user->get_role_caps(); |
|
747 | + } |
|
748 | + } |
|
749 | + } |
|
750 | + |
|
751 | + |
|
752 | + |
|
753 | + /** |
|
754 | + * This method sets a capability on a role. Note this should only be done on activation, or if you have something |
|
755 | + * specific to prevent the cap from being added on every page load (adding caps are persistent to the db). Note. |
|
756 | + * this is a wrapper for $wp_role->add_cap() |
|
757 | + * |
|
758 | + * @see wp-includes/capabilities.php |
|
759 | + * @since 4.5.0 |
|
760 | + * @param string|WP_Role $role A WordPress role the capability is being added to |
|
761 | + * @param string $cap The capability being added to the role |
|
762 | + * @param bool $grant Whether to grant access to this cap on this role. |
|
763 | + * @param bool $update_capabilities_map |
|
764 | + * @return bool |
|
765 | + * @throws \EE_Error |
|
766 | + */ |
|
767 | + public function add_cap_to_role($role, $cap, $grant = true, $update_capabilities_map = true) |
|
768 | + { |
|
769 | + // capture incoming value for $role because we may need it to create a new WP_Role |
|
770 | + $orig_role = $role; |
|
771 | + $role = $role instanceof WP_Role ? $role : get_role($role); |
|
772 | + //if the role isn't available then we create it. |
|
773 | + if (! $role instanceof WP_Role) { |
|
774 | + // if a plugin wants to create a specific role name then they should create the role before |
|
775 | + // EE_Capabilities does. Otherwise this function will create the role name from the slug: |
|
776 | + // - removes any `ee_` namespacing from the start of the slug. |
|
777 | + // - replaces `_` with ` ` (empty space). |
|
778 | + // - sentence case on the resulting string. |
|
779 | + $role_label = ucwords(str_replace(array('ee_', '_'), array('', ' '), $orig_role)); |
|
780 | + $role = add_role($orig_role, $role_label); |
|
781 | + } |
|
782 | + if ($role instanceof WP_Role) { |
|
783 | + // don't do anything if the capabilities map can not be initialized |
|
784 | + if (! $this->setupCapabilitiesMap()) { |
|
785 | + return false; |
|
786 | + } |
|
787 | + if (! $this->capHasBeenAddedToRole($role->name, $cap)) { |
|
788 | + $role->add_cap($cap, $grant); |
|
789 | + $this->capabilities_map[ $role->name ][] = $cap; |
|
790 | + $this->updateCapabilitiesMap($update_capabilities_map); |
|
791 | + return true; |
|
792 | + } |
|
793 | + } |
|
794 | + return false; |
|
795 | + } |
|
796 | + |
|
797 | + |
|
798 | + |
|
799 | + /** |
|
800 | + * Functions similarly to add_cap_to_role except removes cap from given role. |
|
801 | + * Wrapper for $wp_role->remove_cap() |
|
802 | + * |
|
803 | + * @see wp-includes/capabilities.php |
|
804 | + * @since 4.5.0 |
|
805 | + * @param string|WP_Role $role A WordPress role the capability is being removed from. |
|
806 | + * @param string $cap The capability being removed |
|
807 | + * @param bool $update_capabilities_map |
|
808 | + * @return bool |
|
809 | + * @throws \EE_Error |
|
810 | + */ |
|
811 | + public function remove_cap_from_role($role, $cap, $update_capabilities_map = true) |
|
812 | + { |
|
813 | + // don't do anything if the capabilities map can not be initialized |
|
814 | + if (! $this->setupCapabilitiesMap()) { |
|
815 | + return false; |
|
816 | + } |
|
817 | + |
|
818 | + $role = $role instanceof WP_Role ? $role : get_role($role); |
|
819 | + if ($role instanceof WP_Role && $index = $this->capHasBeenAddedToRole($role->name, $cap, true)) { |
|
820 | + $role->remove_cap($cap); |
|
821 | + unset($this->capabilities_map[ $role->name ][ $index ]); |
|
822 | + $this->updateCapabilitiesMap($update_capabilities_map); |
|
823 | + return true; |
|
824 | + } |
|
825 | + return false; |
|
826 | + } |
|
827 | + |
|
828 | + |
|
829 | + |
|
830 | + /** |
|
831 | + * @param string $role_name |
|
832 | + * @param string $cap |
|
833 | + * @param bool $get_index |
|
834 | + * @return bool|mixed |
|
835 | + */ |
|
836 | + private function capHasBeenAddedToRole($role_name='', $cap='', $get_index = false) |
|
837 | + { |
|
838 | + if ( |
|
839 | + isset($this->capabilities_map[$role_name]) |
|
840 | + && ($index = array_search($cap, $this->capabilities_map[$role_name], true)) !== false |
|
841 | + ) { |
|
842 | + return $get_index ? $index : true; |
|
843 | + } |
|
844 | + return false; |
|
845 | + } |
|
846 | + |
|
847 | + |
|
848 | + |
|
849 | + /** |
|
850 | + * Wrapper for the native WP current_user_can() method. |
|
851 | + * This is provided as a handy method for a couple things: |
|
852 | + * 1. Using the context string it allows for targeted filtering by addons for a specific check (without having to |
|
853 | + * write those filters wherever current_user_can is called). |
|
854 | + * 2. Explicit passing of $id from a given context ( useful in the cases of map_meta_cap filters ) |
|
855 | + * |
|
856 | + * @since 4.5.0 |
|
857 | + * |
|
858 | + * @param string $cap The cap being checked. |
|
859 | + * @param string $context The context where the current_user_can is being called from. |
|
860 | + * @param int $id Optional. Id for item where current_user_can is being called from (used in map_meta_cap() |
|
861 | + * filters. |
|
862 | + * |
|
863 | + * @return bool Whether user can or not. |
|
864 | + */ |
|
865 | + public function current_user_can($cap, $context, $id = 0) |
|
866 | + { |
|
867 | + //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
|
868 | + $filtered_cap = apply_filters('FHEE__EE_Capabilities__current_user_can__cap__' . $context, $cap, $id); |
|
869 | + $filtered_cap = apply_filters( |
|
870 | + 'FHEE__EE_Capabilities__current_user_can__cap', |
|
871 | + $filtered_cap, |
|
872 | + $context, |
|
873 | + $cap, |
|
874 | + $id |
|
875 | + ); |
|
876 | + return ! empty($id) |
|
877 | + ? current_user_can($filtered_cap, $id) |
|
878 | + : current_user_can($filtered_cap); |
|
879 | + } |
|
880 | + |
|
881 | + |
|
882 | + |
|
883 | + /** |
|
884 | + * This is a wrapper for the WP user_can() function and follows the same style as the other wrappers in this class. |
|
885 | + * |
|
886 | + * @param int|WP_User $user Either the user_id or a WP_User object |
|
887 | + * @param string $cap The capability string being checked |
|
888 | + * @param string $context The context where the user_can is being called from (used in filters). |
|
889 | + * @param int $id Optional. Id for item where user_can is being called from ( used in map_meta_cap() |
|
890 | + * filters) |
|
891 | + * |
|
892 | + * @return bool Whether user can or not. |
|
893 | + */ |
|
894 | + public function user_can($user, $cap, $context, $id = 0) |
|
895 | + { |
|
896 | + //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
|
897 | + $filtered_cap = apply_filters('FHEE__EE_Capabilities__user_can__cap__' . $context, $cap, $user, $id); |
|
898 | + $filtered_cap = apply_filters( |
|
899 | + 'FHEE__EE_Capabilities__user_can__cap', |
|
900 | + $filtered_cap, |
|
901 | + $context, |
|
902 | + $cap, |
|
903 | + $user, |
|
904 | + $id |
|
905 | + ); |
|
906 | + return ! empty($id) |
|
907 | + ? user_can($user, $filtered_cap, $id) |
|
908 | + : user_can($user, $filtered_cap); |
|
909 | + } |
|
910 | + |
|
911 | + |
|
912 | + |
|
913 | + /** |
|
914 | + * Wrapper for the native WP current_user_can_for_blog() method. |
|
915 | + * This is provided as a handy method for a couple things: |
|
916 | + * 1. Using the context string it allows for targeted filtering by addons for a specific check (without having to |
|
917 | + * write those filters wherever current_user_can is called). |
|
918 | + * 2. Explicit passing of $id from a given context ( useful in the cases of map_meta_cap filters ) |
|
919 | + * |
|
920 | + * @since 4.5.0 |
|
921 | + * |
|
922 | + * @param int $blog_id The blog id that is being checked for. |
|
923 | + * @param string $cap The cap being checked. |
|
924 | + * @param string $context The context where the current_user_can is being called from. |
|
925 | + * @param int $id Optional. Id for item where current_user_can is being called from (used in map_meta_cap() |
|
926 | + * filters. |
|
927 | + * |
|
928 | + * @return bool Whether user can or not. |
|
929 | + */ |
|
930 | + public function current_user_can_for_blog($blog_id, $cap, $context, $id = 0) |
|
931 | + { |
|
932 | + $user_can = ! empty($id) |
|
933 | + ? current_user_can_for_blog($blog_id, $cap, $id) |
|
934 | + : current_user_can($blog_id, $cap); |
|
935 | + //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
|
936 | + $user_can = apply_filters( |
|
937 | + 'FHEE__EE_Capabilities__current_user_can_for_blog__user_can__' . $context, |
|
938 | + $user_can, |
|
939 | + $blog_id, |
|
940 | + $cap, |
|
941 | + $id |
|
942 | + ); |
|
943 | + $user_can = apply_filters( |
|
944 | + 'FHEE__EE_Capabilities__current_user_can_for_blog__user_can', |
|
945 | + $user_can, |
|
946 | + $context, |
|
947 | + $blog_id, |
|
948 | + $cap, |
|
949 | + $id |
|
950 | + ); |
|
951 | + return $user_can; |
|
952 | + } |
|
953 | + |
|
954 | + |
|
955 | + |
|
956 | + /** |
|
957 | + * This helper method just returns an array of registered EE capabilities. |
|
958 | + * |
|
959 | + * @since 4.5.0 |
|
960 | + * @param string $role If empty then the entire role/capability map is returned. |
|
961 | + * Otherwise just the capabilities for the given role are returned. |
|
962 | + * @return array |
|
963 | + * @throws EE_Error |
|
964 | + */ |
|
965 | + public function get_ee_capabilities($role = 'administrator') |
|
966 | + { |
|
967 | + if (! $this->initialized) { |
|
968 | + $this->init_caps(); |
|
969 | + } |
|
970 | + if (empty($role)) { |
|
971 | + return $this->capabilities_map; |
|
972 | + } |
|
973 | + return isset($this->capabilities_map[ $role ]) |
|
974 | + ? $this->capabilities_map[ $role ] |
|
975 | + : array(); |
|
976 | + } |
|
977 | + |
|
978 | + |
|
979 | + |
|
980 | + /** |
|
981 | + * @deprecated 4.9.42 |
|
982 | + * @param bool $reset If you need to reset Event Espresso's capabilities, |
|
983 | + * then please use the init_caps() method with the "$reset" parameter set to "true" |
|
984 | + * @param array $caps_map Optional. |
|
985 | + * Can be used to send a custom map of roles and capabilities for setting them up. |
|
986 | + * Note that this should ONLY be called on activation hook or some other one-time |
|
987 | + * task otherwise the caps will be added on every request. |
|
988 | + * @return void |
|
989 | + * @throws EE_Error |
|
990 | + */ |
|
991 | + public function init_role_caps($reset = false, $caps_map = array()) |
|
992 | + { |
|
993 | + // If this method is called directly and reset is set as 'true', |
|
994 | + // then display a doing it wrong notice, because we want resets to go through init_caps() |
|
995 | + // to guarantee that everything is set up correctly. |
|
996 | + // This prevents the capabilities map getting reset incorrectly by direct calls to this method. |
|
997 | + if ($reset) { |
|
998 | + EE_Error::doing_it_wrong( |
|
999 | + __METHOD__, |
|
1000 | + sprintf( |
|
1001 | + esc_html__( |
|
1002 | + 'The "%1$s" parameter for the "%2$s" method is deprecated. If you need to reset Event Espresso\'s capabilities, then please use the "%3$s" method with the "%1$s" parameter set to "%4$s".', |
|
1003 | + 'event_espresso' |
|
1004 | + ), |
|
1005 | + '$reset', |
|
1006 | + __METHOD__ . '()', |
|
1007 | + 'EE_Capabilities::init_caps()', |
|
1008 | + 'true' |
|
1009 | + ), |
|
1010 | + '4.9.42', |
|
1011 | + '5.0.0' |
|
1012 | + ); |
|
1013 | + } |
|
1014 | + $this->addCaps($caps_map); |
|
1015 | + } |
|
1016 | 1016 | |
1017 | 1017 | |
1018 | 1018 | |
@@ -1033,142 +1033,142 @@ discard block |
||
1033 | 1033 | abstract class EE_Meta_Capability_Map |
1034 | 1034 | { |
1035 | 1035 | |
1036 | - public $meta_cap; |
|
1037 | - |
|
1038 | - /** |
|
1039 | - * @var EEM_Base |
|
1040 | - */ |
|
1041 | - protected $_model; |
|
1042 | - |
|
1043 | - protected $_model_name; |
|
1044 | - |
|
1045 | - public $published_cap = ''; |
|
1046 | - |
|
1047 | - public $others_cap = ''; |
|
1048 | - |
|
1049 | - public $private_cap = ''; |
|
1050 | - |
|
1051 | - |
|
1052 | - /** |
|
1053 | - * constructor. |
|
1054 | - * Receives the setup arguments for the map. |
|
1055 | - * |
|
1056 | - * @since 4.5.0 |
|
1057 | - * |
|
1058 | - * @param string $meta_cap What meta capability is this mapping. |
|
1059 | - * @param array $map_values array { |
|
1060 | - * //array of values that MUST match a count of 4. It's okay to send an empty string for |
|
1061 | - * capabilities that don't get mapped to. |
|
1062 | - * |
|
1063 | - * @type $map_values [0] string A string representing the model name. Required. String's |
|
1064 | - * should always be used when Menu Maps are registered via the |
|
1065 | - * plugin API as models are not allowed to be instantiated when |
|
1066 | - * in maintenance mode 2 (migrations). |
|
1067 | - * @type $map_values [1] string represents the capability used for published. Optional. |
|
1068 | - * @type $map_values [2] string represents the capability used for "others". Optional. |
|
1069 | - * @type $map_values [3] string represents the capability used for private. Optional. |
|
1070 | - * } |
|
1071 | - * @throws EE_Error |
|
1072 | - */ |
|
1073 | - public function __construct($meta_cap, $map_values) |
|
1074 | - { |
|
1075 | - $this->meta_cap = $meta_cap; |
|
1076 | - //verify there are four args in the $map_values array; |
|
1077 | - if (count($map_values) !== 4) { |
|
1078 | - throw new EE_Error( |
|
1079 | - sprintf( |
|
1080 | - __( |
|
1081 | - 'Incoming $map_values array should have a count of four values in it. This is what was given: %s', |
|
1082 | - 'event_espresso' |
|
1083 | - ), |
|
1084 | - '<br>' . print_r($map_values, true) |
|
1085 | - ) |
|
1086 | - ); |
|
1087 | - } |
|
1088 | - //set properties |
|
1089 | - $this->_model = null; |
|
1090 | - $this->_model_name = $map_values[0]; |
|
1091 | - $this->published_cap = (string)$map_values[1]; |
|
1092 | - $this->others_cap = (string)$map_values[2]; |
|
1093 | - $this->private_cap = (string)$map_values[3]; |
|
1094 | - } |
|
1095 | - |
|
1096 | - /** |
|
1097 | - * Makes it so this object stops filtering caps |
|
1098 | - */ |
|
1099 | - public function remove_filters() |
|
1100 | - { |
|
1101 | - remove_filter('map_meta_cap', array($this, 'map_meta_caps'), 10); |
|
1102 | - } |
|
1103 | - |
|
1104 | - |
|
1105 | - /** |
|
1106 | - * This method ensures that the $model property is converted from the model name string to a proper EEM_Base class |
|
1107 | - * |
|
1108 | - * @since 4.5.0 |
|
1109 | - * @throws EE_Error |
|
1110 | - * |
|
1111 | - * @return void |
|
1112 | - */ |
|
1113 | - public function ensure_is_model() |
|
1114 | - { |
|
1115 | - //is it already instantiated? |
|
1116 | - if ($this->_model instanceof EEM_Base) { |
|
1117 | - return; |
|
1118 | - } |
|
1119 | - //ensure model name is string |
|
1120 | - $this->_model_name = (string)$this->_model_name; |
|
1121 | - //error proof if the name has EEM in it |
|
1122 | - $this->_model_name = str_replace('EEM', '', $this->_model_name); |
|
1123 | - $this->_model = EE_Registry::instance()->load_model($this->_model_name); |
|
1124 | - if (! $this->_model instanceof EEM_Base) { |
|
1125 | - throw new EE_Error( |
|
1126 | - sprintf( |
|
1127 | - __( |
|
1128 | - 'This string passed in to %s to represent a EEM_Base model class was not able to be used to instantiate the class. Please ensure that the string is a match for the EEM_Base model name (not including the EEM_ part). This was given: %s', |
|
1129 | - 'event_espresso' |
|
1130 | - ), |
|
1131 | - get_class($this), |
|
1132 | - $this->_model |
|
1133 | - ) |
|
1134 | - ); |
|
1135 | - } |
|
1136 | - } |
|
1137 | - |
|
1138 | - |
|
1139 | - /** |
|
1140 | - * |
|
1141 | - * @see EE_Meta_Capability_Map::_map_meta_caps() for docs on params. |
|
1142 | - * @since 4.6.x |
|
1143 | - * |
|
1144 | - * @param $caps |
|
1145 | - * @param $cap |
|
1146 | - * @param $user_id |
|
1147 | - * @param $args |
|
1148 | - * |
|
1149 | - * @return array |
|
1150 | - */ |
|
1151 | - public function map_meta_caps($caps, $cap, $user_id, $args) |
|
1152 | - { |
|
1153 | - return $this->_map_meta_caps($caps, $cap, $user_id, $args); |
|
1154 | - } |
|
1155 | - |
|
1156 | - |
|
1157 | - /** |
|
1158 | - * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1159 | - * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1160 | - * |
|
1161 | - * @since 4.5.0 |
|
1162 | - * @see wp-includes/capabilities.php |
|
1163 | - * |
|
1164 | - * @param array $caps actual users capabilities |
|
1165 | - * @param string $cap initial capability name that is being checked (the "map" key) |
|
1166 | - * @param int $user_id The user id |
|
1167 | - * @param array $args Adds context to the cap. Typically the object ID. |
|
1168 | - * |
|
1169 | - * @return array actual users capabilities |
|
1170 | - */ |
|
1171 | - abstract protected function _map_meta_caps($caps, $cap, $user_id, $args); |
|
1036 | + public $meta_cap; |
|
1037 | + |
|
1038 | + /** |
|
1039 | + * @var EEM_Base |
|
1040 | + */ |
|
1041 | + protected $_model; |
|
1042 | + |
|
1043 | + protected $_model_name; |
|
1044 | + |
|
1045 | + public $published_cap = ''; |
|
1046 | + |
|
1047 | + public $others_cap = ''; |
|
1048 | + |
|
1049 | + public $private_cap = ''; |
|
1050 | + |
|
1051 | + |
|
1052 | + /** |
|
1053 | + * constructor. |
|
1054 | + * Receives the setup arguments for the map. |
|
1055 | + * |
|
1056 | + * @since 4.5.0 |
|
1057 | + * |
|
1058 | + * @param string $meta_cap What meta capability is this mapping. |
|
1059 | + * @param array $map_values array { |
|
1060 | + * //array of values that MUST match a count of 4. It's okay to send an empty string for |
|
1061 | + * capabilities that don't get mapped to. |
|
1062 | + * |
|
1063 | + * @type $map_values [0] string A string representing the model name. Required. String's |
|
1064 | + * should always be used when Menu Maps are registered via the |
|
1065 | + * plugin API as models are not allowed to be instantiated when |
|
1066 | + * in maintenance mode 2 (migrations). |
|
1067 | + * @type $map_values [1] string represents the capability used for published. Optional. |
|
1068 | + * @type $map_values [2] string represents the capability used for "others". Optional. |
|
1069 | + * @type $map_values [3] string represents the capability used for private. Optional. |
|
1070 | + * } |
|
1071 | + * @throws EE_Error |
|
1072 | + */ |
|
1073 | + public function __construct($meta_cap, $map_values) |
|
1074 | + { |
|
1075 | + $this->meta_cap = $meta_cap; |
|
1076 | + //verify there are four args in the $map_values array; |
|
1077 | + if (count($map_values) !== 4) { |
|
1078 | + throw new EE_Error( |
|
1079 | + sprintf( |
|
1080 | + __( |
|
1081 | + 'Incoming $map_values array should have a count of four values in it. This is what was given: %s', |
|
1082 | + 'event_espresso' |
|
1083 | + ), |
|
1084 | + '<br>' . print_r($map_values, true) |
|
1085 | + ) |
|
1086 | + ); |
|
1087 | + } |
|
1088 | + //set properties |
|
1089 | + $this->_model = null; |
|
1090 | + $this->_model_name = $map_values[0]; |
|
1091 | + $this->published_cap = (string)$map_values[1]; |
|
1092 | + $this->others_cap = (string)$map_values[2]; |
|
1093 | + $this->private_cap = (string)$map_values[3]; |
|
1094 | + } |
|
1095 | + |
|
1096 | + /** |
|
1097 | + * Makes it so this object stops filtering caps |
|
1098 | + */ |
|
1099 | + public function remove_filters() |
|
1100 | + { |
|
1101 | + remove_filter('map_meta_cap', array($this, 'map_meta_caps'), 10); |
|
1102 | + } |
|
1103 | + |
|
1104 | + |
|
1105 | + /** |
|
1106 | + * This method ensures that the $model property is converted from the model name string to a proper EEM_Base class |
|
1107 | + * |
|
1108 | + * @since 4.5.0 |
|
1109 | + * @throws EE_Error |
|
1110 | + * |
|
1111 | + * @return void |
|
1112 | + */ |
|
1113 | + public function ensure_is_model() |
|
1114 | + { |
|
1115 | + //is it already instantiated? |
|
1116 | + if ($this->_model instanceof EEM_Base) { |
|
1117 | + return; |
|
1118 | + } |
|
1119 | + //ensure model name is string |
|
1120 | + $this->_model_name = (string)$this->_model_name; |
|
1121 | + //error proof if the name has EEM in it |
|
1122 | + $this->_model_name = str_replace('EEM', '', $this->_model_name); |
|
1123 | + $this->_model = EE_Registry::instance()->load_model($this->_model_name); |
|
1124 | + if (! $this->_model instanceof EEM_Base) { |
|
1125 | + throw new EE_Error( |
|
1126 | + sprintf( |
|
1127 | + __( |
|
1128 | + 'This string passed in to %s to represent a EEM_Base model class was not able to be used to instantiate the class. Please ensure that the string is a match for the EEM_Base model name (not including the EEM_ part). This was given: %s', |
|
1129 | + 'event_espresso' |
|
1130 | + ), |
|
1131 | + get_class($this), |
|
1132 | + $this->_model |
|
1133 | + ) |
|
1134 | + ); |
|
1135 | + } |
|
1136 | + } |
|
1137 | + |
|
1138 | + |
|
1139 | + /** |
|
1140 | + * |
|
1141 | + * @see EE_Meta_Capability_Map::_map_meta_caps() for docs on params. |
|
1142 | + * @since 4.6.x |
|
1143 | + * |
|
1144 | + * @param $caps |
|
1145 | + * @param $cap |
|
1146 | + * @param $user_id |
|
1147 | + * @param $args |
|
1148 | + * |
|
1149 | + * @return array |
|
1150 | + */ |
|
1151 | + public function map_meta_caps($caps, $cap, $user_id, $args) |
|
1152 | + { |
|
1153 | + return $this->_map_meta_caps($caps, $cap, $user_id, $args); |
|
1154 | + } |
|
1155 | + |
|
1156 | + |
|
1157 | + /** |
|
1158 | + * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1159 | + * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1160 | + * |
|
1161 | + * @since 4.5.0 |
|
1162 | + * @see wp-includes/capabilities.php |
|
1163 | + * |
|
1164 | + * @param array $caps actual users capabilities |
|
1165 | + * @param string $cap initial capability name that is being checked (the "map" key) |
|
1166 | + * @param int $user_id The user id |
|
1167 | + * @param array $args Adds context to the cap. Typically the object ID. |
|
1168 | + * |
|
1169 | + * @return array actual users capabilities |
|
1170 | + */ |
|
1171 | + abstract protected function _map_meta_caps($caps, $cap, $user_id, $args); |
|
1172 | 1172 | } |
1173 | 1173 | |
1174 | 1174 | |
@@ -1184,81 +1184,81 @@ discard block |
||
1184 | 1184 | class EE_Meta_Capability_Map_Edit extends EE_Meta_Capability_Map |
1185 | 1185 | { |
1186 | 1186 | |
1187 | - /** |
|
1188 | - * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1189 | - * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1190 | - * |
|
1191 | - * @since 4.5.0 |
|
1192 | - * @see wp-includes/capabilities.php |
|
1193 | - * |
|
1194 | - * @param array $caps actual users capabilities |
|
1195 | - * @param string $cap initial capability name that is being checked (the "map" key) |
|
1196 | - * @param int $user_id The user id |
|
1197 | - * @param array $args Adds context to the cap. Typically the object ID. |
|
1198 | - * |
|
1199 | - * @return array actual users capabilities |
|
1200 | - */ |
|
1201 | - protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1202 | - { |
|
1203 | - //only process if we're checking our mapped_cap |
|
1204 | - if ($cap !== $this->meta_cap) { |
|
1205 | - return $caps; |
|
1206 | - } |
|
1207 | - |
|
1208 | - //okay it is a meta cap so let's first remove that cap from the $caps array. |
|
1209 | - if (($key = array_search($cap, $caps)) !== false) { |
|
1210 | - unset($caps[$key]); |
|
1211 | - } |
|
1212 | - |
|
1213 | - //cast $user_id to int for later explicit comparisons |
|
1214 | - $user_id = (int) $user_id; |
|
1215 | - |
|
1216 | - /** @var EE_Base_Class $obj */ |
|
1217 | - $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
|
1218 | - //if no obj then let's just do cap |
|
1219 | - if (! $obj instanceof EE_Base_Class) { |
|
1220 | - $caps[] = 'do_not_allow'; |
|
1221 | - return $caps; |
|
1222 | - } |
|
1223 | - $caps[] = $cap . 's'; |
|
1224 | - if ($obj instanceof EE_CPT_Base) { |
|
1225 | - //if the item author is set and the user is the author... |
|
1226 | - if ($obj->wp_user() && $user_id === $obj->wp_user()) { |
|
1227 | - //if obj is published... |
|
1228 | - if ($obj->status() === 'publish') { |
|
1229 | - $caps[] = $this->published_cap; |
|
1230 | - } |
|
1231 | - } else { |
|
1232 | - //the user is trying to edit someone else's obj |
|
1233 | - if (! empty($this->others_cap)) { |
|
1234 | - $caps[] = $this->others_cap; |
|
1235 | - } |
|
1236 | - if (! empty($this->published_cap) && $obj->status() === 'publish') { |
|
1237 | - $caps[] = $this->published_cap; |
|
1238 | - } elseif (! empty($this->private_cap) && $obj->status() === 'private') { |
|
1239 | - $caps[] = $this->private_cap; |
|
1240 | - } |
|
1241 | - } |
|
1242 | - } else { |
|
1243 | - //not a cpt object so handled differently |
|
1244 | - $has_cap = false; |
|
1245 | - try { |
|
1246 | - $has_cap = method_exists($obj, 'wp_user') |
|
1247 | - && $obj->wp_user() |
|
1248 | - && $obj->wp_user() === $user_id; |
|
1249 | - } catch (Exception $e) { |
|
1250 | - if (WP_DEBUG) { |
|
1251 | - EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
1252 | - } |
|
1253 | - } |
|
1254 | - if (! $has_cap) { |
|
1255 | - if (! empty($this->others_cap)) { |
|
1256 | - $caps[] = $this->others_cap; |
|
1257 | - } |
|
1258 | - } |
|
1259 | - } |
|
1260 | - return $caps; |
|
1261 | - } |
|
1187 | + /** |
|
1188 | + * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1189 | + * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1190 | + * |
|
1191 | + * @since 4.5.0 |
|
1192 | + * @see wp-includes/capabilities.php |
|
1193 | + * |
|
1194 | + * @param array $caps actual users capabilities |
|
1195 | + * @param string $cap initial capability name that is being checked (the "map" key) |
|
1196 | + * @param int $user_id The user id |
|
1197 | + * @param array $args Adds context to the cap. Typically the object ID. |
|
1198 | + * |
|
1199 | + * @return array actual users capabilities |
|
1200 | + */ |
|
1201 | + protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1202 | + { |
|
1203 | + //only process if we're checking our mapped_cap |
|
1204 | + if ($cap !== $this->meta_cap) { |
|
1205 | + return $caps; |
|
1206 | + } |
|
1207 | + |
|
1208 | + //okay it is a meta cap so let's first remove that cap from the $caps array. |
|
1209 | + if (($key = array_search($cap, $caps)) !== false) { |
|
1210 | + unset($caps[$key]); |
|
1211 | + } |
|
1212 | + |
|
1213 | + //cast $user_id to int for later explicit comparisons |
|
1214 | + $user_id = (int) $user_id; |
|
1215 | + |
|
1216 | + /** @var EE_Base_Class $obj */ |
|
1217 | + $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
|
1218 | + //if no obj then let's just do cap |
|
1219 | + if (! $obj instanceof EE_Base_Class) { |
|
1220 | + $caps[] = 'do_not_allow'; |
|
1221 | + return $caps; |
|
1222 | + } |
|
1223 | + $caps[] = $cap . 's'; |
|
1224 | + if ($obj instanceof EE_CPT_Base) { |
|
1225 | + //if the item author is set and the user is the author... |
|
1226 | + if ($obj->wp_user() && $user_id === $obj->wp_user()) { |
|
1227 | + //if obj is published... |
|
1228 | + if ($obj->status() === 'publish') { |
|
1229 | + $caps[] = $this->published_cap; |
|
1230 | + } |
|
1231 | + } else { |
|
1232 | + //the user is trying to edit someone else's obj |
|
1233 | + if (! empty($this->others_cap)) { |
|
1234 | + $caps[] = $this->others_cap; |
|
1235 | + } |
|
1236 | + if (! empty($this->published_cap) && $obj->status() === 'publish') { |
|
1237 | + $caps[] = $this->published_cap; |
|
1238 | + } elseif (! empty($this->private_cap) && $obj->status() === 'private') { |
|
1239 | + $caps[] = $this->private_cap; |
|
1240 | + } |
|
1241 | + } |
|
1242 | + } else { |
|
1243 | + //not a cpt object so handled differently |
|
1244 | + $has_cap = false; |
|
1245 | + try { |
|
1246 | + $has_cap = method_exists($obj, 'wp_user') |
|
1247 | + && $obj->wp_user() |
|
1248 | + && $obj->wp_user() === $user_id; |
|
1249 | + } catch (Exception $e) { |
|
1250 | + if (WP_DEBUG) { |
|
1251 | + EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
1252 | + } |
|
1253 | + } |
|
1254 | + if (! $has_cap) { |
|
1255 | + if (! empty($this->others_cap)) { |
|
1256 | + $caps[] = $this->others_cap; |
|
1257 | + } |
|
1258 | + } |
|
1259 | + } |
|
1260 | + return $caps; |
|
1261 | + } |
|
1262 | 1262 | } |
1263 | 1263 | |
1264 | 1264 | |
@@ -1275,24 +1275,24 @@ discard block |
||
1275 | 1275 | class EE_Meta_Capability_Map_Delete extends EE_Meta_Capability_Map_Edit |
1276 | 1276 | { |
1277 | 1277 | |
1278 | - /** |
|
1279 | - * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1280 | - * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1281 | - * |
|
1282 | - * @since 4.5.0 |
|
1283 | - * @see wp-includes/capabilities.php |
|
1284 | - * |
|
1285 | - * @param array $caps actual users capabilities |
|
1286 | - * @param string $cap initial capability name that is being checked (the "map" key) |
|
1287 | - * @param int $user_id The user id |
|
1288 | - * @param array $args Adds context to the cap. Typically the object ID. |
|
1289 | - * |
|
1290 | - * @return array actual users capabilities |
|
1291 | - */ |
|
1292 | - protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1293 | - { |
|
1294 | - return parent::_map_meta_caps($caps, $cap, $user_id, $args); |
|
1295 | - } |
|
1278 | + /** |
|
1279 | + * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1280 | + * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1281 | + * |
|
1282 | + * @since 4.5.0 |
|
1283 | + * @see wp-includes/capabilities.php |
|
1284 | + * |
|
1285 | + * @param array $caps actual users capabilities |
|
1286 | + * @param string $cap initial capability name that is being checked (the "map" key) |
|
1287 | + * @param int $user_id The user id |
|
1288 | + * @param array $args Adds context to the cap. Typically the object ID. |
|
1289 | + * |
|
1290 | + * @return array actual users capabilities |
|
1291 | + */ |
|
1292 | + protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1293 | + { |
|
1294 | + return parent::_map_meta_caps($caps, $cap, $user_id, $args); |
|
1295 | + } |
|
1296 | 1296 | } |
1297 | 1297 | |
1298 | 1298 | |
@@ -1308,85 +1308,85 @@ discard block |
||
1308 | 1308 | class EE_Meta_Capability_Map_Read extends EE_Meta_Capability_Map |
1309 | 1309 | { |
1310 | 1310 | |
1311 | - /** |
|
1312 | - * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1313 | - * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1314 | - * |
|
1315 | - * @since 4.5.0 |
|
1316 | - * @see wp-includes/capabilities.php |
|
1317 | - * |
|
1318 | - * @param array $caps actual users capabilities |
|
1319 | - * @param string $cap initial capability name that is being checked (the "map" key) |
|
1320 | - * @param int $user_id The user id |
|
1321 | - * @param array $args Adds context to the cap. Typically the object ID. |
|
1322 | - * |
|
1323 | - * @return array actual users capabilities |
|
1324 | - */ |
|
1325 | - protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1326 | - { |
|
1327 | - //only process if we're checking our mapped cap; |
|
1328 | - if ($cap !== $this->meta_cap) { |
|
1329 | - return $caps; |
|
1330 | - } |
|
1331 | - |
|
1332 | - //okay it is a meta cap so let's first remove that cap from the $caps array. |
|
1333 | - if (($key = array_search($cap, $caps)) !== false) { |
|
1334 | - unset($caps[$key]); |
|
1335 | - } |
|
1336 | - |
|
1337 | - //cast $user_id to int for later explicit comparisons |
|
1338 | - $user_id = (int) $user_id; |
|
1339 | - |
|
1340 | - $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
|
1341 | - //if no obj then let's just do cap |
|
1342 | - if (! $obj instanceof EE_Base_Class) { |
|
1343 | - $caps[] = 'do_not_allow'; |
|
1344 | - return $caps; |
|
1345 | - } |
|
1346 | - |
|
1347 | - $caps[] = $cap . 's'; |
|
1348 | - if ($obj instanceof EE_CPT_Base) { |
|
1349 | - $status_obj = get_post_status_object($obj->status()); |
|
1350 | - if ($status_obj->public) { |
|
1351 | - return $caps; |
|
1352 | - } |
|
1353 | - //if the item author is set and the user is not the author... |
|
1354 | - if ($obj->wp_user() && $obj->wp_user() !== $user_id) { |
|
1355 | - if (! empty($this->others_cap)) { |
|
1356 | - $caps[] = $this->others_cap; |
|
1357 | - } |
|
1358 | - } |
|
1359 | - //yes this means that if users created the private post, they are able to see it regardless of private cap. |
|
1360 | - if ($status_obj->private |
|
1361 | - && ! empty($this->private_cap) |
|
1362 | - && $obj->wp_user() !== $user_id |
|
1363 | - ) { |
|
1364 | - //the user is trying to view a private object for an object they don't own. |
|
1365 | - $caps[] = $this->private_cap; |
|
1366 | - } |
|
1367 | - } else { |
|
1368 | - //not a cpt object so handled differently |
|
1369 | - $has_cap = false; |
|
1370 | - try { |
|
1371 | - $has_cap = method_exists($obj, 'wp_user') |
|
1372 | - && $obj->wp_user() |
|
1373 | - && $obj->wp_user() === $user_id; |
|
1374 | - } catch (Exception $e) { |
|
1375 | - if (WP_DEBUG) { |
|
1376 | - EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
1377 | - } |
|
1378 | - } |
|
1379 | - if (! $has_cap) { |
|
1380 | - if (! empty($this->private_cap)) { |
|
1381 | - $caps[] = $this->private_cap; |
|
1382 | - } |
|
1383 | - if (! empty($this->others_cap)) { |
|
1384 | - $caps[] = $this->others_cap; |
|
1385 | - } |
|
1386 | - } |
|
1387 | - } |
|
1388 | - return $caps; |
|
1389 | - } |
|
1311 | + /** |
|
1312 | + * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1313 | + * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1314 | + * |
|
1315 | + * @since 4.5.0 |
|
1316 | + * @see wp-includes/capabilities.php |
|
1317 | + * |
|
1318 | + * @param array $caps actual users capabilities |
|
1319 | + * @param string $cap initial capability name that is being checked (the "map" key) |
|
1320 | + * @param int $user_id The user id |
|
1321 | + * @param array $args Adds context to the cap. Typically the object ID. |
|
1322 | + * |
|
1323 | + * @return array actual users capabilities |
|
1324 | + */ |
|
1325 | + protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1326 | + { |
|
1327 | + //only process if we're checking our mapped cap; |
|
1328 | + if ($cap !== $this->meta_cap) { |
|
1329 | + return $caps; |
|
1330 | + } |
|
1331 | + |
|
1332 | + //okay it is a meta cap so let's first remove that cap from the $caps array. |
|
1333 | + if (($key = array_search($cap, $caps)) !== false) { |
|
1334 | + unset($caps[$key]); |
|
1335 | + } |
|
1336 | + |
|
1337 | + //cast $user_id to int for later explicit comparisons |
|
1338 | + $user_id = (int) $user_id; |
|
1339 | + |
|
1340 | + $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
|
1341 | + //if no obj then let's just do cap |
|
1342 | + if (! $obj instanceof EE_Base_Class) { |
|
1343 | + $caps[] = 'do_not_allow'; |
|
1344 | + return $caps; |
|
1345 | + } |
|
1346 | + |
|
1347 | + $caps[] = $cap . 's'; |
|
1348 | + if ($obj instanceof EE_CPT_Base) { |
|
1349 | + $status_obj = get_post_status_object($obj->status()); |
|
1350 | + if ($status_obj->public) { |
|
1351 | + return $caps; |
|
1352 | + } |
|
1353 | + //if the item author is set and the user is not the author... |
|
1354 | + if ($obj->wp_user() && $obj->wp_user() !== $user_id) { |
|
1355 | + if (! empty($this->others_cap)) { |
|
1356 | + $caps[] = $this->others_cap; |
|
1357 | + } |
|
1358 | + } |
|
1359 | + //yes this means that if users created the private post, they are able to see it regardless of private cap. |
|
1360 | + if ($status_obj->private |
|
1361 | + && ! empty($this->private_cap) |
|
1362 | + && $obj->wp_user() !== $user_id |
|
1363 | + ) { |
|
1364 | + //the user is trying to view a private object for an object they don't own. |
|
1365 | + $caps[] = $this->private_cap; |
|
1366 | + } |
|
1367 | + } else { |
|
1368 | + //not a cpt object so handled differently |
|
1369 | + $has_cap = false; |
|
1370 | + try { |
|
1371 | + $has_cap = method_exists($obj, 'wp_user') |
|
1372 | + && $obj->wp_user() |
|
1373 | + && $obj->wp_user() === $user_id; |
|
1374 | + } catch (Exception $e) { |
|
1375 | + if (WP_DEBUG) { |
|
1376 | + EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
1377 | + } |
|
1378 | + } |
|
1379 | + if (! $has_cap) { |
|
1380 | + if (! empty($this->private_cap)) { |
|
1381 | + $caps[] = $this->private_cap; |
|
1382 | + } |
|
1383 | + if (! empty($this->others_cap)) { |
|
1384 | + $caps[] = $this->others_cap; |
|
1385 | + } |
|
1386 | + } |
|
1387 | + } |
|
1388 | + return $caps; |
|
1389 | + } |
|
1390 | 1390 | } |
1391 | 1391 | |
1392 | 1392 | |
@@ -1403,56 +1403,56 @@ discard block |
||
1403 | 1403 | class EE_Meta_Capability_Map_Messages_Cap extends EE_Meta_Capability_Map |
1404 | 1404 | { |
1405 | 1405 | |
1406 | - /** |
|
1407 | - * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1408 | - * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1409 | - * |
|
1410 | - * @since 4.5.0 |
|
1411 | - * @see wp-includes/capabilities.php |
|
1412 | - * |
|
1413 | - * @param array $caps actual users capabilities |
|
1414 | - * @param string $cap initial capability name that is being checked (the "map" key) |
|
1415 | - * @param int $user_id The user id |
|
1416 | - * @param array $args Adds context to the cap. Typically the object ID. |
|
1417 | - * |
|
1418 | - * @return array actual users capabilities |
|
1419 | - */ |
|
1420 | - protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1421 | - { |
|
1422 | - //only process if we're checking our mapped_cap |
|
1423 | - if ($cap !== $this->meta_cap) { |
|
1424 | - return $caps; |
|
1425 | - } |
|
1426 | - |
|
1427 | - //okay it is a meta cap so let's first remove that cap from the $caps array. |
|
1428 | - if (($key = array_search($cap, $caps)) !== false) { |
|
1429 | - unset($caps[$key]); |
|
1430 | - } |
|
1431 | - |
|
1432 | - //cast $user_id to int for later explicit comparisons |
|
1433 | - $user_id = (int) $user_id; |
|
1434 | - |
|
1435 | - $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
|
1436 | - //if no obj then let's just do cap |
|
1437 | - if (! $obj instanceof EE_Message_Template_Group) { |
|
1438 | - $caps[] = 'do_not_allow'; |
|
1439 | - return $caps; |
|
1440 | - } |
|
1441 | - $caps[] = $cap . 's'; |
|
1442 | - $is_global = $obj->is_global(); |
|
1443 | - if ($obj->wp_user() && $obj->wp_user() === $user_id) { |
|
1444 | - if ($is_global) { |
|
1445 | - $caps[] = $this->private_cap; |
|
1446 | - } |
|
1447 | - } else { |
|
1448 | - if ($is_global) { |
|
1449 | - $caps[] = $this->private_cap; |
|
1450 | - } else { |
|
1451 | - $caps[] = $this->others_cap; |
|
1452 | - } |
|
1453 | - } |
|
1454 | - return $caps; |
|
1455 | - } |
|
1406 | + /** |
|
1407 | + * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1408 | + * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1409 | + * |
|
1410 | + * @since 4.5.0 |
|
1411 | + * @see wp-includes/capabilities.php |
|
1412 | + * |
|
1413 | + * @param array $caps actual users capabilities |
|
1414 | + * @param string $cap initial capability name that is being checked (the "map" key) |
|
1415 | + * @param int $user_id The user id |
|
1416 | + * @param array $args Adds context to the cap. Typically the object ID. |
|
1417 | + * |
|
1418 | + * @return array actual users capabilities |
|
1419 | + */ |
|
1420 | + protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1421 | + { |
|
1422 | + //only process if we're checking our mapped_cap |
|
1423 | + if ($cap !== $this->meta_cap) { |
|
1424 | + return $caps; |
|
1425 | + } |
|
1426 | + |
|
1427 | + //okay it is a meta cap so let's first remove that cap from the $caps array. |
|
1428 | + if (($key = array_search($cap, $caps)) !== false) { |
|
1429 | + unset($caps[$key]); |
|
1430 | + } |
|
1431 | + |
|
1432 | + //cast $user_id to int for later explicit comparisons |
|
1433 | + $user_id = (int) $user_id; |
|
1434 | + |
|
1435 | + $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
|
1436 | + //if no obj then let's just do cap |
|
1437 | + if (! $obj instanceof EE_Message_Template_Group) { |
|
1438 | + $caps[] = 'do_not_allow'; |
|
1439 | + return $caps; |
|
1440 | + } |
|
1441 | + $caps[] = $cap . 's'; |
|
1442 | + $is_global = $obj->is_global(); |
|
1443 | + if ($obj->wp_user() && $obj->wp_user() === $user_id) { |
|
1444 | + if ($is_global) { |
|
1445 | + $caps[] = $this->private_cap; |
|
1446 | + } |
|
1447 | + } else { |
|
1448 | + if ($is_global) { |
|
1449 | + $caps[] = $this->private_cap; |
|
1450 | + } else { |
|
1451 | + $caps[] = $this->others_cap; |
|
1452 | + } |
|
1453 | + } |
|
1454 | + return $caps; |
|
1455 | + } |
|
1456 | 1456 | } |
1457 | 1457 | |
1458 | 1458 | |
@@ -1469,40 +1469,40 @@ discard block |
||
1469 | 1469 | class EE_Meta_Capability_Map_Registration_Form_Cap extends EE_Meta_Capability_Map |
1470 | 1470 | { |
1471 | 1471 | |
1472 | - /** |
|
1473 | - * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1474 | - * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1475 | - * |
|
1476 | - * @since 4.5.0 |
|
1477 | - * @see wp-includes/capabilities.php |
|
1478 | - * @param array $caps actual users capabilities |
|
1479 | - * @param string $cap initial capability name that is being checked (the "map" key) |
|
1480 | - * @param int $user_id The user id |
|
1481 | - * @param array $args Adds context to the cap. Typically the object ID. |
|
1482 | - * @return array actual users capabilities |
|
1483 | - */ |
|
1484 | - protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1485 | - { |
|
1486 | - //only process if we're checking our mapped_cap |
|
1487 | - if ($cap !== $this->meta_cap) { |
|
1488 | - return $caps; |
|
1489 | - } |
|
1490 | - //okay it is a meta cap so let's first remove that cap from the $caps array. |
|
1491 | - if (($key = array_search($cap, $caps)) !== false) { |
|
1492 | - unset($caps[$key]); |
|
1493 | - } |
|
1494 | - $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
|
1495 | - //if no obj then let's just do cap |
|
1496 | - if (! $obj instanceof EE_Base_Class) { |
|
1497 | - $caps[] = 'do_not_allow'; |
|
1498 | - return $caps; |
|
1499 | - } |
|
1500 | - $caps[] = $cap . 's'; |
|
1501 | - $is_system = $obj instanceof EE_Question_Group ? $obj->system_group() : false; |
|
1502 | - $is_system = $obj instanceof EE_Question ? $obj->is_system_question() : $is_system; |
|
1503 | - if ($is_system) { |
|
1504 | - $caps[] = $this->private_cap; |
|
1505 | - } |
|
1506 | - return $caps; |
|
1507 | - } |
|
1472 | + /** |
|
1473 | + * This is the callback for the wp map_meta_caps() function which allows for ensuring certain caps that act as a |
|
1474 | + * "meta" for other caps ( i.e. ee_edit_event is a meta for ee_edit_others_events ) work as expected. |
|
1475 | + * |
|
1476 | + * @since 4.5.0 |
|
1477 | + * @see wp-includes/capabilities.php |
|
1478 | + * @param array $caps actual users capabilities |
|
1479 | + * @param string $cap initial capability name that is being checked (the "map" key) |
|
1480 | + * @param int $user_id The user id |
|
1481 | + * @param array $args Adds context to the cap. Typically the object ID. |
|
1482 | + * @return array actual users capabilities |
|
1483 | + */ |
|
1484 | + protected function _map_meta_caps($caps, $cap, $user_id, $args) |
|
1485 | + { |
|
1486 | + //only process if we're checking our mapped_cap |
|
1487 | + if ($cap !== $this->meta_cap) { |
|
1488 | + return $caps; |
|
1489 | + } |
|
1490 | + //okay it is a meta cap so let's first remove that cap from the $caps array. |
|
1491 | + if (($key = array_search($cap, $caps)) !== false) { |
|
1492 | + unset($caps[$key]); |
|
1493 | + } |
|
1494 | + $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
|
1495 | + //if no obj then let's just do cap |
|
1496 | + if (! $obj instanceof EE_Base_Class) { |
|
1497 | + $caps[] = 'do_not_allow'; |
|
1498 | + return $caps; |
|
1499 | + } |
|
1500 | + $caps[] = $cap . 's'; |
|
1501 | + $is_system = $obj instanceof EE_Question_Group ? $obj->system_group() : false; |
|
1502 | + $is_system = $obj instanceof EE_Question ? $obj->is_system_question() : $is_system; |
|
1503 | + if ($is_system) { |
|
1504 | + $caps[] = $this->private_cap; |
|
1505 | + } |
|
1506 | + return $caps; |
|
1507 | + } |
|
1508 | 1508 | } |
@@ -85,7 +85,7 @@ discard block |
||
85 | 85 | public static function instance() |
86 | 86 | { |
87 | 87 | //check if instantiated, and if not do so. |
88 | - if (! self::$_instance instanceof EE_Capabilities) { |
|
88 | + if ( ! self::$_instance instanceof EE_Capabilities) { |
|
89 | 89 | self::$_instance = new self(); |
90 | 90 | } |
91 | 91 | return self::$_instance; |
@@ -117,7 +117,7 @@ discard block |
||
117 | 117 | */ |
118 | 118 | public function init_caps($reset = false) |
119 | 119 | { |
120 | - if(! EE_Maintenance_Mode::instance()->models_can_query()){ |
|
120 | + if ( ! EE_Maintenance_Mode::instance()->models_can_query()) { |
|
121 | 121 | return false; |
122 | 122 | } |
123 | 123 | $this->reset = filter_var($reset, FILTER_VALIDATE_BOOLEAN); |
@@ -164,7 +164,7 @@ discard block |
||
164 | 164 | $this->_get_default_meta_caps_array() |
165 | 165 | ); |
166 | 166 | //add filter for map_meta_caps but only if models can query. |
167 | - if (! has_filter('map_meta_cap', array($this, 'map_meta_caps'))) { |
|
167 | + if ( ! has_filter('map_meta_cap', array($this, 'map_meta_caps'))) { |
|
168 | 168 | add_filter('map_meta_cap', array($this, 'map_meta_caps'), 10, 4); |
169 | 169 | } |
170 | 170 | } |
@@ -325,11 +325,11 @@ discard block |
||
325 | 325 | if (did_action('AHEE__EE_System__load_espresso_addons__complete')) { |
326 | 326 | //loop through our _meta_caps array |
327 | 327 | foreach ($this->_meta_caps as $meta_map) { |
328 | - if (! $meta_map instanceof EE_Meta_Capability_Map) { |
|
328 | + if ( ! $meta_map instanceof EE_Meta_Capability_Map) { |
|
329 | 329 | continue; |
330 | 330 | } |
331 | 331 | // don't load models if there is no object ID in the args |
332 | - if (! empty($args[0])) { |
|
332 | + if ( ! empty($args[0])) { |
|
333 | 333 | $meta_map->ensure_is_model(); |
334 | 334 | } |
335 | 335 | $caps = $meta_map->map_meta_caps($caps, $cap, $user_id, $args); |
@@ -631,7 +631,7 @@ discard block |
||
631 | 631 | private function setupCapabilitiesMap() |
632 | 632 | { |
633 | 633 | // if the initialization process hasn't even started, then we need to call init_caps() |
634 | - if($this->initialized === null) { |
|
634 | + if ($this->initialized === null) { |
|
635 | 635 | return $this->init_caps(); |
636 | 636 | } |
637 | 637 | // unless resetting, get caps from db if we haven't already |
@@ -667,7 +667,7 @@ discard block |
||
667 | 667 | public function addCaps(array $capabilities_to_add) |
668 | 668 | { |
669 | 669 | // don't do anything if the capabilities map can not be initialized |
670 | - if (! $this->setupCapabilitiesMap()) { |
|
670 | + if ( ! $this->setupCapabilitiesMap()) { |
|
671 | 671 | return false; |
672 | 672 | } |
673 | 673 | // and filter the array so others can get in on the fun during resets |
@@ -710,7 +710,7 @@ discard block |
||
710 | 710 | public function removeCaps($caps_map) |
711 | 711 | { |
712 | 712 | // don't do anything if the capabilities map can not be initialized |
713 | - if (! $this->setupCapabilitiesMap()) { |
|
713 | + if ( ! $this->setupCapabilitiesMap()) { |
|
714 | 714 | return false; |
715 | 715 | } |
716 | 716 | $update_capabilities_map = false; |
@@ -770,7 +770,7 @@ discard block |
||
770 | 770 | $orig_role = $role; |
771 | 771 | $role = $role instanceof WP_Role ? $role : get_role($role); |
772 | 772 | //if the role isn't available then we create it. |
773 | - if (! $role instanceof WP_Role) { |
|
773 | + if ( ! $role instanceof WP_Role) { |
|
774 | 774 | // if a plugin wants to create a specific role name then they should create the role before |
775 | 775 | // EE_Capabilities does. Otherwise this function will create the role name from the slug: |
776 | 776 | // - removes any `ee_` namespacing from the start of the slug. |
@@ -781,12 +781,12 @@ discard block |
||
781 | 781 | } |
782 | 782 | if ($role instanceof WP_Role) { |
783 | 783 | // don't do anything if the capabilities map can not be initialized |
784 | - if (! $this->setupCapabilitiesMap()) { |
|
784 | + if ( ! $this->setupCapabilitiesMap()) { |
|
785 | 785 | return false; |
786 | 786 | } |
787 | - if (! $this->capHasBeenAddedToRole($role->name, $cap)) { |
|
787 | + if ( ! $this->capHasBeenAddedToRole($role->name, $cap)) { |
|
788 | 788 | $role->add_cap($cap, $grant); |
789 | - $this->capabilities_map[ $role->name ][] = $cap; |
|
789 | + $this->capabilities_map[$role->name][] = $cap; |
|
790 | 790 | $this->updateCapabilitiesMap($update_capabilities_map); |
791 | 791 | return true; |
792 | 792 | } |
@@ -811,14 +811,14 @@ discard block |
||
811 | 811 | public function remove_cap_from_role($role, $cap, $update_capabilities_map = true) |
812 | 812 | { |
813 | 813 | // don't do anything if the capabilities map can not be initialized |
814 | - if (! $this->setupCapabilitiesMap()) { |
|
814 | + if ( ! $this->setupCapabilitiesMap()) { |
|
815 | 815 | return false; |
816 | 816 | } |
817 | 817 | |
818 | 818 | $role = $role instanceof WP_Role ? $role : get_role($role); |
819 | 819 | if ($role instanceof WP_Role && $index = $this->capHasBeenAddedToRole($role->name, $cap, true)) { |
820 | 820 | $role->remove_cap($cap); |
821 | - unset($this->capabilities_map[ $role->name ][ $index ]); |
|
821 | + unset($this->capabilities_map[$role->name][$index]); |
|
822 | 822 | $this->updateCapabilitiesMap($update_capabilities_map); |
823 | 823 | return true; |
824 | 824 | } |
@@ -833,7 +833,7 @@ discard block |
||
833 | 833 | * @param bool $get_index |
834 | 834 | * @return bool|mixed |
835 | 835 | */ |
836 | - private function capHasBeenAddedToRole($role_name='', $cap='', $get_index = false) |
|
836 | + private function capHasBeenAddedToRole($role_name = '', $cap = '', $get_index = false) |
|
837 | 837 | { |
838 | 838 | if ( |
839 | 839 | isset($this->capabilities_map[$role_name]) |
@@ -865,7 +865,7 @@ discard block |
||
865 | 865 | public function current_user_can($cap, $context, $id = 0) |
866 | 866 | { |
867 | 867 | //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
868 | - $filtered_cap = apply_filters('FHEE__EE_Capabilities__current_user_can__cap__' . $context, $cap, $id); |
|
868 | + $filtered_cap = apply_filters('FHEE__EE_Capabilities__current_user_can__cap__'.$context, $cap, $id); |
|
869 | 869 | $filtered_cap = apply_filters( |
870 | 870 | 'FHEE__EE_Capabilities__current_user_can__cap', |
871 | 871 | $filtered_cap, |
@@ -894,7 +894,7 @@ discard block |
||
894 | 894 | public function user_can($user, $cap, $context, $id = 0) |
895 | 895 | { |
896 | 896 | //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
897 | - $filtered_cap = apply_filters('FHEE__EE_Capabilities__user_can__cap__' . $context, $cap, $user, $id); |
|
897 | + $filtered_cap = apply_filters('FHEE__EE_Capabilities__user_can__cap__'.$context, $cap, $user, $id); |
|
898 | 898 | $filtered_cap = apply_filters( |
899 | 899 | 'FHEE__EE_Capabilities__user_can__cap', |
900 | 900 | $filtered_cap, |
@@ -934,7 +934,7 @@ discard block |
||
934 | 934 | : current_user_can($blog_id, $cap); |
935 | 935 | //apply filters (both a global on just the cap, and context specific. Global overrides context specific) |
936 | 936 | $user_can = apply_filters( |
937 | - 'FHEE__EE_Capabilities__current_user_can_for_blog__user_can__' . $context, |
|
937 | + 'FHEE__EE_Capabilities__current_user_can_for_blog__user_can__'.$context, |
|
938 | 938 | $user_can, |
939 | 939 | $blog_id, |
940 | 940 | $cap, |
@@ -964,14 +964,14 @@ discard block |
||
964 | 964 | */ |
965 | 965 | public function get_ee_capabilities($role = 'administrator') |
966 | 966 | { |
967 | - if (! $this->initialized) { |
|
967 | + if ( ! $this->initialized) { |
|
968 | 968 | $this->init_caps(); |
969 | 969 | } |
970 | 970 | if (empty($role)) { |
971 | 971 | return $this->capabilities_map; |
972 | 972 | } |
973 | - return isset($this->capabilities_map[ $role ]) |
|
974 | - ? $this->capabilities_map[ $role ] |
|
973 | + return isset($this->capabilities_map[$role]) |
|
974 | + ? $this->capabilities_map[$role] |
|
975 | 975 | : array(); |
976 | 976 | } |
977 | 977 | |
@@ -1003,7 +1003,7 @@ discard block |
||
1003 | 1003 | 'event_espresso' |
1004 | 1004 | ), |
1005 | 1005 | '$reset', |
1006 | - __METHOD__ . '()', |
|
1006 | + __METHOD__.'()', |
|
1007 | 1007 | 'EE_Capabilities::init_caps()', |
1008 | 1008 | 'true' |
1009 | 1009 | ), |
@@ -1081,16 +1081,16 @@ discard block |
||
1081 | 1081 | 'Incoming $map_values array should have a count of four values in it. This is what was given: %s', |
1082 | 1082 | 'event_espresso' |
1083 | 1083 | ), |
1084 | - '<br>' . print_r($map_values, true) |
|
1084 | + '<br>'.print_r($map_values, true) |
|
1085 | 1085 | ) |
1086 | 1086 | ); |
1087 | 1087 | } |
1088 | 1088 | //set properties |
1089 | 1089 | $this->_model = null; |
1090 | 1090 | $this->_model_name = $map_values[0]; |
1091 | - $this->published_cap = (string)$map_values[1]; |
|
1092 | - $this->others_cap = (string)$map_values[2]; |
|
1093 | - $this->private_cap = (string)$map_values[3]; |
|
1091 | + $this->published_cap = (string) $map_values[1]; |
|
1092 | + $this->others_cap = (string) $map_values[2]; |
|
1093 | + $this->private_cap = (string) $map_values[3]; |
|
1094 | 1094 | } |
1095 | 1095 | |
1096 | 1096 | /** |
@@ -1117,11 +1117,11 @@ discard block |
||
1117 | 1117 | return; |
1118 | 1118 | } |
1119 | 1119 | //ensure model name is string |
1120 | - $this->_model_name = (string)$this->_model_name; |
|
1120 | + $this->_model_name = (string) $this->_model_name; |
|
1121 | 1121 | //error proof if the name has EEM in it |
1122 | 1122 | $this->_model_name = str_replace('EEM', '', $this->_model_name); |
1123 | 1123 | $this->_model = EE_Registry::instance()->load_model($this->_model_name); |
1124 | - if (! $this->_model instanceof EEM_Base) { |
|
1124 | + if ( ! $this->_model instanceof EEM_Base) { |
|
1125 | 1125 | throw new EE_Error( |
1126 | 1126 | sprintf( |
1127 | 1127 | __( |
@@ -1216,11 +1216,11 @@ discard block |
||
1216 | 1216 | /** @var EE_Base_Class $obj */ |
1217 | 1217 | $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
1218 | 1218 | //if no obj then let's just do cap |
1219 | - if (! $obj instanceof EE_Base_Class) { |
|
1219 | + if ( ! $obj instanceof EE_Base_Class) { |
|
1220 | 1220 | $caps[] = 'do_not_allow'; |
1221 | 1221 | return $caps; |
1222 | 1222 | } |
1223 | - $caps[] = $cap . 's'; |
|
1223 | + $caps[] = $cap.'s'; |
|
1224 | 1224 | if ($obj instanceof EE_CPT_Base) { |
1225 | 1225 | //if the item author is set and the user is the author... |
1226 | 1226 | if ($obj->wp_user() && $user_id === $obj->wp_user()) { |
@@ -1230,12 +1230,12 @@ discard block |
||
1230 | 1230 | } |
1231 | 1231 | } else { |
1232 | 1232 | //the user is trying to edit someone else's obj |
1233 | - if (! empty($this->others_cap)) { |
|
1233 | + if ( ! empty($this->others_cap)) { |
|
1234 | 1234 | $caps[] = $this->others_cap; |
1235 | 1235 | } |
1236 | - if (! empty($this->published_cap) && $obj->status() === 'publish') { |
|
1236 | + if ( ! empty($this->published_cap) && $obj->status() === 'publish') { |
|
1237 | 1237 | $caps[] = $this->published_cap; |
1238 | - } elseif (! empty($this->private_cap) && $obj->status() === 'private') { |
|
1238 | + } elseif ( ! empty($this->private_cap) && $obj->status() === 'private') { |
|
1239 | 1239 | $caps[] = $this->private_cap; |
1240 | 1240 | } |
1241 | 1241 | } |
@@ -1251,8 +1251,8 @@ discard block |
||
1251 | 1251 | EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
1252 | 1252 | } |
1253 | 1253 | } |
1254 | - if (! $has_cap) { |
|
1255 | - if (! empty($this->others_cap)) { |
|
1254 | + if ( ! $has_cap) { |
|
1255 | + if ( ! empty($this->others_cap)) { |
|
1256 | 1256 | $caps[] = $this->others_cap; |
1257 | 1257 | } |
1258 | 1258 | } |
@@ -1339,12 +1339,12 @@ discard block |
||
1339 | 1339 | |
1340 | 1340 | $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
1341 | 1341 | //if no obj then let's just do cap |
1342 | - if (! $obj instanceof EE_Base_Class) { |
|
1342 | + if ( ! $obj instanceof EE_Base_Class) { |
|
1343 | 1343 | $caps[] = 'do_not_allow'; |
1344 | 1344 | return $caps; |
1345 | 1345 | } |
1346 | 1346 | |
1347 | - $caps[] = $cap . 's'; |
|
1347 | + $caps[] = $cap.'s'; |
|
1348 | 1348 | if ($obj instanceof EE_CPT_Base) { |
1349 | 1349 | $status_obj = get_post_status_object($obj->status()); |
1350 | 1350 | if ($status_obj->public) { |
@@ -1352,7 +1352,7 @@ discard block |
||
1352 | 1352 | } |
1353 | 1353 | //if the item author is set and the user is not the author... |
1354 | 1354 | if ($obj->wp_user() && $obj->wp_user() !== $user_id) { |
1355 | - if (! empty($this->others_cap)) { |
|
1355 | + if ( ! empty($this->others_cap)) { |
|
1356 | 1356 | $caps[] = $this->others_cap; |
1357 | 1357 | } |
1358 | 1358 | } |
@@ -1376,11 +1376,11 @@ discard block |
||
1376 | 1376 | EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
1377 | 1377 | } |
1378 | 1378 | } |
1379 | - if (! $has_cap) { |
|
1380 | - if (! empty($this->private_cap)) { |
|
1379 | + if ( ! $has_cap) { |
|
1380 | + if ( ! empty($this->private_cap)) { |
|
1381 | 1381 | $caps[] = $this->private_cap; |
1382 | 1382 | } |
1383 | - if (! empty($this->others_cap)) { |
|
1383 | + if ( ! empty($this->others_cap)) { |
|
1384 | 1384 | $caps[] = $this->others_cap; |
1385 | 1385 | } |
1386 | 1386 | } |
@@ -1434,11 +1434,11 @@ discard block |
||
1434 | 1434 | |
1435 | 1435 | $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
1436 | 1436 | //if no obj then let's just do cap |
1437 | - if (! $obj instanceof EE_Message_Template_Group) { |
|
1437 | + if ( ! $obj instanceof EE_Message_Template_Group) { |
|
1438 | 1438 | $caps[] = 'do_not_allow'; |
1439 | 1439 | return $caps; |
1440 | 1440 | } |
1441 | - $caps[] = $cap . 's'; |
|
1441 | + $caps[] = $cap.'s'; |
|
1442 | 1442 | $is_global = $obj->is_global(); |
1443 | 1443 | if ($obj->wp_user() && $obj->wp_user() === $user_id) { |
1444 | 1444 | if ($is_global) { |
@@ -1493,11 +1493,11 @@ discard block |
||
1493 | 1493 | } |
1494 | 1494 | $obj = ! empty($args[0]) ? $this->_model->get_one_by_ID($args[0]) : null; |
1495 | 1495 | //if no obj then let's just do cap |
1496 | - if (! $obj instanceof EE_Base_Class) { |
|
1496 | + if ( ! $obj instanceof EE_Base_Class) { |
|
1497 | 1497 | $caps[] = 'do_not_allow'; |
1498 | 1498 | return $caps; |
1499 | 1499 | } |
1500 | - $caps[] = $cap . 's'; |
|
1500 | + $caps[] = $cap.'s'; |
|
1501 | 1501 | $is_system = $obj instanceof EE_Question_Group ? $obj->system_group() : false; |
1502 | 1502 | $is_system = $obj instanceof EE_Question ? $obj->is_system_question() : $is_system; |
1503 | 1503 | if ($is_system) { |
@@ -198,7 +198,7 @@ |
||
198 | 198 | * |
199 | 199 | * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated. |
200 | 200 | * |
201 | - * @return int |
|
201 | + * @return string |
|
202 | 202 | */ |
203 | 203 | private function _revenue_per_event_report($period = '-1 month') |
204 | 204 | { |
@@ -1,6 +1,6 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
3 | - exit('NO direct script access allowed'); |
|
3 | + exit('NO direct script access allowed'); |
|
4 | 4 | } |
5 | 5 | |
6 | 6 | /** |
@@ -32,224 +32,224 @@ discard block |
||
32 | 32 | { |
33 | 33 | |
34 | 34 | |
35 | - /** |
|
36 | - * This is used to hold the reports template data which is setup early in the request. |
|
37 | - * @type array |
|
38 | - */ |
|
39 | - protected $_reports_template_data = array(); |
|
40 | - |
|
41 | - /** |
|
42 | - * @Constructor |
|
43 | - * @access public |
|
44 | - * |
|
45 | - * @param bool $routing |
|
46 | - * |
|
47 | - * @return \Extend_Transactions_Admin_Page |
|
48 | - */ |
|
49 | - public function __construct($routing = true) |
|
50 | - { |
|
51 | - parent::__construct($routing); |
|
52 | - define('TXN_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND . 'transactions/templates/'); |
|
53 | - define('TXN_CAF_ASSETS', EE_CORE_CAF_ADMIN_EXTEND . 'transactions/assets/'); |
|
54 | - define('TXN_CAF_ASSETS_URL', EE_CORE_CAF_ADMIN_EXTEND_URL . 'transactions/assets/'); |
|
55 | - } |
|
56 | - |
|
57 | - |
|
58 | - /** |
|
59 | - * _extend_page_config |
|
60 | - * |
|
61 | - * @access protected |
|
62 | - * @return void |
|
63 | - */ |
|
64 | - protected function _extend_page_config() |
|
65 | - { |
|
66 | - $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND . 'transactions'; |
|
67 | - |
|
68 | - $new_page_routes = array( |
|
69 | - 'reports' => array( |
|
70 | - 'func' => '_transaction_reports', |
|
71 | - 'capability' => 'ee_read_transactions' |
|
72 | - ) |
|
73 | - ); |
|
74 | - |
|
75 | - $this->_page_routes = array_merge($this->_page_routes, $new_page_routes); |
|
76 | - |
|
77 | - $new_page_config = array( |
|
78 | - 'reports' => array( |
|
79 | - 'nav' => array( |
|
80 | - 'label' => __('Reports', 'event_espresso'), |
|
81 | - 'order' => 20 |
|
82 | - ), |
|
83 | - 'help_tabs' => array( |
|
84 | - 'transactions_reports_help_tab' => array( |
|
85 | - 'title' => __('Transaction Reports', 'event_espresso'), |
|
86 | - 'filename' => 'transactions_reports' |
|
87 | - ) |
|
88 | - ), |
|
89 | - /*'help_tour' => array( 'Transaction_Reports_Help_Tour' ),*/ |
|
90 | - 'require_nonce' => false |
|
91 | - ) |
|
92 | - ); |
|
93 | - $this->_page_config = array_merge($this->_page_config, $new_page_config); |
|
94 | - } |
|
95 | - |
|
96 | - |
|
97 | - /** |
|
98 | - * load_scripts_styles_reports |
|
99 | - * |
|
100 | - * @access public |
|
101 | - * @return void |
|
102 | - */ |
|
103 | - public function load_scripts_styles_reports() |
|
104 | - { |
|
105 | - wp_register_script( |
|
106 | - 'ee-txn-reports-js', |
|
107 | - TXN_CAF_ASSETS_URL . 'ee-transaction-admin-reports.js', |
|
108 | - array('google-charts'), |
|
109 | - EVENT_ESPRESSO_VERSION, |
|
110 | - true |
|
111 | - ); |
|
112 | - wp_enqueue_script('ee-txn-reports-js'); |
|
113 | - $this->_transaction_reports_js_setup(); |
|
114 | - EE_Registry::$i18n_js_strings['currency_format'] = EEH_Money::get_format_for_google_charts(); |
|
115 | - } |
|
116 | - |
|
117 | - |
|
118 | - /** |
|
119 | - * This is called when javascript is being enqueued to setup the various data needed for the reports js. |
|
120 | - * Also $this->{$_reports_template_data} property is set for later usage by the _transaction_reports method. |
|
121 | - */ |
|
122 | - protected function _transaction_reports_js_setup() |
|
123 | - { |
|
124 | - $this->_reports_template_data['admin_reports'][] = $this->_revenue_per_day_report(); |
|
125 | - $this->_reports_template_data['admin_reports'][] = $this->_revenue_per_event_report(); |
|
126 | - } |
|
127 | - |
|
128 | - |
|
129 | - /** |
|
130 | - * _transaction_reports |
|
131 | - * generates Business Reports regarding Transactions |
|
132 | - * |
|
133 | - * @return void |
|
134 | - */ |
|
135 | - protected function _transaction_reports() |
|
136 | - { |
|
137 | - $template_path = EE_ADMIN_TEMPLATE . 'admin_reports.template.php'; |
|
138 | - $this->_admin_page_title = __('Transactions', 'event_espresso'); |
|
139 | - $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
|
140 | - $this->_reports_template_data, true); |
|
141 | - |
|
142 | - // the final template wrapper |
|
143 | - $this->display_admin_page_with_no_sidebar(); |
|
144 | - } |
|
145 | - |
|
146 | - |
|
147 | - /** |
|
148 | - * _revenue_per_day_report |
|
149 | - * generates Business Report showing Total Revenue per Day. |
|
150 | - * |
|
151 | - * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated. |
|
152 | - * |
|
153 | - * @return string |
|
154 | - */ |
|
155 | - private function _revenue_per_day_report($period = '-1 month') |
|
156 | - { |
|
157 | - |
|
158 | - $report_ID = 'txn-admin-revenue-per-day-report-dv'; |
|
159 | - |
|
160 | - $TXN = EEM_Transaction::instance(); |
|
161 | - |
|
162 | - $results = $TXN->get_revenue_per_day_report($period); |
|
163 | - $results = (array)$results; |
|
164 | - $revenue = array(); |
|
165 | - $subtitle = ''; |
|
166 | - |
|
167 | - if ($results) { |
|
168 | - $revenue[] = array( |
|
169 | - __('Date (only shows dates that have a revenue greater than 1)', 'event_espresso'), |
|
170 | - __('Total Revenue', 'event_espresso') |
|
171 | - ); |
|
172 | - foreach ($results as $result) { |
|
173 | - $revenue[] = array($result->txnDate, (float)$result->revenue); |
|
174 | - } |
|
175 | - |
|
176 | - //setup the date range. |
|
177 | - $beginning_date = new DateTime('now' . $period, new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
178 | - $ending_date = new DateTime('now', new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
179 | - $subtitle = sprintf(_x('For the period: %s to %s', 'Used to give date range', 'event_espresso'), |
|
180 | - $beginning_date->format('Y-m-d'), $ending_date->format('Y-m-d')); |
|
181 | - } |
|
182 | - |
|
183 | - $report_title = esc_html__('Total Revenue per Day', 'event_espresso'); |
|
184 | - |
|
185 | - $report_params = array( |
|
186 | - 'title' => $report_title, |
|
187 | - 'subtitle' => $subtitle, |
|
188 | - 'id' => $report_ID, |
|
189 | - 'revenue' => $revenue, |
|
190 | - 'noResults' => empty($revenue) || count($revenue) === 1, |
|
191 | - 'noTxnMsg' => sprintf(__('%sThere is no revenue to report for the last 30 days.%s', 'event_espresso'), |
|
192 | - '<h2>' . $report_title . '</h2><p>', '</p>') |
|
193 | - ); |
|
194 | - wp_localize_script('ee-txn-reports-js', 'txnRevPerDay', $report_params); |
|
195 | - |
|
196 | - return $report_ID; |
|
197 | - } |
|
198 | - |
|
199 | - |
|
200 | - /** |
|
201 | - * _revenue_per_event_report |
|
202 | - * generates Business Report showing total revenue per event. |
|
203 | - * |
|
204 | - * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated. |
|
205 | - * |
|
206 | - * @return int |
|
207 | - */ |
|
208 | - private function _revenue_per_event_report($period = '-1 month') |
|
209 | - { |
|
210 | - |
|
211 | - $report_ID = 'txn-admin-revenue-per-event-report-dv'; |
|
212 | - |
|
213 | - $TXN = EEM_Transaction::instance(); |
|
214 | - $results = $TXN->get_revenue_per_event_report($period); |
|
215 | - $results = (array)$results; |
|
216 | - $revenue = array(); |
|
217 | - $subtitle = ''; |
|
218 | - |
|
219 | - if ($results) { |
|
220 | - $revenue[] = array( |
|
221 | - __('Event (only events that have a revenue greater than 1 are shown)', 'event_espresso'), |
|
222 | - __('Total Revenue', 'event_espresso') |
|
223 | - ); |
|
224 | - foreach ($results as $result) { |
|
225 | - if ($result->revenue > 1) { |
|
226 | - $event_name = stripslashes(html_entity_decode($result->event_name, ENT_QUOTES, 'UTF-8')); |
|
227 | - $event_name = wp_trim_words($event_name, 5, '...'); |
|
228 | - $revenue[] = array($event_name, (float)$result->revenue); |
|
229 | - } |
|
230 | - } |
|
231 | - |
|
232 | - //setup the date range. |
|
233 | - $beginning_date = new DateTime('now' . $period, new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
234 | - $ending_date = new DateTime('now', new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
235 | - $subtitle = sprintf(_x('For the period: %s to %s', 'Used to give date range', 'event_espresso'), |
|
236 | - $beginning_date->format('Y-m-d'), $ending_date->format('Y-m-d')); |
|
237 | - } |
|
238 | - |
|
239 | - $report_title = esc_html__('Total Revenue per Event', 'event_espresso'); |
|
240 | - |
|
241 | - $report_params = array( |
|
242 | - 'title' => $report_title, |
|
243 | - 'subtitle' => $subtitle, |
|
244 | - 'id' => $report_ID, |
|
245 | - 'revenue' => $revenue, |
|
246 | - 'noResults' => empty($revenue), |
|
247 | - 'noTxnMsg' => sprintf(__('%sThere is no revenue to report for the last 30 days.%s', 'event_espresso'), |
|
248 | - '<h2>' . $report_title . '</h2><p>', '</p>') |
|
249 | - ); |
|
250 | - wp_localize_script('ee-txn-reports-js', 'txnRevPerEvent', $report_params); |
|
251 | - |
|
252 | - return $report_ID; |
|
253 | - } |
|
35 | + /** |
|
36 | + * This is used to hold the reports template data which is setup early in the request. |
|
37 | + * @type array |
|
38 | + */ |
|
39 | + protected $_reports_template_data = array(); |
|
40 | + |
|
41 | + /** |
|
42 | + * @Constructor |
|
43 | + * @access public |
|
44 | + * |
|
45 | + * @param bool $routing |
|
46 | + * |
|
47 | + * @return \Extend_Transactions_Admin_Page |
|
48 | + */ |
|
49 | + public function __construct($routing = true) |
|
50 | + { |
|
51 | + parent::__construct($routing); |
|
52 | + define('TXN_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND . 'transactions/templates/'); |
|
53 | + define('TXN_CAF_ASSETS', EE_CORE_CAF_ADMIN_EXTEND . 'transactions/assets/'); |
|
54 | + define('TXN_CAF_ASSETS_URL', EE_CORE_CAF_ADMIN_EXTEND_URL . 'transactions/assets/'); |
|
55 | + } |
|
56 | + |
|
57 | + |
|
58 | + /** |
|
59 | + * _extend_page_config |
|
60 | + * |
|
61 | + * @access protected |
|
62 | + * @return void |
|
63 | + */ |
|
64 | + protected function _extend_page_config() |
|
65 | + { |
|
66 | + $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND . 'transactions'; |
|
67 | + |
|
68 | + $new_page_routes = array( |
|
69 | + 'reports' => array( |
|
70 | + 'func' => '_transaction_reports', |
|
71 | + 'capability' => 'ee_read_transactions' |
|
72 | + ) |
|
73 | + ); |
|
74 | + |
|
75 | + $this->_page_routes = array_merge($this->_page_routes, $new_page_routes); |
|
76 | + |
|
77 | + $new_page_config = array( |
|
78 | + 'reports' => array( |
|
79 | + 'nav' => array( |
|
80 | + 'label' => __('Reports', 'event_espresso'), |
|
81 | + 'order' => 20 |
|
82 | + ), |
|
83 | + 'help_tabs' => array( |
|
84 | + 'transactions_reports_help_tab' => array( |
|
85 | + 'title' => __('Transaction Reports', 'event_espresso'), |
|
86 | + 'filename' => 'transactions_reports' |
|
87 | + ) |
|
88 | + ), |
|
89 | + /*'help_tour' => array( 'Transaction_Reports_Help_Tour' ),*/ |
|
90 | + 'require_nonce' => false |
|
91 | + ) |
|
92 | + ); |
|
93 | + $this->_page_config = array_merge($this->_page_config, $new_page_config); |
|
94 | + } |
|
95 | + |
|
96 | + |
|
97 | + /** |
|
98 | + * load_scripts_styles_reports |
|
99 | + * |
|
100 | + * @access public |
|
101 | + * @return void |
|
102 | + */ |
|
103 | + public function load_scripts_styles_reports() |
|
104 | + { |
|
105 | + wp_register_script( |
|
106 | + 'ee-txn-reports-js', |
|
107 | + TXN_CAF_ASSETS_URL . 'ee-transaction-admin-reports.js', |
|
108 | + array('google-charts'), |
|
109 | + EVENT_ESPRESSO_VERSION, |
|
110 | + true |
|
111 | + ); |
|
112 | + wp_enqueue_script('ee-txn-reports-js'); |
|
113 | + $this->_transaction_reports_js_setup(); |
|
114 | + EE_Registry::$i18n_js_strings['currency_format'] = EEH_Money::get_format_for_google_charts(); |
|
115 | + } |
|
116 | + |
|
117 | + |
|
118 | + /** |
|
119 | + * This is called when javascript is being enqueued to setup the various data needed for the reports js. |
|
120 | + * Also $this->{$_reports_template_data} property is set for later usage by the _transaction_reports method. |
|
121 | + */ |
|
122 | + protected function _transaction_reports_js_setup() |
|
123 | + { |
|
124 | + $this->_reports_template_data['admin_reports'][] = $this->_revenue_per_day_report(); |
|
125 | + $this->_reports_template_data['admin_reports'][] = $this->_revenue_per_event_report(); |
|
126 | + } |
|
127 | + |
|
128 | + |
|
129 | + /** |
|
130 | + * _transaction_reports |
|
131 | + * generates Business Reports regarding Transactions |
|
132 | + * |
|
133 | + * @return void |
|
134 | + */ |
|
135 | + protected function _transaction_reports() |
|
136 | + { |
|
137 | + $template_path = EE_ADMIN_TEMPLATE . 'admin_reports.template.php'; |
|
138 | + $this->_admin_page_title = __('Transactions', 'event_espresso'); |
|
139 | + $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
|
140 | + $this->_reports_template_data, true); |
|
141 | + |
|
142 | + // the final template wrapper |
|
143 | + $this->display_admin_page_with_no_sidebar(); |
|
144 | + } |
|
145 | + |
|
146 | + |
|
147 | + /** |
|
148 | + * _revenue_per_day_report |
|
149 | + * generates Business Report showing Total Revenue per Day. |
|
150 | + * |
|
151 | + * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated. |
|
152 | + * |
|
153 | + * @return string |
|
154 | + */ |
|
155 | + private function _revenue_per_day_report($period = '-1 month') |
|
156 | + { |
|
157 | + |
|
158 | + $report_ID = 'txn-admin-revenue-per-day-report-dv'; |
|
159 | + |
|
160 | + $TXN = EEM_Transaction::instance(); |
|
161 | + |
|
162 | + $results = $TXN->get_revenue_per_day_report($period); |
|
163 | + $results = (array)$results; |
|
164 | + $revenue = array(); |
|
165 | + $subtitle = ''; |
|
166 | + |
|
167 | + if ($results) { |
|
168 | + $revenue[] = array( |
|
169 | + __('Date (only shows dates that have a revenue greater than 1)', 'event_espresso'), |
|
170 | + __('Total Revenue', 'event_espresso') |
|
171 | + ); |
|
172 | + foreach ($results as $result) { |
|
173 | + $revenue[] = array($result->txnDate, (float)$result->revenue); |
|
174 | + } |
|
175 | + |
|
176 | + //setup the date range. |
|
177 | + $beginning_date = new DateTime('now' . $period, new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
178 | + $ending_date = new DateTime('now', new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
179 | + $subtitle = sprintf(_x('For the period: %s to %s', 'Used to give date range', 'event_espresso'), |
|
180 | + $beginning_date->format('Y-m-d'), $ending_date->format('Y-m-d')); |
|
181 | + } |
|
182 | + |
|
183 | + $report_title = esc_html__('Total Revenue per Day', 'event_espresso'); |
|
184 | + |
|
185 | + $report_params = array( |
|
186 | + 'title' => $report_title, |
|
187 | + 'subtitle' => $subtitle, |
|
188 | + 'id' => $report_ID, |
|
189 | + 'revenue' => $revenue, |
|
190 | + 'noResults' => empty($revenue) || count($revenue) === 1, |
|
191 | + 'noTxnMsg' => sprintf(__('%sThere is no revenue to report for the last 30 days.%s', 'event_espresso'), |
|
192 | + '<h2>' . $report_title . '</h2><p>', '</p>') |
|
193 | + ); |
|
194 | + wp_localize_script('ee-txn-reports-js', 'txnRevPerDay', $report_params); |
|
195 | + |
|
196 | + return $report_ID; |
|
197 | + } |
|
198 | + |
|
199 | + |
|
200 | + /** |
|
201 | + * _revenue_per_event_report |
|
202 | + * generates Business Report showing total revenue per event. |
|
203 | + * |
|
204 | + * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated. |
|
205 | + * |
|
206 | + * @return int |
|
207 | + */ |
|
208 | + private function _revenue_per_event_report($period = '-1 month') |
|
209 | + { |
|
210 | + |
|
211 | + $report_ID = 'txn-admin-revenue-per-event-report-dv'; |
|
212 | + |
|
213 | + $TXN = EEM_Transaction::instance(); |
|
214 | + $results = $TXN->get_revenue_per_event_report($period); |
|
215 | + $results = (array)$results; |
|
216 | + $revenue = array(); |
|
217 | + $subtitle = ''; |
|
218 | + |
|
219 | + if ($results) { |
|
220 | + $revenue[] = array( |
|
221 | + __('Event (only events that have a revenue greater than 1 are shown)', 'event_espresso'), |
|
222 | + __('Total Revenue', 'event_espresso') |
|
223 | + ); |
|
224 | + foreach ($results as $result) { |
|
225 | + if ($result->revenue > 1) { |
|
226 | + $event_name = stripslashes(html_entity_decode($result->event_name, ENT_QUOTES, 'UTF-8')); |
|
227 | + $event_name = wp_trim_words($event_name, 5, '...'); |
|
228 | + $revenue[] = array($event_name, (float)$result->revenue); |
|
229 | + } |
|
230 | + } |
|
231 | + |
|
232 | + //setup the date range. |
|
233 | + $beginning_date = new DateTime('now' . $period, new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
234 | + $ending_date = new DateTime('now', new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
235 | + $subtitle = sprintf(_x('For the period: %s to %s', 'Used to give date range', 'event_espresso'), |
|
236 | + $beginning_date->format('Y-m-d'), $ending_date->format('Y-m-d')); |
|
237 | + } |
|
238 | + |
|
239 | + $report_title = esc_html__('Total Revenue per Event', 'event_espresso'); |
|
240 | + |
|
241 | + $report_params = array( |
|
242 | + 'title' => $report_title, |
|
243 | + 'subtitle' => $subtitle, |
|
244 | + 'id' => $report_ID, |
|
245 | + 'revenue' => $revenue, |
|
246 | + 'noResults' => empty($revenue), |
|
247 | + 'noTxnMsg' => sprintf(__('%sThere is no revenue to report for the last 30 days.%s', 'event_espresso'), |
|
248 | + '<h2>' . $report_title . '</h2><p>', '</p>') |
|
249 | + ); |
|
250 | + wp_localize_script('ee-txn-reports-js', 'txnRevPerEvent', $report_params); |
|
251 | + |
|
252 | + return $report_ID; |
|
253 | + } |
|
254 | 254 | |
255 | 255 | } |
@@ -49,9 +49,9 @@ discard block |
||
49 | 49 | public function __construct($routing = true) |
50 | 50 | { |
51 | 51 | parent::__construct($routing); |
52 | - define('TXN_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND . 'transactions/templates/'); |
|
53 | - define('TXN_CAF_ASSETS', EE_CORE_CAF_ADMIN_EXTEND . 'transactions/assets/'); |
|
54 | - define('TXN_CAF_ASSETS_URL', EE_CORE_CAF_ADMIN_EXTEND_URL . 'transactions/assets/'); |
|
52 | + define('TXN_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND.'transactions/templates/'); |
|
53 | + define('TXN_CAF_ASSETS', EE_CORE_CAF_ADMIN_EXTEND.'transactions/assets/'); |
|
54 | + define('TXN_CAF_ASSETS_URL', EE_CORE_CAF_ADMIN_EXTEND_URL.'transactions/assets/'); |
|
55 | 55 | } |
56 | 56 | |
57 | 57 | |
@@ -63,7 +63,7 @@ discard block |
||
63 | 63 | */ |
64 | 64 | protected function _extend_page_config() |
65 | 65 | { |
66 | - $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND . 'transactions'; |
|
66 | + $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND.'transactions'; |
|
67 | 67 | |
68 | 68 | $new_page_routes = array( |
69 | 69 | 'reports' => array( |
@@ -104,7 +104,7 @@ discard block |
||
104 | 104 | { |
105 | 105 | wp_register_script( |
106 | 106 | 'ee-txn-reports-js', |
107 | - TXN_CAF_ASSETS_URL . 'ee-transaction-admin-reports.js', |
|
107 | + TXN_CAF_ASSETS_URL.'ee-transaction-admin-reports.js', |
|
108 | 108 | array('google-charts'), |
109 | 109 | EVENT_ESPRESSO_VERSION, |
110 | 110 | true |
@@ -134,7 +134,7 @@ discard block |
||
134 | 134 | */ |
135 | 135 | protected function _transaction_reports() |
136 | 136 | { |
137 | - $template_path = EE_ADMIN_TEMPLATE . 'admin_reports.template.php'; |
|
137 | + $template_path = EE_ADMIN_TEMPLATE.'admin_reports.template.php'; |
|
138 | 138 | $this->_admin_page_title = __('Transactions', 'event_espresso'); |
139 | 139 | $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
140 | 140 | $this->_reports_template_data, true); |
@@ -160,7 +160,7 @@ discard block |
||
160 | 160 | $TXN = EEM_Transaction::instance(); |
161 | 161 | |
162 | 162 | $results = $TXN->get_revenue_per_day_report($period); |
163 | - $results = (array)$results; |
|
163 | + $results = (array) $results; |
|
164 | 164 | $revenue = array(); |
165 | 165 | $subtitle = ''; |
166 | 166 | |
@@ -170,11 +170,11 @@ discard block |
||
170 | 170 | __('Total Revenue', 'event_espresso') |
171 | 171 | ); |
172 | 172 | foreach ($results as $result) { |
173 | - $revenue[] = array($result->txnDate, (float)$result->revenue); |
|
173 | + $revenue[] = array($result->txnDate, (float) $result->revenue); |
|
174 | 174 | } |
175 | 175 | |
176 | 176 | //setup the date range. |
177 | - $beginning_date = new DateTime('now' . $period, new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
177 | + $beginning_date = new DateTime('now'.$period, new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
178 | 178 | $ending_date = new DateTime('now', new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
179 | 179 | $subtitle = sprintf(_x('For the period: %s to %s', 'Used to give date range', 'event_espresso'), |
180 | 180 | $beginning_date->format('Y-m-d'), $ending_date->format('Y-m-d')); |
@@ -189,7 +189,7 @@ discard block |
||
189 | 189 | 'revenue' => $revenue, |
190 | 190 | 'noResults' => empty($revenue) || count($revenue) === 1, |
191 | 191 | 'noTxnMsg' => sprintf(__('%sThere is no revenue to report for the last 30 days.%s', 'event_espresso'), |
192 | - '<h2>' . $report_title . '</h2><p>', '</p>') |
|
192 | + '<h2>'.$report_title.'</h2><p>', '</p>') |
|
193 | 193 | ); |
194 | 194 | wp_localize_script('ee-txn-reports-js', 'txnRevPerDay', $report_params); |
195 | 195 | |
@@ -212,7 +212,7 @@ discard block |
||
212 | 212 | |
213 | 213 | $TXN = EEM_Transaction::instance(); |
214 | 214 | $results = $TXN->get_revenue_per_event_report($period); |
215 | - $results = (array)$results; |
|
215 | + $results = (array) $results; |
|
216 | 216 | $revenue = array(); |
217 | 217 | $subtitle = ''; |
218 | 218 | |
@@ -225,12 +225,12 @@ discard block |
||
225 | 225 | if ($result->revenue > 1) { |
226 | 226 | $event_name = stripslashes(html_entity_decode($result->event_name, ENT_QUOTES, 'UTF-8')); |
227 | 227 | $event_name = wp_trim_words($event_name, 5, '...'); |
228 | - $revenue[] = array($event_name, (float)$result->revenue); |
|
228 | + $revenue[] = array($event_name, (float) $result->revenue); |
|
229 | 229 | } |
230 | 230 | } |
231 | 231 | |
232 | 232 | //setup the date range. |
233 | - $beginning_date = new DateTime('now' . $period, new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
233 | + $beginning_date = new DateTime('now'.$period, new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
|
234 | 234 | $ending_date = new DateTime('now', new DateTimeZone(EEH_DTT_Helper::get_timezone())); |
235 | 235 | $subtitle = sprintf(_x('For the period: %s to %s', 'Used to give date range', 'event_espresso'), |
236 | 236 | $beginning_date->format('Y-m-d'), $ending_date->format('Y-m-d')); |
@@ -245,7 +245,7 @@ discard block |
||
245 | 245 | 'revenue' => $revenue, |
246 | 246 | 'noResults' => empty($revenue), |
247 | 247 | 'noTxnMsg' => sprintf(__('%sThere is no revenue to report for the last 30 days.%s', 'event_espresso'), |
248 | - '<h2>' . $report_title . '</h2><p>', '</p>') |
|
248 | + '<h2>'.$report_title.'</h2><p>', '</p>') |
|
249 | 249 | ); |
250 | 250 | wp_localize_script('ee-txn-reports-js', 'txnRevPerEvent', $report_params); |
251 | 251 |
@@ -91,7 +91,7 @@ discard block |
||
91 | 91 | * |
92 | 92 | * @param array $dir_ref original array of paths |
93 | 93 | * |
94 | - * @return array appended paths |
|
94 | + * @return string[] appended paths |
|
95 | 95 | */ |
96 | 96 | public function messages_autoload_paths($dir_ref) |
97 | 97 | { |
@@ -701,7 +701,7 @@ discard block |
||
701 | 701 | * @param EE_Question[] $questions An array of questions indexed by answer id. |
702 | 702 | * @param EE_Answer[] $answers An array of answer objects |
703 | 703 | * @param string $template Template content to be parsed. |
704 | - * @param array $valid_shortcodes Valid shortcodes for the template being parsed. |
|
704 | + * @param string[] $valid_shortcodes Valid shortcodes for the template being parsed. |
|
705 | 705 | * @param array $extra_data Extra data that might be used when parsing the template. |
706 | 706 | */ |
707 | 707 | protected function _parse_question_list_for_primary_or_recipient_registration( |
@@ -7,7 +7,7 @@ discard block |
||
7 | 7 | * @since 4.3.2 |
8 | 8 | */ |
9 | 9 | if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
10 | - exit('No direct script access allowed'); |
|
10 | + exit('No direct script access allowed'); |
|
11 | 11 | } |
12 | 12 | |
13 | 13 | /** |
@@ -22,735 +22,735 @@ discard block |
||
22 | 22 | { |
23 | 23 | |
24 | 24 | |
25 | - /** |
|
26 | - * constructor. |
|
27 | - */ |
|
28 | - public function __construct() |
|
29 | - { |
|
30 | - $this->_caf_hooks(); |
|
31 | - } |
|
32 | - |
|
33 | - |
|
34 | - /** |
|
35 | - * Contains all the hooks filters for setting up caffeinated messages functionality. |
|
36 | - * |
|
37 | - * @since 4.3.2 |
|
38 | - * |
|
39 | - * @return void |
|
40 | - */ |
|
41 | - private function _caf_hooks() |
|
42 | - { |
|
43 | - add_filter('FHEE__EED_Messages___set_messages_paths___MSG_PATHS', array($this, 'messages_autoload_paths'), 5); |
|
44 | - add_filter('FHEE__EE_Email_messenger__get_validator_config', array($this, 'email_messenger_validator_config'), |
|
45 | - 5, 2); |
|
46 | - add_filter('FHEE__EE_Email_messenger__get_template_fields', array($this, 'email_messenger_template_fields'), 5, |
|
47 | - 2); |
|
48 | - add_filter('FHEE__EE_Html_messenger__get_template_fields', array($this, 'html_messenger_template_fields'), 5, |
|
49 | - 2); |
|
50 | - add_filter('FHEE__EE_Html_messenger__get_validator_config', array($this, 'html_messenger_validator_config'), 5, |
|
51 | - 2); |
|
52 | - add_filter('FHEE__EE_Pdf_messenger__get_template_fields', array($this, 'pdf_messenger_template_fields'), 5, 2); |
|
53 | - add_filter('FHEE__EE_Pdf_messenger__get_validator_config', array($this, 'pdf_messenger_validator_config'), 5, |
|
54 | - 2); |
|
55 | - add_filter('FHEE__EE_Messages_Template_Pack__get_specific_template__contents', |
|
56 | - array($this, 'new_default_templates'), 5, 7); |
|
57 | - add_filter('FHEE__EE_Messages_Base__get_valid_shortcodes', array($this, 'message_types_valid_shortcodes'), 5, |
|
58 | - 2); |
|
59 | - |
|
60 | - //shortcode parsers |
|
61 | - add_filter('FHEE__EE_Attendee_Shortcodes__shortcodes', array($this, 'additional_attendee_shortcodes'), 5, 2); |
|
62 | - add_filter('FHEE__EE_Attendee_Shortcodes__parser_after', array($this, 'additional_attendee_parser'), 5, 5); |
|
63 | - add_filter('FHEE__EE_Recipient_List_Shortcodes__shortcodes', |
|
64 | - array($this, 'additional_recipient_details_shortcodes'), 5, 2); |
|
65 | - add_filter('FHEE__EE_Recipient_List_Shortcodes__parser_after', |
|
66 | - array($this, 'additional_recipient_details_parser'), 5, 5); |
|
67 | - add_filter('FHEE__EE_Primary_Registration_List_Shortcodes__shortcodes', |
|
68 | - array($this, 'additional_primary_registration_details_shortcodes'), 5, 2); |
|
69 | - add_filter('FHEE__EE_Primary_Registration_List_Shortcodes__parser_after', |
|
70 | - array($this, 'additional_primary_registration_details_parser'), 5, 5); |
|
71 | - |
|
72 | - /** |
|
73 | - * @since 4.2.0 |
|
74 | - */ |
|
75 | - add_filter('FHEE__EE_Datetime_Shortcodes__shortcodes', array($this, 'additional_datetime_shortcodes'), 10, 2); |
|
76 | - add_filter('FHEE__EE_Datetime_Shortcodes__parser_after', array($this, 'additional_datetime_parser'), 10, 5); |
|
77 | - |
|
78 | - /** |
|
79 | - * @since 4.3.0 |
|
80 | - */ |
|
81 | - //eat our own dog food! |
|
82 | - add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_message_types')); |
|
83 | - add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_shortcodes')); |
|
84 | - do_action('EE_Brewing_Regular___messages_caf'); |
|
85 | - } |
|
86 | - |
|
87 | - |
|
88 | - /** |
|
89 | - * This just allows us to add additional paths to the autoloader (EED_Messages::autoload_messages()) for the |
|
90 | - * messages system. |
|
91 | - * |
|
92 | - * @param array $dir_ref original array of paths |
|
93 | - * |
|
94 | - * @return array appended paths |
|
95 | - */ |
|
96 | - public function messages_autoload_paths($dir_ref) |
|
97 | - { |
|
98 | - $dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/'; |
|
99 | - |
|
100 | - return $dir_ref; |
|
101 | - } |
|
102 | - |
|
103 | - |
|
104 | - public function email_messenger_validator_config($validator_config, EE_Email_messenger $messenger) |
|
105 | - { |
|
106 | - $validator_config['attendee_list'] = array( |
|
107 | - 'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'), |
|
108 | - 'required' => array('[ATTENDEE_LIST]') |
|
109 | - ); |
|
110 | - $validator_config['question_list'] = array( |
|
111 | - 'shortcodes' => array('question'), |
|
112 | - 'required' => array('[QUESTION_LIST]') |
|
113 | - ); |
|
114 | - |
|
115 | - return $validator_config; |
|
116 | - } |
|
117 | - |
|
118 | - |
|
119 | - public function html_messenger_validator_config($validator_config, EE_Html_messenger $messenger) |
|
120 | - { |
|
121 | - $validator_config['attendee_list'] = array( |
|
122 | - 'shortcodes' => array('attendee', 'question_list'), |
|
123 | - 'required' => array('[ATTENDEE_LIST]') |
|
124 | - ); |
|
125 | - $validator_config['question_list'] = array( |
|
126 | - 'shortcodes' => array('question'), |
|
127 | - 'required' => array('[QUESTION_LIST]') |
|
128 | - ); |
|
129 | - |
|
130 | - return $validator_config; |
|
131 | - } |
|
132 | - |
|
133 | - |
|
134 | - public function pdf_messenger_validator_config($validator_config, EE_Pdf_messenger $messenger) |
|
135 | - { |
|
136 | - $validator_config['attendee_list'] = array( |
|
137 | - 'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'), |
|
138 | - 'required' => array('[ATTENDEE_LIST]') |
|
139 | - ); |
|
140 | - $validator_config['question_list'] = array( |
|
141 | - 'shortcodes' => array('question'), |
|
142 | - 'required' => array('[QUESTION_LIST]') |
|
143 | - ); |
|
144 | - |
|
145 | - return $validator_config; |
|
146 | - } |
|
147 | - |
|
148 | - |
|
149 | - public function email_messenger_template_fields($template_fields, EE_Email_messenger $messenger) |
|
150 | - { |
|
151 | - $template_fields['extra']['content']['question_list'] = array( |
|
152 | - 'input' => 'textarea', |
|
153 | - 'label' => '[QUESTION_LIST]', |
|
154 | - 'type' => 'string', |
|
155 | - 'required' => true, |
|
156 | - 'validation' => true, |
|
157 | - 'format' => '%s', |
|
158 | - 'css_class' => 'large-text', |
|
159 | - 'rows' => '5', |
|
160 | - 'shortcodes_required' => array('[QUESTION_LIST]') |
|
161 | - ); |
|
162 | - |
|
163 | - return $template_fields; |
|
164 | - } |
|
165 | - |
|
166 | - |
|
167 | - public function html_messenger_template_fields($template_fields, EE_Html_messenger $messenger) |
|
168 | - { |
|
169 | - $template_fields['extra']['content']['question_list'] = array( |
|
170 | - 'input' => 'textarea', |
|
171 | - 'label' => '[QUESTION_LIST]', |
|
172 | - 'type' => 'string', |
|
173 | - 'required' => true, |
|
174 | - 'validation' => true, |
|
175 | - 'format' => '%s', |
|
176 | - 'css_class' => 'large-text', |
|
177 | - 'rows' => '5', |
|
178 | - 'shortcodes_required' => array('[QUESTION_LIST]') |
|
179 | - ); |
|
180 | - |
|
181 | - return $template_fields; |
|
182 | - } |
|
183 | - |
|
184 | - |
|
185 | - public function pdf_messenger_template_fields($template_fields, EE_Pdf_messenger $messenger) |
|
186 | - { |
|
187 | - $template_fields['extra']['content']['question_list'] = array( |
|
188 | - 'input' => 'textarea', |
|
189 | - 'label' => '[QUESTION_LIST]', |
|
190 | - 'type' => 'string', |
|
191 | - 'required' => true, |
|
192 | - 'validation' => true, |
|
193 | - 'format' => '%s', |
|
194 | - 'css_class' => 'large-text', |
|
195 | - 'rows' => '5', |
|
196 | - 'shortcodes_required' => array('[QUESTION_LIST]') |
|
197 | - ); |
|
198 | - |
|
199 | - return $template_fields; |
|
200 | - } |
|
201 | - |
|
202 | - |
|
203 | - public function new_default_templates( |
|
204 | - $contents, |
|
205 | - $actual_path, |
|
206 | - EE_messenger $messenger, |
|
207 | - EE_message_type $message_type, |
|
208 | - $field, |
|
209 | - $context, |
|
210 | - EE_Messages_Template_Pack $template_pack |
|
211 | - ) { |
|
212 | - |
|
213 | - //we're only modifying templates for the default template pack |
|
214 | - if ( ! $template_pack instanceof EE_Messages_Template_Pack_Default) { |
|
215 | - return $contents; |
|
216 | - } |
|
217 | - |
|
218 | - //the template file name we're replacing contents for. |
|
219 | - $template_file_prefix = $field . '_' . $context; |
|
220 | - $msg_prefix = $messenger->name . '_' . $message_type->name . '_'; |
|
221 | - |
|
222 | - $base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/'; |
|
223 | - |
|
224 | - if ($messenger->name == 'email' && $message_type->name == 'registration') { |
|
25 | + /** |
|
26 | + * constructor. |
|
27 | + */ |
|
28 | + public function __construct() |
|
29 | + { |
|
30 | + $this->_caf_hooks(); |
|
31 | + } |
|
32 | + |
|
33 | + |
|
34 | + /** |
|
35 | + * Contains all the hooks filters for setting up caffeinated messages functionality. |
|
36 | + * |
|
37 | + * @since 4.3.2 |
|
38 | + * |
|
39 | + * @return void |
|
40 | + */ |
|
41 | + private function _caf_hooks() |
|
42 | + { |
|
43 | + add_filter('FHEE__EED_Messages___set_messages_paths___MSG_PATHS', array($this, 'messages_autoload_paths'), 5); |
|
44 | + add_filter('FHEE__EE_Email_messenger__get_validator_config', array($this, 'email_messenger_validator_config'), |
|
45 | + 5, 2); |
|
46 | + add_filter('FHEE__EE_Email_messenger__get_template_fields', array($this, 'email_messenger_template_fields'), 5, |
|
47 | + 2); |
|
48 | + add_filter('FHEE__EE_Html_messenger__get_template_fields', array($this, 'html_messenger_template_fields'), 5, |
|
49 | + 2); |
|
50 | + add_filter('FHEE__EE_Html_messenger__get_validator_config', array($this, 'html_messenger_validator_config'), 5, |
|
51 | + 2); |
|
52 | + add_filter('FHEE__EE_Pdf_messenger__get_template_fields', array($this, 'pdf_messenger_template_fields'), 5, 2); |
|
53 | + add_filter('FHEE__EE_Pdf_messenger__get_validator_config', array($this, 'pdf_messenger_validator_config'), 5, |
|
54 | + 2); |
|
55 | + add_filter('FHEE__EE_Messages_Template_Pack__get_specific_template__contents', |
|
56 | + array($this, 'new_default_templates'), 5, 7); |
|
57 | + add_filter('FHEE__EE_Messages_Base__get_valid_shortcodes', array($this, 'message_types_valid_shortcodes'), 5, |
|
58 | + 2); |
|
59 | + |
|
60 | + //shortcode parsers |
|
61 | + add_filter('FHEE__EE_Attendee_Shortcodes__shortcodes', array($this, 'additional_attendee_shortcodes'), 5, 2); |
|
62 | + add_filter('FHEE__EE_Attendee_Shortcodes__parser_after', array($this, 'additional_attendee_parser'), 5, 5); |
|
63 | + add_filter('FHEE__EE_Recipient_List_Shortcodes__shortcodes', |
|
64 | + array($this, 'additional_recipient_details_shortcodes'), 5, 2); |
|
65 | + add_filter('FHEE__EE_Recipient_List_Shortcodes__parser_after', |
|
66 | + array($this, 'additional_recipient_details_parser'), 5, 5); |
|
67 | + add_filter('FHEE__EE_Primary_Registration_List_Shortcodes__shortcodes', |
|
68 | + array($this, 'additional_primary_registration_details_shortcodes'), 5, 2); |
|
69 | + add_filter('FHEE__EE_Primary_Registration_List_Shortcodes__parser_after', |
|
70 | + array($this, 'additional_primary_registration_details_parser'), 5, 5); |
|
71 | + |
|
72 | + /** |
|
73 | + * @since 4.2.0 |
|
74 | + */ |
|
75 | + add_filter('FHEE__EE_Datetime_Shortcodes__shortcodes', array($this, 'additional_datetime_shortcodes'), 10, 2); |
|
76 | + add_filter('FHEE__EE_Datetime_Shortcodes__parser_after', array($this, 'additional_datetime_parser'), 10, 5); |
|
77 | + |
|
78 | + /** |
|
79 | + * @since 4.3.0 |
|
80 | + */ |
|
81 | + //eat our own dog food! |
|
82 | + add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_message_types')); |
|
83 | + add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_shortcodes')); |
|
84 | + do_action('EE_Brewing_Regular___messages_caf'); |
|
85 | + } |
|
86 | + |
|
87 | + |
|
88 | + /** |
|
89 | + * This just allows us to add additional paths to the autoloader (EED_Messages::autoload_messages()) for the |
|
90 | + * messages system. |
|
91 | + * |
|
92 | + * @param array $dir_ref original array of paths |
|
93 | + * |
|
94 | + * @return array appended paths |
|
95 | + */ |
|
96 | + public function messages_autoload_paths($dir_ref) |
|
97 | + { |
|
98 | + $dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/'; |
|
99 | + |
|
100 | + return $dir_ref; |
|
101 | + } |
|
102 | + |
|
103 | + |
|
104 | + public function email_messenger_validator_config($validator_config, EE_Email_messenger $messenger) |
|
105 | + { |
|
106 | + $validator_config['attendee_list'] = array( |
|
107 | + 'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'), |
|
108 | + 'required' => array('[ATTENDEE_LIST]') |
|
109 | + ); |
|
110 | + $validator_config['question_list'] = array( |
|
111 | + 'shortcodes' => array('question'), |
|
112 | + 'required' => array('[QUESTION_LIST]') |
|
113 | + ); |
|
114 | + |
|
115 | + return $validator_config; |
|
116 | + } |
|
117 | + |
|
118 | + |
|
119 | + public function html_messenger_validator_config($validator_config, EE_Html_messenger $messenger) |
|
120 | + { |
|
121 | + $validator_config['attendee_list'] = array( |
|
122 | + 'shortcodes' => array('attendee', 'question_list'), |
|
123 | + 'required' => array('[ATTENDEE_LIST]') |
|
124 | + ); |
|
125 | + $validator_config['question_list'] = array( |
|
126 | + 'shortcodes' => array('question'), |
|
127 | + 'required' => array('[QUESTION_LIST]') |
|
128 | + ); |
|
129 | + |
|
130 | + return $validator_config; |
|
131 | + } |
|
132 | + |
|
133 | + |
|
134 | + public function pdf_messenger_validator_config($validator_config, EE_Pdf_messenger $messenger) |
|
135 | + { |
|
136 | + $validator_config['attendee_list'] = array( |
|
137 | + 'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'), |
|
138 | + 'required' => array('[ATTENDEE_LIST]') |
|
139 | + ); |
|
140 | + $validator_config['question_list'] = array( |
|
141 | + 'shortcodes' => array('question'), |
|
142 | + 'required' => array('[QUESTION_LIST]') |
|
143 | + ); |
|
144 | + |
|
145 | + return $validator_config; |
|
146 | + } |
|
147 | + |
|
148 | + |
|
149 | + public function email_messenger_template_fields($template_fields, EE_Email_messenger $messenger) |
|
150 | + { |
|
151 | + $template_fields['extra']['content']['question_list'] = array( |
|
152 | + 'input' => 'textarea', |
|
153 | + 'label' => '[QUESTION_LIST]', |
|
154 | + 'type' => 'string', |
|
155 | + 'required' => true, |
|
156 | + 'validation' => true, |
|
157 | + 'format' => '%s', |
|
158 | + 'css_class' => 'large-text', |
|
159 | + 'rows' => '5', |
|
160 | + 'shortcodes_required' => array('[QUESTION_LIST]') |
|
161 | + ); |
|
162 | + |
|
163 | + return $template_fields; |
|
164 | + } |
|
165 | + |
|
166 | + |
|
167 | + public function html_messenger_template_fields($template_fields, EE_Html_messenger $messenger) |
|
168 | + { |
|
169 | + $template_fields['extra']['content']['question_list'] = array( |
|
170 | + 'input' => 'textarea', |
|
171 | + 'label' => '[QUESTION_LIST]', |
|
172 | + 'type' => 'string', |
|
173 | + 'required' => true, |
|
174 | + 'validation' => true, |
|
175 | + 'format' => '%s', |
|
176 | + 'css_class' => 'large-text', |
|
177 | + 'rows' => '5', |
|
178 | + 'shortcodes_required' => array('[QUESTION_LIST]') |
|
179 | + ); |
|
180 | + |
|
181 | + return $template_fields; |
|
182 | + } |
|
183 | + |
|
184 | + |
|
185 | + public function pdf_messenger_template_fields($template_fields, EE_Pdf_messenger $messenger) |
|
186 | + { |
|
187 | + $template_fields['extra']['content']['question_list'] = array( |
|
188 | + 'input' => 'textarea', |
|
189 | + 'label' => '[QUESTION_LIST]', |
|
190 | + 'type' => 'string', |
|
191 | + 'required' => true, |
|
192 | + 'validation' => true, |
|
193 | + 'format' => '%s', |
|
194 | + 'css_class' => 'large-text', |
|
195 | + 'rows' => '5', |
|
196 | + 'shortcodes_required' => array('[QUESTION_LIST]') |
|
197 | + ); |
|
198 | + |
|
199 | + return $template_fields; |
|
200 | + } |
|
201 | + |
|
202 | + |
|
203 | + public function new_default_templates( |
|
204 | + $contents, |
|
205 | + $actual_path, |
|
206 | + EE_messenger $messenger, |
|
207 | + EE_message_type $message_type, |
|
208 | + $field, |
|
209 | + $context, |
|
210 | + EE_Messages_Template_Pack $template_pack |
|
211 | + ) { |
|
212 | + |
|
213 | + //we're only modifying templates for the default template pack |
|
214 | + if ( ! $template_pack instanceof EE_Messages_Template_Pack_Default) { |
|
215 | + return $contents; |
|
216 | + } |
|
217 | + |
|
218 | + //the template file name we're replacing contents for. |
|
219 | + $template_file_prefix = $field . '_' . $context; |
|
220 | + $msg_prefix = $messenger->name . '_' . $message_type->name . '_'; |
|
221 | + |
|
222 | + $base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/'; |
|
223 | + |
|
224 | + if ($messenger->name == 'email' && $message_type->name == 'registration') { |
|
225 | 225 | |
226 | - switch ($template_file_prefix) { |
|
226 | + switch ($template_file_prefix) { |
|
227 | 227 | |
228 | - case 'question_list_admin' : |
|
229 | - case 'question_list_attendee' : |
|
230 | - case 'question_list_primary_attendee' : |
|
231 | - $path = $base_path . $msg_prefix . 'question_list.template.php'; |
|
232 | - $contents = EEH_Template::display_template($path, array(), true); |
|
233 | - break; |
|
228 | + case 'question_list_admin' : |
|
229 | + case 'question_list_attendee' : |
|
230 | + case 'question_list_primary_attendee' : |
|
231 | + $path = $base_path . $msg_prefix . 'question_list.template.php'; |
|
232 | + $contents = EEH_Template::display_template($path, array(), true); |
|
233 | + break; |
|
234 | 234 | |
235 | - case 'attendee_list_primary_attendee' : |
|
236 | - $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
237 | - $contents = EEH_Template::display_template($path, array(), true); |
|
238 | - break; |
|
235 | + case 'attendee_list_primary_attendee' : |
|
236 | + $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
237 | + $contents = EEH_Template::display_template($path, array(), true); |
|
238 | + break; |
|
239 | 239 | |
240 | - case 'attendee_list_admin' : |
|
241 | - $path = $base_path . $msg_prefix . 'attendee_list_admin.template.php'; |
|
242 | - $contents = EEH_Template::display_template($path, |
|
243 | - array(), true); |
|
244 | - break; |
|
240 | + case 'attendee_list_admin' : |
|
241 | + $path = $base_path . $msg_prefix . 'attendee_list_admin.template.php'; |
|
242 | + $contents = EEH_Template::display_template($path, |
|
243 | + array(), true); |
|
244 | + break; |
|
245 | 245 | |
246 | - case 'attendee_list_attendee' : |
|
247 | - $contents = ''; |
|
248 | - break; |
|
246 | + case 'attendee_list_attendee' : |
|
247 | + $contents = ''; |
|
248 | + break; |
|
249 | 249 | |
250 | - case 'event_list_attendee' : |
|
251 | - $path = $base_path . $msg_prefix . 'event_list_attendee.template.php'; |
|
252 | - $contents = EEH_Template::display_template($path, array(), true); |
|
253 | - break; |
|
254 | - } |
|
255 | - } elseif ($messenger->name == 'email' && $message_type->name == 'newsletter') { |
|
256 | - switch ($template_file_prefix) { |
|
250 | + case 'event_list_attendee' : |
|
251 | + $path = $base_path . $msg_prefix . 'event_list_attendee.template.php'; |
|
252 | + $contents = EEH_Template::display_template($path, array(), true); |
|
253 | + break; |
|
254 | + } |
|
255 | + } elseif ($messenger->name == 'email' && $message_type->name == 'newsletter') { |
|
256 | + switch ($template_file_prefix) { |
|
257 | 257 | |
258 | - case 'content_attendee' : |
|
259 | - $path = $base_path . $msg_prefix . 'content.template.php'; |
|
260 | - $contents = EEH_Template::display_template($path, array(), true); |
|
261 | - break; |
|
258 | + case 'content_attendee' : |
|
259 | + $path = $base_path . $msg_prefix . 'content.template.php'; |
|
260 | + $contents = EEH_Template::display_template($path, array(), true); |
|
261 | + break; |
|
262 | 262 | |
263 | - case 'newsletter_content_attendee' : |
|
264 | - $path = $base_path . $msg_prefix . 'newsletter_content.template.php'; |
|
265 | - $contents = EEH_Template::display_template($path, array(), true); |
|
266 | - break; |
|
263 | + case 'newsletter_content_attendee' : |
|
264 | + $path = $base_path . $msg_prefix . 'newsletter_content.template.php'; |
|
265 | + $contents = EEH_Template::display_template($path, array(), true); |
|
266 | + break; |
|
267 | 267 | |
268 | - case 'newsletter_subject_attendee' : |
|
269 | - $path = $base_path . $msg_prefix . 'subject.template.php'; |
|
270 | - $contents = EEH_Template::display_template($path, array(), true); |
|
271 | - break; |
|
272 | - } |
|
273 | - } elseif ($messenger->name == 'html' && $message_type->name == 'receipt') { |
|
274 | - switch ($template_file_prefix) { |
|
275 | - case 'attendee_list_purchaser' : |
|
276 | - $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
277 | - $contents = EEH_Template::display_template($path, array(), true); |
|
278 | - break; |
|
279 | - } |
|
280 | - } |
|
281 | - |
|
282 | - return $contents; |
|
283 | - |
|
284 | - } |
|
285 | - |
|
286 | - |
|
287 | - public function message_types_valid_shortcodes($valid_shortcodes, EE_Messages_Base $msg) |
|
288 | - { |
|
289 | - //make sure question_list and question are ONLY added for the core message types. Any other message types will have to explicitly set question_list as a valid shortcode. |
|
290 | - $include_with = array( |
|
291 | - 'registration', |
|
292 | - 'cancelled_registration', |
|
293 | - 'declined_registration', |
|
294 | - 'not_approved_registration', |
|
295 | - 'payment_declined', |
|
296 | - 'payment_failed', |
|
297 | - 'payment_cancelled', |
|
298 | - 'payment', |
|
299 | - 'payment_reminder', |
|
300 | - 'pending_approval', |
|
301 | - 'registration_summary', |
|
302 | - 'invoice', |
|
303 | - 'receipt' |
|
304 | - ); |
|
305 | - if ($msg instanceof EE_message_type && in_array($msg->name, $include_with)) { |
|
306 | - $contexts = array_keys($msg->get_contexts()); |
|
307 | - foreach ($contexts as $context) { |
|
308 | - $valid_shortcodes[$context][] = 'question_list'; |
|
309 | - $valid_shortcodes[$context][] = 'question'; |
|
310 | - } |
|
311 | - } |
|
312 | - |
|
313 | - return $valid_shortcodes; |
|
314 | - } |
|
315 | - |
|
316 | - |
|
317 | - public function additional_attendee_shortcodes($shortcodes, $shortcode_parser) |
|
318 | - { |
|
319 | - $shortcodes['[ANSWER_*]'] = __('This is a special dynamic shortcode. Right after the "*", add the exact text of a existing question, and if there is an answer for that question for this registrant, that will take the place of this shortcode.', |
|
320 | - 'event_espresso'); |
|
321 | - |
|
322 | - return $shortcodes; |
|
323 | - } |
|
324 | - |
|
325 | - |
|
326 | - public function additional_attendee_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
327 | - { |
|
328 | - |
|
329 | - if (strpos($shortcode, |
|
330 | - '[ANSWER_*') === false || ! isset($extra_data['data']->questions) || ! isset($extra_data['data']->registrations) |
|
331 | - ) { |
|
332 | - return $parsed; |
|
333 | - } |
|
334 | - |
|
335 | - //let's get the question from the code. |
|
336 | - $shortcode = str_replace('[ANSWER_*', '', $shortcode); |
|
337 | - $shortcode = trim(str_replace(']', '', $shortcode)); |
|
338 | - |
|
339 | - $registration = $data instanceof EE_Registration ? $data : null; |
|
340 | - $registration = ! $registration instanceof EE_Registration && is_array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Registration ? $extra_data['data'] : $registration; |
|
341 | - |
|
342 | - $aee = $data instanceof EE_Messages_Addressee ? $data : null; |
|
343 | - $aee = ! $aee instanceof EE_Messages_Addressee && is_array($extra_data) && isset($extra_data['data']) ? $extra_data['data'] : $aee; |
|
344 | - |
|
345 | - if ( ! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) { |
|
346 | - return $parsed; |
|
347 | - } |
|
348 | - |
|
349 | - //now let's figure out which question has this text. |
|
350 | - foreach ($aee->questions as $ansid => $question) { |
|
351 | - if ( |
|
352 | - $question instanceof EE_Question |
|
353 | - && trim($question->display_text()) == trim($shortcode) |
|
354 | - && isset($aee->registrations[$registration->ID()]['ans_objs'][$ansid]) |
|
355 | - ) { |
|
356 | - return $aee->registrations[$registration->ID()]['ans_objs'][$ansid]->get_pretty('ANS_value', |
|
357 | - 'no_wpautop'); |
|
358 | - } |
|
359 | - } |
|
360 | - |
|
361 | - //nothing! |
|
362 | - return $parsed; |
|
363 | - } |
|
364 | - |
|
365 | - |
|
366 | - /** |
|
367 | - * Callback for additional shortcodes filter for adding additional datetime shortcodes. |
|
368 | - * |
|
369 | - * @since 4.2 |
|
370 | - * |
|
371 | - * @param array $shortcodes array of shortcodes and |
|
372 | - * descriptions |
|
373 | - * @param EE_Datetime_Shortcodes $shortcode_parser EE_Shortcodes object |
|
374 | - * |
|
375 | - * @return array array of shortcodes and |
|
376 | - * descriptions |
|
377 | - */ |
|
378 | - public function additional_datetime_shortcodes($shortcodes, $shortcode_parser) |
|
379 | - { |
|
380 | - $shortcodes['[DTT_NAME]'] = __('This will be parsed to the Title given for a Datetime', |
|
381 | - 'event_espresso'); |
|
382 | - $shortcodes['[DTT_DESCRIPTION]'] = __('This will be parsed to the description for a Datetime', |
|
383 | - 'event_espresso'); |
|
384 | - $shortcodes['[DTT_NAME_OR_DATES]'] = __('When parsed, if the Datetime has a name, it is used, otherwise a formatted string including the start date and end date will be used.', |
|
385 | - 'event_espresso'); |
|
386 | - |
|
387 | - return $shortcodes; |
|
388 | - } |
|
389 | - |
|
390 | - |
|
391 | - /** |
|
392 | - * Callback for additional shortcodes parser filter used for adding parser for new |
|
393 | - * Datetime shortcodes |
|
394 | - * |
|
395 | - * @since 4.2 |
|
396 | - * |
|
397 | - * @param string $parsed The finished parsed string for the given shortcode. |
|
398 | - * @param string $shortcode The shortcode being parsed. |
|
399 | - * @param object $data The incoming data object for the Shortcode Parser. |
|
400 | - * @param object $extra_data The incoming extra date object for the Shortcode |
|
401 | - * Parser. |
|
402 | - * @param EE_Datetime_Shortcodes $shortcode_parser |
|
403 | - * |
|
404 | - * @return string The new parsed string. |
|
405 | - */ |
|
406 | - public function additional_datetime_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
407 | - { |
|
408 | - |
|
409 | - if ( ! $data instanceof EE_Datetime) { |
|
410 | - return ''; //get out because we can only parse with the datetime object. |
|
411 | - } |
|
412 | - |
|
413 | - switch ($shortcode) { |
|
414 | - case '[DTT_NAME]' : |
|
415 | - return $data->name(); |
|
416 | - break; |
|
417 | - case '[DTT_DESCRIPTION]' : |
|
418 | - return $data->description(); |
|
419 | - break; |
|
420 | - case '[DTT_NAME_OR_DATES]' : |
|
421 | - return $data->get_dtt_display_name(true); |
|
422 | - break; |
|
423 | - default : |
|
424 | - return $parsed; |
|
425 | - break; |
|
426 | - } |
|
427 | - } |
|
428 | - |
|
429 | - |
|
430 | - public function additional_recipient_details_shortcodes($shortcodes, $shortcode_parser) |
|
431 | - { |
|
432 | - $shortcodes['[RECIPIENT_QUESTION_LIST]'] = __('This is used to indicate where you want the list of questions and answers to show for the person receiving the message.', |
|
433 | - 'event_espresso'); |
|
434 | - |
|
435 | - return $shortcodes; |
|
436 | - } |
|
437 | - |
|
438 | - |
|
439 | - /** |
|
440 | - * Callback for FHEE__EE_Recipient_List_Shortcodes__parser_after filter (dynamic filter). |
|
441 | - * |
|
442 | - * @param string $parsed The original parsed content for the shortcode |
|
443 | - * @param string $shortcode The shortcode being parsed |
|
444 | - * @param array $data The shortcode parser data array |
|
445 | - * @param array $extra_data The shortcode parser extra data array |
|
446 | - * @param \EE_Shortcodes $shortcode_parser Shortcode parser. |
|
447 | - * |
|
448 | - * @return string |
|
449 | - */ |
|
450 | - public function additional_recipient_details_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
451 | - { |
|
452 | - |
|
453 | - if (array($data) && ! isset($data['data'])) { |
|
454 | - return $parsed; |
|
455 | - } |
|
456 | - |
|
457 | - $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
|
458 | - $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
|
459 | - |
|
460 | - if ( ! $recipient instanceof EE_Messages_Addressee) { |
|
461 | - return $parsed; |
|
462 | - } |
|
463 | - |
|
464 | - switch ($shortcode) { |
|
465 | - case '[RECIPIENT_QUESTION_LIST]' : |
|
466 | - $att = $recipient->att_obj; |
|
467 | - $registrations_on_attendee = $att instanceof EE_Attendee ? $recipient->attendees[$att->ID()]['reg_objs'] : array(); |
|
468 | - $registrations_on_attendee = empty($registrations_on_attendee) && $recipient->reg_obj instanceof EE_Registration ? array($recipient->reg_obj) : $registrations_on_attendee; |
|
469 | - $answers = array(); |
|
268 | + case 'newsletter_subject_attendee' : |
|
269 | + $path = $base_path . $msg_prefix . 'subject.template.php'; |
|
270 | + $contents = EEH_Template::display_template($path, array(), true); |
|
271 | + break; |
|
272 | + } |
|
273 | + } elseif ($messenger->name == 'html' && $message_type->name == 'receipt') { |
|
274 | + switch ($template_file_prefix) { |
|
275 | + case 'attendee_list_purchaser' : |
|
276 | + $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
277 | + $contents = EEH_Template::display_template($path, array(), true); |
|
278 | + break; |
|
279 | + } |
|
280 | + } |
|
281 | + |
|
282 | + return $contents; |
|
283 | + |
|
284 | + } |
|
285 | + |
|
286 | + |
|
287 | + public function message_types_valid_shortcodes($valid_shortcodes, EE_Messages_Base $msg) |
|
288 | + { |
|
289 | + //make sure question_list and question are ONLY added for the core message types. Any other message types will have to explicitly set question_list as a valid shortcode. |
|
290 | + $include_with = array( |
|
291 | + 'registration', |
|
292 | + 'cancelled_registration', |
|
293 | + 'declined_registration', |
|
294 | + 'not_approved_registration', |
|
295 | + 'payment_declined', |
|
296 | + 'payment_failed', |
|
297 | + 'payment_cancelled', |
|
298 | + 'payment', |
|
299 | + 'payment_reminder', |
|
300 | + 'pending_approval', |
|
301 | + 'registration_summary', |
|
302 | + 'invoice', |
|
303 | + 'receipt' |
|
304 | + ); |
|
305 | + if ($msg instanceof EE_message_type && in_array($msg->name, $include_with)) { |
|
306 | + $contexts = array_keys($msg->get_contexts()); |
|
307 | + foreach ($contexts as $context) { |
|
308 | + $valid_shortcodes[$context][] = 'question_list'; |
|
309 | + $valid_shortcodes[$context][] = 'question'; |
|
310 | + } |
|
311 | + } |
|
312 | + |
|
313 | + return $valid_shortcodes; |
|
314 | + } |
|
315 | + |
|
316 | + |
|
317 | + public function additional_attendee_shortcodes($shortcodes, $shortcode_parser) |
|
318 | + { |
|
319 | + $shortcodes['[ANSWER_*]'] = __('This is a special dynamic shortcode. Right after the "*", add the exact text of a existing question, and if there is an answer for that question for this registrant, that will take the place of this shortcode.', |
|
320 | + 'event_espresso'); |
|
321 | + |
|
322 | + return $shortcodes; |
|
323 | + } |
|
324 | + |
|
325 | + |
|
326 | + public function additional_attendee_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
327 | + { |
|
328 | + |
|
329 | + if (strpos($shortcode, |
|
330 | + '[ANSWER_*') === false || ! isset($extra_data['data']->questions) || ! isset($extra_data['data']->registrations) |
|
331 | + ) { |
|
332 | + return $parsed; |
|
333 | + } |
|
334 | + |
|
335 | + //let's get the question from the code. |
|
336 | + $shortcode = str_replace('[ANSWER_*', '', $shortcode); |
|
337 | + $shortcode = trim(str_replace(']', '', $shortcode)); |
|
338 | + |
|
339 | + $registration = $data instanceof EE_Registration ? $data : null; |
|
340 | + $registration = ! $registration instanceof EE_Registration && is_array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Registration ? $extra_data['data'] : $registration; |
|
341 | + |
|
342 | + $aee = $data instanceof EE_Messages_Addressee ? $data : null; |
|
343 | + $aee = ! $aee instanceof EE_Messages_Addressee && is_array($extra_data) && isset($extra_data['data']) ? $extra_data['data'] : $aee; |
|
344 | + |
|
345 | + if ( ! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) { |
|
346 | + return $parsed; |
|
347 | + } |
|
348 | + |
|
349 | + //now let's figure out which question has this text. |
|
350 | + foreach ($aee->questions as $ansid => $question) { |
|
351 | + if ( |
|
352 | + $question instanceof EE_Question |
|
353 | + && trim($question->display_text()) == trim($shortcode) |
|
354 | + && isset($aee->registrations[$registration->ID()]['ans_objs'][$ansid]) |
|
355 | + ) { |
|
356 | + return $aee->registrations[$registration->ID()]['ans_objs'][$ansid]->get_pretty('ANS_value', |
|
357 | + 'no_wpautop'); |
|
358 | + } |
|
359 | + } |
|
360 | + |
|
361 | + //nothing! |
|
362 | + return $parsed; |
|
363 | + } |
|
364 | + |
|
365 | + |
|
366 | + /** |
|
367 | + * Callback for additional shortcodes filter for adding additional datetime shortcodes. |
|
368 | + * |
|
369 | + * @since 4.2 |
|
370 | + * |
|
371 | + * @param array $shortcodes array of shortcodes and |
|
372 | + * descriptions |
|
373 | + * @param EE_Datetime_Shortcodes $shortcode_parser EE_Shortcodes object |
|
374 | + * |
|
375 | + * @return array array of shortcodes and |
|
376 | + * descriptions |
|
377 | + */ |
|
378 | + public function additional_datetime_shortcodes($shortcodes, $shortcode_parser) |
|
379 | + { |
|
380 | + $shortcodes['[DTT_NAME]'] = __('This will be parsed to the Title given for a Datetime', |
|
381 | + 'event_espresso'); |
|
382 | + $shortcodes['[DTT_DESCRIPTION]'] = __('This will be parsed to the description for a Datetime', |
|
383 | + 'event_espresso'); |
|
384 | + $shortcodes['[DTT_NAME_OR_DATES]'] = __('When parsed, if the Datetime has a name, it is used, otherwise a formatted string including the start date and end date will be used.', |
|
385 | + 'event_espresso'); |
|
386 | + |
|
387 | + return $shortcodes; |
|
388 | + } |
|
389 | + |
|
390 | + |
|
391 | + /** |
|
392 | + * Callback for additional shortcodes parser filter used for adding parser for new |
|
393 | + * Datetime shortcodes |
|
394 | + * |
|
395 | + * @since 4.2 |
|
396 | + * |
|
397 | + * @param string $parsed The finished parsed string for the given shortcode. |
|
398 | + * @param string $shortcode The shortcode being parsed. |
|
399 | + * @param object $data The incoming data object for the Shortcode Parser. |
|
400 | + * @param object $extra_data The incoming extra date object for the Shortcode |
|
401 | + * Parser. |
|
402 | + * @param EE_Datetime_Shortcodes $shortcode_parser |
|
403 | + * |
|
404 | + * @return string The new parsed string. |
|
405 | + */ |
|
406 | + public function additional_datetime_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
407 | + { |
|
408 | + |
|
409 | + if ( ! $data instanceof EE_Datetime) { |
|
410 | + return ''; //get out because we can only parse with the datetime object. |
|
411 | + } |
|
412 | + |
|
413 | + switch ($shortcode) { |
|
414 | + case '[DTT_NAME]' : |
|
415 | + return $data->name(); |
|
416 | + break; |
|
417 | + case '[DTT_DESCRIPTION]' : |
|
418 | + return $data->description(); |
|
419 | + break; |
|
420 | + case '[DTT_NAME_OR_DATES]' : |
|
421 | + return $data->get_dtt_display_name(true); |
|
422 | + break; |
|
423 | + default : |
|
424 | + return $parsed; |
|
425 | + break; |
|
426 | + } |
|
427 | + } |
|
428 | + |
|
429 | + |
|
430 | + public function additional_recipient_details_shortcodes($shortcodes, $shortcode_parser) |
|
431 | + { |
|
432 | + $shortcodes['[RECIPIENT_QUESTION_LIST]'] = __('This is used to indicate where you want the list of questions and answers to show for the person receiving the message.', |
|
433 | + 'event_espresso'); |
|
434 | + |
|
435 | + return $shortcodes; |
|
436 | + } |
|
437 | + |
|
438 | + |
|
439 | + /** |
|
440 | + * Callback for FHEE__EE_Recipient_List_Shortcodes__parser_after filter (dynamic filter). |
|
441 | + * |
|
442 | + * @param string $parsed The original parsed content for the shortcode |
|
443 | + * @param string $shortcode The shortcode being parsed |
|
444 | + * @param array $data The shortcode parser data array |
|
445 | + * @param array $extra_data The shortcode parser extra data array |
|
446 | + * @param \EE_Shortcodes $shortcode_parser Shortcode parser. |
|
447 | + * |
|
448 | + * @return string |
|
449 | + */ |
|
450 | + public function additional_recipient_details_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
451 | + { |
|
452 | + |
|
453 | + if (array($data) && ! isset($data['data'])) { |
|
454 | + return $parsed; |
|
455 | + } |
|
456 | + |
|
457 | + $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
|
458 | + $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
|
459 | + |
|
460 | + if ( ! $recipient instanceof EE_Messages_Addressee) { |
|
461 | + return $parsed; |
|
462 | + } |
|
463 | + |
|
464 | + switch ($shortcode) { |
|
465 | + case '[RECIPIENT_QUESTION_LIST]' : |
|
466 | + $att = $recipient->att_obj; |
|
467 | + $registrations_on_attendee = $att instanceof EE_Attendee ? $recipient->attendees[$att->ID()]['reg_objs'] : array(); |
|
468 | + $registrations_on_attendee = empty($registrations_on_attendee) && $recipient->reg_obj instanceof EE_Registration ? array($recipient->reg_obj) : $registrations_on_attendee; |
|
469 | + $answers = array(); |
|
470 | 470 | |
471 | - $template = is_array($data['template']) && isset($data['template']['question_list']) ? $data['template']['question_list'] : $extra_data['template']['question_list']; |
|
472 | - $valid_shortcodes = array('question'); |
|
471 | + $template = is_array($data['template']) && isset($data['template']['question_list']) ? $data['template']['question_list'] : $extra_data['template']['question_list']; |
|
472 | + $valid_shortcodes = array('question'); |
|
473 | 473 | |
474 | - //if the context is main_content then get all answers for all registrations on this attendee |
|
475 | - if ($data['data'] instanceof EE_Messages_Addressee) { |
|
474 | + //if the context is main_content then get all answers for all registrations on this attendee |
|
475 | + if ($data['data'] instanceof EE_Messages_Addressee) { |
|
476 | 476 | |
477 | - foreach ($registrations_on_attendee as $reg) { |
|
478 | - if ($reg instanceof EE_Registration) { |
|
479 | - $anss = ! empty($recipient->registrations[$reg->ID()]['ans_objs']) ? $recipient->registrations[$reg->ID()]['ans_objs'] : array(); |
|
480 | - foreach ($anss as $ans) { |
|
481 | - if ($ans instanceof EE_Answer) { |
|
482 | - $answers[$ans->ID()] = $ans; |
|
483 | - } |
|
484 | - } |
|
485 | - } |
|
486 | - } |
|
487 | - } |
|
477 | + foreach ($registrations_on_attendee as $reg) { |
|
478 | + if ($reg instanceof EE_Registration) { |
|
479 | + $anss = ! empty($recipient->registrations[$reg->ID()]['ans_objs']) ? $recipient->registrations[$reg->ID()]['ans_objs'] : array(); |
|
480 | + foreach ($anss as $ans) { |
|
481 | + if ($ans instanceof EE_Answer) { |
|
482 | + $answers[$ans->ID()] = $ans; |
|
483 | + } |
|
484 | + } |
|
485 | + } |
|
486 | + } |
|
487 | + } |
|
488 | 488 | |
489 | - //if the context is the event list parser, then let's return just the answers for all registrations attached to the recipient for that event. |
|
490 | - if ($data['data'] instanceof EE_Event) { |
|
491 | - $event = $data['data']; |
|
492 | - foreach ($registrations_on_attendee as $reg) { |
|
493 | - if ($reg instanceof EE_Registration && $reg->event_ID() == $event->ID()) { |
|
494 | - $anss = ! empty($recipient->registrations[$reg->ID()]['ans_objs']) ? $recipient->registrations[$reg->ID()]['ans_objs'] : array(); |
|
495 | - foreach ($anss as $ans) { |
|
496 | - if ($ans instanceof EE_Answer) { |
|
497 | - $answers[$ans->ID()] = $ans; |
|
498 | - } |
|
499 | - } |
|
500 | - } |
|
501 | - } |
|
502 | - } |
|
489 | + //if the context is the event list parser, then let's return just the answers for all registrations attached to the recipient for that event. |
|
490 | + if ($data['data'] instanceof EE_Event) { |
|
491 | + $event = $data['data']; |
|
492 | + foreach ($registrations_on_attendee as $reg) { |
|
493 | + if ($reg instanceof EE_Registration && $reg->event_ID() == $event->ID()) { |
|
494 | + $anss = ! empty($recipient->registrations[$reg->ID()]['ans_objs']) ? $recipient->registrations[$reg->ID()]['ans_objs'] : array(); |
|
495 | + foreach ($anss as $ans) { |
|
496 | + if ($ans instanceof EE_Answer) { |
|
497 | + $answers[$ans->ID()] = $ans; |
|
498 | + } |
|
499 | + } |
|
500 | + } |
|
501 | + } |
|
502 | + } |
|
503 | 503 | |
504 | - $questions = $questions = isset($recipient->questions) ? $recipient->questions : array(); |
|
504 | + $questions = $questions = isset($recipient->questions) ? $recipient->questions : array(); |
|
505 | 505 | |
506 | - //if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
|
507 | - //object on it. |
|
508 | - if ( ! isset( $extra_data['data'] ) ) { |
|
509 | - $extra_data['data'] = $recipient; |
|
510 | - } |
|
506 | + //if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
|
507 | + //object on it. |
|
508 | + if ( ! isset( $extra_data['data'] ) ) { |
|
509 | + $extra_data['data'] = $recipient; |
|
510 | + } |
|
511 | 511 | |
512 | - return $this->_parse_question_list_for_primary_or_recipient_registration( |
|
513 | - $shortcode_parser, |
|
514 | - $questions, |
|
515 | - $answers, |
|
516 | - $template, |
|
517 | - $valid_shortcodes, |
|
518 | - $extra_data |
|
519 | - ); |
|
520 | - break; |
|
512 | + return $this->_parse_question_list_for_primary_or_recipient_registration( |
|
513 | + $shortcode_parser, |
|
514 | + $questions, |
|
515 | + $answers, |
|
516 | + $template, |
|
517 | + $valid_shortcodes, |
|
518 | + $extra_data |
|
519 | + ); |
|
520 | + break; |
|
521 | 521 | |
522 | - default : |
|
523 | - return $parsed; |
|
524 | - break; |
|
525 | - } |
|
526 | - } |
|
527 | - |
|
528 | - |
|
529 | - public function additional_primary_registration_details_shortcodes($shortcodes, $shortcode_parser) |
|
530 | - { |
|
531 | - $shortcodes['[PRIMARY_REGISTRANT_QUESTION_LIST]'] = __('This is used to indicate the questions and answers for the primary_registrant. It should be placed in the "[attendee_list]" field', |
|
532 | - 'event_espresso'); |
|
533 | - |
|
534 | - return $shortcodes; |
|
535 | - } |
|
536 | - |
|
537 | - |
|
538 | - /** |
|
539 | - * Callback for FHEE__EE_Primary_Registration_List_Shortcodes__parser_after filter (dynamic filter). |
|
540 | - * |
|
541 | - * @param string $parsed The original parsed content for the shortcode |
|
542 | - * @param string $shortcode The shortcode being parsed |
|
543 | - * @param array $data The shortcode parser data array |
|
544 | - * @param array $extra_data The shortcode parser extra data array |
|
545 | - * @param \EE_Shortcodes $shortcode_parser Shortcode parser. |
|
546 | - * |
|
547 | - * @return string |
|
548 | - */ |
|
549 | - public function additional_primary_registration_details_parser( |
|
550 | - $parsed, |
|
551 | - $shortcode, |
|
552 | - $data, |
|
553 | - $extra_data, |
|
554 | - $shortcode_parser |
|
555 | - ) { |
|
556 | - if (array($data) && ! isset($data['data'])) { |
|
557 | - return $parsed; |
|
558 | - } |
|
559 | - |
|
560 | - $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
|
561 | - $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
|
562 | - |
|
563 | - if ( ! $recipient instanceof EE_Messages_Addressee) { |
|
564 | - return $parsed; |
|
565 | - } |
|
566 | - |
|
567 | - switch ($shortcode) { |
|
568 | - case '[PRIMARY_REGISTRANT_QUESTION_LIST]' : |
|
569 | - if ( ! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) { |
|
570 | - return ''; |
|
571 | - } |
|
572 | - $registration = $recipient->primary_reg_obj; |
|
573 | - $answers = isset($recipient->registrations[$registration->ID()]['ans_objs']) |
|
574 | - ? $recipient->registrations[$registration->ID()]['ans_objs'] |
|
575 | - : array(); |
|
576 | - if (empty($answers)) { |
|
577 | - return ''; |
|
578 | - } |
|
579 | - $template = is_array($data['template']) && isset($data['template']['question_list']) ? $data['template']['question_list'] : $extra_data['template']['question_list']; |
|
580 | - $valid_shortcodes = array('question'); |
|
581 | - $answers = $recipient->registrations[$registration->ID()]['ans_objs']; |
|
582 | - $questions = isset($recipient->questions) ? $recipient->questions : array(); |
|
583 | - //if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
|
584 | - //object on it. |
|
585 | - if ( ! isset( $extra_data['data'] ) ){ |
|
586 | - $extra_data['data'] = $recipient; |
|
587 | - } |
|
588 | - return $this->_parse_question_list_for_primary_or_recipient_registration( |
|
589 | - $shortcode_parser, |
|
590 | - $questions, |
|
591 | - $answers, |
|
592 | - $template, |
|
593 | - $valid_shortcodes, |
|
594 | - $extra_data |
|
595 | - ); |
|
596 | - break; |
|
522 | + default : |
|
523 | + return $parsed; |
|
524 | + break; |
|
525 | + } |
|
526 | + } |
|
527 | + |
|
528 | + |
|
529 | + public function additional_primary_registration_details_shortcodes($shortcodes, $shortcode_parser) |
|
530 | + { |
|
531 | + $shortcodes['[PRIMARY_REGISTRANT_QUESTION_LIST]'] = __('This is used to indicate the questions and answers for the primary_registrant. It should be placed in the "[attendee_list]" field', |
|
532 | + 'event_espresso'); |
|
533 | + |
|
534 | + return $shortcodes; |
|
535 | + } |
|
536 | + |
|
537 | + |
|
538 | + /** |
|
539 | + * Callback for FHEE__EE_Primary_Registration_List_Shortcodes__parser_after filter (dynamic filter). |
|
540 | + * |
|
541 | + * @param string $parsed The original parsed content for the shortcode |
|
542 | + * @param string $shortcode The shortcode being parsed |
|
543 | + * @param array $data The shortcode parser data array |
|
544 | + * @param array $extra_data The shortcode parser extra data array |
|
545 | + * @param \EE_Shortcodes $shortcode_parser Shortcode parser. |
|
546 | + * |
|
547 | + * @return string |
|
548 | + */ |
|
549 | + public function additional_primary_registration_details_parser( |
|
550 | + $parsed, |
|
551 | + $shortcode, |
|
552 | + $data, |
|
553 | + $extra_data, |
|
554 | + $shortcode_parser |
|
555 | + ) { |
|
556 | + if (array($data) && ! isset($data['data'])) { |
|
557 | + return $parsed; |
|
558 | + } |
|
559 | + |
|
560 | + $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
|
561 | + $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
|
562 | + |
|
563 | + if ( ! $recipient instanceof EE_Messages_Addressee) { |
|
564 | + return $parsed; |
|
565 | + } |
|
566 | + |
|
567 | + switch ($shortcode) { |
|
568 | + case '[PRIMARY_REGISTRANT_QUESTION_LIST]' : |
|
569 | + if ( ! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) { |
|
570 | + return ''; |
|
571 | + } |
|
572 | + $registration = $recipient->primary_reg_obj; |
|
573 | + $answers = isset($recipient->registrations[$registration->ID()]['ans_objs']) |
|
574 | + ? $recipient->registrations[$registration->ID()]['ans_objs'] |
|
575 | + : array(); |
|
576 | + if (empty($answers)) { |
|
577 | + return ''; |
|
578 | + } |
|
579 | + $template = is_array($data['template']) && isset($data['template']['question_list']) ? $data['template']['question_list'] : $extra_data['template']['question_list']; |
|
580 | + $valid_shortcodes = array('question'); |
|
581 | + $answers = $recipient->registrations[$registration->ID()]['ans_objs']; |
|
582 | + $questions = isset($recipient->questions) ? $recipient->questions : array(); |
|
583 | + //if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
|
584 | + //object on it. |
|
585 | + if ( ! isset( $extra_data['data'] ) ){ |
|
586 | + $extra_data['data'] = $recipient; |
|
587 | + } |
|
588 | + return $this->_parse_question_list_for_primary_or_recipient_registration( |
|
589 | + $shortcode_parser, |
|
590 | + $questions, |
|
591 | + $answers, |
|
592 | + $template, |
|
593 | + $valid_shortcodes, |
|
594 | + $extra_data |
|
595 | + ); |
|
596 | + break; |
|
597 | 597 | |
598 | - default : |
|
599 | - return $parsed; |
|
600 | - break; |
|
601 | - } |
|
602 | - } |
|
603 | - |
|
604 | - |
|
605 | - /** |
|
606 | - * Takes care of registering the message types that are only available in caffeinated EE. |
|
607 | - * |
|
608 | - * @since 4.3.2 |
|
609 | - * |
|
610 | - * @return void |
|
611 | - */ |
|
612 | - public function register_caf_message_types() |
|
613 | - { |
|
614 | - //register newsletter message type |
|
615 | - $setup_args = array( |
|
616 | - 'mtfilename' => 'EE_Newsletter_message_type.class.php', |
|
617 | - 'autoloadpaths' => array( |
|
618 | - EE_CAF_LIBRARIES . 'messages/message_type/newsletter/' |
|
619 | - ), |
|
620 | - 'messengers_to_activate_with' => array('email'), |
|
621 | - 'messengers_to_validate_with' => array('email'), |
|
622 | - 'messengers_supporting_default_template_pack_with' => array('email') |
|
623 | - ); |
|
624 | - EE_Register_Message_Type::register('newsletter', $setup_args); |
|
625 | - |
|
626 | - //register payment reminder message type |
|
627 | - $setup_args = array( |
|
628 | - 'mtfilename' => 'EE_Payment_Reminder_message_type.class.php', |
|
629 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'), |
|
630 | - 'messengers_to_activate_with' => array('email'), |
|
631 | - 'messengers_to_validate_with' => array('email'), |
|
632 | - 'messengers_supporting_default_template_pack_with' => array('email') |
|
633 | - ); |
|
634 | - EE_Register_Message_Type::register('payment_reminder', $setup_args); |
|
635 | - |
|
636 | - //register payment declined message type |
|
637 | - $setup_args = array( |
|
638 | - 'mtfilename' => 'EE_Payment_Declined_message_type.class.php', |
|
639 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'), |
|
640 | - 'messengers_to_activate_with' => array('email'), |
|
641 | - 'messengers_to_validate_with' => array('email'), |
|
642 | - 'messengers_supporting_default_template_pack_with' => array('email') |
|
643 | - ); |
|
644 | - EE_Register_Message_Type::register('payment_declined', $setup_args); |
|
645 | - |
|
646 | - //register registration declined message type |
|
647 | - $setup_args = array( |
|
648 | - 'mtfilename' => 'EE_Declined_Registration_message_type.class.php', |
|
649 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'), |
|
650 | - 'messengers_to_activate_with' => array('email'), |
|
651 | - 'messengers_to_validate_with' => array('email'), |
|
652 | - 'messengers_supporting_default_template_pack_with' => array('email') |
|
653 | - ); |
|
654 | - EE_Register_Message_Type::register('declined_registration', $setup_args); |
|
655 | - |
|
656 | - //register registration cancelled message type |
|
657 | - $setup_args = array( |
|
658 | - 'mtfilename' => 'EE_Cancelled_Registration_message_type.class.php', |
|
659 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'), |
|
660 | - 'messengers_to_activate_with' => array('email'), |
|
661 | - 'messengers_to_validate_with' => array('email'), |
|
662 | - 'messengers_supporting_default_template_pack_with' => array('email') |
|
663 | - ); |
|
664 | - EE_Register_Message_Type::register('cancelled_registration', $setup_args); |
|
665 | - |
|
666 | - |
|
667 | - //register payment failed message type |
|
668 | - $setup_args = array( |
|
669 | - 'mtfilename' => 'EE_Payment_Failed_message_type.class.php', |
|
670 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'), |
|
671 | - 'messengers_to_activate_with' => array('email'), |
|
672 | - 'messengers_to_validate_with' => array('email'), |
|
673 | - 'messengers_supporting_default_template_pack_with' => array('email') |
|
674 | - ); |
|
675 | - EE_Register_Message_Type::register('payment_failed', $setup_args); |
|
676 | - |
|
677 | - //register payment declined message type |
|
678 | - $setup_args = array( |
|
679 | - 'mtfilename' => 'EE_Payment_Cancelled_message_type.class.php', |
|
680 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'), |
|
681 | - 'messengers_to_activate_with' => array('email'), |
|
682 | - 'messengers_to_validate_with' => array('email'), |
|
683 | - 'messengers_supporting_default_template_pack_with' => array('email') |
|
684 | - ); |
|
685 | - EE_Register_Message_Type::register('payment_cancelled', $setup_args); |
|
686 | - } |
|
687 | - |
|
688 | - |
|
689 | - /** |
|
690 | - * Takes care of registering the shortcode libraries implemented with caffeinated EE and set up related items. |
|
691 | - * |
|
692 | - * @since 4.3.2 |
|
693 | - * |
|
694 | - * @return void |
|
695 | - */ |
|
696 | - public function register_caf_shortcodes() |
|
697 | - { |
|
698 | - $setup_args = array( |
|
699 | - 'autoloadpaths' => array( |
|
700 | - EE_CAF_LIBRARIES . 'shortcodes/' |
|
701 | - ), |
|
702 | - 'msgr_validator_callback' => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'), |
|
703 | - 'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'), |
|
704 | - 'list_type_shortcodes' => array('[NEWSLETTER_CONTENT]') |
|
705 | - ); |
|
706 | - EE_Register_Messages_Shortcode_Library::register('newsletter', $setup_args); |
|
707 | - } |
|
708 | - |
|
709 | - |
|
710 | - /** |
|
711 | - * Parses a question list shortcode using given data and template |
|
712 | - * |
|
713 | - * @param \EE_Shortcodes $shortcode_parser |
|
714 | - * @param EE_Question[] $questions An array of questions indexed by answer id. |
|
715 | - * @param EE_Answer[] $answers An array of answer objects |
|
716 | - * @param string $template Template content to be parsed. |
|
717 | - * @param array $valid_shortcodes Valid shortcodes for the template being parsed. |
|
718 | - * @param array $extra_data Extra data that might be used when parsing the template. |
|
719 | - */ |
|
720 | - protected function _parse_question_list_for_primary_or_recipient_registration( |
|
721 | - $shortcode_parser, |
|
722 | - $questions, |
|
723 | - $answers, |
|
724 | - $template, |
|
725 | - $valid_shortcodes, |
|
726 | - $extra_data |
|
727 | - ) { |
|
728 | - $question_list = ''; |
|
729 | - /** @var EEH_Parse_Shortcodes $shortcode_helper */ |
|
730 | - $shortcode_helper = $shortcode_parser->get_shortcode_helper(); |
|
731 | - foreach ($answers as $answer) { |
|
732 | - if ($answer instanceof EE_Answer) { |
|
733 | - //first see if the question is in our $questions array. If not then try to get from answer object. |
|
734 | - $question = isset($questions[$answer->ID()]) ? $questions[$answer->ID()] : null; |
|
735 | - $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
|
736 | - if ( |
|
737 | - ! $question instanceof EE_Question |
|
738 | - || ( |
|
739 | - $question instanceof EE_Question |
|
740 | - && $question->admin_only() |
|
741 | - ) |
|
742 | - ) { |
|
743 | - continue; |
|
744 | - } |
|
745 | - $question_list .= $shortcode_helper->parse_question_list_template( |
|
746 | - $template, |
|
747 | - $answer, |
|
748 | - $valid_shortcodes, |
|
749 | - $extra_data |
|
750 | - ); |
|
751 | - } |
|
752 | - } |
|
753 | - |
|
754 | - return $question_list; |
|
755 | - } |
|
598 | + default : |
|
599 | + return $parsed; |
|
600 | + break; |
|
601 | + } |
|
602 | + } |
|
603 | + |
|
604 | + |
|
605 | + /** |
|
606 | + * Takes care of registering the message types that are only available in caffeinated EE. |
|
607 | + * |
|
608 | + * @since 4.3.2 |
|
609 | + * |
|
610 | + * @return void |
|
611 | + */ |
|
612 | + public function register_caf_message_types() |
|
613 | + { |
|
614 | + //register newsletter message type |
|
615 | + $setup_args = array( |
|
616 | + 'mtfilename' => 'EE_Newsletter_message_type.class.php', |
|
617 | + 'autoloadpaths' => array( |
|
618 | + EE_CAF_LIBRARIES . 'messages/message_type/newsletter/' |
|
619 | + ), |
|
620 | + 'messengers_to_activate_with' => array('email'), |
|
621 | + 'messengers_to_validate_with' => array('email'), |
|
622 | + 'messengers_supporting_default_template_pack_with' => array('email') |
|
623 | + ); |
|
624 | + EE_Register_Message_Type::register('newsletter', $setup_args); |
|
625 | + |
|
626 | + //register payment reminder message type |
|
627 | + $setup_args = array( |
|
628 | + 'mtfilename' => 'EE_Payment_Reminder_message_type.class.php', |
|
629 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'), |
|
630 | + 'messengers_to_activate_with' => array('email'), |
|
631 | + 'messengers_to_validate_with' => array('email'), |
|
632 | + 'messengers_supporting_default_template_pack_with' => array('email') |
|
633 | + ); |
|
634 | + EE_Register_Message_Type::register('payment_reminder', $setup_args); |
|
635 | + |
|
636 | + //register payment declined message type |
|
637 | + $setup_args = array( |
|
638 | + 'mtfilename' => 'EE_Payment_Declined_message_type.class.php', |
|
639 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'), |
|
640 | + 'messengers_to_activate_with' => array('email'), |
|
641 | + 'messengers_to_validate_with' => array('email'), |
|
642 | + 'messengers_supporting_default_template_pack_with' => array('email') |
|
643 | + ); |
|
644 | + EE_Register_Message_Type::register('payment_declined', $setup_args); |
|
645 | + |
|
646 | + //register registration declined message type |
|
647 | + $setup_args = array( |
|
648 | + 'mtfilename' => 'EE_Declined_Registration_message_type.class.php', |
|
649 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'), |
|
650 | + 'messengers_to_activate_with' => array('email'), |
|
651 | + 'messengers_to_validate_with' => array('email'), |
|
652 | + 'messengers_supporting_default_template_pack_with' => array('email') |
|
653 | + ); |
|
654 | + EE_Register_Message_Type::register('declined_registration', $setup_args); |
|
655 | + |
|
656 | + //register registration cancelled message type |
|
657 | + $setup_args = array( |
|
658 | + 'mtfilename' => 'EE_Cancelled_Registration_message_type.class.php', |
|
659 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'), |
|
660 | + 'messengers_to_activate_with' => array('email'), |
|
661 | + 'messengers_to_validate_with' => array('email'), |
|
662 | + 'messengers_supporting_default_template_pack_with' => array('email') |
|
663 | + ); |
|
664 | + EE_Register_Message_Type::register('cancelled_registration', $setup_args); |
|
665 | + |
|
666 | + |
|
667 | + //register payment failed message type |
|
668 | + $setup_args = array( |
|
669 | + 'mtfilename' => 'EE_Payment_Failed_message_type.class.php', |
|
670 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'), |
|
671 | + 'messengers_to_activate_with' => array('email'), |
|
672 | + 'messengers_to_validate_with' => array('email'), |
|
673 | + 'messengers_supporting_default_template_pack_with' => array('email') |
|
674 | + ); |
|
675 | + EE_Register_Message_Type::register('payment_failed', $setup_args); |
|
676 | + |
|
677 | + //register payment declined message type |
|
678 | + $setup_args = array( |
|
679 | + 'mtfilename' => 'EE_Payment_Cancelled_message_type.class.php', |
|
680 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'), |
|
681 | + 'messengers_to_activate_with' => array('email'), |
|
682 | + 'messengers_to_validate_with' => array('email'), |
|
683 | + 'messengers_supporting_default_template_pack_with' => array('email') |
|
684 | + ); |
|
685 | + EE_Register_Message_Type::register('payment_cancelled', $setup_args); |
|
686 | + } |
|
687 | + |
|
688 | + |
|
689 | + /** |
|
690 | + * Takes care of registering the shortcode libraries implemented with caffeinated EE and set up related items. |
|
691 | + * |
|
692 | + * @since 4.3.2 |
|
693 | + * |
|
694 | + * @return void |
|
695 | + */ |
|
696 | + public function register_caf_shortcodes() |
|
697 | + { |
|
698 | + $setup_args = array( |
|
699 | + 'autoloadpaths' => array( |
|
700 | + EE_CAF_LIBRARIES . 'shortcodes/' |
|
701 | + ), |
|
702 | + 'msgr_validator_callback' => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'), |
|
703 | + 'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'), |
|
704 | + 'list_type_shortcodes' => array('[NEWSLETTER_CONTENT]') |
|
705 | + ); |
|
706 | + EE_Register_Messages_Shortcode_Library::register('newsletter', $setup_args); |
|
707 | + } |
|
708 | + |
|
709 | + |
|
710 | + /** |
|
711 | + * Parses a question list shortcode using given data and template |
|
712 | + * |
|
713 | + * @param \EE_Shortcodes $shortcode_parser |
|
714 | + * @param EE_Question[] $questions An array of questions indexed by answer id. |
|
715 | + * @param EE_Answer[] $answers An array of answer objects |
|
716 | + * @param string $template Template content to be parsed. |
|
717 | + * @param array $valid_shortcodes Valid shortcodes for the template being parsed. |
|
718 | + * @param array $extra_data Extra data that might be used when parsing the template. |
|
719 | + */ |
|
720 | + protected function _parse_question_list_for_primary_or_recipient_registration( |
|
721 | + $shortcode_parser, |
|
722 | + $questions, |
|
723 | + $answers, |
|
724 | + $template, |
|
725 | + $valid_shortcodes, |
|
726 | + $extra_data |
|
727 | + ) { |
|
728 | + $question_list = ''; |
|
729 | + /** @var EEH_Parse_Shortcodes $shortcode_helper */ |
|
730 | + $shortcode_helper = $shortcode_parser->get_shortcode_helper(); |
|
731 | + foreach ($answers as $answer) { |
|
732 | + if ($answer instanceof EE_Answer) { |
|
733 | + //first see if the question is in our $questions array. If not then try to get from answer object. |
|
734 | + $question = isset($questions[$answer->ID()]) ? $questions[$answer->ID()] : null; |
|
735 | + $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
|
736 | + if ( |
|
737 | + ! $question instanceof EE_Question |
|
738 | + || ( |
|
739 | + $question instanceof EE_Question |
|
740 | + && $question->admin_only() |
|
741 | + ) |
|
742 | + ) { |
|
743 | + continue; |
|
744 | + } |
|
745 | + $question_list .= $shortcode_helper->parse_question_list_template( |
|
746 | + $template, |
|
747 | + $answer, |
|
748 | + $valid_shortcodes, |
|
749 | + $extra_data |
|
750 | + ); |
|
751 | + } |
|
752 | + } |
|
753 | + |
|
754 | + return $question_list; |
|
755 | + } |
|
756 | 756 | } |
@@ -95,7 +95,7 @@ discard block |
||
95 | 95 | */ |
96 | 96 | public function messages_autoload_paths($dir_ref) |
97 | 97 | { |
98 | - $dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/'; |
|
98 | + $dir_ref[] = EE_CAF_LIBRARIES.'shortcodes/'; |
|
99 | 99 | |
100 | 100 | return $dir_ref; |
101 | 101 | } |
@@ -216,10 +216,10 @@ discard block |
||
216 | 216 | } |
217 | 217 | |
218 | 218 | //the template file name we're replacing contents for. |
219 | - $template_file_prefix = $field . '_' . $context; |
|
220 | - $msg_prefix = $messenger->name . '_' . $message_type->name . '_'; |
|
219 | + $template_file_prefix = $field.'_'.$context; |
|
220 | + $msg_prefix = $messenger->name.'_'.$message_type->name.'_'; |
|
221 | 221 | |
222 | - $base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/'; |
|
222 | + $base_path = EE_CAF_LIBRARIES.'messages/defaults/default/'; |
|
223 | 223 | |
224 | 224 | if ($messenger->name == 'email' && $message_type->name == 'registration') { |
225 | 225 | |
@@ -228,17 +228,17 @@ discard block |
||
228 | 228 | case 'question_list_admin' : |
229 | 229 | case 'question_list_attendee' : |
230 | 230 | case 'question_list_primary_attendee' : |
231 | - $path = $base_path . $msg_prefix . 'question_list.template.php'; |
|
231 | + $path = $base_path.$msg_prefix.'question_list.template.php'; |
|
232 | 232 | $contents = EEH_Template::display_template($path, array(), true); |
233 | 233 | break; |
234 | 234 | |
235 | 235 | case 'attendee_list_primary_attendee' : |
236 | - $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
236 | + $path = $base_path.$msg_prefix.'attendee_list.template.php'; |
|
237 | 237 | $contents = EEH_Template::display_template($path, array(), true); |
238 | 238 | break; |
239 | 239 | |
240 | 240 | case 'attendee_list_admin' : |
241 | - $path = $base_path . $msg_prefix . 'attendee_list_admin.template.php'; |
|
241 | + $path = $base_path.$msg_prefix.'attendee_list_admin.template.php'; |
|
242 | 242 | $contents = EEH_Template::display_template($path, |
243 | 243 | array(), true); |
244 | 244 | break; |
@@ -248,7 +248,7 @@ discard block |
||
248 | 248 | break; |
249 | 249 | |
250 | 250 | case 'event_list_attendee' : |
251 | - $path = $base_path . $msg_prefix . 'event_list_attendee.template.php'; |
|
251 | + $path = $base_path.$msg_prefix.'event_list_attendee.template.php'; |
|
252 | 252 | $contents = EEH_Template::display_template($path, array(), true); |
253 | 253 | break; |
254 | 254 | } |
@@ -256,24 +256,24 @@ discard block |
||
256 | 256 | switch ($template_file_prefix) { |
257 | 257 | |
258 | 258 | case 'content_attendee' : |
259 | - $path = $base_path . $msg_prefix . 'content.template.php'; |
|
259 | + $path = $base_path.$msg_prefix.'content.template.php'; |
|
260 | 260 | $contents = EEH_Template::display_template($path, array(), true); |
261 | 261 | break; |
262 | 262 | |
263 | 263 | case 'newsletter_content_attendee' : |
264 | - $path = $base_path . $msg_prefix . 'newsletter_content.template.php'; |
|
264 | + $path = $base_path.$msg_prefix.'newsletter_content.template.php'; |
|
265 | 265 | $contents = EEH_Template::display_template($path, array(), true); |
266 | 266 | break; |
267 | 267 | |
268 | 268 | case 'newsletter_subject_attendee' : |
269 | - $path = $base_path . $msg_prefix . 'subject.template.php'; |
|
269 | + $path = $base_path.$msg_prefix.'subject.template.php'; |
|
270 | 270 | $contents = EEH_Template::display_template($path, array(), true); |
271 | 271 | break; |
272 | 272 | } |
273 | 273 | } elseif ($messenger->name == 'html' && $message_type->name == 'receipt') { |
274 | 274 | switch ($template_file_prefix) { |
275 | 275 | case 'attendee_list_purchaser' : |
276 | - $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
276 | + $path = $base_path.$msg_prefix.'attendee_list.template.php'; |
|
277 | 277 | $contents = EEH_Template::display_template($path, array(), true); |
278 | 278 | break; |
279 | 279 | } |
@@ -505,7 +505,7 @@ discard block |
||
505 | 505 | |
506 | 506 | //if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
507 | 507 | //object on it. |
508 | - if ( ! isset( $extra_data['data'] ) ) { |
|
508 | + if ( ! isset($extra_data['data'])) { |
|
509 | 509 | $extra_data['data'] = $recipient; |
510 | 510 | } |
511 | 511 | |
@@ -569,7 +569,7 @@ discard block |
||
569 | 569 | if ( ! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) { |
570 | 570 | return ''; |
571 | 571 | } |
572 | - $registration = $recipient->primary_reg_obj; |
|
572 | + $registration = $recipient->primary_reg_obj; |
|
573 | 573 | $answers = isset($recipient->registrations[$registration->ID()]['ans_objs']) |
574 | 574 | ? $recipient->registrations[$registration->ID()]['ans_objs'] |
575 | 575 | : array(); |
@@ -582,7 +582,7 @@ discard block |
||
582 | 582 | $questions = isset($recipient->questions) ? $recipient->questions : array(); |
583 | 583 | //if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
584 | 584 | //object on it. |
585 | - if ( ! isset( $extra_data['data'] ) ){ |
|
585 | + if ( ! isset($extra_data['data'])) { |
|
586 | 586 | $extra_data['data'] = $recipient; |
587 | 587 | } |
588 | 588 | return $this->_parse_question_list_for_primary_or_recipient_registration( |
@@ -615,7 +615,7 @@ discard block |
||
615 | 615 | $setup_args = array( |
616 | 616 | 'mtfilename' => 'EE_Newsletter_message_type.class.php', |
617 | 617 | 'autoloadpaths' => array( |
618 | - EE_CAF_LIBRARIES . 'messages/message_type/newsletter/' |
|
618 | + EE_CAF_LIBRARIES.'messages/message_type/newsletter/' |
|
619 | 619 | ), |
620 | 620 | 'messengers_to_activate_with' => array('email'), |
621 | 621 | 'messengers_to_validate_with' => array('email'), |
@@ -626,7 +626,7 @@ discard block |
||
626 | 626 | //register payment reminder message type |
627 | 627 | $setup_args = array( |
628 | 628 | 'mtfilename' => 'EE_Payment_Reminder_message_type.class.php', |
629 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'), |
|
629 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/payment_reminder/'), |
|
630 | 630 | 'messengers_to_activate_with' => array('email'), |
631 | 631 | 'messengers_to_validate_with' => array('email'), |
632 | 632 | 'messengers_supporting_default_template_pack_with' => array('email') |
@@ -636,7 +636,7 @@ discard block |
||
636 | 636 | //register payment declined message type |
637 | 637 | $setup_args = array( |
638 | 638 | 'mtfilename' => 'EE_Payment_Declined_message_type.class.php', |
639 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'), |
|
639 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/payment_declined/'), |
|
640 | 640 | 'messengers_to_activate_with' => array('email'), |
641 | 641 | 'messengers_to_validate_with' => array('email'), |
642 | 642 | 'messengers_supporting_default_template_pack_with' => array('email') |
@@ -646,7 +646,7 @@ discard block |
||
646 | 646 | //register registration declined message type |
647 | 647 | $setup_args = array( |
648 | 648 | 'mtfilename' => 'EE_Declined_Registration_message_type.class.php', |
649 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'), |
|
649 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/declined_registration/'), |
|
650 | 650 | 'messengers_to_activate_with' => array('email'), |
651 | 651 | 'messengers_to_validate_with' => array('email'), |
652 | 652 | 'messengers_supporting_default_template_pack_with' => array('email') |
@@ -656,7 +656,7 @@ discard block |
||
656 | 656 | //register registration cancelled message type |
657 | 657 | $setup_args = array( |
658 | 658 | 'mtfilename' => 'EE_Cancelled_Registration_message_type.class.php', |
659 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'), |
|
659 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/cancelled_registration/'), |
|
660 | 660 | 'messengers_to_activate_with' => array('email'), |
661 | 661 | 'messengers_to_validate_with' => array('email'), |
662 | 662 | 'messengers_supporting_default_template_pack_with' => array('email') |
@@ -667,7 +667,7 @@ discard block |
||
667 | 667 | //register payment failed message type |
668 | 668 | $setup_args = array( |
669 | 669 | 'mtfilename' => 'EE_Payment_Failed_message_type.class.php', |
670 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'), |
|
670 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/payment_failed/'), |
|
671 | 671 | 'messengers_to_activate_with' => array('email'), |
672 | 672 | 'messengers_to_validate_with' => array('email'), |
673 | 673 | 'messengers_supporting_default_template_pack_with' => array('email') |
@@ -677,7 +677,7 @@ discard block |
||
677 | 677 | //register payment declined message type |
678 | 678 | $setup_args = array( |
679 | 679 | 'mtfilename' => 'EE_Payment_Cancelled_message_type.class.php', |
680 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'), |
|
680 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/payment_cancelled/'), |
|
681 | 681 | 'messengers_to_activate_with' => array('email'), |
682 | 682 | 'messengers_to_validate_with' => array('email'), |
683 | 683 | 'messengers_supporting_default_template_pack_with' => array('email') |
@@ -697,7 +697,7 @@ discard block |
||
697 | 697 | { |
698 | 698 | $setup_args = array( |
699 | 699 | 'autoloadpaths' => array( |
700 | - EE_CAF_LIBRARIES . 'shortcodes/' |
|
700 | + EE_CAF_LIBRARIES.'shortcodes/' |
|
701 | 701 | ), |
702 | 702 | 'msgr_validator_callback' => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'), |
703 | 703 | 'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'), |
@@ -1,7 +1,7 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
4 | - exit('NO direct script access allowed'); |
|
4 | + exit('NO direct script access allowed'); |
|
5 | 5 | } |
6 | 6 | |
7 | 7 | /** |
@@ -24,585 +24,585 @@ discard block |
||
24 | 24 | class EE_Messages_Preview_incoming_data extends EE_Messages_incoming_data |
25 | 25 | { |
26 | 26 | |
27 | - //some specific properties we need for this class |
|
28 | - private $_events = array(); |
|
29 | - private $_attendees = array(); |
|
30 | - private $_registrations = array(); |
|
27 | + //some specific properties we need for this class |
|
28 | + private $_events = array(); |
|
29 | + private $_attendees = array(); |
|
30 | + private $_registrations = array(); |
|
31 | 31 | |
32 | 32 | |
33 | - /** |
|
34 | - * For the constructor of this special preview class. We're either looking for an event id or empty data. If we |
|
35 | - * have an event id (or ids) then we'll use that as the source for the "dummy" data. If the data is empty then |
|
36 | - * we'll get the first three published events from the users database and use that as a source. |
|
37 | - * |
|
38 | - * @param array $data |
|
39 | - */ |
|
40 | - public function __construct($data = array()) |
|
41 | - { |
|
42 | - $this->_data = isset($data['event_ids']) ? $data['event_ids'] : array(); |
|
43 | - $this->_setup_attendees_events(); |
|
44 | - parent::__construct($data); |
|
45 | - } |
|
33 | + /** |
|
34 | + * For the constructor of this special preview class. We're either looking for an event id or empty data. If we |
|
35 | + * have an event id (or ids) then we'll use that as the source for the "dummy" data. If the data is empty then |
|
36 | + * we'll get the first three published events from the users database and use that as a source. |
|
37 | + * |
|
38 | + * @param array $data |
|
39 | + */ |
|
40 | + public function __construct($data = array()) |
|
41 | + { |
|
42 | + $this->_data = isset($data['event_ids']) ? $data['event_ids'] : array(); |
|
43 | + $this->_setup_attendees_events(); |
|
44 | + parent::__construct($data); |
|
45 | + } |
|
46 | 46 | |
47 | 47 | |
48 | - /** |
|
49 | - * Returns database safe representation of the data later used to when instantiating this object. |
|
50 | - * |
|
51 | - * @param array $data The incoming data to be prepped. |
|
52 | - * |
|
53 | - * @return array The prepped data for db |
|
54 | - */ |
|
55 | - static public function convert_data_for_persistent_storage($data) |
|
56 | - { |
|
57 | - return $data; |
|
58 | - } |
|
48 | + /** |
|
49 | + * Returns database safe representation of the data later used to when instantiating this object. |
|
50 | + * |
|
51 | + * @param array $data The incoming data to be prepped. |
|
52 | + * |
|
53 | + * @return array The prepped data for db |
|
54 | + */ |
|
55 | + static public function convert_data_for_persistent_storage($data) |
|
56 | + { |
|
57 | + return $data; |
|
58 | + } |
|
59 | 59 | |
60 | 60 | |
61 | - /** |
|
62 | - * Data that has been stored in persistent storage that was prepped by _convert_data_for_persistent_storage |
|
63 | - * can be sent into this method and converted back into the format used for instantiating with this data handler. |
|
64 | - * |
|
65 | - * @param array $data |
|
66 | - * |
|
67 | - * @return array |
|
68 | - */ |
|
69 | - static public function convert_data_from_persistent_storage($data) |
|
70 | - { |
|
71 | - return $data; |
|
72 | - } |
|
61 | + /** |
|
62 | + * Data that has been stored in persistent storage that was prepped by _convert_data_for_persistent_storage |
|
63 | + * can be sent into this method and converted back into the format used for instantiating with this data handler. |
|
64 | + * |
|
65 | + * @param array $data |
|
66 | + * |
|
67 | + * @return array |
|
68 | + */ |
|
69 | + static public function convert_data_from_persistent_storage($data) |
|
70 | + { |
|
71 | + return $data; |
|
72 | + } |
|
73 | 73 | |
74 | 74 | |
75 | - /** |
|
76 | - * This will just setup the _events property in the expected format. |
|
77 | - * |
|
78 | - * @throws \EE_Error |
|
79 | - */ |
|
80 | - private function _setup_attendees_events() |
|
81 | - { |
|
82 | - |
|
83 | - //setup some attendee objects |
|
84 | - $attendees = $this->_get_some_attendees(); |
|
85 | - |
|
86 | - //if empty $data we'll do a query to get some events from the server. otherwise we'll retrieve the event data for the given ids. |
|
87 | - $events = $this->_get_some_events($this->_data); |
|
88 | - |
|
89 | - $answers_n_questions = $this->_get_some_q_and_as(); |
|
90 | - |
|
91 | - if (count($events) < 1) { |
|
92 | - throw new EE_Error(__('We can\'t generate a preview for you because there are no active events in your database', |
|
93 | - 'event_espresso')); |
|
94 | - } |
|
95 | - |
|
96 | - |
|
97 | - //now let's loop and set up the _events property. At the same time we'll set up attendee properties. |
|
98 | - |
|
99 | - |
|
100 | - //we'll actually use the generated line_item identifiers for our loop |
|
101 | - $dtts = $tkts = array(); |
|
102 | - foreach ($events as $id => $event) { |
|
103 | - if ( ! $event instanceof EE_Event) { |
|
104 | - continue; |
|
105 | - } |
|
106 | - $this->_events[$id]['ID'] = $id; |
|
107 | - $this->_events[$id]['name'] = $event->get('EVT_name'); |
|
108 | - $datetime = $event->get_first_related('Datetime'); |
|
109 | - $tickets = $datetime instanceof EE_Datetime ? $datetime->get_many_related('Ticket', |
|
110 | - array('default_where_conditions' => 'none')) : array(); |
|
111 | - $this->_events[$id]['event'] = $event; |
|
112 | - $this->_events[$id]['reg_objs'] = array(); |
|
113 | - $this->_events[$id]['tkt_objs'] = $tickets; |
|
114 | - $this->_events[$id]['dtt_objs'] = array(); |
|
75 | + /** |
|
76 | + * This will just setup the _events property in the expected format. |
|
77 | + * |
|
78 | + * @throws \EE_Error |
|
79 | + */ |
|
80 | + private function _setup_attendees_events() |
|
81 | + { |
|
82 | + |
|
83 | + //setup some attendee objects |
|
84 | + $attendees = $this->_get_some_attendees(); |
|
85 | + |
|
86 | + //if empty $data we'll do a query to get some events from the server. otherwise we'll retrieve the event data for the given ids. |
|
87 | + $events = $this->_get_some_events($this->_data); |
|
88 | + |
|
89 | + $answers_n_questions = $this->_get_some_q_and_as(); |
|
90 | + |
|
91 | + if (count($events) < 1) { |
|
92 | + throw new EE_Error(__('We can\'t generate a preview for you because there are no active events in your database', |
|
93 | + 'event_espresso')); |
|
94 | + } |
|
95 | + |
|
96 | + |
|
97 | + //now let's loop and set up the _events property. At the same time we'll set up attendee properties. |
|
98 | + |
|
99 | + |
|
100 | + //we'll actually use the generated line_item identifiers for our loop |
|
101 | + $dtts = $tkts = array(); |
|
102 | + foreach ($events as $id => $event) { |
|
103 | + if ( ! $event instanceof EE_Event) { |
|
104 | + continue; |
|
105 | + } |
|
106 | + $this->_events[$id]['ID'] = $id; |
|
107 | + $this->_events[$id]['name'] = $event->get('EVT_name'); |
|
108 | + $datetime = $event->get_first_related('Datetime'); |
|
109 | + $tickets = $datetime instanceof EE_Datetime ? $datetime->get_many_related('Ticket', |
|
110 | + array('default_where_conditions' => 'none')) : array(); |
|
111 | + $this->_events[$id]['event'] = $event; |
|
112 | + $this->_events[$id]['reg_objs'] = array(); |
|
113 | + $this->_events[$id]['tkt_objs'] = $tickets; |
|
114 | + $this->_events[$id]['dtt_objs'] = array(); |
|
115 | 115 | |
116 | - $dttcache = array(); |
|
117 | - $tkts = array(); |
|
118 | - foreach ($tickets as $ticket) { |
|
119 | - if ( ! $ticket instanceof EE_Ticket) { |
|
120 | - continue; |
|
121 | - } |
|
122 | - $reldatetime = $ticket->datetimes(); |
|
123 | - $tkts[$ticket->ID()] = array(); |
|
124 | - $tkts[$ticket->ID()]['ticket'] = $ticket; |
|
125 | - $tkts[$ticket->ID()]['dtt_objs'] = $reldatetime; |
|
126 | - $tkts[$ticket->ID()]['att_objs'] = $attendees; |
|
127 | - $tkts[$ticket->ID()]['count'] = count($attendees); |
|
128 | - $tkts[$ticket->ID()]['EE_Event'] = $event; |
|
129 | - foreach ($reldatetime as $datetime) { |
|
130 | - if ($datetime instanceof EE_Datetime && ! isset($dtts[$datetime->ID()])) { |
|
131 | - $this->_events[$id]['dtt_objs'][$datetime->ID()] = $datetime; |
|
132 | - $dtts[$datetime->ID()]['datetime'] = $datetime; |
|
133 | - $dtts[$datetime->ID()]['tkt_objs'][] = $ticket; |
|
134 | - $dtts[$datetime->ID()]['evt_objs'][] = $event; |
|
135 | - $dttcache[$datetime->ID()] = $datetime; |
|
136 | - } |
|
137 | - } |
|
138 | - } |
|
116 | + $dttcache = array(); |
|
117 | + $tkts = array(); |
|
118 | + foreach ($tickets as $ticket) { |
|
119 | + if ( ! $ticket instanceof EE_Ticket) { |
|
120 | + continue; |
|
121 | + } |
|
122 | + $reldatetime = $ticket->datetimes(); |
|
123 | + $tkts[$ticket->ID()] = array(); |
|
124 | + $tkts[$ticket->ID()]['ticket'] = $ticket; |
|
125 | + $tkts[$ticket->ID()]['dtt_objs'] = $reldatetime; |
|
126 | + $tkts[$ticket->ID()]['att_objs'] = $attendees; |
|
127 | + $tkts[$ticket->ID()]['count'] = count($attendees); |
|
128 | + $tkts[$ticket->ID()]['EE_Event'] = $event; |
|
129 | + foreach ($reldatetime as $datetime) { |
|
130 | + if ($datetime instanceof EE_Datetime && ! isset($dtts[$datetime->ID()])) { |
|
131 | + $this->_events[$id]['dtt_objs'][$datetime->ID()] = $datetime; |
|
132 | + $dtts[$datetime->ID()]['datetime'] = $datetime; |
|
133 | + $dtts[$datetime->ID()]['tkt_objs'][] = $ticket; |
|
134 | + $dtts[$datetime->ID()]['evt_objs'][] = $event; |
|
135 | + $dttcache[$datetime->ID()] = $datetime; |
|
136 | + } |
|
137 | + } |
|
138 | + } |
|
139 | 139 | |
140 | - $this->_events[$id]['total_attendees'] = count($attendees); |
|
141 | - $this->_events[$id]['att_objs'] = $attendees; |
|
140 | + $this->_events[$id]['total_attendees'] = count($attendees); |
|
141 | + $this->_events[$id]['att_objs'] = $attendees; |
|
142 | 142 | |
143 | - //let's also setup the dummy attendees property! |
|
144 | - foreach ($attendees as $att_key => $attendee) { |
|
145 | - if ( ! $attendee instanceof EE_Attendee) { |
|
146 | - continue; |
|
147 | - } |
|
148 | - $this->_attendees[$att_key]['line_ref'][] = $id; //so later it can be determined what events this attendee registered for! |
|
149 | - $this->_attendees[$att_key]['evt_objs'][] = $event; |
|
150 | - $this->_attendees[$att_key]['att_obj'] = $attendee; |
|
151 | - //$this->_attendees[$att_key]['registration_id'] = 0; |
|
152 | - $this->_attendees[$att_key]['attendee_email'] = $attendee->email(); |
|
153 | - $this->_attendees[$att_key]['tkt_objs'] = $tickets; |
|
154 | - if ($att_key == 999999991) { |
|
155 | - $this->_attendees[$att_key]['ans_objs'][999] = $answers_n_questions['answers'][999]; |
|
156 | - $this->_attendees[$att_key]['ans_objs'][1002] = $answers_n_questions['answers'][1002]; |
|
157 | - $this->_attendees[$att_key]['ans_objs'][1005] = $answers_n_questions['answers'][1005]; |
|
158 | - } elseif ($att_key == 999999992) { |
|
159 | - $this->_attendees[$att_key]['ans_objs'][1000] = $answers_n_questions['answers'][1000]; |
|
160 | - $this->_attendees[$att_key]['ans_objs'][1003] = $answers_n_questions['answers'][1003]; |
|
161 | - $this->_attendees[$att_key]['ans_objs'][1006] = $answers_n_questions['answers'][1006]; |
|
162 | - } elseif ($att_key == 999999993) { |
|
163 | - $this->_attendees[$att_key]['ans_objs'][1001] = $answers_n_questions['answers'][1001]; |
|
164 | - $this->_attendees[$att_key]['ans_objs'][1004] = $answers_n_questions['answers'][1004]; |
|
165 | - $this->_attendees[$att_key]['ans_objs'][1007] = $answers_n_questions['answers'][1007]; |
|
166 | - } |
|
167 | - } |
|
168 | - } |
|
169 | - |
|
170 | - $this->tickets = $tkts; |
|
171 | - $this->datetimes = $dtts; |
|
172 | - $this->answers = $answers_n_questions['answers']; |
|
173 | - $this->questions = $answers_n_questions['questions']; |
|
174 | - $this->total_ticket_count = count($tkts) * count($this->_attendees); |
|
175 | - |
|
176 | - } |
|
143 | + //let's also setup the dummy attendees property! |
|
144 | + foreach ($attendees as $att_key => $attendee) { |
|
145 | + if ( ! $attendee instanceof EE_Attendee) { |
|
146 | + continue; |
|
147 | + } |
|
148 | + $this->_attendees[$att_key]['line_ref'][] = $id; //so later it can be determined what events this attendee registered for! |
|
149 | + $this->_attendees[$att_key]['evt_objs'][] = $event; |
|
150 | + $this->_attendees[$att_key]['att_obj'] = $attendee; |
|
151 | + //$this->_attendees[$att_key]['registration_id'] = 0; |
|
152 | + $this->_attendees[$att_key]['attendee_email'] = $attendee->email(); |
|
153 | + $this->_attendees[$att_key]['tkt_objs'] = $tickets; |
|
154 | + if ($att_key == 999999991) { |
|
155 | + $this->_attendees[$att_key]['ans_objs'][999] = $answers_n_questions['answers'][999]; |
|
156 | + $this->_attendees[$att_key]['ans_objs'][1002] = $answers_n_questions['answers'][1002]; |
|
157 | + $this->_attendees[$att_key]['ans_objs'][1005] = $answers_n_questions['answers'][1005]; |
|
158 | + } elseif ($att_key == 999999992) { |
|
159 | + $this->_attendees[$att_key]['ans_objs'][1000] = $answers_n_questions['answers'][1000]; |
|
160 | + $this->_attendees[$att_key]['ans_objs'][1003] = $answers_n_questions['answers'][1003]; |
|
161 | + $this->_attendees[$att_key]['ans_objs'][1006] = $answers_n_questions['answers'][1006]; |
|
162 | + } elseif ($att_key == 999999993) { |
|
163 | + $this->_attendees[$att_key]['ans_objs'][1001] = $answers_n_questions['answers'][1001]; |
|
164 | + $this->_attendees[$att_key]['ans_objs'][1004] = $answers_n_questions['answers'][1004]; |
|
165 | + $this->_attendees[$att_key]['ans_objs'][1007] = $answers_n_questions['answers'][1007]; |
|
166 | + } |
|
167 | + } |
|
168 | + } |
|
169 | + |
|
170 | + $this->tickets = $tkts; |
|
171 | + $this->datetimes = $dtts; |
|
172 | + $this->answers = $answers_n_questions['answers']; |
|
173 | + $this->questions = $answers_n_questions['questions']; |
|
174 | + $this->total_ticket_count = count($tkts) * count($this->_attendees); |
|
175 | + |
|
176 | + } |
|
177 | 177 | |
178 | 178 | |
179 | - /** |
|
180 | - * This just returns an array of dummy attendee objects that we'll use to attach to events for our preview data |
|
181 | - * |
|
182 | - * @access private |
|
183 | - * @return array an array of attendee objects |
|
184 | - */ |
|
185 | - private function _get_some_attendees() |
|
186 | - { |
|
187 | - //let's just setup a dummy array of various attendee details |
|
188 | - $dummy_attendees = array( |
|
189 | - 0 => array( |
|
190 | - 'Luke', |
|
191 | - 'Skywalker', |
|
192 | - '[email protected]', |
|
193 | - '804 Bantha Dr.', |
|
194 | - 'Complex 8', |
|
195 | - 'Mos Eisley', |
|
196 | - 32, |
|
197 | - 'US', |
|
198 | - 'f0r3e', |
|
199 | - '222-333-4763', |
|
200 | - false, |
|
201 | - '999999991' |
|
202 | - ), |
|
203 | - 1 => array( |
|
204 | - 'Princess', |
|
205 | - 'Leia', |
|
206 | - '[email protected]', |
|
207 | - '1456 Valley Way Boulevard', |
|
208 | - 'Suite 9', |
|
209 | - 'Alderaan', |
|
210 | - 15, |
|
211 | - 'US', |
|
212 | - 'c1h2c', |
|
213 | - '78-123-111-1111', |
|
214 | - false, |
|
215 | - '999999992' |
|
216 | - ), |
|
217 | - 2 => array( |
|
218 | - 'Yoda', |
|
219 | - 'I Am', |
|
220 | - '[email protected]', |
|
221 | - '4th Tree', |
|
222 | - '5th Knot', |
|
223 | - 'Marsh', |
|
224 | - 22, |
|
225 | - 'US', |
|
226 | - 'l18n', |
|
227 | - '999-999-9999', |
|
228 | - false, |
|
229 | - '999999993' |
|
230 | - ), |
|
231 | - ); |
|
232 | - |
|
233 | - //let's generate the attendee objects |
|
234 | - $attendees = array(); |
|
235 | - $var_array = array( |
|
236 | - 'fname', |
|
237 | - 'lname', |
|
238 | - 'email', |
|
239 | - 'address', |
|
240 | - 'address2', |
|
241 | - 'city', |
|
242 | - 'staid', |
|
243 | - 'cntry', |
|
244 | - 'zip', |
|
245 | - 'phone', |
|
246 | - 'deleted', |
|
247 | - 'attid' |
|
248 | - ); |
|
249 | - |
|
250 | - //EE_Registry::instance()->load_class( 'Attendee', array(), FALSE, false, TRUE ); |
|
251 | - foreach ($dummy_attendees as $dummy) { |
|
252 | - $att = array_combine($var_array, $dummy); |
|
253 | - extract($att); |
|
254 | - /** @var $fname string */ |
|
255 | - /** @var $lname string */ |
|
256 | - /** @var $address string */ |
|
257 | - /** @var $address2 string */ |
|
258 | - /** @var $city string */ |
|
259 | - /** @var $staid string */ |
|
260 | - /** @var $cntry string */ |
|
261 | - /** @var $zip string */ |
|
262 | - /** @var $email string */ |
|
263 | - /** @var $phone string */ |
|
264 | - /** @var $attid string */ |
|
265 | - $attendees[$attid] = EE_Attendee::new_instance( |
|
266 | - array( |
|
267 | - 'ATT_fname' => $fname, |
|
268 | - 'ATT_lname' => $lname, |
|
269 | - 'ATT_address' => $address, |
|
270 | - 'ATT_address2' => $address2, |
|
271 | - 'ATT_city' => $city, |
|
272 | - 'STA_ID' => $staid, |
|
273 | - 'CNT_ISO' => $cntry, |
|
274 | - 'ATT_zip' => $zip, |
|
275 | - 'ATT_email' => $email, |
|
276 | - 'ATT_phone' => $phone, |
|
277 | - 'ATT_ID' => $attid |
|
278 | - ) |
|
279 | - ); |
|
280 | - } |
|
281 | - |
|
282 | - return $attendees; |
|
283 | - } |
|
179 | + /** |
|
180 | + * This just returns an array of dummy attendee objects that we'll use to attach to events for our preview data |
|
181 | + * |
|
182 | + * @access private |
|
183 | + * @return array an array of attendee objects |
|
184 | + */ |
|
185 | + private function _get_some_attendees() |
|
186 | + { |
|
187 | + //let's just setup a dummy array of various attendee details |
|
188 | + $dummy_attendees = array( |
|
189 | + 0 => array( |
|
190 | + 'Luke', |
|
191 | + 'Skywalker', |
|
192 | + '[email protected]', |
|
193 | + '804 Bantha Dr.', |
|
194 | + 'Complex 8', |
|
195 | + 'Mos Eisley', |
|
196 | + 32, |
|
197 | + 'US', |
|
198 | + 'f0r3e', |
|
199 | + '222-333-4763', |
|
200 | + false, |
|
201 | + '999999991' |
|
202 | + ), |
|
203 | + 1 => array( |
|
204 | + 'Princess', |
|
205 | + 'Leia', |
|
206 | + '[email protected]', |
|
207 | + '1456 Valley Way Boulevard', |
|
208 | + 'Suite 9', |
|
209 | + 'Alderaan', |
|
210 | + 15, |
|
211 | + 'US', |
|
212 | + 'c1h2c', |
|
213 | + '78-123-111-1111', |
|
214 | + false, |
|
215 | + '999999992' |
|
216 | + ), |
|
217 | + 2 => array( |
|
218 | + 'Yoda', |
|
219 | + 'I Am', |
|
220 | + '[email protected]', |
|
221 | + '4th Tree', |
|
222 | + '5th Knot', |
|
223 | + 'Marsh', |
|
224 | + 22, |
|
225 | + 'US', |
|
226 | + 'l18n', |
|
227 | + '999-999-9999', |
|
228 | + false, |
|
229 | + '999999993' |
|
230 | + ), |
|
231 | + ); |
|
232 | + |
|
233 | + //let's generate the attendee objects |
|
234 | + $attendees = array(); |
|
235 | + $var_array = array( |
|
236 | + 'fname', |
|
237 | + 'lname', |
|
238 | + 'email', |
|
239 | + 'address', |
|
240 | + 'address2', |
|
241 | + 'city', |
|
242 | + 'staid', |
|
243 | + 'cntry', |
|
244 | + 'zip', |
|
245 | + 'phone', |
|
246 | + 'deleted', |
|
247 | + 'attid' |
|
248 | + ); |
|
249 | + |
|
250 | + //EE_Registry::instance()->load_class( 'Attendee', array(), FALSE, false, TRUE ); |
|
251 | + foreach ($dummy_attendees as $dummy) { |
|
252 | + $att = array_combine($var_array, $dummy); |
|
253 | + extract($att); |
|
254 | + /** @var $fname string */ |
|
255 | + /** @var $lname string */ |
|
256 | + /** @var $address string */ |
|
257 | + /** @var $address2 string */ |
|
258 | + /** @var $city string */ |
|
259 | + /** @var $staid string */ |
|
260 | + /** @var $cntry string */ |
|
261 | + /** @var $zip string */ |
|
262 | + /** @var $email string */ |
|
263 | + /** @var $phone string */ |
|
264 | + /** @var $attid string */ |
|
265 | + $attendees[$attid] = EE_Attendee::new_instance( |
|
266 | + array( |
|
267 | + 'ATT_fname' => $fname, |
|
268 | + 'ATT_lname' => $lname, |
|
269 | + 'ATT_address' => $address, |
|
270 | + 'ATT_address2' => $address2, |
|
271 | + 'ATT_city' => $city, |
|
272 | + 'STA_ID' => $staid, |
|
273 | + 'CNT_ISO' => $cntry, |
|
274 | + 'ATT_zip' => $zip, |
|
275 | + 'ATT_email' => $email, |
|
276 | + 'ATT_phone' => $phone, |
|
277 | + 'ATT_ID' => $attid |
|
278 | + ) |
|
279 | + ); |
|
280 | + } |
|
281 | + |
|
282 | + return $attendees; |
|
283 | + } |
|
284 | 284 | |
285 | 285 | |
286 | - /** |
|
287 | - * Return an array of dummy question objects indexed by answer id and dummy answer objects indexed by answer id. |
|
288 | - * This will be used in our dummy data setup |
|
289 | - * @return array |
|
290 | - */ |
|
291 | - private function _get_some_q_and_as() |
|
292 | - { |
|
293 | - |
|
294 | - |
|
295 | - $quests_array = array( |
|
296 | - 0 => array( |
|
297 | - 555, |
|
298 | - __('What is your favorite planet?', 'event_espresso'), |
|
299 | - 0 |
|
300 | - ), |
|
301 | - 1 => array( |
|
302 | - 556, |
|
303 | - __('What is your favorite food?', 'event_espresso'), |
|
304 | - 0 |
|
305 | - ), |
|
306 | - 2 => array( |
|
307 | - 557, |
|
308 | - __('How many lightyears have you travelled', 'event_espresso'), |
|
309 | - 0 |
|
310 | - ) |
|
311 | - ); |
|
312 | - |
|
313 | - |
|
314 | - $ans_array = array( |
|
315 | - 0 => array( |
|
316 | - 999, |
|
317 | - 555, |
|
318 | - 'Tattoine' |
|
319 | - ), |
|
320 | - 1 => array( |
|
321 | - 1000, |
|
322 | - 555, |
|
323 | - 'Alderaan' |
|
324 | - ), |
|
325 | - 2 => array( |
|
326 | - 1001, |
|
327 | - 555, |
|
328 | - 'Dantooine' |
|
329 | - ), |
|
330 | - 3 => array( |
|
331 | - 1002, |
|
332 | - 556, |
|
333 | - 'Fish Fingers' |
|
334 | - ), |
|
335 | - 4 => array( |
|
336 | - 1003, |
|
337 | - 556, |
|
338 | - 'Sushi' |
|
339 | - ), |
|
340 | - 5 => array( |
|
341 | - 1004, |
|
342 | - 556, |
|
343 | - 'Water' |
|
344 | - ), |
|
345 | - 6 => array( |
|
346 | - 1005, |
|
347 | - 557, |
|
348 | - 'A lot', |
|
349 | - ), |
|
350 | - 7 => array( |
|
351 | - 1006, |
|
352 | - 557, |
|
353 | - "That's none of your business." |
|
354 | - ), |
|
355 | - 8 => array( |
|
356 | - 1007, |
|
357 | - 557, |
|
358 | - "People less travel me then." |
|
359 | - ) |
|
360 | - ); |
|
361 | - |
|
362 | - $qst_columns = array('QST_ID', 'QST_display_text', 'QST_system'); |
|
363 | - $ans_columns = array('ANS_ID', 'QST_ID', 'ANS_value'); |
|
364 | - |
|
365 | - //EE_Registry::instance()->load_class( 'Question', array(), FALSE, TRUE, TRUE ); |
|
366 | - //EE_Registry::instance()->load_class( 'Answer', array(), FALSE, TRUE, TRUE ); |
|
367 | - |
|
368 | - $qsts = array(); |
|
369 | - //first the questions |
|
370 | - foreach ($quests_array as $qst) { |
|
371 | - $qstobj = array_combine($qst_columns, $qst); |
|
372 | - $qsts[$qstobj['QST_ID']] = EE_Question::new_instance($qstobj); |
|
373 | - } |
|
374 | - |
|
375 | - //now the answers (and we'll setup our arrays) |
|
376 | - $q_n_as = array(); |
|
377 | - foreach ($ans_array as $ans) { |
|
378 | - $ansobj = array_combine($ans_columns, $ans); |
|
379 | - $ansobj = EE_Answer::new_instance($ansobj); |
|
380 | - $q_n_as['answers'][$ansobj->ID()] = $ansobj; |
|
381 | - $q_n_as['questions'][$ansobj->ID()] = $qsts[$ansobj->get('QST_ID')]; |
|
382 | - } |
|
383 | - |
|
384 | - return $q_n_as; |
|
385 | - |
|
386 | - } |
|
286 | + /** |
|
287 | + * Return an array of dummy question objects indexed by answer id and dummy answer objects indexed by answer id. |
|
288 | + * This will be used in our dummy data setup |
|
289 | + * @return array |
|
290 | + */ |
|
291 | + private function _get_some_q_and_as() |
|
292 | + { |
|
293 | + |
|
294 | + |
|
295 | + $quests_array = array( |
|
296 | + 0 => array( |
|
297 | + 555, |
|
298 | + __('What is your favorite planet?', 'event_espresso'), |
|
299 | + 0 |
|
300 | + ), |
|
301 | + 1 => array( |
|
302 | + 556, |
|
303 | + __('What is your favorite food?', 'event_espresso'), |
|
304 | + 0 |
|
305 | + ), |
|
306 | + 2 => array( |
|
307 | + 557, |
|
308 | + __('How many lightyears have you travelled', 'event_espresso'), |
|
309 | + 0 |
|
310 | + ) |
|
311 | + ); |
|
312 | + |
|
313 | + |
|
314 | + $ans_array = array( |
|
315 | + 0 => array( |
|
316 | + 999, |
|
317 | + 555, |
|
318 | + 'Tattoine' |
|
319 | + ), |
|
320 | + 1 => array( |
|
321 | + 1000, |
|
322 | + 555, |
|
323 | + 'Alderaan' |
|
324 | + ), |
|
325 | + 2 => array( |
|
326 | + 1001, |
|
327 | + 555, |
|
328 | + 'Dantooine' |
|
329 | + ), |
|
330 | + 3 => array( |
|
331 | + 1002, |
|
332 | + 556, |
|
333 | + 'Fish Fingers' |
|
334 | + ), |
|
335 | + 4 => array( |
|
336 | + 1003, |
|
337 | + 556, |
|
338 | + 'Sushi' |
|
339 | + ), |
|
340 | + 5 => array( |
|
341 | + 1004, |
|
342 | + 556, |
|
343 | + 'Water' |
|
344 | + ), |
|
345 | + 6 => array( |
|
346 | + 1005, |
|
347 | + 557, |
|
348 | + 'A lot', |
|
349 | + ), |
|
350 | + 7 => array( |
|
351 | + 1006, |
|
352 | + 557, |
|
353 | + "That's none of your business." |
|
354 | + ), |
|
355 | + 8 => array( |
|
356 | + 1007, |
|
357 | + 557, |
|
358 | + "People less travel me then." |
|
359 | + ) |
|
360 | + ); |
|
361 | + |
|
362 | + $qst_columns = array('QST_ID', 'QST_display_text', 'QST_system'); |
|
363 | + $ans_columns = array('ANS_ID', 'QST_ID', 'ANS_value'); |
|
364 | + |
|
365 | + //EE_Registry::instance()->load_class( 'Question', array(), FALSE, TRUE, TRUE ); |
|
366 | + //EE_Registry::instance()->load_class( 'Answer', array(), FALSE, TRUE, TRUE ); |
|
367 | + |
|
368 | + $qsts = array(); |
|
369 | + //first the questions |
|
370 | + foreach ($quests_array as $qst) { |
|
371 | + $qstobj = array_combine($qst_columns, $qst); |
|
372 | + $qsts[$qstobj['QST_ID']] = EE_Question::new_instance($qstobj); |
|
373 | + } |
|
374 | + |
|
375 | + //now the answers (and we'll setup our arrays) |
|
376 | + $q_n_as = array(); |
|
377 | + foreach ($ans_array as $ans) { |
|
378 | + $ansobj = array_combine($ans_columns, $ans); |
|
379 | + $ansobj = EE_Answer::new_instance($ansobj); |
|
380 | + $q_n_as['answers'][$ansobj->ID()] = $ansobj; |
|
381 | + $q_n_as['questions'][$ansobj->ID()] = $qsts[$ansobj->get('QST_ID')]; |
|
382 | + } |
|
383 | + |
|
384 | + return $q_n_as; |
|
385 | + |
|
386 | + } |
|
387 | 387 | |
388 | 388 | |
389 | - /** |
|
390 | - * Return an array of event objects from the database |
|
391 | - * |
|
392 | - * If event ids are not included then we'll just retrieve the first published event from the database. |
|
393 | - * |
|
394 | - * @param array $event_ids if set, this will be an array of event ids to obtain events for. |
|
395 | - * |
|
396 | - * @return array An array of event objects from the db. |
|
397 | - */ |
|
398 | - private function _get_some_events($event_ids = array()) |
|
399 | - { |
|
400 | - |
|
401 | - //HEY, if we have an evt_id then we want to make sure we use that for the preview (because a specific event template is being viewed); |
|
402 | - $event_ids = isset($_REQUEST['evt_id']) && ! empty($_REQUEST['evt_id']) |
|
403 | - ? array($_REQUEST['evt_id']) |
|
404 | - : $event_ids; |
|
405 | - |
|
406 | - $limit = ! empty($event_ids) |
|
407 | - ? null |
|
408 | - : apply_filters('FHEE__EE_Messages_Preview_incoming_data___get_some_events__limit', '0,1'); |
|
409 | - |
|
410 | - $where = ! empty($event_ids) |
|
411 | - ? array( |
|
412 | - 'EVT_ID' => array('IN', $event_ids), |
|
413 | - 'Datetime.Ticket.TKT_ID' => array('>', 1) |
|
414 | - ) |
|
415 | - : array('Datetime.Ticket.TKT_ID' => array('>', 1)); |
|
416 | - |
|
417 | - $events = EE_Registry::instance()->load_model('Event')->get_all(array($where, 'limit' => $limit)); |
|
418 | - |
|
419 | - return $events; |
|
420 | - } |
|
389 | + /** |
|
390 | + * Return an array of event objects from the database |
|
391 | + * |
|
392 | + * If event ids are not included then we'll just retrieve the first published event from the database. |
|
393 | + * |
|
394 | + * @param array $event_ids if set, this will be an array of event ids to obtain events for. |
|
395 | + * |
|
396 | + * @return array An array of event objects from the db. |
|
397 | + */ |
|
398 | + private function _get_some_events($event_ids = array()) |
|
399 | + { |
|
400 | + |
|
401 | + //HEY, if we have an evt_id then we want to make sure we use that for the preview (because a specific event template is being viewed); |
|
402 | + $event_ids = isset($_REQUEST['evt_id']) && ! empty($_REQUEST['evt_id']) |
|
403 | + ? array($_REQUEST['evt_id']) |
|
404 | + : $event_ids; |
|
405 | + |
|
406 | + $limit = ! empty($event_ids) |
|
407 | + ? null |
|
408 | + : apply_filters('FHEE__EE_Messages_Preview_incoming_data___get_some_events__limit', '0,1'); |
|
409 | + |
|
410 | + $where = ! empty($event_ids) |
|
411 | + ? array( |
|
412 | + 'EVT_ID' => array('IN', $event_ids), |
|
413 | + 'Datetime.Ticket.TKT_ID' => array('>', 1) |
|
414 | + ) |
|
415 | + : array('Datetime.Ticket.TKT_ID' => array('>', 1)); |
|
416 | + |
|
417 | + $events = EE_Registry::instance()->load_model('Event')->get_all(array($where, 'limit' => $limit)); |
|
418 | + |
|
419 | + return $events; |
|
420 | + } |
|
421 | 421 | |
422 | 422 | |
423 | - protected function _setup_data() |
|
424 | - { |
|
425 | - |
|
426 | - //need to figure out the running total for test purposes so... we're going to create a temp cart and add the tickets to it! |
|
427 | - if (EE_Registry::instance()->SSN instanceof EE_Session) { |
|
428 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
429 | - $session = EE_Registry::instance()->SSN; |
|
430 | - } else { |
|
431 | - $session = EE_Registry::instance()->load_core('Session'); |
|
432 | - } |
|
433 | - $cart = EE_Cart::instance(null, $session); |
|
434 | - |
|
435 | - |
|
436 | - //add tickets to cart |
|
437 | - foreach ($this->tickets as $ticket) { |
|
438 | - $cart->add_ticket_to_cart($ticket['ticket']); |
|
439 | - } |
|
440 | - |
|
441 | - |
|
442 | - //setup txn property |
|
443 | - $this->txn = EE_Transaction::new_instance( |
|
444 | - array( |
|
445 | - 'TXN_timestamp' => time(), //unix timestamp |
|
446 | - 'TXN_total' => 0, //txn_total |
|
447 | - 'TXN_paid' => 0, //txn_paid |
|
448 | - 'STS_ID' => EEM_Transaction::incomplete_status_code, //sts_id |
|
449 | - 'TXN_session_data' => null, //dump of txn session object (we're just going to leave blank here) |
|
450 | - 'TXN_hash_salt' => null, //hash salt blank as well |
|
451 | - 'TXN_ID' => 999999 |
|
452 | - ) |
|
453 | - ); |
|
454 | - |
|
455 | - |
|
456 | - //setup reg_objects |
|
457 | - //note we're setting up a reg object for each attendee in each event but ALSO adding to the reg_object array. |
|
458 | - $this->reg_objs = array(); |
|
459 | - $regid = 9999990; |
|
460 | - foreach ($this->_attendees as $key => $attendee) { |
|
461 | - //note we need to setup reg_objects for each event this attendee belongs to |
|
462 | - $regatt = $attendee['att_obj'] instanceof EE_Attendee ? $attendee['att_obj']->ID() : null; |
|
463 | - $regtxn = $this->txn->ID(); |
|
464 | - $regcnt = 1; |
|
465 | - foreach ($attendee['line_ref'] as $evtid) { |
|
466 | - foreach ($this->_events[$evtid]['tkt_objs'] as $ticket) { |
|
467 | - if ( ! $ticket instanceof EE_Ticket) { |
|
468 | - continue; |
|
469 | - } |
|
470 | - $reg_array = array( |
|
471 | - 'EVT_ID' => $evtid, |
|
472 | - 'ATT_ID' => $regatt, |
|
473 | - 'TXN_ID' => $regtxn, |
|
474 | - 'TKT_ID' => $ticket->ID(), |
|
475 | - 'STS_ID' => EEM_Registration::status_id_pending_payment, |
|
476 | - 'REG_date' => time(), |
|
477 | - 'REG_final_price' => $ticket->get('TKT_price'), |
|
478 | - 'REG_session' => 'dummy_session_id', |
|
479 | - 'REG_code' => $regid . '-dummy-generated-code', |
|
480 | - 'REG_url_link' => $regcnt . '-daafpapasdlfakasdfpqasdfasdf', |
|
481 | - 'REG_count' => $regcnt, |
|
482 | - 'REG_group_size' => $this->_events[$evtid]['total_attendees'], |
|
483 | - 'REG_att_is_going' => true, |
|
484 | - 'REG_ID' => $regid |
|
485 | - ); |
|
486 | - $REG_OBJ = EE_Registration::new_instance($reg_array); |
|
487 | - $this->_attendees[$key]['reg_objs'][$regid] = $REG_OBJ; |
|
488 | - $this->_events[$evtid]['reg_objs'][] = $REG_OBJ; |
|
489 | - $this->reg_objs[] = $REG_OBJ; |
|
490 | - $this->tickets[$ticket->ID()]['reg_objs'][$regid] = $REG_OBJ; |
|
423 | + protected function _setup_data() |
|
424 | + { |
|
425 | + |
|
426 | + //need to figure out the running total for test purposes so... we're going to create a temp cart and add the tickets to it! |
|
427 | + if (EE_Registry::instance()->SSN instanceof EE_Session) { |
|
428 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
429 | + $session = EE_Registry::instance()->SSN; |
|
430 | + } else { |
|
431 | + $session = EE_Registry::instance()->load_core('Session'); |
|
432 | + } |
|
433 | + $cart = EE_Cart::instance(null, $session); |
|
434 | + |
|
435 | + |
|
436 | + //add tickets to cart |
|
437 | + foreach ($this->tickets as $ticket) { |
|
438 | + $cart->add_ticket_to_cart($ticket['ticket']); |
|
439 | + } |
|
440 | + |
|
441 | + |
|
442 | + //setup txn property |
|
443 | + $this->txn = EE_Transaction::new_instance( |
|
444 | + array( |
|
445 | + 'TXN_timestamp' => time(), //unix timestamp |
|
446 | + 'TXN_total' => 0, //txn_total |
|
447 | + 'TXN_paid' => 0, //txn_paid |
|
448 | + 'STS_ID' => EEM_Transaction::incomplete_status_code, //sts_id |
|
449 | + 'TXN_session_data' => null, //dump of txn session object (we're just going to leave blank here) |
|
450 | + 'TXN_hash_salt' => null, //hash salt blank as well |
|
451 | + 'TXN_ID' => 999999 |
|
452 | + ) |
|
453 | + ); |
|
454 | + |
|
455 | + |
|
456 | + //setup reg_objects |
|
457 | + //note we're setting up a reg object for each attendee in each event but ALSO adding to the reg_object array. |
|
458 | + $this->reg_objs = array(); |
|
459 | + $regid = 9999990; |
|
460 | + foreach ($this->_attendees as $key => $attendee) { |
|
461 | + //note we need to setup reg_objects for each event this attendee belongs to |
|
462 | + $regatt = $attendee['att_obj'] instanceof EE_Attendee ? $attendee['att_obj']->ID() : null; |
|
463 | + $regtxn = $this->txn->ID(); |
|
464 | + $regcnt = 1; |
|
465 | + foreach ($attendee['line_ref'] as $evtid) { |
|
466 | + foreach ($this->_events[$evtid]['tkt_objs'] as $ticket) { |
|
467 | + if ( ! $ticket instanceof EE_Ticket) { |
|
468 | + continue; |
|
469 | + } |
|
470 | + $reg_array = array( |
|
471 | + 'EVT_ID' => $evtid, |
|
472 | + 'ATT_ID' => $regatt, |
|
473 | + 'TXN_ID' => $regtxn, |
|
474 | + 'TKT_ID' => $ticket->ID(), |
|
475 | + 'STS_ID' => EEM_Registration::status_id_pending_payment, |
|
476 | + 'REG_date' => time(), |
|
477 | + 'REG_final_price' => $ticket->get('TKT_price'), |
|
478 | + 'REG_session' => 'dummy_session_id', |
|
479 | + 'REG_code' => $regid . '-dummy-generated-code', |
|
480 | + 'REG_url_link' => $regcnt . '-daafpapasdlfakasdfpqasdfasdf', |
|
481 | + 'REG_count' => $regcnt, |
|
482 | + 'REG_group_size' => $this->_events[$evtid]['total_attendees'], |
|
483 | + 'REG_att_is_going' => true, |
|
484 | + 'REG_ID' => $regid |
|
485 | + ); |
|
486 | + $REG_OBJ = EE_Registration::new_instance($reg_array); |
|
487 | + $this->_attendees[$key]['reg_objs'][$regid] = $REG_OBJ; |
|
488 | + $this->_events[$evtid]['reg_objs'][] = $REG_OBJ; |
|
489 | + $this->reg_objs[] = $REG_OBJ; |
|
490 | + $this->tickets[$ticket->ID()]['reg_objs'][$regid] = $REG_OBJ; |
|
491 | 491 | |
492 | - $regcnt++; |
|
493 | - $regid++; |
|
494 | - } |
|
495 | - } |
|
496 | - } |
|
497 | - |
|
498 | - |
|
499 | - //setup line items! |
|
500 | - $line_item_total = EEH_Line_Item::create_total_line_item($this->txn); |
|
501 | - |
|
502 | - //add tickets |
|
503 | - foreach ($this->tickets as $tktid => $item) { |
|
504 | - $qty = $item['count']; |
|
505 | - $ticket = $item['ticket']; |
|
506 | - EEH_Line_Item::add_ticket_purchase($line_item_total, $ticket, $qty); |
|
507 | - } |
|
508 | - |
|
509 | - $shipping_line_item = EE_Line_Item::new_instance(array( |
|
510 | - 'LIN_name' => __('Shipping Surcharge', 'event_espresso'), |
|
511 | - 'LIN_desc' => __('Sent via Millenium Falcon', 'event_espresso'), |
|
512 | - 'LIN_unit_price' => 20, |
|
513 | - 'LIN_quantity' => 1, |
|
514 | - 'LIN_is_taxable' => true, |
|
515 | - 'LIN_total' => 20, |
|
516 | - 'LIN_type' => EEM_Line_Item::type_line_item |
|
517 | - )); |
|
518 | - EEH_Line_Item::add_item($line_item_total, $shipping_line_item); |
|
519 | - $this->additional_line_items = array($shipping_line_item); |
|
520 | - |
|
521 | - //now let's add taxes |
|
522 | - EEH_Line_Item::apply_taxes($line_item_total); |
|
523 | - |
|
524 | - //now we should be able to get the items we need from this object |
|
525 | - $event_line_items = EEH_Line_Item::get_pre_tax_subtotal($line_item_total)->children(); |
|
526 | - $line_items = array(); |
|
527 | - foreach ($event_line_items as $line_id => $line_item) { |
|
528 | - if ( ! $line_item instanceof EE_Line_Item || $line_item->OBJ_type() !== 'Event') { |
|
529 | - continue; |
|
530 | - } |
|
531 | - $ticket_line_items = EEH_Line_Item::get_ticket_line_items($line_item); |
|
532 | - foreach ($ticket_line_items as $ticket_line_id => $ticket_line_item) { |
|
533 | - if ( ! $ticket_line_item instanceof EE_Line_Item) { |
|
534 | - continue; |
|
535 | - } |
|
536 | - $this->tickets[$ticket_line_item->OBJ_ID()]['line_item'] = $ticket_line_item; |
|
537 | - $this->tickets[$ticket_line_item->OBJ_ID()]['sub_line_items'] = $ticket_line_item->children(); |
|
538 | - $line_items[$ticket_line_item->ID()]['children'] = $ticket_line_item->children(); |
|
539 | - $line_items[$ticket_line_item->ID()]['EE_Ticket'] = $this->tickets[$ticket_line_item->OBJ_ID()]['ticket']; |
|
540 | - } |
|
541 | - } |
|
542 | - |
|
543 | - $this->line_items_with_children = $line_items; |
|
544 | - $this->tax_line_items = $line_item_total->tax_descendants(); |
|
545 | - |
|
546 | - //add proper total to transaction object. |
|
547 | - $grand_total = $line_item_total->recalculate_total_including_taxes(); |
|
548 | - $this->grand_total_line_item = $line_item_total; |
|
549 | - $this->txn->set_total($grand_total); |
|
550 | - |
|
551 | - |
|
552 | - //add additional details for each registration |
|
553 | - foreach ($this->reg_objs as $reg) { |
|
554 | - if ( ! $reg instanceof EE_Registration) { |
|
555 | - continue; |
|
556 | - } |
|
557 | - $this->_registrations[$reg->ID()]['tkt_obj'] = $this->tickets[$reg->get('TKT_ID')]['ticket']; |
|
558 | - $this->_registrations[$reg->ID()]['evt_obj'] = $this->_events[$reg->get('EVT_ID')]['event']; |
|
559 | - $this->_registrations[$reg->ID()]['reg_obj'] = $reg; |
|
560 | - $this->_registrations[$reg->ID()]['ans_objs'] = $this->_attendees[$reg->get('ATT_ID')]['ans_objs']; |
|
561 | - $this->_registrations[$reg->ID()]['att_obj'] = $this->_attendees[$reg->get('ATT_ID')]['att_obj']; |
|
562 | - $this->_registrations[$reg->ID()]['dtt_objs'] = $this->tickets[$reg->get('TKT_ID')]['dtt_objs']; |
|
563 | - } |
|
564 | - |
|
565 | - |
|
566 | - //events and attendees |
|
567 | - $this->events = $this->_events; |
|
568 | - $this->attendees = $this->_attendees; |
|
569 | - $this->registrations = $this->_registrations; |
|
570 | - |
|
571 | - $attendees_to_shift = $this->_attendees; |
|
572 | - |
|
573 | - //setup primary attendee property |
|
574 | - $this->primary_attendee_data = array( |
|
575 | - 'fname' => $this->_attendees[999999991]['att_obj'] instanceof EE_Attendee |
|
576 | - ? $this->_attendees[999999991]['att_obj']->fname() |
|
577 | - : '', |
|
492 | + $regcnt++; |
|
493 | + $regid++; |
|
494 | + } |
|
495 | + } |
|
496 | + } |
|
497 | + |
|
498 | + |
|
499 | + //setup line items! |
|
500 | + $line_item_total = EEH_Line_Item::create_total_line_item($this->txn); |
|
501 | + |
|
502 | + //add tickets |
|
503 | + foreach ($this->tickets as $tktid => $item) { |
|
504 | + $qty = $item['count']; |
|
505 | + $ticket = $item['ticket']; |
|
506 | + EEH_Line_Item::add_ticket_purchase($line_item_total, $ticket, $qty); |
|
507 | + } |
|
508 | + |
|
509 | + $shipping_line_item = EE_Line_Item::new_instance(array( |
|
510 | + 'LIN_name' => __('Shipping Surcharge', 'event_espresso'), |
|
511 | + 'LIN_desc' => __('Sent via Millenium Falcon', 'event_espresso'), |
|
512 | + 'LIN_unit_price' => 20, |
|
513 | + 'LIN_quantity' => 1, |
|
514 | + 'LIN_is_taxable' => true, |
|
515 | + 'LIN_total' => 20, |
|
516 | + 'LIN_type' => EEM_Line_Item::type_line_item |
|
517 | + )); |
|
518 | + EEH_Line_Item::add_item($line_item_total, $shipping_line_item); |
|
519 | + $this->additional_line_items = array($shipping_line_item); |
|
520 | + |
|
521 | + //now let's add taxes |
|
522 | + EEH_Line_Item::apply_taxes($line_item_total); |
|
523 | + |
|
524 | + //now we should be able to get the items we need from this object |
|
525 | + $event_line_items = EEH_Line_Item::get_pre_tax_subtotal($line_item_total)->children(); |
|
526 | + $line_items = array(); |
|
527 | + foreach ($event_line_items as $line_id => $line_item) { |
|
528 | + if ( ! $line_item instanceof EE_Line_Item || $line_item->OBJ_type() !== 'Event') { |
|
529 | + continue; |
|
530 | + } |
|
531 | + $ticket_line_items = EEH_Line_Item::get_ticket_line_items($line_item); |
|
532 | + foreach ($ticket_line_items as $ticket_line_id => $ticket_line_item) { |
|
533 | + if ( ! $ticket_line_item instanceof EE_Line_Item) { |
|
534 | + continue; |
|
535 | + } |
|
536 | + $this->tickets[$ticket_line_item->OBJ_ID()]['line_item'] = $ticket_line_item; |
|
537 | + $this->tickets[$ticket_line_item->OBJ_ID()]['sub_line_items'] = $ticket_line_item->children(); |
|
538 | + $line_items[$ticket_line_item->ID()]['children'] = $ticket_line_item->children(); |
|
539 | + $line_items[$ticket_line_item->ID()]['EE_Ticket'] = $this->tickets[$ticket_line_item->OBJ_ID()]['ticket']; |
|
540 | + } |
|
541 | + } |
|
542 | + |
|
543 | + $this->line_items_with_children = $line_items; |
|
544 | + $this->tax_line_items = $line_item_total->tax_descendants(); |
|
545 | + |
|
546 | + //add proper total to transaction object. |
|
547 | + $grand_total = $line_item_total->recalculate_total_including_taxes(); |
|
548 | + $this->grand_total_line_item = $line_item_total; |
|
549 | + $this->txn->set_total($grand_total); |
|
550 | + |
|
551 | + |
|
552 | + //add additional details for each registration |
|
553 | + foreach ($this->reg_objs as $reg) { |
|
554 | + if ( ! $reg instanceof EE_Registration) { |
|
555 | + continue; |
|
556 | + } |
|
557 | + $this->_registrations[$reg->ID()]['tkt_obj'] = $this->tickets[$reg->get('TKT_ID')]['ticket']; |
|
558 | + $this->_registrations[$reg->ID()]['evt_obj'] = $this->_events[$reg->get('EVT_ID')]['event']; |
|
559 | + $this->_registrations[$reg->ID()]['reg_obj'] = $reg; |
|
560 | + $this->_registrations[$reg->ID()]['ans_objs'] = $this->_attendees[$reg->get('ATT_ID')]['ans_objs']; |
|
561 | + $this->_registrations[$reg->ID()]['att_obj'] = $this->_attendees[$reg->get('ATT_ID')]['att_obj']; |
|
562 | + $this->_registrations[$reg->ID()]['dtt_objs'] = $this->tickets[$reg->get('TKT_ID')]['dtt_objs']; |
|
563 | + } |
|
564 | + |
|
565 | + |
|
566 | + //events and attendees |
|
567 | + $this->events = $this->_events; |
|
568 | + $this->attendees = $this->_attendees; |
|
569 | + $this->registrations = $this->_registrations; |
|
570 | + |
|
571 | + $attendees_to_shift = $this->_attendees; |
|
572 | + |
|
573 | + //setup primary attendee property |
|
574 | + $this->primary_attendee_data = array( |
|
575 | + 'fname' => $this->_attendees[999999991]['att_obj'] instanceof EE_Attendee |
|
576 | + ? $this->_attendees[999999991]['att_obj']->fname() |
|
577 | + : '', |
|
578 | 578 | |
579 | - 'lname' => $this->_attendees[999999991]['att_obj'] instanceof EE_Attendee |
|
580 | - ? $this->_attendees[999999991]['att_obj']->lname() |
|
581 | - : '', |
|
579 | + 'lname' => $this->_attendees[999999991]['att_obj'] instanceof EE_Attendee |
|
580 | + ? $this->_attendees[999999991]['att_obj']->lname() |
|
581 | + : '', |
|
582 | 582 | |
583 | - 'email' => $this->_attendees[999999991]['att_obj'] instanceof EE_Attendee |
|
584 | - ? $this->_attendees[999999991]['att_obj']->email() |
|
585 | - : '', |
|
583 | + 'email' => $this->_attendees[999999991]['att_obj'] instanceof EE_Attendee |
|
584 | + ? $this->_attendees[999999991]['att_obj']->email() |
|
585 | + : '', |
|
586 | 586 | |
587 | - 'att_obj' => $this->_attendees[999999991]['att_obj'], |
|
587 | + 'att_obj' => $this->_attendees[999999991]['att_obj'], |
|
588 | 588 | |
589 | - 'reg_obj' => array_shift($attendees_to_shift[999999991]['reg_objs']) |
|
590 | - ); |
|
589 | + 'reg_obj' => array_shift($attendees_to_shift[999999991]['reg_objs']) |
|
590 | + ); |
|
591 | 591 | |
592 | - //reg_info property |
|
593 | - //note this isn't referenced by any shortcode parsers so we'll ignore for now. |
|
594 | - $this->reg_info = array(); |
|
592 | + //reg_info property |
|
593 | + //note this isn't referenced by any shortcode parsers so we'll ignore for now. |
|
594 | + $this->reg_info = array(); |
|
595 | 595 | |
596 | - //let's set a reg_obj for messengers expecting one. |
|
597 | - $this->reg_obj = array_pop($this->_attendees[999999991]['reg_objs']); |
|
596 | + //let's set a reg_obj for messengers expecting one. |
|
597 | + $this->reg_obj = array_pop($this->_attendees[999999991]['reg_objs']); |
|
598 | 598 | |
599 | 599 | |
600 | - //the below are just dummy items. |
|
601 | - $this->user_id = 1; |
|
602 | - $this->ip_address = '192.0.2.1'; |
|
603 | - $this->user_agent = ''; |
|
604 | - $this->init_access = time(); |
|
605 | - $this->last_access = time(); |
|
606 | - } |
|
600 | + //the below are just dummy items. |
|
601 | + $this->user_id = 1; |
|
602 | + $this->ip_address = '192.0.2.1'; |
|
603 | + $this->user_agent = ''; |
|
604 | + $this->init_access = time(); |
|
605 | + $this->last_access = time(); |
|
606 | + } |
|
607 | 607 | |
608 | 608 | } //end EE_Messages_Preview_incoming_data class |
@@ -145,7 +145,7 @@ discard block |
||
145 | 145 | if ( ! $attendee instanceof EE_Attendee) { |
146 | 146 | continue; |
147 | 147 | } |
148 | - $this->_attendees[$att_key]['line_ref'][] = $id; //so later it can be determined what events this attendee registered for! |
|
148 | + $this->_attendees[$att_key]['line_ref'][] = $id; //so later it can be determined what events this attendee registered for! |
|
149 | 149 | $this->_attendees[$att_key]['evt_objs'][] = $event; |
150 | 150 | $this->_attendees[$att_key]['att_obj'] = $attendee; |
151 | 151 | //$this->_attendees[$att_key]['registration_id'] = 0; |
@@ -467,7 +467,7 @@ discard block |
||
467 | 467 | if ( ! $ticket instanceof EE_Ticket) { |
468 | 468 | continue; |
469 | 469 | } |
470 | - $reg_array = array( |
|
470 | + $reg_array = array( |
|
471 | 471 | 'EVT_ID' => $evtid, |
472 | 472 | 'ATT_ID' => $regatt, |
473 | 473 | 'TXN_ID' => $regtxn, |
@@ -476,8 +476,8 @@ discard block |
||
476 | 476 | 'REG_date' => time(), |
477 | 477 | 'REG_final_price' => $ticket->get('TKT_price'), |
478 | 478 | 'REG_session' => 'dummy_session_id', |
479 | - 'REG_code' => $regid . '-dummy-generated-code', |
|
480 | - 'REG_url_link' => $regcnt . '-daafpapasdlfakasdfpqasdfasdf', |
|
479 | + 'REG_code' => $regid.'-dummy-generated-code', |
|
480 | + 'REG_url_link' => $regcnt.'-daafpapasdlfakasdfpqasdfasdf', |
|
481 | 481 | 'REG_count' => $regcnt, |
482 | 482 | 'REG_group_size' => $this->_events[$evtid]['total_attendees'], |
483 | 483 | 'REG_att_is_going' => true, |
@@ -1,7 +1,7 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
4 | - exit('NO direct script access allowed'); |
|
4 | + exit('NO direct script access allowed'); |
|
5 | 5 | } |
6 | 6 | |
7 | 7 | /** |
@@ -36,80 +36,80 @@ discard block |
||
36 | 36 | { |
37 | 37 | |
38 | 38 | |
39 | - public function __construct() |
|
40 | - { |
|
41 | - parent::__construct(); |
|
42 | - } |
|
39 | + public function __construct() |
|
40 | + { |
|
41 | + parent::__construct(); |
|
42 | + } |
|
43 | 43 | |
44 | 44 | |
45 | - protected function _init_props() |
|
46 | - { |
|
47 | - $this->label = __('Questions and Answers Shortcodes', 'event_espresso'); |
|
48 | - $this->description = __('All shortcodes related to custom questions and answers', 'event_espresso'); |
|
49 | - $this->_shortcodes = array( |
|
50 | - '[QUESTION_LIST]' => __('This is used to indicate where you want the list of questions and answers to show for the registrant. You place this within the "[attendee_list]" field.', |
|
51 | - 'event_espresso') |
|
52 | - ); |
|
53 | - } |
|
45 | + protected function _init_props() |
|
46 | + { |
|
47 | + $this->label = __('Questions and Answers Shortcodes', 'event_espresso'); |
|
48 | + $this->description = __('All shortcodes related to custom questions and answers', 'event_espresso'); |
|
49 | + $this->_shortcodes = array( |
|
50 | + '[QUESTION_LIST]' => __('This is used to indicate where you want the list of questions and answers to show for the registrant. You place this within the "[attendee_list]" field.', |
|
51 | + 'event_espresso') |
|
52 | + ); |
|
53 | + } |
|
54 | 54 | |
55 | 55 | |
56 | - protected function _parser($shortcode) |
|
57 | - { |
|
56 | + protected function _parser($shortcode) |
|
57 | + { |
|
58 | 58 | |
59 | 59 | |
60 | - switch ($shortcode) { |
|
61 | - case '[QUESTION_LIST]' : |
|
62 | - return $this->_get_question_list(); |
|
63 | - break; |
|
64 | - } |
|
60 | + switch ($shortcode) { |
|
61 | + case '[QUESTION_LIST]' : |
|
62 | + return $this->_get_question_list(); |
|
63 | + break; |
|
64 | + } |
|
65 | 65 | |
66 | - return ''; |
|
67 | - } |
|
66 | + return ''; |
|
67 | + } |
|
68 | 68 | |
69 | 69 | |
70 | - protected function _get_question_list() |
|
71 | - { |
|
72 | - $this->_validate_list_requirements(); |
|
70 | + protected function _get_question_list() |
|
71 | + { |
|
72 | + $this->_validate_list_requirements(); |
|
73 | 73 | |
74 | - //for when [QUESTION_LIST] is used in the [attendee_list] field. |
|
75 | - if ($this->_data['data'] instanceof EE_Registration) { |
|
76 | - return $this->_get_question_answer_list_for_attendee(); |
|
77 | - } //for when [QUESTION_LIST] is used in the main content field. |
|
78 | - else if ($this->_data['data'] instanceof EE_Messages_Addressee && $this->_data['data']->reg_obj instanceof EE_Registration) { |
|
79 | - return $this->_get_question_answer_list_for_attendee($this->_data['data']->reg_obj); |
|
80 | - } else { |
|
81 | - return ''; |
|
82 | - } |
|
83 | - } |
|
74 | + //for when [QUESTION_LIST] is used in the [attendee_list] field. |
|
75 | + if ($this->_data['data'] instanceof EE_Registration) { |
|
76 | + return $this->_get_question_answer_list_for_attendee(); |
|
77 | + } //for when [QUESTION_LIST] is used in the main content field. |
|
78 | + else if ($this->_data['data'] instanceof EE_Messages_Addressee && $this->_data['data']->reg_obj instanceof EE_Registration) { |
|
79 | + return $this->_get_question_answer_list_for_attendee($this->_data['data']->reg_obj); |
|
80 | + } else { |
|
81 | + return ''; |
|
82 | + } |
|
83 | + } |
|
84 | 84 | |
85 | 85 | |
86 | - /** |
|
87 | - * Note when we parse the "[question_list]" shortcode for attendees we're actually going to retrieve the list of |
|
88 | - * answers for that attendee since that is what we really need (we can derive the questions from the answers); |
|
89 | - * @return string parsed template. |
|
90 | - */ |
|
91 | - private function _get_question_answer_list_for_attendee($reg_obj = null) |
|
92 | - { |
|
93 | - $valid_shortcodes = array('question'); |
|
94 | - $reg_obj = $reg_obj instanceof EE_Registration ? $reg_obj : $this->_data['data']; |
|
95 | - $template = is_array($this->_data['template']) && isset($this->_data['template']['question_list']) ? $this->_data['template']['question_list'] : ''; |
|
96 | - $template = empty($template) && isset($this->_extra_data['template']['question_list']) ? $this->_extra_data['template']['question_list'] : $template; |
|
97 | - $ans_result = ''; |
|
98 | - $answers = ! empty($this->_extra_data['data']->registrations[$reg_obj->ID()]['ans_objs']) ? $this->_extra_data['data']->registrations[$reg_obj->ID()]['ans_objs'] : array(); |
|
99 | - $questions = ! empty($this->_extra_data['data']->questions) ? $this->_extra_data['data']->questions : array(); |
|
100 | - foreach ($answers as $answer) { |
|
101 | - //first see if the question is in our $questions array. If not then try to get from answer object |
|
102 | - $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
103 | - $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
|
104 | - if ($question instanceof EE_Question and $question->admin_only()) { |
|
105 | - continue; |
|
106 | - } |
|
107 | - $ans_result .= $this->_shortcode_helper->parse_question_list_template($template, $answer, $valid_shortcodes, |
|
108 | - $this->_extra_data); |
|
109 | - } |
|
86 | + /** |
|
87 | + * Note when we parse the "[question_list]" shortcode for attendees we're actually going to retrieve the list of |
|
88 | + * answers for that attendee since that is what we really need (we can derive the questions from the answers); |
|
89 | + * @return string parsed template. |
|
90 | + */ |
|
91 | + private function _get_question_answer_list_for_attendee($reg_obj = null) |
|
92 | + { |
|
93 | + $valid_shortcodes = array('question'); |
|
94 | + $reg_obj = $reg_obj instanceof EE_Registration ? $reg_obj : $this->_data['data']; |
|
95 | + $template = is_array($this->_data['template']) && isset($this->_data['template']['question_list']) ? $this->_data['template']['question_list'] : ''; |
|
96 | + $template = empty($template) && isset($this->_extra_data['template']['question_list']) ? $this->_extra_data['template']['question_list'] : $template; |
|
97 | + $ans_result = ''; |
|
98 | + $answers = ! empty($this->_extra_data['data']->registrations[$reg_obj->ID()]['ans_objs']) ? $this->_extra_data['data']->registrations[$reg_obj->ID()]['ans_objs'] : array(); |
|
99 | + $questions = ! empty($this->_extra_data['data']->questions) ? $this->_extra_data['data']->questions : array(); |
|
100 | + foreach ($answers as $answer) { |
|
101 | + //first see if the question is in our $questions array. If not then try to get from answer object |
|
102 | + $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
103 | + $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
|
104 | + if ($question instanceof EE_Question and $question->admin_only()) { |
|
105 | + continue; |
|
106 | + } |
|
107 | + $ans_result .= $this->_shortcode_helper->parse_question_list_template($template, $answer, $valid_shortcodes, |
|
108 | + $this->_extra_data); |
|
109 | + } |
|
110 | 110 | |
111 | - return $ans_result; |
|
112 | - } |
|
111 | + return $ans_result; |
|
112 | + } |
|
113 | 113 | |
114 | 114 | |
115 | 115 | } //end EE_Question_List_Shortcodes class |
@@ -99,7 +99,7 @@ |
||
99 | 99 | $questions = ! empty($this->_extra_data['data']->questions) ? $this->_extra_data['data']->questions : array(); |
100 | 100 | foreach ($answers as $answer) { |
101 | 101 | //first see if the question is in our $questions array. If not then try to get from answer object |
102 | - $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
102 | + $question = isset($questions[$answer->ID()]) ? $questions[$answer->ID()] : null; |
|
103 | 103 | $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
104 | 104 | if ($question instanceof EE_Question and $question->admin_only()) { |
105 | 105 | continue; |
@@ -26,13 +26,13 @@ discard block |
||
26 | 26 | |
27 | 27 | <p class="contact-details-buttons"> |
28 | 28 | <?php if ( |
29 | - $att_check instanceof EE_Attendee |
|
30 | - && EE_Registry::instance()->CAP->current_user_can( |
|
31 | - 'ee_edit_contact', |
|
32 | - 'view_or_edit_contact_button', |
|
33 | - $att_check->ID() |
|
34 | - ) |
|
35 | - ) : ?> |
|
29 | + $att_check instanceof EE_Attendee |
|
30 | + && EE_Registry::instance()->CAP->current_user_can( |
|
31 | + 'ee_edit_contact', |
|
32 | + 'view_or_edit_contact_button', |
|
33 | + $att_check->ID() |
|
34 | + ) |
|
35 | + ) : ?> |
|
36 | 36 | <a class="button button-small" href="<?php echo $att_edit_link; ?>" |
37 | 37 | title="<?php echo esc_attr($att_edit_label); ?>"> |
38 | 38 | <span class="ee-icon ee-icon-user-edit"></span><?php echo $att_edit_label; ?> |
@@ -40,7 +40,7 @@ discard block |
||
40 | 40 | <?php if (! empty($create_link)) : ?> |
41 | 41 | <a class="button button-small" href="<?php echo $create_link; ?>" |
42 | 42 | title="<?php esc_attr_e('This registration shares the contact details for the primary registration in this group. If you\'d like this registration to have its own details, you can do so by clicking this button', |
43 | - 'event_espresso'); ?>"> |
|
43 | + 'event_espresso'); ?>"> |
|
44 | 44 | <span class="ee-icon ee-icon-user-add-new"></span><?php echo $create_label; ?> |
45 | 45 | </a> |
46 | 46 | <?php endif; ?> |
@@ -2,7 +2,7 @@ discard block |
||
2 | 2 | <p class="clearfix"> |
3 | 3 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"> |
4 | 4 | <?php _e('Name', 'event_espresso'); ?> |
5 | - </span><?php echo $fname . ' ' . $lname; ?> |
|
5 | + </span><?php echo $fname.' '.$lname; ?> |
|
6 | 6 | </p> |
7 | 7 | <p class="clearfix"> |
8 | 8 | <span class="admin-side-mbox-label-spn lt-grey-txt float-left"><?php _e('Email', 'event_espresso'); ?></span><a |
@@ -37,7 +37,7 @@ discard block |
||
37 | 37 | title="<?php echo esc_attr($att_edit_label); ?>"> |
38 | 38 | <span class="ee-icon ee-icon-user-edit"></span><?php echo $att_edit_label; ?> |
39 | 39 | </a> |
40 | - <?php if (! empty($create_link)) : ?> |
|
40 | + <?php if ( ! empty($create_link)) : ?> |
|
41 | 41 | <a class="button button-small" href="<?php echo $create_link; ?>" |
42 | 42 | title="<?php esc_attr_e('This registration shares the contact details for the primary registration in this group. If you\'d like this registration to have its own details, you can do so by clicking this button', |
43 | 43 | 'event_espresso'); ?>"> |
@@ -1,6 +1,6 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
3 | - exit('NO direct script access allowed'); |
|
3 | + exit('NO direct script access allowed'); |
|
4 | 4 | } |
5 | 5 | |
6 | 6 | /** |
@@ -18,130 +18,130 @@ discard block |
||
18 | 18 | class Registration_Form_Question_Groups_Help_Tour extends EE_Help_Tour |
19 | 19 | { |
20 | 20 | |
21 | - protected function _set_tour_properties() |
|
22 | - { |
|
23 | - $this->_label = __('Question Groups Tour', 'event_espresso'); |
|
24 | - $this->_slug = $this->_is_caf ? 'question-groups-caf-overview-joyride' : 'question-groups-overview-joyride'; |
|
25 | - } |
|
21 | + protected function _set_tour_properties() |
|
22 | + { |
|
23 | + $this->_label = __('Question Groups Tour', 'event_espresso'); |
|
24 | + $this->_slug = $this->_is_caf ? 'question-groups-caf-overview-joyride' : 'question-groups-overview-joyride'; |
|
25 | + } |
|
26 | 26 | |
27 | 27 | |
28 | - protected function _set_tour_stops() |
|
29 | - { |
|
30 | - $this->_stops = array( |
|
31 | - 10 => array( |
|
32 | - 'content' => $this->_start(), |
|
33 | - ) |
|
34 | - ); |
|
28 | + protected function _set_tour_stops() |
|
29 | + { |
|
30 | + $this->_stops = array( |
|
31 | + 10 => array( |
|
32 | + 'content' => $this->_start(), |
|
33 | + ) |
|
34 | + ); |
|
35 | 35 | |
36 | - if ($this->_is_caf) { |
|
37 | - $this->_stops[20] = array( |
|
38 | - 'id' => 'name', |
|
39 | - 'content' => $this->_name_stop(), |
|
40 | - 'options' => array( |
|
41 | - 'tipLocation' => 'top', |
|
42 | - 'tipAdjustmentY' => -30, |
|
43 | - 'tipAdjustmentX' => 25 |
|
44 | - ) |
|
45 | - ); |
|
46 | - $this->_stops[30] = array( |
|
47 | - 'id' => 'description', |
|
48 | - 'content' => $this->_description_stop(), |
|
49 | - 'options' => array( |
|
50 | - 'tipLocation' => 'top', |
|
51 | - 'tipAdjustmentY' => -30, |
|
52 | - 'tipAdjustmentX' => 20 |
|
53 | - ) |
|
54 | - ); |
|
55 | - $this->_stops[40] = array( |
|
56 | - 'id' => 'show_group_name', |
|
57 | - 'content' => $this->_show_group_name_stop(), |
|
58 | - 'options' => array( |
|
59 | - 'tipLocation' => 'top', |
|
60 | - 'tipAdjustmentY' => -30, |
|
61 | - 'tipAdjustmentX' => 20 |
|
62 | - ) |
|
63 | - ); |
|
64 | - $this->_stops[50] = array( |
|
65 | - 'id' => 'show_group_desc', |
|
66 | - 'content' => $this->_show_group_description_stop(), |
|
67 | - 'options' => array( |
|
68 | - 'tipLocation' => 'top', |
|
69 | - 'tipAdjustmentY' => -30, |
|
70 | - 'tipAdjustmentX' => 20 |
|
71 | - ) |
|
72 | - ); |
|
73 | - $this->_stops[60] = array( |
|
74 | - 'class' => 'bulkactions', |
|
75 | - 'content' => $this->_bulk_actions_stop(), |
|
76 | - 'options' => array( |
|
77 | - 'tipLocation' => 'left', |
|
78 | - 'tipAdjustmentY' => -50, |
|
79 | - 'tipAdjustmentX' => -80 |
|
80 | - ) |
|
81 | - ); |
|
82 | - $this->_stops[70] = array( |
|
83 | - 'id' => 'add-new-question-group', |
|
84 | - 'content' => $this->_add_new_question_group_stop(), |
|
85 | - 'options' => array( |
|
86 | - 'tipLocation' => 'right', |
|
87 | - 'tipAdjustmentY' => -50, |
|
88 | - 'tipAdjustmentX' => 15 |
|
89 | - ) |
|
90 | - ); |
|
91 | - } |
|
92 | - } |
|
36 | + if ($this->_is_caf) { |
|
37 | + $this->_stops[20] = array( |
|
38 | + 'id' => 'name', |
|
39 | + 'content' => $this->_name_stop(), |
|
40 | + 'options' => array( |
|
41 | + 'tipLocation' => 'top', |
|
42 | + 'tipAdjustmentY' => -30, |
|
43 | + 'tipAdjustmentX' => 25 |
|
44 | + ) |
|
45 | + ); |
|
46 | + $this->_stops[30] = array( |
|
47 | + 'id' => 'description', |
|
48 | + 'content' => $this->_description_stop(), |
|
49 | + 'options' => array( |
|
50 | + 'tipLocation' => 'top', |
|
51 | + 'tipAdjustmentY' => -30, |
|
52 | + 'tipAdjustmentX' => 20 |
|
53 | + ) |
|
54 | + ); |
|
55 | + $this->_stops[40] = array( |
|
56 | + 'id' => 'show_group_name', |
|
57 | + 'content' => $this->_show_group_name_stop(), |
|
58 | + 'options' => array( |
|
59 | + 'tipLocation' => 'top', |
|
60 | + 'tipAdjustmentY' => -30, |
|
61 | + 'tipAdjustmentX' => 20 |
|
62 | + ) |
|
63 | + ); |
|
64 | + $this->_stops[50] = array( |
|
65 | + 'id' => 'show_group_desc', |
|
66 | + 'content' => $this->_show_group_description_stop(), |
|
67 | + 'options' => array( |
|
68 | + 'tipLocation' => 'top', |
|
69 | + 'tipAdjustmentY' => -30, |
|
70 | + 'tipAdjustmentX' => 20 |
|
71 | + ) |
|
72 | + ); |
|
73 | + $this->_stops[60] = array( |
|
74 | + 'class' => 'bulkactions', |
|
75 | + 'content' => $this->_bulk_actions_stop(), |
|
76 | + 'options' => array( |
|
77 | + 'tipLocation' => 'left', |
|
78 | + 'tipAdjustmentY' => -50, |
|
79 | + 'tipAdjustmentX' => -80 |
|
80 | + ) |
|
81 | + ); |
|
82 | + $this->_stops[70] = array( |
|
83 | + 'id' => 'add-new-question-group', |
|
84 | + 'content' => $this->_add_new_question_group_stop(), |
|
85 | + 'options' => array( |
|
86 | + 'tipLocation' => 'right', |
|
87 | + 'tipAdjustmentY' => -50, |
|
88 | + 'tipAdjustmentX' => 15 |
|
89 | + ) |
|
90 | + ); |
|
91 | + } |
|
92 | + } |
|
93 | 93 | |
94 | 94 | |
95 | - protected function _start() |
|
96 | - { |
|
97 | - $content = '<h3>' . __('Question Groups', 'event_espresso') . '</h3>'; |
|
98 | - if ($this->_is_caf) { |
|
99 | - $content .= '<p>' . __('This tour of the Question Groups page will go over different areas of the screen to help you understand what they are used for.', |
|
100 | - 'event_espresso') . '</p>'; |
|
101 | - } else { |
|
102 | - $content .= '<p>' . __('Sorry, Event Espresso Decaf does not have this feature. Please purchase a support license to get access to this feature.', |
|
103 | - 'event_espresso') . '</p>'; |
|
104 | - } |
|
95 | + protected function _start() |
|
96 | + { |
|
97 | + $content = '<h3>' . __('Question Groups', 'event_espresso') . '</h3>'; |
|
98 | + if ($this->_is_caf) { |
|
99 | + $content .= '<p>' . __('This tour of the Question Groups page will go over different areas of the screen to help you understand what they are used for.', |
|
100 | + 'event_espresso') . '</p>'; |
|
101 | + } else { |
|
102 | + $content .= '<p>' . __('Sorry, Event Espresso Decaf does not have this feature. Please purchase a support license to get access to this feature.', |
|
103 | + 'event_espresso') . '</p>'; |
|
104 | + } |
|
105 | 105 | |
106 | - return $content; |
|
107 | - } |
|
106 | + return $content; |
|
107 | + } |
|
108 | 108 | |
109 | - protected function _name_stop() |
|
110 | - { |
|
111 | - return '<p>' . __('View available questions groups. You can reorder your questions by dragging and dropping them.', |
|
112 | - 'event_espresso') . '</p>'; |
|
113 | - } |
|
109 | + protected function _name_stop() |
|
110 | + { |
|
111 | + return '<p>' . __('View available questions groups. You can reorder your questions by dragging and dropping them.', |
|
112 | + 'event_espresso') . '</p>'; |
|
113 | + } |
|
114 | 114 | |
115 | - protected function _description_stop() |
|
116 | - { |
|
117 | - return '<p>' . __('View the question group description.', 'event_espresso') . '</p>'; |
|
118 | - } |
|
115 | + protected function _description_stop() |
|
116 | + { |
|
117 | + return '<p>' . __('View the question group description.', 'event_espresso') . '</p>'; |
|
118 | + } |
|
119 | 119 | |
120 | - protected function _show_group_name_stop() |
|
121 | - { |
|
122 | - return '<p>' . __('View if the name of the question group should be shown to customers.', |
|
123 | - 'event_espresso') . '</p>'; |
|
124 | - } |
|
120 | + protected function _show_group_name_stop() |
|
121 | + { |
|
122 | + return '<p>' . __('View if the name of the question group should be shown to customers.', |
|
123 | + 'event_espresso') . '</p>'; |
|
124 | + } |
|
125 | 125 | |
126 | - protected function _show_group_description_stop() |
|
127 | - { |
|
128 | - return '<p>' . __('View if the description of the question group should be shown to customers.', |
|
129 | - 'event_espresso') . '</p>'; |
|
130 | - } |
|
126 | + protected function _show_group_description_stop() |
|
127 | + { |
|
128 | + return '<p>' . __('View if the description of the question group should be shown to customers.', |
|
129 | + 'event_espresso') . '</p>'; |
|
130 | + } |
|
131 | 131 | |
132 | - protected function _bulk_actions_stop() |
|
133 | - { |
|
134 | - return '<p>' . __('Perform bulk actions to multiple question groups.', 'event_espresso') . '</p>'; |
|
135 | - } |
|
132 | + protected function _bulk_actions_stop() |
|
133 | + { |
|
134 | + return '<p>' . __('Perform bulk actions to multiple question groups.', 'event_espresso') . '</p>'; |
|
135 | + } |
|
136 | 136 | |
137 | - protected function _search_stop() |
|
138 | - { |
|
139 | - return '<p>' . __('Search through questions. The following sources will be searched: question group name and question group description.', |
|
140 | - 'event_espresso') . '</p>'; |
|
141 | - } |
|
137 | + protected function _search_stop() |
|
138 | + { |
|
139 | + return '<p>' . __('Search through questions. The following sources will be searched: question group name and question group description.', |
|
140 | + 'event_espresso') . '</p>'; |
|
141 | + } |
|
142 | 142 | |
143 | - protected function _add_new_question_group_stop() |
|
144 | - { |
|
145 | - return '<p>' . __('Click here to create a new question group.', 'event_espresso') . '</p>'; |
|
146 | - } |
|
143 | + protected function _add_new_question_group_stop() |
|
144 | + { |
|
145 | + return '<p>' . __('Click here to create a new question group.', 'event_espresso') . '</p>'; |
|
146 | + } |
|
147 | 147 | } |
148 | 148 | \ No newline at end of file |
@@ -94,13 +94,13 @@ discard block |
||
94 | 94 | |
95 | 95 | protected function _start() |
96 | 96 | { |
97 | - $content = '<h3>' . __('Question Groups', 'event_espresso') . '</h3>'; |
|
97 | + $content = '<h3>'.__('Question Groups', 'event_espresso').'</h3>'; |
|
98 | 98 | if ($this->_is_caf) { |
99 | - $content .= '<p>' . __('This tour of the Question Groups page will go over different areas of the screen to help you understand what they are used for.', |
|
100 | - 'event_espresso') . '</p>'; |
|
99 | + $content .= '<p>'.__('This tour of the Question Groups page will go over different areas of the screen to help you understand what they are used for.', |
|
100 | + 'event_espresso').'</p>'; |
|
101 | 101 | } else { |
102 | - $content .= '<p>' . __('Sorry, Event Espresso Decaf does not have this feature. Please purchase a support license to get access to this feature.', |
|
103 | - 'event_espresso') . '</p>'; |
|
102 | + $content .= '<p>'.__('Sorry, Event Espresso Decaf does not have this feature. Please purchase a support license to get access to this feature.', |
|
103 | + 'event_espresso').'</p>'; |
|
104 | 104 | } |
105 | 105 | |
106 | 106 | return $content; |
@@ -108,40 +108,40 @@ discard block |
||
108 | 108 | |
109 | 109 | protected function _name_stop() |
110 | 110 | { |
111 | - return '<p>' . __('View available questions groups. You can reorder your questions by dragging and dropping them.', |
|
112 | - 'event_espresso') . '</p>'; |
|
111 | + return '<p>'.__('View available questions groups. You can reorder your questions by dragging and dropping them.', |
|
112 | + 'event_espresso').'</p>'; |
|
113 | 113 | } |
114 | 114 | |
115 | 115 | protected function _description_stop() |
116 | 116 | { |
117 | - return '<p>' . __('View the question group description.', 'event_espresso') . '</p>'; |
|
117 | + return '<p>'.__('View the question group description.', 'event_espresso').'</p>'; |
|
118 | 118 | } |
119 | 119 | |
120 | 120 | protected function _show_group_name_stop() |
121 | 121 | { |
122 | - return '<p>' . __('View if the name of the question group should be shown to customers.', |
|
123 | - 'event_espresso') . '</p>'; |
|
122 | + return '<p>'.__('View if the name of the question group should be shown to customers.', |
|
123 | + 'event_espresso').'</p>'; |
|
124 | 124 | } |
125 | 125 | |
126 | 126 | protected function _show_group_description_stop() |
127 | 127 | { |
128 | - return '<p>' . __('View if the description of the question group should be shown to customers.', |
|
129 | - 'event_espresso') . '</p>'; |
|
128 | + return '<p>'.__('View if the description of the question group should be shown to customers.', |
|
129 | + 'event_espresso').'</p>'; |
|
130 | 130 | } |
131 | 131 | |
132 | 132 | protected function _bulk_actions_stop() |
133 | 133 | { |
134 | - return '<p>' . __('Perform bulk actions to multiple question groups.', 'event_espresso') . '</p>'; |
|
134 | + return '<p>'.__('Perform bulk actions to multiple question groups.', 'event_espresso').'</p>'; |
|
135 | 135 | } |
136 | 136 | |
137 | 137 | protected function _search_stop() |
138 | 138 | { |
139 | - return '<p>' . __('Search through questions. The following sources will be searched: question group name and question group description.', |
|
140 | - 'event_espresso') . '</p>'; |
|
139 | + return '<p>'.__('Search through questions. The following sources will be searched: question group name and question group description.', |
|
140 | + 'event_espresso').'</p>'; |
|
141 | 141 | } |
142 | 142 | |
143 | 143 | protected function _add_new_question_group_stop() |
144 | 144 | { |
145 | - return '<p>' . __('Click here to create a new question group.', 'event_espresso') . '</p>'; |
|
145 | + return '<p>'.__('Click here to create a new question group.', 'event_espresso').'</p>'; |
|
146 | 146 | } |
147 | 147 | } |
148 | 148 | \ No newline at end of file |
@@ -1,6 +1,6 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
3 | - exit('NO direct script access allowed'); |
|
3 | + exit('NO direct script access allowed'); |
|
4 | 4 | } |
5 | 5 | |
6 | 6 | /** |
@@ -18,121 +18,121 @@ discard block |
||
18 | 18 | class Your_Organization_Help_Tour extends EE_Help_Tour |
19 | 19 | { |
20 | 20 | |
21 | - protected function _set_tour_properties() |
|
22 | - { |
|
23 | - $this->_label = __('Your Organization Tour', 'event_espresso'); |
|
24 | - $this->_slug = 'your-organization-joyride'; |
|
25 | - } |
|
21 | + protected function _set_tour_properties() |
|
22 | + { |
|
23 | + $this->_label = __('Your Organization Tour', 'event_espresso'); |
|
24 | + $this->_slug = 'your-organization-joyride'; |
|
25 | + } |
|
26 | 26 | |
27 | 27 | |
28 | - protected function _set_tour_stops() |
|
29 | - { |
|
30 | - $this->_stops = array( |
|
31 | - 10 => array( |
|
32 | - 'content' => $this->_start(), |
|
33 | - ), |
|
34 | - 30 => array( |
|
35 | - 'id' => 'contact_info_h4', |
|
36 | - 'content' => $this->_contact_information_stop(), |
|
37 | - 'options' => array( |
|
38 | - 'tipLocation' => 'left', |
|
39 | - 'tipAdjustmentY' => -50, |
|
40 | - 'tipAdjustmentX' => 15 |
|
41 | - ) |
|
42 | - ), |
|
43 | - 40 => array( |
|
44 | - 'id' => 'upload_image', |
|
45 | - 'content' => $this->_upload_image_stop(), |
|
46 | - 'options' => array( |
|
47 | - 'tipLocation' => 'right', |
|
48 | - 'tipAdjustmentY' => -50, |
|
49 | - 'tipAdjustmentX' => 15 |
|
50 | - ) |
|
51 | - ), |
|
52 | - 50 => array( |
|
53 | - 'id' => 'organization_facebook', |
|
54 | - 'content' => $this->_organization_facebook_stop(), |
|
55 | - 'options' => array( |
|
56 | - 'tipLocation' => 'right', |
|
57 | - 'tipAdjustmentY' => -50, |
|
58 | - 'tipAdjustmentX' => 15 |
|
59 | - ) |
|
60 | - ), |
|
61 | - 60 => array( |
|
62 | - 'id' => 'ueip_optin', |
|
63 | - 'content' => $this->_ueip_option_stop(), |
|
64 | - 'options' => array( |
|
65 | - 'tipLocation' => 'right', |
|
66 | - 'tipAdjustmentY' => -50, |
|
67 | - 'tipAdjustmentX' => 15 |
|
68 | - ) |
|
69 | - ), |
|
70 | - 70 => array( |
|
71 | - 'id' => 'espresso_major_buttons_wrapper', |
|
72 | - 'content' => $this->_end_tour_stop(), |
|
73 | - 'options' => array( |
|
74 | - 'tipLocation' => 'right', |
|
75 | - 'tipAdjustmentY' => -50, |
|
76 | - 'tipAdjustmentX' => 185 |
|
77 | - ) |
|
78 | - ) |
|
79 | - ); |
|
28 | + protected function _set_tour_stops() |
|
29 | + { |
|
30 | + $this->_stops = array( |
|
31 | + 10 => array( |
|
32 | + 'content' => $this->_start(), |
|
33 | + ), |
|
34 | + 30 => array( |
|
35 | + 'id' => 'contact_info_h4', |
|
36 | + 'content' => $this->_contact_information_stop(), |
|
37 | + 'options' => array( |
|
38 | + 'tipLocation' => 'left', |
|
39 | + 'tipAdjustmentY' => -50, |
|
40 | + 'tipAdjustmentX' => 15 |
|
41 | + ) |
|
42 | + ), |
|
43 | + 40 => array( |
|
44 | + 'id' => 'upload_image', |
|
45 | + 'content' => $this->_upload_image_stop(), |
|
46 | + 'options' => array( |
|
47 | + 'tipLocation' => 'right', |
|
48 | + 'tipAdjustmentY' => -50, |
|
49 | + 'tipAdjustmentX' => 15 |
|
50 | + ) |
|
51 | + ), |
|
52 | + 50 => array( |
|
53 | + 'id' => 'organization_facebook', |
|
54 | + 'content' => $this->_organization_facebook_stop(), |
|
55 | + 'options' => array( |
|
56 | + 'tipLocation' => 'right', |
|
57 | + 'tipAdjustmentY' => -50, |
|
58 | + 'tipAdjustmentX' => 15 |
|
59 | + ) |
|
60 | + ), |
|
61 | + 60 => array( |
|
62 | + 'id' => 'ueip_optin', |
|
63 | + 'content' => $this->_ueip_option_stop(), |
|
64 | + 'options' => array( |
|
65 | + 'tipLocation' => 'right', |
|
66 | + 'tipAdjustmentY' => -50, |
|
67 | + 'tipAdjustmentX' => 15 |
|
68 | + ) |
|
69 | + ), |
|
70 | + 70 => array( |
|
71 | + 'id' => 'espresso_major_buttons_wrapper', |
|
72 | + 'content' => $this->_end_tour_stop(), |
|
73 | + 'options' => array( |
|
74 | + 'tipLocation' => 'right', |
|
75 | + 'tipAdjustmentY' => -50, |
|
76 | + 'tipAdjustmentX' => 185 |
|
77 | + ) |
|
78 | + ) |
|
79 | + ); |
|
80 | 80 | |
81 | - if (is_main_site()) { |
|
82 | - $this->_stops[20] = array( |
|
83 | - 'id' => 'site_license_key', |
|
84 | - 'content' => $this->_site_license_key_stop(), |
|
85 | - 'options' => array( |
|
86 | - 'tipLocation' => 'right', |
|
87 | - 'tipAdjustmentY' => -50, |
|
88 | - 'tipAdjustmentX' => 15 |
|
89 | - ) |
|
90 | - ); |
|
91 | - } |
|
92 | - ksort( $this->_stops ); |
|
93 | - } |
|
81 | + if (is_main_site()) { |
|
82 | + $this->_stops[20] = array( |
|
83 | + 'id' => 'site_license_key', |
|
84 | + 'content' => $this->_site_license_key_stop(), |
|
85 | + 'options' => array( |
|
86 | + 'tipLocation' => 'right', |
|
87 | + 'tipAdjustmentY' => -50, |
|
88 | + 'tipAdjustmentX' => 15 |
|
89 | + ) |
|
90 | + ); |
|
91 | + } |
|
92 | + ksort( $this->_stops ); |
|
93 | + } |
|
94 | 94 | |
95 | 95 | |
96 | - protected function _start() |
|
97 | - { |
|
98 | - $content = '<h3>' . __('Organization Settings', 'event_espresso') . '</h3>'; |
|
99 | - $content .= '<p>' . __('This tour of the Your Organization page will go over different areas of the screen to help you understand what they are used for.', |
|
100 | - 'event_espresso') . '</p>'; |
|
96 | + protected function _start() |
|
97 | + { |
|
98 | + $content = '<h3>' . __('Organization Settings', 'event_espresso') . '</h3>'; |
|
99 | + $content .= '<p>' . __('This tour of the Your Organization page will go over different areas of the screen to help you understand what they are used for.', |
|
100 | + 'event_espresso') . '</p>'; |
|
101 | 101 | |
102 | - return $content; |
|
103 | - } |
|
102 | + return $content; |
|
103 | + } |
|
104 | 104 | |
105 | - protected function _site_license_key_stop() |
|
106 | - { |
|
107 | - return '<p>' . __('Enter your support license key here to enable one-click updates.', |
|
108 | - 'event_espresso') . '</p>'; |
|
109 | - } |
|
105 | + protected function _site_license_key_stop() |
|
106 | + { |
|
107 | + return '<p>' . __('Enter your support license key here to enable one-click updates.', |
|
108 | + 'event_espresso') . '</p>'; |
|
109 | + } |
|
110 | 110 | |
111 | - protected function _contact_information_stop() |
|
112 | - { |
|
113 | - return '<p>' . __('You can change your business / organization information below. Be sure to keep this information updated as it is used in other areas of the site. Adjusting the country option here will update your currency settings. More options are available in the Countries tab.', |
|
114 | - 'event_espresso') . '</p>'; |
|
115 | - } |
|
111 | + protected function _contact_information_stop() |
|
112 | + { |
|
113 | + return '<p>' . __('You can change your business / organization information below. Be sure to keep this information updated as it is used in other areas of the site. Adjusting the country option here will update your currency settings. More options are available in the Countries tab.', |
|
114 | + 'event_espresso') . '</p>'; |
|
115 | + } |
|
116 | 116 | |
117 | - protected function _upload_image_stop() |
|
118 | - { |
|
119 | - return '<p>' . __('Add a logo. This can be used for invoices and tickets.', 'event_espresso') . '</p>'; |
|
120 | - } |
|
117 | + protected function _upload_image_stop() |
|
118 | + { |
|
119 | + return '<p>' . __('Add a logo. This can be used for invoices and tickets.', 'event_espresso') . '</p>'; |
|
120 | + } |
|
121 | 121 | |
122 | - protected function _organization_facebook_stop() |
|
123 | - { |
|
124 | - return '<p>' . __('Add links to various social media networks.', 'event_espresso') . '</p>'; |
|
125 | - } |
|
122 | + protected function _organization_facebook_stop() |
|
123 | + { |
|
124 | + return '<p>' . __('Add links to various social media networks.', 'event_espresso') . '</p>'; |
|
125 | + } |
|
126 | 126 | |
127 | - protected function _ueip_option_stop() |
|
128 | - { |
|
129 | - return '<p>' . __('Help us to help you! Sign up to the User eXperience Improvement Program and send us anonymous data that will help us improve Event Espresso.', |
|
130 | - 'event_espresso') . '</p>'; |
|
131 | - } |
|
127 | + protected function _ueip_option_stop() |
|
128 | + { |
|
129 | + return '<p>' . __('Help us to help you! Sign up to the User eXperience Improvement Program and send us anonymous data that will help us improve Event Espresso.', |
|
130 | + 'event_espresso') . '</p>'; |
|
131 | + } |
|
132 | 132 | |
133 | - protected function _end_tour_stop() |
|
134 | - { |
|
135 | - return '<p>' . __('You are almost done updating Your Organization information. Click on the Save button to save changes and then go to the Payment Methods screen so you can setup a payment gateway.', |
|
136 | - 'event_espresso') . '</p>'; |
|
137 | - } |
|
133 | + protected function _end_tour_stop() |
|
134 | + { |
|
135 | + return '<p>' . __('You are almost done updating Your Organization information. Click on the Save button to save changes and then go to the Payment Methods screen so you can setup a payment gateway.', |
|
136 | + 'event_espresso') . '</p>'; |
|
137 | + } |
|
138 | 138 | } |
139 | 139 | \ No newline at end of file |
@@ -89,50 +89,50 @@ |
||
89 | 89 | ) |
90 | 90 | ); |
91 | 91 | } |
92 | - ksort( $this->_stops ); |
|
92 | + ksort($this->_stops); |
|
93 | 93 | } |
94 | 94 | |
95 | 95 | |
96 | 96 | protected function _start() |
97 | 97 | { |
98 | - $content = '<h3>' . __('Organization Settings', 'event_espresso') . '</h3>'; |
|
99 | - $content .= '<p>' . __('This tour of the Your Organization page will go over different areas of the screen to help you understand what they are used for.', |
|
100 | - 'event_espresso') . '</p>'; |
|
98 | + $content = '<h3>'.__('Organization Settings', 'event_espresso').'</h3>'; |
|
99 | + $content .= '<p>'.__('This tour of the Your Organization page will go over different areas of the screen to help you understand what they are used for.', |
|
100 | + 'event_espresso').'</p>'; |
|
101 | 101 | |
102 | 102 | return $content; |
103 | 103 | } |
104 | 104 | |
105 | 105 | protected function _site_license_key_stop() |
106 | 106 | { |
107 | - return '<p>' . __('Enter your support license key here to enable one-click updates.', |
|
108 | - 'event_espresso') . '</p>'; |
|
107 | + return '<p>'.__('Enter your support license key here to enable one-click updates.', |
|
108 | + 'event_espresso').'</p>'; |
|
109 | 109 | } |
110 | 110 | |
111 | 111 | protected function _contact_information_stop() |
112 | 112 | { |
113 | - return '<p>' . __('You can change your business / organization information below. Be sure to keep this information updated as it is used in other areas of the site. Adjusting the country option here will update your currency settings. More options are available in the Countries tab.', |
|
114 | - 'event_espresso') . '</p>'; |
|
113 | + return '<p>'.__('You can change your business / organization information below. Be sure to keep this information updated as it is used in other areas of the site. Adjusting the country option here will update your currency settings. More options are available in the Countries tab.', |
|
114 | + 'event_espresso').'</p>'; |
|
115 | 115 | } |
116 | 116 | |
117 | 117 | protected function _upload_image_stop() |
118 | 118 | { |
119 | - return '<p>' . __('Add a logo. This can be used for invoices and tickets.', 'event_espresso') . '</p>'; |
|
119 | + return '<p>'.__('Add a logo. This can be used for invoices and tickets.', 'event_espresso').'</p>'; |
|
120 | 120 | } |
121 | 121 | |
122 | 122 | protected function _organization_facebook_stop() |
123 | 123 | { |
124 | - return '<p>' . __('Add links to various social media networks.', 'event_espresso') . '</p>'; |
|
124 | + return '<p>'.__('Add links to various social media networks.', 'event_espresso').'</p>'; |
|
125 | 125 | } |
126 | 126 | |
127 | 127 | protected function _ueip_option_stop() |
128 | 128 | { |
129 | - return '<p>' . __('Help us to help you! Sign up to the User eXperience Improvement Program and send us anonymous data that will help us improve Event Espresso.', |
|
130 | - 'event_espresso') . '</p>'; |
|
129 | + return '<p>'.__('Help us to help you! Sign up to the User eXperience Improvement Program and send us anonymous data that will help us improve Event Espresso.', |
|
130 | + 'event_espresso').'</p>'; |
|
131 | 131 | } |
132 | 132 | |
133 | 133 | protected function _end_tour_stop() |
134 | 134 | { |
135 | - return '<p>' . __('You are almost done updating Your Organization information. Click on the Save button to save changes and then go to the Payment Methods screen so you can setup a payment gateway.', |
|
136 | - 'event_espresso') . '</p>'; |
|
135 | + return '<p>'.__('You are almost done updating Your Organization information. Click on the Save button to save changes and then go to the Payment Methods screen so you can setup a payment gateway.', |
|
136 | + 'event_espresso').'</p>'; |
|
137 | 137 | } |
138 | 138 | } |
139 | 139 | \ No newline at end of file |
@@ -26,7 +26,7 @@ discard block |
||
26 | 26 | <span class="dashicons dashicons-admin-tools"></span> |
27 | 27 | <?php esc_html_e("Migration Options", "event_espresso"); ?> |
28 | 28 | <span class="tiny-text lt-grey-text"> <?php esc_html_e(' to migrate or not to migrate?', |
29 | - "event_espresso"); ?></span> |
|
29 | + "event_espresso"); ?></span> |
|
30 | 30 | </h2> |
31 | 31 | <div class="ee-table-wrap"> |
32 | 32 | <table> |
@@ -35,24 +35,24 @@ discard block |
||
35 | 35 | <td><h3><?php esc_html_e('1', 'event_espresso'); ?></h3></td> |
36 | 36 | <td> |
37 | 37 | <?php |
38 | - echo apply_filters( |
|
39 | - 'FHEE__ee_migration_page__option_1_main', |
|
40 | - sprintf( |
|
41 | - esc_html__('%1$sYes. I have backed up my database%2$s, %3$sunderstand the risks involved%4$s, and am ready to migrate my existing %5$s data to %6$s.', |
|
42 | - "event_espresso"), |
|
43 | - '<strong>', |
|
44 | - '</strong>', |
|
45 | - '<a id="migration-risks" class="" title="' |
|
46 | - . esc_attr__('click for more details', "event_espresso") |
|
47 | - . '">', |
|
48 | - '</a>', |
|
49 | - $current_db_state, |
|
50 | - $next_db_state |
|
51 | - ), |
|
52 | - $current_db_state, |
|
53 | - $next_db_state |
|
54 | - ); |
|
55 | - ?> |
|
38 | + echo apply_filters( |
|
39 | + 'FHEE__ee_migration_page__option_1_main', |
|
40 | + sprintf( |
|
41 | + esc_html__('%1$sYes. I have backed up my database%2$s, %3$sunderstand the risks involved%4$s, and am ready to migrate my existing %5$s data to %6$s.', |
|
42 | + "event_espresso"), |
|
43 | + '<strong>', |
|
44 | + '</strong>', |
|
45 | + '<a id="migration-risks" class="" title="' |
|
46 | + . esc_attr__('click for more details', "event_espresso") |
|
47 | + . '">', |
|
48 | + '</a>', |
|
49 | + $current_db_state, |
|
50 | + $next_db_state |
|
51 | + ), |
|
52 | + $current_db_state, |
|
53 | + $next_db_state |
|
54 | + ); |
|
55 | + ?> |
|
56 | 56 | <a id="display-migration-details" |
57 | 57 | class="display-the-hidden lt-grey-text smaller-text hide-if-no-js" |
58 | 58 | rel="migration-details"><?php esc_html_e('click for more details', "event_espresso"); ?> |
@@ -61,37 +61,37 @@ discard block |
||
61 | 61 | class="hide-the-displayed lt-grey-text smaller-text hide-if-no-js" |
62 | 62 | rel="migration-details" |
63 | 63 | style="display:none;"><?php echo sprintf(esc_html__('hide%1$sdetails%1$s-', |
64 | - 'event_espresso'), ' '); ?></a> |
|
64 | + 'event_espresso'), ' '); ?></a> |
|
65 | 65 | </td> |
66 | 66 | <td> |
67 | 67 | <a id="db-backed-up" |
68 | 68 | class="toggle-migration-monitor button-primary"><?php echo apply_filters('FHEE__ee_migration_page__option_1_button_text', |
69 | - sprintf(esc_html__("Migrate My %s Data to %s", "event_espresso"), $current_db_state, |
|
70 | - $next_db_state), $current_db_state, $next_db_state); ?></a> |
|
69 | + sprintf(esc_html__("Migrate My %s Data to %s", "event_espresso"), $current_db_state, |
|
70 | + $next_db_state), $current_db_state, $next_db_state); ?></a> |
|
71 | 71 | </td> |
72 | 72 | </tr> |
73 | 73 | <tr> |
74 | 74 | <td colspan="3" style="padding: 0"> |
75 | 75 | <div id="migration-details-dv" style="display: none; padding: 1em;"> |
76 | 76 | <span class="reminder-spn"><?php printf(esc_html__("%s Important: %s Before migrating, please back up your database and files.", |
77 | - "event_espresso"), "<b>", "</b>"); ?></span> |
|
77 | + "event_espresso"), "<b>", "</b>"); ?></span> |
|
78 | 78 | <p> |
79 | 79 | <?php |
80 | - printf( |
|
81 | - esc_html__('%1$sNot sure how to backup your existing data?%2$s Here is %3$sWordPress\'s explanation%7$s, and here\'s %6$sour explanation%7$s.%8$sYou can also search the WordPress plugin database for %4$s database backup plugins %7$s,%8$sor have one of our dedicated support technicians help you by purchasing a %5$sPriority Support Token%7$s.', |
|
82 | - "event_espresso"), |
|
83 | - '<b>', |
|
84 | - '</b>', |
|
85 | - "<a href='http://codex.wordpress.org/Backing_Up_Your_Database'>", |
|
86 | - "<a href='" |
|
87 | - . admin_url('plugin-install.php?tab=search&type=term&s=database+backup&plugin-search-input=Search+Plugins') |
|
88 | - . "'>", |
|
89 | - "<a href='http://eventespresso.com/product/priority-support-tokens/'>", |
|
90 | - '<a href="http://eventespresso.com/wiki/how-to-back-up-your-site/">', |
|
91 | - "</a>", |
|
92 | - '<br/>' |
|
93 | - ); |
|
94 | - ?> |
|
80 | + printf( |
|
81 | + esc_html__('%1$sNot sure how to backup your existing data?%2$s Here is %3$sWordPress\'s explanation%7$s, and here\'s %6$sour explanation%7$s.%8$sYou can also search the WordPress plugin database for %4$s database backup plugins %7$s,%8$sor have one of our dedicated support technicians help you by purchasing a %5$sPriority Support Token%7$s.', |
|
82 | + "event_espresso"), |
|
83 | + '<b>', |
|
84 | + '</b>', |
|
85 | + "<a href='http://codex.wordpress.org/Backing_Up_Your_Database'>", |
|
86 | + "<a href='" |
|
87 | + . admin_url('plugin-install.php?tab=search&type=term&s=database+backup&plugin-search-input=Search+Plugins') |
|
88 | + . "'>", |
|
89 | + "<a href='http://eventespresso.com/product/priority-support-tokens/'>", |
|
90 | + '<a href="http://eventespresso.com/wiki/how-to-back-up-your-site/">', |
|
91 | + "</a>", |
|
92 | + '<br/>' |
|
93 | + ); |
|
94 | + ?> |
|
95 | 95 | </p> |
96 | 96 | <?php do_action('AHEE__ee_migration_page__option_1_extra_details'); ?> |
97 | 97 | </div> |
@@ -101,12 +101,12 @@ discard block |
||
101 | 101 | <td><h3><?php esc_html_e('2', 'event_espresso'); ?></h3></td> |
102 | 102 | <td> |
103 | 103 | <?php echo apply_filters('FHEE__ee_migration_page__option_2_main', |
104 | - sprintf(esc_html__('I do NOT want to migrate my %1$s data to %2$s at this time and just want to use %3$s without migrating data.', |
|
105 | - "event_espresso"), $current_db_state, $next_db_state, |
|
106 | - $ultimate_db_state), $current_db_state, $next_db_state, |
|
107 | - $ultimate_db_state); ?><br/> |
|
104 | + sprintf(esc_html__('I do NOT want to migrate my %1$s data to %2$s at this time and just want to use %3$s without migrating data.', |
|
105 | + "event_espresso"), $current_db_state, $next_db_state, |
|
106 | + $ultimate_db_state), $current_db_state, $next_db_state, |
|
107 | + $ultimate_db_state); ?><br/> |
|
108 | 108 | <span class="reminder-spn"><?php esc_html_e('Please Note: In order to avoid errors, any existing Event Espresso data (events, ticket, registrations, etc) in your db will be erased! Regular WP data will NOT be affected.', |
109 | - 'event_espresso'); ?></span> |
|
109 | + 'event_espresso'); ?></span> |
|
110 | 110 | <a id="display-no-migration-details" |
111 | 111 | class="display-the-hidden lt-grey-text smaller-text hide-if-no-js" |
112 | 112 | rel="no-migration-details"><?php esc_html_e('click for more details', "event_espresso"); ?> |
@@ -115,13 +115,13 @@ discard block |
||
115 | 115 | class="hide-the-displayed lt-grey-text smaller-text hide-if-no-js" |
116 | 116 | rel="no-migration-details" |
117 | 117 | style="display:none;"><?php echo sprintf(esc_html__('hide%1$sdetails%1$s-', |
118 | - 'event_espresso'), ' '); ?></a> |
|
118 | + 'event_espresso'), ' '); ?></a> |
|
119 | 119 | </td> |
120 | 120 | <td> |
121 | 121 | <a id="do-not-migrate" class="do-not-migrate button-primary" |
122 | 122 | href="<?php echo $reset_db_page_link; ?>"><?php echo apply_filters('FHEE__ee_migration_page__option_2_button_text', |
123 | - sprintf(esc_html__("Just Start %s and Delete Existing Data", "event_espresso"), |
|
124 | - $ultimate_db_state), $ultimate_db_state); ?></a> |
|
123 | + sprintf(esc_html__("Just Start %s and Delete Existing Data", "event_espresso"), |
|
124 | + $ultimate_db_state), $ultimate_db_state); ?></a> |
|
125 | 125 | </td> |
126 | 126 | </tr> |
127 | 127 | <tr> |
@@ -129,8 +129,8 @@ discard block |
||
129 | 129 | <div id="no-migration-details-dv" style="display: none; padding: 1em;"> |
130 | 130 | <p> |
131 | 131 | <?php echo apply_filters('FHEE__ee_migration_page__option_2_details', |
132 | - sprintf(esc_html__("If your existing Event and Registration Data is no longer relevant nor required, you can just start up %s without performing a data migration.", |
|
133 | - "event_espresso"), $ultimate_db_state), $ultimate_db_state); ?> |
|
132 | + sprintf(esc_html__("If your existing Event and Registration Data is no longer relevant nor required, you can just start up %s without performing a data migration.", |
|
133 | + "event_espresso"), $ultimate_db_state), $ultimate_db_state); ?> |
|
134 | 134 | </p> |
135 | 135 | </div> |
136 | 136 | </td> |