@@ -1,7 +1,6 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | use EventEspresso\core\domain\entities\notifications\PersistentAdminNotice; |
4 | -use EventEspresso\core\exceptions\InvalidDataTypeException; |
|
5 | 4 | |
6 | 5 | /** |
7 | 6 | * Event Espresso |
@@ -24,677 +24,677 @@ |
||
24 | 24 | class EE_Admin_Page_Loader |
25 | 25 | { |
26 | 26 | |
27 | - /** |
|
28 | - * _installed_pages |
|
29 | - * objects for page_init objects detected and loaded |
|
30 | - * |
|
31 | - * @access private |
|
32 | - * @var \EE_Admin_Page_Init[] |
|
33 | - */ |
|
34 | - private $_installed_pages = array(); |
|
35 | - |
|
36 | - |
|
37 | - /** |
|
38 | - * this is used to hold the registry of menu slugs for all the installed admin pages |
|
39 | - * |
|
40 | - * @var array |
|
41 | - */ |
|
42 | - private $_menu_slugs = array(); |
|
43 | - |
|
44 | - |
|
45 | - /** |
|
46 | - * _caffeinated_extends |
|
47 | - * This array is the generated configuration array for which core EE_Admin pages are extended (and the bits and |
|
48 | - * pieces needed to do so). This property is defined in the _set_caffeinated method. |
|
49 | - * |
|
50 | - * @var array |
|
51 | - */ |
|
52 | - private $_caffeinated_extends = array(); |
|
53 | - |
|
54 | - |
|
55 | - /** |
|
56 | - * _current_caf_extend_slug |
|
57 | - * This property is used for holding the page slug that is required for referencing the correct |
|
58 | - * _caffeinated_extends index when the corresponding core child EE_Admin_Page_init hooks are executed. |
|
59 | - * |
|
60 | - * @var array |
|
61 | - */ |
|
62 | - private $_current_caf_extend_slug; |
|
63 | - |
|
64 | - /** |
|
65 | - * _prepped_menu_maps |
|
66 | - * This is the prepared array of EE_Admin_Page_Menu_Maps for adding to the admin_menu. |
|
67 | - * |
|
68 | - * @since 4.4.0 |
|
69 | - * @var EE_Admin_Page_Menu_Map[] |
|
70 | - */ |
|
71 | - private $_prepped_menu_maps = array(); |
|
72 | - |
|
73 | - |
|
74 | - /** |
|
75 | - * _admin_menu_groups |
|
76 | - * array that holds the group headings and details for |
|
77 | - * |
|
78 | - * @access private |
|
79 | - * @var array |
|
80 | - */ |
|
81 | - private $_admin_menu_groups = array(); |
|
82 | - |
|
83 | - |
|
84 | - /** |
|
85 | - * This property will hold the hook file for setting up the filter that does all the connections between admin |
|
86 | - * pages. |
|
87 | - * |
|
88 | - * @var string |
|
89 | - */ |
|
90 | - public $hook_file; |
|
91 | - |
|
92 | - |
|
93 | - /** |
|
94 | - * constructor |
|
95 | - * |
|
96 | - * @access public |
|
97 | - * @return \EE_Admin_Page_Loader |
|
98 | - */ |
|
99 | - public function __construct() |
|
100 | - { |
|
101 | - // load menu_map classes |
|
102 | - EE_Registry::instance()->load_file(EE_ADMIN, 'EE_Admin_Page_Menu_Map', 'core'); |
|
103 | - // define the default "groups" for the admin_pages |
|
104 | - $this->_set_menu_groups(); |
|
105 | - |
|
106 | - // let's do a scan and see what installed pages we have |
|
107 | - $this->_get_installed_pages(); |
|
108 | - // set menus (has to be done on every load - we're not actually loading the page just setting the menus and where they point to). |
|
109 | - add_action('admin_menu', array($this, 'set_menus')); |
|
110 | - add_action('network_admin_menu', array($this, 'set_network_menus')); |
|
111 | - } |
|
112 | - |
|
113 | - |
|
114 | - /** |
|
115 | - * When caffeinated system is detected, this method is called to setup the caffeinated directory constants used by |
|
116 | - * files in the caffeinated folder. |
|
117 | - * |
|
118 | - * @access private |
|
119 | - * @return void |
|
120 | - */ |
|
121 | - private function _define_caffeinated_constants() |
|
122 | - { |
|
123 | - if (! defined('EE_CORE_CAF_ADMIN')) { |
|
124 | - define('EE_CORE_CAF_ADMIN', EE_PLUGIN_DIR_PATH . 'caffeinated/admin/'); |
|
125 | - define('EE_CORE_CAF_ADMIN_URL', EE_PLUGIN_DIR_URL . 'caffeinated/admin/'); |
|
126 | - define('EE_CORE_CAF_ADMIN_NEW', EE_CORE_CAF_ADMIN . 'new/'); |
|
127 | - define('EE_CORE_CAF_ADMIN_EXTEND', EE_CORE_CAF_ADMIN . 'extend/'); |
|
128 | - define('EE_CORE_CAF_ADMIN_EXTEND_URL', EE_CORE_CAF_ADMIN_URL . 'extend/'); |
|
129 | - define('EE_CORE_CAF_ADMIN_HOOKS', EE_CORE_CAF_ADMIN . 'hooks/'); |
|
130 | - } |
|
131 | - } |
|
132 | - |
|
133 | - |
|
134 | - /** |
|
135 | - * _set_menu_groups |
|
136 | - * sets the filterable _admin_menu_groups property (list of various "groupings" within the EE admin menu array) |
|
137 | - * |
|
138 | - * @access private |
|
139 | - * @return void |
|
140 | - */ |
|
141 | - private function _set_menu_groups() |
|
142 | - { |
|
143 | - |
|
144 | - // set array of EE_Admin_Page_Menu_Group objects |
|
145 | - $groups = array( |
|
146 | - 'main' => new EE_Admin_Page_Menu_Group( |
|
147 | - array( |
|
148 | - 'menu_label' => __('Main', 'event_espresso'), |
|
149 | - 'show_on_menu' => EE_Admin_Page_Menu_Map::NONE, |
|
150 | - 'menu_slug' => 'main', |
|
151 | - 'capability' => 'ee_read_ee', |
|
152 | - 'menu_order' => 0, |
|
153 | - 'parent_slug' => 'espresso_events', |
|
154 | - ) |
|
155 | - ), |
|
156 | - 'management' => new EE_Admin_Page_Menu_Group( |
|
157 | - array( |
|
158 | - 'menu_label' => __('Management', 'event_espresso'), |
|
159 | - 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_ADMIN_ONLY, |
|
160 | - 'menu_slug' => 'management', |
|
161 | - 'capability' => 'ee_read_ee', |
|
162 | - 'menu_order' => 10, |
|
163 | - 'parent_slug' => 'espresso_events', |
|
164 | - ) |
|
165 | - ), |
|
166 | - 'settings' => new EE_Admin_Page_Menu_Group( |
|
167 | - array( |
|
168 | - 'menu_label' => __('Settings', 'event_espresso'), |
|
169 | - 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_ADMIN_ONLY, |
|
170 | - 'menu_slug' => 'settings', |
|
171 | - 'capability' => 'ee_read_ee', |
|
172 | - 'menu_order' => 30, |
|
173 | - 'parent_slug' => 'espresso_events', |
|
174 | - ) |
|
175 | - ), |
|
176 | - 'templates' => new EE_Admin_Page_Menu_Group( |
|
177 | - array( |
|
178 | - 'menu_label' => __('Templates', 'event_espresso'), |
|
179 | - 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_ADMIN_ONLY, |
|
180 | - 'menu_slug' => 'templates', |
|
181 | - 'capability' => 'ee_read_ee', |
|
182 | - 'menu_order' => 40, |
|
183 | - 'parent_slug' => 'espresso_events', |
|
184 | - ) |
|
185 | - ), |
|
186 | - 'extras' => new EE_Admin_Page_Menu_Group( |
|
187 | - array( |
|
188 | - 'menu_label' => __('Extras', 'event_espresso'), |
|
189 | - 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_AND_NETWORK_ADMIN, |
|
190 | - 'menu_slug' => 'extras', |
|
191 | - 'capability' => 'ee_read_ee', |
|
192 | - 'menu_order' => 50, |
|
193 | - 'parent_slug' => 'espresso_events', |
|
194 | - 'maintenance_mode_parent' => 'espresso_maintenance_settings', |
|
195 | - ) |
|
196 | - ), |
|
197 | - 'tools' => new EE_Admin_Page_Menu_Group( |
|
198 | - array( |
|
199 | - 'menu_label' => __("Tools", "event_espresso"), |
|
200 | - 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_ADMIN_ONLY, |
|
201 | - 'menu_slug' => 'tools', |
|
202 | - 'capability' => 'ee_read_ee', |
|
203 | - 'menu_order' => 60, |
|
204 | - 'parent_slug' => 'espresso_events', |
|
205 | - ) |
|
206 | - ), |
|
207 | - 'addons' => new EE_Admin_Page_Menu_Group( |
|
208 | - array( |
|
209 | - 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_AND_NETWORK_ADMIN, |
|
210 | - 'menu_label' => __('Add-ons', 'event_espresso'), |
|
211 | - 'menu_slug' => 'addons', |
|
212 | - 'capability' => 'ee_read_ee', |
|
213 | - 'menu_order' => 20, |
|
214 | - 'parent_slug' => 'espresso_events', |
|
215 | - ) |
|
216 | - ), |
|
217 | - ); |
|
218 | - $this->_admin_menu_groups = apply_filters( |
|
219 | - 'FHEE__EE_Admin_Page_Loader___set_menu_groups__admin_menu_groups', |
|
220 | - $groups |
|
221 | - ); |
|
222 | - } |
|
223 | - |
|
224 | - |
|
225 | - /** |
|
226 | - * This takes all the groups in the _admin_menu_groups array and returns the array indexed by group |
|
227 | - * slug. The other utility with this function is it validates that all the groups are instances of |
|
228 | - * EE_Admin_Page_Menu_Group (cause some invalid things might have slipped in via addons). |
|
229 | - * |
|
230 | - * @since 4.4.0 |
|
231 | - * @throws \EE_Error |
|
232 | - * @return EE_Admin_Page_Menu_Group[] |
|
233 | - */ |
|
234 | - private function _rearrange_menu_groups() |
|
235 | - { |
|
236 | - $groups = array(); |
|
237 | - // first let's order the menu groups by their internal menu order (note usort type hinting to ensure the incoming array is EE_Admin_Page_Menu_Map objects ) |
|
238 | - usort($this->_admin_menu_groups, array($this, '_sort_menu_maps')); |
|
239 | - foreach ($this->_admin_menu_groups as $group) { |
|
240 | - if (! $group instanceof EE_Admin_Page_Menu_Group) { |
|
241 | - throw new EE_Error( |
|
242 | - sprintf( |
|
243 | - __( |
|
244 | - 'Unable to continue sorting the menu groups array because there is an invalid value for the menu groups. All values in this array are required to be a EE_Admin_Page_Menu_Group object. Instead there was: %s', |
|
245 | - 'event_espresso' |
|
246 | - ), |
|
247 | - print_r($group, true) |
|
248 | - ) |
|
249 | - ); |
|
250 | - } |
|
251 | - $groups[ $group->menu_slug ] = $group; |
|
252 | - } |
|
253 | - return $groups; |
|
254 | - } |
|
255 | - |
|
256 | - |
|
257 | - /** |
|
258 | - * _get_installed_pages |
|
259 | - * This just gets the list of installed EE_Admin_pages. |
|
260 | - * |
|
261 | - * @access private |
|
262 | - * @throws EE_Error |
|
263 | - * @return void |
|
264 | - */ |
|
265 | - private function _get_installed_pages() |
|
266 | - { |
|
267 | - $installed_refs = array(); |
|
268 | - $exclude = array('assets', 'templates'); |
|
269 | - // grab everything in the admin core directory |
|
270 | - $admin_screens = glob(EE_ADMIN_PAGES . '*', GLOB_ONLYDIR); |
|
271 | - if ($admin_screens) { |
|
272 | - foreach ($admin_screens as $admin_screen) { |
|
273 | - // files and anything in the exclude array need not apply |
|
274 | - if (is_dir($admin_screen) && ! in_array(basename($admin_screen), $exclude)) { |
|
275 | - // these folders represent the different EE admin pages |
|
276 | - $installed_refs[ basename($admin_screen) ] = $admin_screen; |
|
277 | - } |
|
278 | - } |
|
279 | - } |
|
280 | - if (empty($installed_refs)) { |
|
281 | - $error_msg[] = __( |
|
282 | - 'There are no EE_Admin pages detected, it looks like EE did not install properly', |
|
283 | - 'event_espresso' |
|
284 | - ); |
|
285 | - $error_msg[] = $error_msg[0] . "\r\n" |
|
286 | - . sprintf( |
|
287 | - __( |
|
288 | - 'Check that the %s folder exists and is writable. Maybe try deactivating, then reactivating Event Espresso again.', |
|
289 | - 'event_espresso' |
|
290 | - ), |
|
291 | - EE_ADMIN_PAGES |
|
292 | - ); |
|
293 | - throw new EE_Error(implode('||', $error_msg)); |
|
294 | - } |
|
295 | - // this just checks the caffeinated folder and takes care of setting up any caffeinated stuff. |
|
296 | - $installed_refs = $this->_set_caffeinated($installed_refs); |
|
297 | - // allow plugins to add in their own pages (note at this point they will need to have an autoloader defined for their class) OR hook into EEH_Autoloader::load_admin_page() to add their path.; |
|
298 | - $installed_refs = apply_filters( |
|
299 | - 'FHEE__EE_Admin_Page_Loader___get_installed_pages__installed_refs', |
|
300 | - $installed_refs |
|
301 | - ); |
|
302 | - $this->_caffeinated_extends = apply_filters( |
|
303 | - 'FHEE__EE_Admin_Page_Loader___get_installed_pages__caffeinated_extends', |
|
304 | - $this->_caffeinated_extends |
|
305 | - ); |
|
306 | - // loop through admin pages and setup the $_installed_pages array. |
|
307 | - $hooks_ref = array(); |
|
308 | - foreach ($installed_refs as $page => $path) { |
|
309 | - // set autoloaders for our admin page classes based on included path information |
|
310 | - EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($path); |
|
311 | - // build list of installed pages |
|
312 | - $this->_installed_pages[ $page ] = $this->_load_admin_page($page, $path); |
|
313 | - // verify returned object |
|
314 | - if ($this->_installed_pages[ $page ] instanceof EE_Admin_Page_Init) { |
|
315 | - if (! $this->_installed_pages[ $page ]->get_menu_map() instanceof EE_Admin_Page_Menu_Map) { |
|
316 | - continue; |
|
317 | - } |
|
318 | - // skip if in full maintenance mode and maintenance_mode_parent is set |
|
319 | - $maintenance_mode_parent = $this->_installed_pages[ $page ]->get_menu_map()->maintenance_mode_parent; |
|
320 | - if (empty($maintenance_mode_parent) |
|
321 | - && EE_Maintenance_Mode::instance()->level() === EE_Maintenance_Mode::level_2_complete_maintenance |
|
322 | - ) { |
|
323 | - unset($installed_refs[ $page ]); |
|
324 | - continue; |
|
325 | - } |
|
326 | - $menu_slug = $this->_installed_pages[ $page ]->get_menu_map()->menu_slug; |
|
327 | - $this->_menu_slugs[ $menu_slug ] = $page; |
|
328 | - // flag for register hooks on extended pages b/c extended pages use the default INIT. |
|
329 | - $extend = false; |
|
330 | - // now that we've got the admin_init objects... lets see if there are any caffeinated pages extending the originals. If there are then let's hook into the init admin filter and load our extend instead. |
|
331 | - if (isset($this->_caffeinated_extends[ $page ])) { |
|
332 | - $this->_current_caf_extend_slug = $page; |
|
333 | - $admin_page_name = $this->_installed_pages[ $page ]->get_admin_page_name(); |
|
334 | - $caf_path = $this->_caffeinated_extends[ $this->_current_caf_extend_slug ]['path']; |
|
335 | - $caf_admin_page = $this->_caffeinated_extends[ $this->_current_caf_extend_slug ]['admin_page']; |
|
336 | - add_filter( |
|
337 | - "FHEE__EE_Admin_Page_Init___initialize_admin_page__path_to_file__{$menu_slug}_{$admin_page_name}", |
|
338 | - function ($path_to_file) use ($caf_path) { |
|
339 | - return $caf_path; |
|
340 | - } |
|
341 | - ); |
|
342 | - add_filter( |
|
343 | - "FHEE__EE_Admin_Page_Init___initialize_admin_page__admin_page__{$menu_slug}_{$admin_page_name}", |
|
344 | - function ($admin_page) use ($caf_admin_page) { |
|
345 | - return $caf_admin_page; |
|
346 | - } |
|
347 | - ); |
|
348 | - $extend = true; |
|
349 | - } |
|
350 | - // let's do the registered hooks |
|
351 | - $extended_hooks = $this->_installed_pages[ $page ]->register_hooks($extend); |
|
352 | - $hooks_ref = array_merge($hooks_ref, $extended_hooks); |
|
353 | - } |
|
354 | - } |
|
355 | - // the hooks_ref is all the pages where we have $extended _Hooks files that will extend a class in a different folder. So we want to make sure we load the file for the parent. |
|
356 | - // first make sure we've got unique values |
|
357 | - $hooks_ref = array_unique($hooks_ref); |
|
358 | - // now let's loop and require! |
|
359 | - foreach ($hooks_ref as $path) { |
|
360 | - require_once($path); |
|
361 | - } |
|
362 | - // make sure we have menu slugs global setup. Used in EE_Admin_Page->page_setup() to ensure we don't do a full class load for an admin page that isn't requested. |
|
363 | - global $ee_menu_slugs; |
|
364 | - $ee_menu_slugs = $this->_menu_slugs; |
|
365 | - // we need to loop again to run any early code |
|
366 | - foreach ($installed_refs as $page => $path) { |
|
367 | - if ($this->_installed_pages[ $page ] instanceof EE_Admin_Page_Init) { |
|
368 | - $this->_installed_pages[ $page ]->do_initial_loads(); |
|
369 | - } |
|
370 | - } |
|
371 | - do_action('AHEE__EE_Admin_Page_Loader___get_installed_pages_loaded', $this->_installed_pages); |
|
372 | - } |
|
373 | - |
|
374 | - |
|
375 | - /** |
|
376 | - * get_admin_page_object |
|
377 | - * |
|
378 | - * @param string $page_slug |
|
379 | - * @return EE_Admin_Page |
|
380 | - */ |
|
381 | - public function get_admin_page_object($page_slug = '') |
|
382 | - { |
|
383 | - if (isset($this->_installed_pages[ $page_slug ])) { |
|
384 | - return $this->_installed_pages[ $page_slug ]->loaded_page_object(); |
|
385 | - } |
|
386 | - return null; |
|
387 | - } |
|
388 | - |
|
389 | - |
|
390 | - /** |
|
391 | - * _get_classname_for_admin_page |
|
392 | - * generates an "Admin Page" class based on the directory name |
|
393 | - * |
|
394 | - * @param $dir_name |
|
395 | - * @return string |
|
396 | - */ |
|
397 | - private function _get_classname_for_admin_page($dir_name = '') |
|
398 | - { |
|
399 | - $class_name = str_replace('_', ' ', strtolower($dir_name)); |
|
400 | - return str_replace(' ', '_', ucwords($class_name)) . '_Admin_Page'; |
|
401 | - } |
|
402 | - |
|
403 | - |
|
404 | - /** |
|
405 | - * _get_classname_for_admin_init_page |
|
406 | - * generates an "Admin Page Init" class based on the directory name |
|
407 | - * |
|
408 | - * @param $dir_name |
|
409 | - * @return string |
|
410 | - */ |
|
411 | - private function _get_classname_for_admin_init_page($dir_name = '') |
|
412 | - { |
|
413 | - $class_name = str_replace('_', ' ', strtolower($dir_name)); |
|
414 | - return str_replace(' ', '_', ucwords($class_name)) . '_Admin_Page_Init'; |
|
415 | - } |
|
416 | - |
|
417 | - |
|
418 | - /** |
|
419 | - * _load_admin_page |
|
420 | - * Loads and instantiates page_init object for a single EE_admin page. |
|
421 | - * |
|
422 | - * @param string $page page_reference |
|
423 | - * @param string $path |
|
424 | - * @throws EE_Error |
|
425 | - * @return object|bool return page object if valid, bool false if not. |
|
426 | - */ |
|
427 | - private function _load_admin_page($page = '', $path = '') |
|
428 | - { |
|
429 | - $class_name = $this->_get_classname_for_admin_init_page($page); |
|
430 | - EE_Registry::instance()->load_file($path, $class_name, 'core'); |
|
431 | - if (! class_exists($class_name)) { |
|
432 | - $inner_error_msg = '<br />' |
|
433 | - . sprintf( |
|
434 | - esc_html__( |
|
435 | - 'Make sure you have %1$s defined. If this is a non-EE-core admin page then you also must have an autoloader in place for your class', |
|
436 | - 'event_espresso' |
|
437 | - ), |
|
438 | - '<strong>' . $class_name . '</strong>' |
|
439 | - ); |
|
440 | - $error_msg[] = sprintf( |
|
441 | - __('Something went wrong with loading the %s admin page.', 'event_espresso'), |
|
442 | - $page |
|
443 | - ); |
|
444 | - $error_msg[] = $error_msg[0] |
|
445 | - . "\r\n" |
|
446 | - . sprintf( |
|
447 | - esc_html__( |
|
448 | - 'There is no Init class in place for the %s admin page.', |
|
449 | - 'event_espresso' |
|
450 | - ), |
|
451 | - $page |
|
452 | - ) |
|
453 | - . $inner_error_msg; |
|
454 | - throw new EE_Error(implode('||', $error_msg)); |
|
455 | - } |
|
456 | - $a = new ReflectionClass($class_name); |
|
457 | - return $a->newInstance(); |
|
458 | - } |
|
459 | - |
|
460 | - |
|
461 | - /** |
|
462 | - * set_menus |
|
463 | - * This method sets up the menus for EE Admin Pages |
|
464 | - * |
|
465 | - * @access private |
|
466 | - * @return void |
|
467 | - */ |
|
468 | - public function set_menus() |
|
469 | - { |
|
470 | - // prep the menu pages (sort, group.) |
|
471 | - $this->_prep_pages(); |
|
472 | - foreach ($this->_prepped_menu_maps as $menu_map) { |
|
473 | - if (EE_Registry::instance()->CAP->current_user_can($menu_map->capability, $menu_map->menu_slug)) { |
|
474 | - $menu_map->add_menu_page(false); |
|
475 | - } |
|
476 | - } |
|
477 | - } |
|
478 | - |
|
479 | - |
|
480 | - /** |
|
481 | - * set_network_menus |
|
482 | - * This method sets up the menus for network EE Admin Pages. |
|
483 | - * Almost identical to EE_Admin_Page_Loader::set_menus() except pages |
|
484 | - * are only added to the menu map if they are intended for the admin menu |
|
485 | - * |
|
486 | - * @return void |
|
487 | - */ |
|
488 | - public function set_network_menus() |
|
489 | - { |
|
490 | - $this->_prep_pages(); |
|
491 | - foreach ($this->_prepped_menu_maps as $menu_map) { |
|
492 | - if (EE_Registry::instance()->CAP->current_user_can($menu_map->capability, $menu_map->menu_slug)) { |
|
493 | - $menu_map->add_menu_page(true); |
|
494 | - } |
|
495 | - } |
|
496 | - } |
|
497 | - |
|
498 | - |
|
499 | - /** |
|
500 | - * _prep_pages |
|
501 | - * sets the _prepped_menu_maps property |
|
502 | - * |
|
503 | - * @access private |
|
504 | - * @throws EE_Error |
|
505 | - * @return void |
|
506 | - */ |
|
507 | - private function _prep_pages() |
|
508 | - { |
|
509 | - $pages_array = array(); |
|
510 | - // rearrange _admin_menu_groups to be indexed by group slug. |
|
511 | - $menu_groups = $this->_rearrange_menu_groups(); |
|
512 | - foreach ($this->_installed_pages as $page) { |
|
513 | - if ($page instanceof EE_Admin_page_Init) { |
|
514 | - $page_map = $page->get_menu_map(); |
|
515 | - // if we've got an array then the menu map is in the old format so let's throw a persistent notice that the admin system isn't setup correctly for this item. |
|
516 | - if (is_array($page_map) || empty($page_map)) { |
|
517 | - new PersistentAdminNotice( |
|
518 | - 'menu_map_warning_' . str_replace(' ', '_', $page->label) . '_' . EVENT_ESPRESSO_VERSION, |
|
519 | - sprintf( |
|
520 | - __( |
|
521 | - 'The admin page for %s was not correctly setup because it is using an older method for integrating with Event Espresso Core. This means that full functionality for this component is not available. This error message usually appears with an Add-on that is out of date. Make sure you update all your Event Espresso 4 add-ons to the latest version to ensure they have necessary compatibility updates in place.', |
|
522 | - 'event_espresso' |
|
523 | - ), |
|
524 | - $page->label |
|
525 | - ) |
|
526 | - ); |
|
527 | - continue; |
|
528 | - } |
|
529 | - // if page map is NOT a EE_Admin_Page_Menu_Map object then throw error. |
|
530 | - if (! $page_map instanceof EE_Admin_Page_Menu_Map) { |
|
531 | - throw new EE_Error( |
|
532 | - sprintf( |
|
533 | - __( |
|
534 | - 'The menu map for %s must be an EE_Admin_Page_Menu_Map object. Instead it is %s. Please double check that the menu map has been configured correctly.', |
|
535 | - 'event_espresso' |
|
536 | - ), |
|
537 | - $page->label, |
|
538 | - $page_map |
|
539 | - ) |
|
540 | - ); |
|
541 | - } |
|
542 | - // use the maintenance_mode_parent property and maintenance mode status to determine if this page even gets added to array. |
|
543 | - if (empty($page_map->maintenance_mode_parent) |
|
544 | - && EE_Maintenance_Mode::instance()->level() |
|
545 | - == EE_Maintenance_Mode::level_2_complete_maintenance) { |
|
546 | - continue; |
|
547 | - } |
|
548 | - // assign to group (remember $page_map has the admin page stored in it). |
|
549 | - $pages_array[ $page_map->menu_group ][] = $page_map; |
|
550 | - } |
|
551 | - } |
|
552 | - if (empty($pages_array)) { |
|
553 | - throw new EE_Error(__('Something went wrong when prepping the admin pages', 'event_espresso')); |
|
554 | - } |
|
555 | - // let's sort the groups, make sure it's a valid group, add header (if to show). |
|
556 | - foreach ($pages_array as $group => $menu_maps) { |
|
557 | - // valid_group? |
|
558 | - if (! array_key_exists($group, $menu_groups)) { |
|
559 | - continue; |
|
560 | - } |
|
561 | - // sort pages. |
|
562 | - usort($menu_maps, array($this, '_sort_menu_maps')); |
|
563 | - // prepend header |
|
564 | - array_unshift($menu_maps, $menu_groups[ $group ]); |
|
565 | - // reset $pages_array with prepped data |
|
566 | - $pages_array[ $group ] = $menu_maps; |
|
567 | - } |
|
568 | - // now let's setup the _prepped_menu_maps property |
|
569 | - foreach ($menu_groups as $group => $group_objs) { |
|
570 | - if (isset($pages_array[ $group ])) { |
|
571 | - $this->_prepped_menu_maps = array_merge($this->_prepped_menu_maps, $pages_array[ $group ]); |
|
572 | - } |
|
573 | - }/**/ |
|
574 | - } |
|
575 | - |
|
576 | - |
|
577 | - /** |
|
578 | - * This method is the "workhorse" for detecting and setting up caffeinated functionality. |
|
579 | - * In this method there are three checks being done: |
|
580 | - * 1. Do we have any NEW admin page sets. If we do, lets add them into the menu setup (via the $installed_refs |
|
581 | - * array) etc. (new page sets are found in caffeinated/new/{page}) |
|
582 | - * 2. Do we have any EXTENDED page sets. Basically an extended EE_Admin Page extends the core {child}_Admin_Page |
|
583 | - * class. eg. would be caffeinated/extend/events/Extend_Events_Admin_Page.core.php and in there would be a class: |
|
584 | - * Extend_Events_Admin_Page extends Events_Admin_Page. |
|
585 | - * 3. Do we have any files just for setting up hooks into other core pages. The files can be any name in |
|
586 | - * "caffeinated/hooks" EXCEPT they need a ".class.php" extension and the file name must correspond with the |
|
587 | - * classname inside. These classes are instantiated really early so that any hooks in them are run before the |
|
588 | - * corresponding apply_filters/do_actions that are found in any future loaded EE_Admin pages (INCLUDING caffeinated |
|
589 | - * admin_pages) |
|
590 | - * |
|
591 | - * @param array $installed_refs the original installed_refs array that may contain our NEW EE_Admin_Pages to be |
|
592 | - * loaded. |
|
593 | - * @return array |
|
594 | - */ |
|
595 | - private function _set_caffeinated($installed_refs) |
|
596 | - { |
|
597 | - |
|
598 | - // first let's check if there IS a caffeinated folder. If there is not then lets get out. |
|
599 | - if (! is_dir(EE_PLUGIN_DIR_PATH . 'caffeinated/admin') || (defined('EE_DECAF') && EE_DECAF)) { |
|
600 | - return $installed_refs; |
|
601 | - } |
|
602 | - $this->_define_caffeinated_constants(); |
|
603 | - $exclude = array('tickets'); |
|
604 | - // okay let's setup an "New" pages first (we'll return installed refs later) |
|
605 | - $new_admin_screens = glob(EE_CORE_CAF_ADMIN . 'new/*', GLOB_ONLYDIR); |
|
606 | - if ($new_admin_screens) { |
|
607 | - foreach ($new_admin_screens as $admin_screen) { |
|
608 | - // files and anything in the exclude array need not apply |
|
609 | - if (is_dir($admin_screen) && ! in_array(basename($admin_screen), $exclude)) { |
|
610 | - // these folders represent the different NEW EE admin pages |
|
611 | - $installed_refs[ basename($admin_screen) ] = $admin_screen; |
|
612 | - // set autoloaders for our admin page classes based on included path information |
|
613 | - EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($admin_screen); |
|
614 | - } |
|
615 | - } |
|
616 | - } |
|
617 | - // let's see if there are any EXTENDS to setup in the $_caffeinated_extends array (that will be used later for hooking into the _initialize_admin_age in the related core_init admin page) |
|
618 | - $extends = glob(EE_CORE_CAF_ADMIN . 'extend/*', GLOB_ONLYDIR); |
|
619 | - if ($extends) { |
|
620 | - foreach ($extends as $extend) { |
|
621 | - if (is_dir($extend)) { |
|
622 | - $extend_ref = basename($extend); |
|
623 | - // now let's make sure there is a file that matches the expected format |
|
624 | - $filename = str_replace( |
|
625 | - ' ', |
|
626 | - '_', |
|
627 | - ucwords( |
|
628 | - str_replace( |
|
629 | - '_', |
|
630 | - ' ', |
|
631 | - $extend_ref |
|
632 | - ) |
|
633 | - ) |
|
634 | - ); |
|
635 | - $filename = 'Extend_' . $filename . '_Admin_Page'; |
|
636 | - $this->_caffeinated_extends[ $extend_ref ]['path'] = str_replace( |
|
637 | - array('\\', '/'), |
|
638 | - '/', |
|
639 | - EE_CORE_CAF_ADMIN |
|
640 | - . 'extend/' |
|
641 | - . $extend_ref |
|
642 | - . '/' |
|
643 | - . $filename |
|
644 | - . '.core.php' |
|
645 | - ); |
|
646 | - $this->_caffeinated_extends[ $extend_ref ]['admin_page'] = $filename; |
|
647 | - // set autoloaders for our admin page classes based on included path information |
|
648 | - EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($extend); |
|
649 | - } |
|
650 | - } |
|
651 | - } |
|
652 | - // let's see if there are any HOOK files and instantiate them if there are (so that hooks are loaded early!). |
|
653 | - $ee_admin_hooks = array(); |
|
654 | - $hooks = glob(EE_CORE_CAF_ADMIN . 'hooks/*.class.php'); |
|
655 | - if ($hooks) { |
|
656 | - foreach ($hooks as $hook) { |
|
657 | - if (is_readable($hook)) { |
|
658 | - require_once $hook; |
|
659 | - $classname = str_replace(EE_CORE_CAF_ADMIN . 'hooks/', '', $hook); |
|
660 | - $classname = str_replace('.class.php', '', $classname); |
|
661 | - if (class_exists($classname)) { |
|
662 | - $a = new ReflectionClass($classname); |
|
663 | - $ee_admin_hooks[] = $a->newInstance(); |
|
664 | - } |
|
665 | - } |
|
666 | - } |
|
667 | - }/**/ |
|
668 | - $ee_admin_hooks = apply_filters('FHEE__EE_Admin_Page_Loader__set_caffeinated__ee_admin_hooks', $ee_admin_hooks); |
|
669 | - return $installed_refs; |
|
670 | - } |
|
671 | - |
|
672 | - |
|
673 | - /** |
|
674 | - * Utility method for sorting the _menu_maps (callback for usort php function) |
|
675 | - * |
|
676 | - * @since 4.4.0 |
|
677 | - * @param EE_Admin_Page_Menu_Map $a menu_map object |
|
678 | - * @param EE_Admin_Page_Menu_Map $b being compared to |
|
679 | - * @return int sort order |
|
680 | - */ |
|
681 | - private function _sort_menu_maps(EE_Admin_Page_Menu_Map $a, EE_Admin_Page_Menu_Map $b) |
|
682 | - { |
|
683 | - if ($a->menu_order == $b->menu_order) { |
|
684 | - return 0; |
|
685 | - } |
|
686 | - return ($a->menu_order < $b->menu_order) ? -1 : 1; |
|
687 | - } |
|
688 | - |
|
689 | - |
|
690 | - /** |
|
691 | - * _default_header_link |
|
692 | - * This is just a dummy method to use with header submenu items |
|
693 | - * |
|
694 | - * @return bool false |
|
695 | - */ |
|
696 | - public function _default_header_link() |
|
697 | - { |
|
698 | - return false; |
|
699 | - } |
|
27 | + /** |
|
28 | + * _installed_pages |
|
29 | + * objects for page_init objects detected and loaded |
|
30 | + * |
|
31 | + * @access private |
|
32 | + * @var \EE_Admin_Page_Init[] |
|
33 | + */ |
|
34 | + private $_installed_pages = array(); |
|
35 | + |
|
36 | + |
|
37 | + /** |
|
38 | + * this is used to hold the registry of menu slugs for all the installed admin pages |
|
39 | + * |
|
40 | + * @var array |
|
41 | + */ |
|
42 | + private $_menu_slugs = array(); |
|
43 | + |
|
44 | + |
|
45 | + /** |
|
46 | + * _caffeinated_extends |
|
47 | + * This array is the generated configuration array for which core EE_Admin pages are extended (and the bits and |
|
48 | + * pieces needed to do so). This property is defined in the _set_caffeinated method. |
|
49 | + * |
|
50 | + * @var array |
|
51 | + */ |
|
52 | + private $_caffeinated_extends = array(); |
|
53 | + |
|
54 | + |
|
55 | + /** |
|
56 | + * _current_caf_extend_slug |
|
57 | + * This property is used for holding the page slug that is required for referencing the correct |
|
58 | + * _caffeinated_extends index when the corresponding core child EE_Admin_Page_init hooks are executed. |
|
59 | + * |
|
60 | + * @var array |
|
61 | + */ |
|
62 | + private $_current_caf_extend_slug; |
|
63 | + |
|
64 | + /** |
|
65 | + * _prepped_menu_maps |
|
66 | + * This is the prepared array of EE_Admin_Page_Menu_Maps for adding to the admin_menu. |
|
67 | + * |
|
68 | + * @since 4.4.0 |
|
69 | + * @var EE_Admin_Page_Menu_Map[] |
|
70 | + */ |
|
71 | + private $_prepped_menu_maps = array(); |
|
72 | + |
|
73 | + |
|
74 | + /** |
|
75 | + * _admin_menu_groups |
|
76 | + * array that holds the group headings and details for |
|
77 | + * |
|
78 | + * @access private |
|
79 | + * @var array |
|
80 | + */ |
|
81 | + private $_admin_menu_groups = array(); |
|
82 | + |
|
83 | + |
|
84 | + /** |
|
85 | + * This property will hold the hook file for setting up the filter that does all the connections between admin |
|
86 | + * pages. |
|
87 | + * |
|
88 | + * @var string |
|
89 | + */ |
|
90 | + public $hook_file; |
|
91 | + |
|
92 | + |
|
93 | + /** |
|
94 | + * constructor |
|
95 | + * |
|
96 | + * @access public |
|
97 | + * @return \EE_Admin_Page_Loader |
|
98 | + */ |
|
99 | + public function __construct() |
|
100 | + { |
|
101 | + // load menu_map classes |
|
102 | + EE_Registry::instance()->load_file(EE_ADMIN, 'EE_Admin_Page_Menu_Map', 'core'); |
|
103 | + // define the default "groups" for the admin_pages |
|
104 | + $this->_set_menu_groups(); |
|
105 | + |
|
106 | + // let's do a scan and see what installed pages we have |
|
107 | + $this->_get_installed_pages(); |
|
108 | + // set menus (has to be done on every load - we're not actually loading the page just setting the menus and where they point to). |
|
109 | + add_action('admin_menu', array($this, 'set_menus')); |
|
110 | + add_action('network_admin_menu', array($this, 'set_network_menus')); |
|
111 | + } |
|
112 | + |
|
113 | + |
|
114 | + /** |
|
115 | + * When caffeinated system is detected, this method is called to setup the caffeinated directory constants used by |
|
116 | + * files in the caffeinated folder. |
|
117 | + * |
|
118 | + * @access private |
|
119 | + * @return void |
|
120 | + */ |
|
121 | + private function _define_caffeinated_constants() |
|
122 | + { |
|
123 | + if (! defined('EE_CORE_CAF_ADMIN')) { |
|
124 | + define('EE_CORE_CAF_ADMIN', EE_PLUGIN_DIR_PATH . 'caffeinated/admin/'); |
|
125 | + define('EE_CORE_CAF_ADMIN_URL', EE_PLUGIN_DIR_URL . 'caffeinated/admin/'); |
|
126 | + define('EE_CORE_CAF_ADMIN_NEW', EE_CORE_CAF_ADMIN . 'new/'); |
|
127 | + define('EE_CORE_CAF_ADMIN_EXTEND', EE_CORE_CAF_ADMIN . 'extend/'); |
|
128 | + define('EE_CORE_CAF_ADMIN_EXTEND_URL', EE_CORE_CAF_ADMIN_URL . 'extend/'); |
|
129 | + define('EE_CORE_CAF_ADMIN_HOOKS', EE_CORE_CAF_ADMIN . 'hooks/'); |
|
130 | + } |
|
131 | + } |
|
132 | + |
|
133 | + |
|
134 | + /** |
|
135 | + * _set_menu_groups |
|
136 | + * sets the filterable _admin_menu_groups property (list of various "groupings" within the EE admin menu array) |
|
137 | + * |
|
138 | + * @access private |
|
139 | + * @return void |
|
140 | + */ |
|
141 | + private function _set_menu_groups() |
|
142 | + { |
|
143 | + |
|
144 | + // set array of EE_Admin_Page_Menu_Group objects |
|
145 | + $groups = array( |
|
146 | + 'main' => new EE_Admin_Page_Menu_Group( |
|
147 | + array( |
|
148 | + 'menu_label' => __('Main', 'event_espresso'), |
|
149 | + 'show_on_menu' => EE_Admin_Page_Menu_Map::NONE, |
|
150 | + 'menu_slug' => 'main', |
|
151 | + 'capability' => 'ee_read_ee', |
|
152 | + 'menu_order' => 0, |
|
153 | + 'parent_slug' => 'espresso_events', |
|
154 | + ) |
|
155 | + ), |
|
156 | + 'management' => new EE_Admin_Page_Menu_Group( |
|
157 | + array( |
|
158 | + 'menu_label' => __('Management', 'event_espresso'), |
|
159 | + 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_ADMIN_ONLY, |
|
160 | + 'menu_slug' => 'management', |
|
161 | + 'capability' => 'ee_read_ee', |
|
162 | + 'menu_order' => 10, |
|
163 | + 'parent_slug' => 'espresso_events', |
|
164 | + ) |
|
165 | + ), |
|
166 | + 'settings' => new EE_Admin_Page_Menu_Group( |
|
167 | + array( |
|
168 | + 'menu_label' => __('Settings', 'event_espresso'), |
|
169 | + 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_ADMIN_ONLY, |
|
170 | + 'menu_slug' => 'settings', |
|
171 | + 'capability' => 'ee_read_ee', |
|
172 | + 'menu_order' => 30, |
|
173 | + 'parent_slug' => 'espresso_events', |
|
174 | + ) |
|
175 | + ), |
|
176 | + 'templates' => new EE_Admin_Page_Menu_Group( |
|
177 | + array( |
|
178 | + 'menu_label' => __('Templates', 'event_espresso'), |
|
179 | + 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_ADMIN_ONLY, |
|
180 | + 'menu_slug' => 'templates', |
|
181 | + 'capability' => 'ee_read_ee', |
|
182 | + 'menu_order' => 40, |
|
183 | + 'parent_slug' => 'espresso_events', |
|
184 | + ) |
|
185 | + ), |
|
186 | + 'extras' => new EE_Admin_Page_Menu_Group( |
|
187 | + array( |
|
188 | + 'menu_label' => __('Extras', 'event_espresso'), |
|
189 | + 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_AND_NETWORK_ADMIN, |
|
190 | + 'menu_slug' => 'extras', |
|
191 | + 'capability' => 'ee_read_ee', |
|
192 | + 'menu_order' => 50, |
|
193 | + 'parent_slug' => 'espresso_events', |
|
194 | + 'maintenance_mode_parent' => 'espresso_maintenance_settings', |
|
195 | + ) |
|
196 | + ), |
|
197 | + 'tools' => new EE_Admin_Page_Menu_Group( |
|
198 | + array( |
|
199 | + 'menu_label' => __("Tools", "event_espresso"), |
|
200 | + 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_ADMIN_ONLY, |
|
201 | + 'menu_slug' => 'tools', |
|
202 | + 'capability' => 'ee_read_ee', |
|
203 | + 'menu_order' => 60, |
|
204 | + 'parent_slug' => 'espresso_events', |
|
205 | + ) |
|
206 | + ), |
|
207 | + 'addons' => new EE_Admin_Page_Menu_Group( |
|
208 | + array( |
|
209 | + 'show_on_menu' => EE_Admin_Page_Menu_Map::BLOG_AND_NETWORK_ADMIN, |
|
210 | + 'menu_label' => __('Add-ons', 'event_espresso'), |
|
211 | + 'menu_slug' => 'addons', |
|
212 | + 'capability' => 'ee_read_ee', |
|
213 | + 'menu_order' => 20, |
|
214 | + 'parent_slug' => 'espresso_events', |
|
215 | + ) |
|
216 | + ), |
|
217 | + ); |
|
218 | + $this->_admin_menu_groups = apply_filters( |
|
219 | + 'FHEE__EE_Admin_Page_Loader___set_menu_groups__admin_menu_groups', |
|
220 | + $groups |
|
221 | + ); |
|
222 | + } |
|
223 | + |
|
224 | + |
|
225 | + /** |
|
226 | + * This takes all the groups in the _admin_menu_groups array and returns the array indexed by group |
|
227 | + * slug. The other utility with this function is it validates that all the groups are instances of |
|
228 | + * EE_Admin_Page_Menu_Group (cause some invalid things might have slipped in via addons). |
|
229 | + * |
|
230 | + * @since 4.4.0 |
|
231 | + * @throws \EE_Error |
|
232 | + * @return EE_Admin_Page_Menu_Group[] |
|
233 | + */ |
|
234 | + private function _rearrange_menu_groups() |
|
235 | + { |
|
236 | + $groups = array(); |
|
237 | + // first let's order the menu groups by their internal menu order (note usort type hinting to ensure the incoming array is EE_Admin_Page_Menu_Map objects ) |
|
238 | + usort($this->_admin_menu_groups, array($this, '_sort_menu_maps')); |
|
239 | + foreach ($this->_admin_menu_groups as $group) { |
|
240 | + if (! $group instanceof EE_Admin_Page_Menu_Group) { |
|
241 | + throw new EE_Error( |
|
242 | + sprintf( |
|
243 | + __( |
|
244 | + 'Unable to continue sorting the menu groups array because there is an invalid value for the menu groups. All values in this array are required to be a EE_Admin_Page_Menu_Group object. Instead there was: %s', |
|
245 | + 'event_espresso' |
|
246 | + ), |
|
247 | + print_r($group, true) |
|
248 | + ) |
|
249 | + ); |
|
250 | + } |
|
251 | + $groups[ $group->menu_slug ] = $group; |
|
252 | + } |
|
253 | + return $groups; |
|
254 | + } |
|
255 | + |
|
256 | + |
|
257 | + /** |
|
258 | + * _get_installed_pages |
|
259 | + * This just gets the list of installed EE_Admin_pages. |
|
260 | + * |
|
261 | + * @access private |
|
262 | + * @throws EE_Error |
|
263 | + * @return void |
|
264 | + */ |
|
265 | + private function _get_installed_pages() |
|
266 | + { |
|
267 | + $installed_refs = array(); |
|
268 | + $exclude = array('assets', 'templates'); |
|
269 | + // grab everything in the admin core directory |
|
270 | + $admin_screens = glob(EE_ADMIN_PAGES . '*', GLOB_ONLYDIR); |
|
271 | + if ($admin_screens) { |
|
272 | + foreach ($admin_screens as $admin_screen) { |
|
273 | + // files and anything in the exclude array need not apply |
|
274 | + if (is_dir($admin_screen) && ! in_array(basename($admin_screen), $exclude)) { |
|
275 | + // these folders represent the different EE admin pages |
|
276 | + $installed_refs[ basename($admin_screen) ] = $admin_screen; |
|
277 | + } |
|
278 | + } |
|
279 | + } |
|
280 | + if (empty($installed_refs)) { |
|
281 | + $error_msg[] = __( |
|
282 | + 'There are no EE_Admin pages detected, it looks like EE did not install properly', |
|
283 | + 'event_espresso' |
|
284 | + ); |
|
285 | + $error_msg[] = $error_msg[0] . "\r\n" |
|
286 | + . sprintf( |
|
287 | + __( |
|
288 | + 'Check that the %s folder exists and is writable. Maybe try deactivating, then reactivating Event Espresso again.', |
|
289 | + 'event_espresso' |
|
290 | + ), |
|
291 | + EE_ADMIN_PAGES |
|
292 | + ); |
|
293 | + throw new EE_Error(implode('||', $error_msg)); |
|
294 | + } |
|
295 | + // this just checks the caffeinated folder and takes care of setting up any caffeinated stuff. |
|
296 | + $installed_refs = $this->_set_caffeinated($installed_refs); |
|
297 | + // allow plugins to add in their own pages (note at this point they will need to have an autoloader defined for their class) OR hook into EEH_Autoloader::load_admin_page() to add their path.; |
|
298 | + $installed_refs = apply_filters( |
|
299 | + 'FHEE__EE_Admin_Page_Loader___get_installed_pages__installed_refs', |
|
300 | + $installed_refs |
|
301 | + ); |
|
302 | + $this->_caffeinated_extends = apply_filters( |
|
303 | + 'FHEE__EE_Admin_Page_Loader___get_installed_pages__caffeinated_extends', |
|
304 | + $this->_caffeinated_extends |
|
305 | + ); |
|
306 | + // loop through admin pages and setup the $_installed_pages array. |
|
307 | + $hooks_ref = array(); |
|
308 | + foreach ($installed_refs as $page => $path) { |
|
309 | + // set autoloaders for our admin page classes based on included path information |
|
310 | + EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($path); |
|
311 | + // build list of installed pages |
|
312 | + $this->_installed_pages[ $page ] = $this->_load_admin_page($page, $path); |
|
313 | + // verify returned object |
|
314 | + if ($this->_installed_pages[ $page ] instanceof EE_Admin_Page_Init) { |
|
315 | + if (! $this->_installed_pages[ $page ]->get_menu_map() instanceof EE_Admin_Page_Menu_Map) { |
|
316 | + continue; |
|
317 | + } |
|
318 | + // skip if in full maintenance mode and maintenance_mode_parent is set |
|
319 | + $maintenance_mode_parent = $this->_installed_pages[ $page ]->get_menu_map()->maintenance_mode_parent; |
|
320 | + if (empty($maintenance_mode_parent) |
|
321 | + && EE_Maintenance_Mode::instance()->level() === EE_Maintenance_Mode::level_2_complete_maintenance |
|
322 | + ) { |
|
323 | + unset($installed_refs[ $page ]); |
|
324 | + continue; |
|
325 | + } |
|
326 | + $menu_slug = $this->_installed_pages[ $page ]->get_menu_map()->menu_slug; |
|
327 | + $this->_menu_slugs[ $menu_slug ] = $page; |
|
328 | + // flag for register hooks on extended pages b/c extended pages use the default INIT. |
|
329 | + $extend = false; |
|
330 | + // now that we've got the admin_init objects... lets see if there are any caffeinated pages extending the originals. If there are then let's hook into the init admin filter and load our extend instead. |
|
331 | + if (isset($this->_caffeinated_extends[ $page ])) { |
|
332 | + $this->_current_caf_extend_slug = $page; |
|
333 | + $admin_page_name = $this->_installed_pages[ $page ]->get_admin_page_name(); |
|
334 | + $caf_path = $this->_caffeinated_extends[ $this->_current_caf_extend_slug ]['path']; |
|
335 | + $caf_admin_page = $this->_caffeinated_extends[ $this->_current_caf_extend_slug ]['admin_page']; |
|
336 | + add_filter( |
|
337 | + "FHEE__EE_Admin_Page_Init___initialize_admin_page__path_to_file__{$menu_slug}_{$admin_page_name}", |
|
338 | + function ($path_to_file) use ($caf_path) { |
|
339 | + return $caf_path; |
|
340 | + } |
|
341 | + ); |
|
342 | + add_filter( |
|
343 | + "FHEE__EE_Admin_Page_Init___initialize_admin_page__admin_page__{$menu_slug}_{$admin_page_name}", |
|
344 | + function ($admin_page) use ($caf_admin_page) { |
|
345 | + return $caf_admin_page; |
|
346 | + } |
|
347 | + ); |
|
348 | + $extend = true; |
|
349 | + } |
|
350 | + // let's do the registered hooks |
|
351 | + $extended_hooks = $this->_installed_pages[ $page ]->register_hooks($extend); |
|
352 | + $hooks_ref = array_merge($hooks_ref, $extended_hooks); |
|
353 | + } |
|
354 | + } |
|
355 | + // the hooks_ref is all the pages where we have $extended _Hooks files that will extend a class in a different folder. So we want to make sure we load the file for the parent. |
|
356 | + // first make sure we've got unique values |
|
357 | + $hooks_ref = array_unique($hooks_ref); |
|
358 | + // now let's loop and require! |
|
359 | + foreach ($hooks_ref as $path) { |
|
360 | + require_once($path); |
|
361 | + } |
|
362 | + // make sure we have menu slugs global setup. Used in EE_Admin_Page->page_setup() to ensure we don't do a full class load for an admin page that isn't requested. |
|
363 | + global $ee_menu_slugs; |
|
364 | + $ee_menu_slugs = $this->_menu_slugs; |
|
365 | + // we need to loop again to run any early code |
|
366 | + foreach ($installed_refs as $page => $path) { |
|
367 | + if ($this->_installed_pages[ $page ] instanceof EE_Admin_Page_Init) { |
|
368 | + $this->_installed_pages[ $page ]->do_initial_loads(); |
|
369 | + } |
|
370 | + } |
|
371 | + do_action('AHEE__EE_Admin_Page_Loader___get_installed_pages_loaded', $this->_installed_pages); |
|
372 | + } |
|
373 | + |
|
374 | + |
|
375 | + /** |
|
376 | + * get_admin_page_object |
|
377 | + * |
|
378 | + * @param string $page_slug |
|
379 | + * @return EE_Admin_Page |
|
380 | + */ |
|
381 | + public function get_admin_page_object($page_slug = '') |
|
382 | + { |
|
383 | + if (isset($this->_installed_pages[ $page_slug ])) { |
|
384 | + return $this->_installed_pages[ $page_slug ]->loaded_page_object(); |
|
385 | + } |
|
386 | + return null; |
|
387 | + } |
|
388 | + |
|
389 | + |
|
390 | + /** |
|
391 | + * _get_classname_for_admin_page |
|
392 | + * generates an "Admin Page" class based on the directory name |
|
393 | + * |
|
394 | + * @param $dir_name |
|
395 | + * @return string |
|
396 | + */ |
|
397 | + private function _get_classname_for_admin_page($dir_name = '') |
|
398 | + { |
|
399 | + $class_name = str_replace('_', ' ', strtolower($dir_name)); |
|
400 | + return str_replace(' ', '_', ucwords($class_name)) . '_Admin_Page'; |
|
401 | + } |
|
402 | + |
|
403 | + |
|
404 | + /** |
|
405 | + * _get_classname_for_admin_init_page |
|
406 | + * generates an "Admin Page Init" class based on the directory name |
|
407 | + * |
|
408 | + * @param $dir_name |
|
409 | + * @return string |
|
410 | + */ |
|
411 | + private function _get_classname_for_admin_init_page($dir_name = '') |
|
412 | + { |
|
413 | + $class_name = str_replace('_', ' ', strtolower($dir_name)); |
|
414 | + return str_replace(' ', '_', ucwords($class_name)) . '_Admin_Page_Init'; |
|
415 | + } |
|
416 | + |
|
417 | + |
|
418 | + /** |
|
419 | + * _load_admin_page |
|
420 | + * Loads and instantiates page_init object for a single EE_admin page. |
|
421 | + * |
|
422 | + * @param string $page page_reference |
|
423 | + * @param string $path |
|
424 | + * @throws EE_Error |
|
425 | + * @return object|bool return page object if valid, bool false if not. |
|
426 | + */ |
|
427 | + private function _load_admin_page($page = '', $path = '') |
|
428 | + { |
|
429 | + $class_name = $this->_get_classname_for_admin_init_page($page); |
|
430 | + EE_Registry::instance()->load_file($path, $class_name, 'core'); |
|
431 | + if (! class_exists($class_name)) { |
|
432 | + $inner_error_msg = '<br />' |
|
433 | + . sprintf( |
|
434 | + esc_html__( |
|
435 | + 'Make sure you have %1$s defined. If this is a non-EE-core admin page then you also must have an autoloader in place for your class', |
|
436 | + 'event_espresso' |
|
437 | + ), |
|
438 | + '<strong>' . $class_name . '</strong>' |
|
439 | + ); |
|
440 | + $error_msg[] = sprintf( |
|
441 | + __('Something went wrong with loading the %s admin page.', 'event_espresso'), |
|
442 | + $page |
|
443 | + ); |
|
444 | + $error_msg[] = $error_msg[0] |
|
445 | + . "\r\n" |
|
446 | + . sprintf( |
|
447 | + esc_html__( |
|
448 | + 'There is no Init class in place for the %s admin page.', |
|
449 | + 'event_espresso' |
|
450 | + ), |
|
451 | + $page |
|
452 | + ) |
|
453 | + . $inner_error_msg; |
|
454 | + throw new EE_Error(implode('||', $error_msg)); |
|
455 | + } |
|
456 | + $a = new ReflectionClass($class_name); |
|
457 | + return $a->newInstance(); |
|
458 | + } |
|
459 | + |
|
460 | + |
|
461 | + /** |
|
462 | + * set_menus |
|
463 | + * This method sets up the menus for EE Admin Pages |
|
464 | + * |
|
465 | + * @access private |
|
466 | + * @return void |
|
467 | + */ |
|
468 | + public function set_menus() |
|
469 | + { |
|
470 | + // prep the menu pages (sort, group.) |
|
471 | + $this->_prep_pages(); |
|
472 | + foreach ($this->_prepped_menu_maps as $menu_map) { |
|
473 | + if (EE_Registry::instance()->CAP->current_user_can($menu_map->capability, $menu_map->menu_slug)) { |
|
474 | + $menu_map->add_menu_page(false); |
|
475 | + } |
|
476 | + } |
|
477 | + } |
|
478 | + |
|
479 | + |
|
480 | + /** |
|
481 | + * set_network_menus |
|
482 | + * This method sets up the menus for network EE Admin Pages. |
|
483 | + * Almost identical to EE_Admin_Page_Loader::set_menus() except pages |
|
484 | + * are only added to the menu map if they are intended for the admin menu |
|
485 | + * |
|
486 | + * @return void |
|
487 | + */ |
|
488 | + public function set_network_menus() |
|
489 | + { |
|
490 | + $this->_prep_pages(); |
|
491 | + foreach ($this->_prepped_menu_maps as $menu_map) { |
|
492 | + if (EE_Registry::instance()->CAP->current_user_can($menu_map->capability, $menu_map->menu_slug)) { |
|
493 | + $menu_map->add_menu_page(true); |
|
494 | + } |
|
495 | + } |
|
496 | + } |
|
497 | + |
|
498 | + |
|
499 | + /** |
|
500 | + * _prep_pages |
|
501 | + * sets the _prepped_menu_maps property |
|
502 | + * |
|
503 | + * @access private |
|
504 | + * @throws EE_Error |
|
505 | + * @return void |
|
506 | + */ |
|
507 | + private function _prep_pages() |
|
508 | + { |
|
509 | + $pages_array = array(); |
|
510 | + // rearrange _admin_menu_groups to be indexed by group slug. |
|
511 | + $menu_groups = $this->_rearrange_menu_groups(); |
|
512 | + foreach ($this->_installed_pages as $page) { |
|
513 | + if ($page instanceof EE_Admin_page_Init) { |
|
514 | + $page_map = $page->get_menu_map(); |
|
515 | + // if we've got an array then the menu map is in the old format so let's throw a persistent notice that the admin system isn't setup correctly for this item. |
|
516 | + if (is_array($page_map) || empty($page_map)) { |
|
517 | + new PersistentAdminNotice( |
|
518 | + 'menu_map_warning_' . str_replace(' ', '_', $page->label) . '_' . EVENT_ESPRESSO_VERSION, |
|
519 | + sprintf( |
|
520 | + __( |
|
521 | + 'The admin page for %s was not correctly setup because it is using an older method for integrating with Event Espresso Core. This means that full functionality for this component is not available. This error message usually appears with an Add-on that is out of date. Make sure you update all your Event Espresso 4 add-ons to the latest version to ensure they have necessary compatibility updates in place.', |
|
522 | + 'event_espresso' |
|
523 | + ), |
|
524 | + $page->label |
|
525 | + ) |
|
526 | + ); |
|
527 | + continue; |
|
528 | + } |
|
529 | + // if page map is NOT a EE_Admin_Page_Menu_Map object then throw error. |
|
530 | + if (! $page_map instanceof EE_Admin_Page_Menu_Map) { |
|
531 | + throw new EE_Error( |
|
532 | + sprintf( |
|
533 | + __( |
|
534 | + 'The menu map for %s must be an EE_Admin_Page_Menu_Map object. Instead it is %s. Please double check that the menu map has been configured correctly.', |
|
535 | + 'event_espresso' |
|
536 | + ), |
|
537 | + $page->label, |
|
538 | + $page_map |
|
539 | + ) |
|
540 | + ); |
|
541 | + } |
|
542 | + // use the maintenance_mode_parent property and maintenance mode status to determine if this page even gets added to array. |
|
543 | + if (empty($page_map->maintenance_mode_parent) |
|
544 | + && EE_Maintenance_Mode::instance()->level() |
|
545 | + == EE_Maintenance_Mode::level_2_complete_maintenance) { |
|
546 | + continue; |
|
547 | + } |
|
548 | + // assign to group (remember $page_map has the admin page stored in it). |
|
549 | + $pages_array[ $page_map->menu_group ][] = $page_map; |
|
550 | + } |
|
551 | + } |
|
552 | + if (empty($pages_array)) { |
|
553 | + throw new EE_Error(__('Something went wrong when prepping the admin pages', 'event_espresso')); |
|
554 | + } |
|
555 | + // let's sort the groups, make sure it's a valid group, add header (if to show). |
|
556 | + foreach ($pages_array as $group => $menu_maps) { |
|
557 | + // valid_group? |
|
558 | + if (! array_key_exists($group, $menu_groups)) { |
|
559 | + continue; |
|
560 | + } |
|
561 | + // sort pages. |
|
562 | + usort($menu_maps, array($this, '_sort_menu_maps')); |
|
563 | + // prepend header |
|
564 | + array_unshift($menu_maps, $menu_groups[ $group ]); |
|
565 | + // reset $pages_array with prepped data |
|
566 | + $pages_array[ $group ] = $menu_maps; |
|
567 | + } |
|
568 | + // now let's setup the _prepped_menu_maps property |
|
569 | + foreach ($menu_groups as $group => $group_objs) { |
|
570 | + if (isset($pages_array[ $group ])) { |
|
571 | + $this->_prepped_menu_maps = array_merge($this->_prepped_menu_maps, $pages_array[ $group ]); |
|
572 | + } |
|
573 | + }/**/ |
|
574 | + } |
|
575 | + |
|
576 | + |
|
577 | + /** |
|
578 | + * This method is the "workhorse" for detecting and setting up caffeinated functionality. |
|
579 | + * In this method there are three checks being done: |
|
580 | + * 1. Do we have any NEW admin page sets. If we do, lets add them into the menu setup (via the $installed_refs |
|
581 | + * array) etc. (new page sets are found in caffeinated/new/{page}) |
|
582 | + * 2. Do we have any EXTENDED page sets. Basically an extended EE_Admin Page extends the core {child}_Admin_Page |
|
583 | + * class. eg. would be caffeinated/extend/events/Extend_Events_Admin_Page.core.php and in there would be a class: |
|
584 | + * Extend_Events_Admin_Page extends Events_Admin_Page. |
|
585 | + * 3. Do we have any files just for setting up hooks into other core pages. The files can be any name in |
|
586 | + * "caffeinated/hooks" EXCEPT they need a ".class.php" extension and the file name must correspond with the |
|
587 | + * classname inside. These classes are instantiated really early so that any hooks in them are run before the |
|
588 | + * corresponding apply_filters/do_actions that are found in any future loaded EE_Admin pages (INCLUDING caffeinated |
|
589 | + * admin_pages) |
|
590 | + * |
|
591 | + * @param array $installed_refs the original installed_refs array that may contain our NEW EE_Admin_Pages to be |
|
592 | + * loaded. |
|
593 | + * @return array |
|
594 | + */ |
|
595 | + private function _set_caffeinated($installed_refs) |
|
596 | + { |
|
597 | + |
|
598 | + // first let's check if there IS a caffeinated folder. If there is not then lets get out. |
|
599 | + if (! is_dir(EE_PLUGIN_DIR_PATH . 'caffeinated/admin') || (defined('EE_DECAF') && EE_DECAF)) { |
|
600 | + return $installed_refs; |
|
601 | + } |
|
602 | + $this->_define_caffeinated_constants(); |
|
603 | + $exclude = array('tickets'); |
|
604 | + // okay let's setup an "New" pages first (we'll return installed refs later) |
|
605 | + $new_admin_screens = glob(EE_CORE_CAF_ADMIN . 'new/*', GLOB_ONLYDIR); |
|
606 | + if ($new_admin_screens) { |
|
607 | + foreach ($new_admin_screens as $admin_screen) { |
|
608 | + // files and anything in the exclude array need not apply |
|
609 | + if (is_dir($admin_screen) && ! in_array(basename($admin_screen), $exclude)) { |
|
610 | + // these folders represent the different NEW EE admin pages |
|
611 | + $installed_refs[ basename($admin_screen) ] = $admin_screen; |
|
612 | + // set autoloaders for our admin page classes based on included path information |
|
613 | + EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($admin_screen); |
|
614 | + } |
|
615 | + } |
|
616 | + } |
|
617 | + // let's see if there are any EXTENDS to setup in the $_caffeinated_extends array (that will be used later for hooking into the _initialize_admin_age in the related core_init admin page) |
|
618 | + $extends = glob(EE_CORE_CAF_ADMIN . 'extend/*', GLOB_ONLYDIR); |
|
619 | + if ($extends) { |
|
620 | + foreach ($extends as $extend) { |
|
621 | + if (is_dir($extend)) { |
|
622 | + $extend_ref = basename($extend); |
|
623 | + // now let's make sure there is a file that matches the expected format |
|
624 | + $filename = str_replace( |
|
625 | + ' ', |
|
626 | + '_', |
|
627 | + ucwords( |
|
628 | + str_replace( |
|
629 | + '_', |
|
630 | + ' ', |
|
631 | + $extend_ref |
|
632 | + ) |
|
633 | + ) |
|
634 | + ); |
|
635 | + $filename = 'Extend_' . $filename . '_Admin_Page'; |
|
636 | + $this->_caffeinated_extends[ $extend_ref ]['path'] = str_replace( |
|
637 | + array('\\', '/'), |
|
638 | + '/', |
|
639 | + EE_CORE_CAF_ADMIN |
|
640 | + . 'extend/' |
|
641 | + . $extend_ref |
|
642 | + . '/' |
|
643 | + . $filename |
|
644 | + . '.core.php' |
|
645 | + ); |
|
646 | + $this->_caffeinated_extends[ $extend_ref ]['admin_page'] = $filename; |
|
647 | + // set autoloaders for our admin page classes based on included path information |
|
648 | + EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($extend); |
|
649 | + } |
|
650 | + } |
|
651 | + } |
|
652 | + // let's see if there are any HOOK files and instantiate them if there are (so that hooks are loaded early!). |
|
653 | + $ee_admin_hooks = array(); |
|
654 | + $hooks = glob(EE_CORE_CAF_ADMIN . 'hooks/*.class.php'); |
|
655 | + if ($hooks) { |
|
656 | + foreach ($hooks as $hook) { |
|
657 | + if (is_readable($hook)) { |
|
658 | + require_once $hook; |
|
659 | + $classname = str_replace(EE_CORE_CAF_ADMIN . 'hooks/', '', $hook); |
|
660 | + $classname = str_replace('.class.php', '', $classname); |
|
661 | + if (class_exists($classname)) { |
|
662 | + $a = new ReflectionClass($classname); |
|
663 | + $ee_admin_hooks[] = $a->newInstance(); |
|
664 | + } |
|
665 | + } |
|
666 | + } |
|
667 | + }/**/ |
|
668 | + $ee_admin_hooks = apply_filters('FHEE__EE_Admin_Page_Loader__set_caffeinated__ee_admin_hooks', $ee_admin_hooks); |
|
669 | + return $installed_refs; |
|
670 | + } |
|
671 | + |
|
672 | + |
|
673 | + /** |
|
674 | + * Utility method for sorting the _menu_maps (callback for usort php function) |
|
675 | + * |
|
676 | + * @since 4.4.0 |
|
677 | + * @param EE_Admin_Page_Menu_Map $a menu_map object |
|
678 | + * @param EE_Admin_Page_Menu_Map $b being compared to |
|
679 | + * @return int sort order |
|
680 | + */ |
|
681 | + private function _sort_menu_maps(EE_Admin_Page_Menu_Map $a, EE_Admin_Page_Menu_Map $b) |
|
682 | + { |
|
683 | + if ($a->menu_order == $b->menu_order) { |
|
684 | + return 0; |
|
685 | + } |
|
686 | + return ($a->menu_order < $b->menu_order) ? -1 : 1; |
|
687 | + } |
|
688 | + |
|
689 | + |
|
690 | + /** |
|
691 | + * _default_header_link |
|
692 | + * This is just a dummy method to use with header submenu items |
|
693 | + * |
|
694 | + * @return bool false |
|
695 | + */ |
|
696 | + public function _default_header_link() |
|
697 | + { |
|
698 | + return false; |
|
699 | + } |
|
700 | 700 | } |
@@ -120,13 +120,13 @@ discard block |
||
120 | 120 | */ |
121 | 121 | private function _define_caffeinated_constants() |
122 | 122 | { |
123 | - if (! defined('EE_CORE_CAF_ADMIN')) { |
|
124 | - define('EE_CORE_CAF_ADMIN', EE_PLUGIN_DIR_PATH . 'caffeinated/admin/'); |
|
125 | - define('EE_CORE_CAF_ADMIN_URL', EE_PLUGIN_DIR_URL . 'caffeinated/admin/'); |
|
126 | - define('EE_CORE_CAF_ADMIN_NEW', EE_CORE_CAF_ADMIN . 'new/'); |
|
127 | - define('EE_CORE_CAF_ADMIN_EXTEND', EE_CORE_CAF_ADMIN . 'extend/'); |
|
128 | - define('EE_CORE_CAF_ADMIN_EXTEND_URL', EE_CORE_CAF_ADMIN_URL . 'extend/'); |
|
129 | - define('EE_CORE_CAF_ADMIN_HOOKS', EE_CORE_CAF_ADMIN . 'hooks/'); |
|
123 | + if ( ! defined('EE_CORE_CAF_ADMIN')) { |
|
124 | + define('EE_CORE_CAF_ADMIN', EE_PLUGIN_DIR_PATH.'caffeinated/admin/'); |
|
125 | + define('EE_CORE_CAF_ADMIN_URL', EE_PLUGIN_DIR_URL.'caffeinated/admin/'); |
|
126 | + define('EE_CORE_CAF_ADMIN_NEW', EE_CORE_CAF_ADMIN.'new/'); |
|
127 | + define('EE_CORE_CAF_ADMIN_EXTEND', EE_CORE_CAF_ADMIN.'extend/'); |
|
128 | + define('EE_CORE_CAF_ADMIN_EXTEND_URL', EE_CORE_CAF_ADMIN_URL.'extend/'); |
|
129 | + define('EE_CORE_CAF_ADMIN_HOOKS', EE_CORE_CAF_ADMIN.'hooks/'); |
|
130 | 130 | } |
131 | 131 | } |
132 | 132 | |
@@ -237,7 +237,7 @@ discard block |
||
237 | 237 | // first let's order the menu groups by their internal menu order (note usort type hinting to ensure the incoming array is EE_Admin_Page_Menu_Map objects ) |
238 | 238 | usort($this->_admin_menu_groups, array($this, '_sort_menu_maps')); |
239 | 239 | foreach ($this->_admin_menu_groups as $group) { |
240 | - if (! $group instanceof EE_Admin_Page_Menu_Group) { |
|
240 | + if ( ! $group instanceof EE_Admin_Page_Menu_Group) { |
|
241 | 241 | throw new EE_Error( |
242 | 242 | sprintf( |
243 | 243 | __( |
@@ -248,7 +248,7 @@ discard block |
||
248 | 248 | ) |
249 | 249 | ); |
250 | 250 | } |
251 | - $groups[ $group->menu_slug ] = $group; |
|
251 | + $groups[$group->menu_slug] = $group; |
|
252 | 252 | } |
253 | 253 | return $groups; |
254 | 254 | } |
@@ -267,13 +267,13 @@ discard block |
||
267 | 267 | $installed_refs = array(); |
268 | 268 | $exclude = array('assets', 'templates'); |
269 | 269 | // grab everything in the admin core directory |
270 | - $admin_screens = glob(EE_ADMIN_PAGES . '*', GLOB_ONLYDIR); |
|
270 | + $admin_screens = glob(EE_ADMIN_PAGES.'*', GLOB_ONLYDIR); |
|
271 | 271 | if ($admin_screens) { |
272 | 272 | foreach ($admin_screens as $admin_screen) { |
273 | 273 | // files and anything in the exclude array need not apply |
274 | 274 | if (is_dir($admin_screen) && ! in_array(basename($admin_screen), $exclude)) { |
275 | 275 | // these folders represent the different EE admin pages |
276 | - $installed_refs[ basename($admin_screen) ] = $admin_screen; |
|
276 | + $installed_refs[basename($admin_screen)] = $admin_screen; |
|
277 | 277 | } |
278 | 278 | } |
279 | 279 | } |
@@ -282,7 +282,7 @@ discard block |
||
282 | 282 | 'There are no EE_Admin pages detected, it looks like EE did not install properly', |
283 | 283 | 'event_espresso' |
284 | 284 | ); |
285 | - $error_msg[] = $error_msg[0] . "\r\n" |
|
285 | + $error_msg[] = $error_msg[0]."\r\n" |
|
286 | 286 | . sprintf( |
287 | 287 | __( |
288 | 288 | 'Check that the %s folder exists and is writable. Maybe try deactivating, then reactivating Event Espresso again.', |
@@ -309,46 +309,46 @@ discard block |
||
309 | 309 | // set autoloaders for our admin page classes based on included path information |
310 | 310 | EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($path); |
311 | 311 | // build list of installed pages |
312 | - $this->_installed_pages[ $page ] = $this->_load_admin_page($page, $path); |
|
312 | + $this->_installed_pages[$page] = $this->_load_admin_page($page, $path); |
|
313 | 313 | // verify returned object |
314 | - if ($this->_installed_pages[ $page ] instanceof EE_Admin_Page_Init) { |
|
315 | - if (! $this->_installed_pages[ $page ]->get_menu_map() instanceof EE_Admin_Page_Menu_Map) { |
|
314 | + if ($this->_installed_pages[$page] instanceof EE_Admin_Page_Init) { |
|
315 | + if ( ! $this->_installed_pages[$page]->get_menu_map() instanceof EE_Admin_Page_Menu_Map) { |
|
316 | 316 | continue; |
317 | 317 | } |
318 | 318 | // skip if in full maintenance mode and maintenance_mode_parent is set |
319 | - $maintenance_mode_parent = $this->_installed_pages[ $page ]->get_menu_map()->maintenance_mode_parent; |
|
319 | + $maintenance_mode_parent = $this->_installed_pages[$page]->get_menu_map()->maintenance_mode_parent; |
|
320 | 320 | if (empty($maintenance_mode_parent) |
321 | 321 | && EE_Maintenance_Mode::instance()->level() === EE_Maintenance_Mode::level_2_complete_maintenance |
322 | 322 | ) { |
323 | - unset($installed_refs[ $page ]); |
|
323 | + unset($installed_refs[$page]); |
|
324 | 324 | continue; |
325 | 325 | } |
326 | - $menu_slug = $this->_installed_pages[ $page ]->get_menu_map()->menu_slug; |
|
327 | - $this->_menu_slugs[ $menu_slug ] = $page; |
|
326 | + $menu_slug = $this->_installed_pages[$page]->get_menu_map()->menu_slug; |
|
327 | + $this->_menu_slugs[$menu_slug] = $page; |
|
328 | 328 | // flag for register hooks on extended pages b/c extended pages use the default INIT. |
329 | 329 | $extend = false; |
330 | 330 | // now that we've got the admin_init objects... lets see if there are any caffeinated pages extending the originals. If there are then let's hook into the init admin filter and load our extend instead. |
331 | - if (isset($this->_caffeinated_extends[ $page ])) { |
|
331 | + if (isset($this->_caffeinated_extends[$page])) { |
|
332 | 332 | $this->_current_caf_extend_slug = $page; |
333 | - $admin_page_name = $this->_installed_pages[ $page ]->get_admin_page_name(); |
|
334 | - $caf_path = $this->_caffeinated_extends[ $this->_current_caf_extend_slug ]['path']; |
|
335 | - $caf_admin_page = $this->_caffeinated_extends[ $this->_current_caf_extend_slug ]['admin_page']; |
|
333 | + $admin_page_name = $this->_installed_pages[$page]->get_admin_page_name(); |
|
334 | + $caf_path = $this->_caffeinated_extends[$this->_current_caf_extend_slug]['path']; |
|
335 | + $caf_admin_page = $this->_caffeinated_extends[$this->_current_caf_extend_slug]['admin_page']; |
|
336 | 336 | add_filter( |
337 | 337 | "FHEE__EE_Admin_Page_Init___initialize_admin_page__path_to_file__{$menu_slug}_{$admin_page_name}", |
338 | - function ($path_to_file) use ($caf_path) { |
|
338 | + function($path_to_file) use ($caf_path) { |
|
339 | 339 | return $caf_path; |
340 | 340 | } |
341 | 341 | ); |
342 | 342 | add_filter( |
343 | 343 | "FHEE__EE_Admin_Page_Init___initialize_admin_page__admin_page__{$menu_slug}_{$admin_page_name}", |
344 | - function ($admin_page) use ($caf_admin_page) { |
|
344 | + function($admin_page) use ($caf_admin_page) { |
|
345 | 345 | return $caf_admin_page; |
346 | 346 | } |
347 | 347 | ); |
348 | 348 | $extend = true; |
349 | 349 | } |
350 | 350 | // let's do the registered hooks |
351 | - $extended_hooks = $this->_installed_pages[ $page ]->register_hooks($extend); |
|
351 | + $extended_hooks = $this->_installed_pages[$page]->register_hooks($extend); |
|
352 | 352 | $hooks_ref = array_merge($hooks_ref, $extended_hooks); |
353 | 353 | } |
354 | 354 | } |
@@ -364,8 +364,8 @@ discard block |
||
364 | 364 | $ee_menu_slugs = $this->_menu_slugs; |
365 | 365 | // we need to loop again to run any early code |
366 | 366 | foreach ($installed_refs as $page => $path) { |
367 | - if ($this->_installed_pages[ $page ] instanceof EE_Admin_Page_Init) { |
|
368 | - $this->_installed_pages[ $page ]->do_initial_loads(); |
|
367 | + if ($this->_installed_pages[$page] instanceof EE_Admin_Page_Init) { |
|
368 | + $this->_installed_pages[$page]->do_initial_loads(); |
|
369 | 369 | } |
370 | 370 | } |
371 | 371 | do_action('AHEE__EE_Admin_Page_Loader___get_installed_pages_loaded', $this->_installed_pages); |
@@ -380,8 +380,8 @@ discard block |
||
380 | 380 | */ |
381 | 381 | public function get_admin_page_object($page_slug = '') |
382 | 382 | { |
383 | - if (isset($this->_installed_pages[ $page_slug ])) { |
|
384 | - return $this->_installed_pages[ $page_slug ]->loaded_page_object(); |
|
383 | + if (isset($this->_installed_pages[$page_slug])) { |
|
384 | + return $this->_installed_pages[$page_slug]->loaded_page_object(); |
|
385 | 385 | } |
386 | 386 | return null; |
387 | 387 | } |
@@ -397,7 +397,7 @@ discard block |
||
397 | 397 | private function _get_classname_for_admin_page($dir_name = '') |
398 | 398 | { |
399 | 399 | $class_name = str_replace('_', ' ', strtolower($dir_name)); |
400 | - return str_replace(' ', '_', ucwords($class_name)) . '_Admin_Page'; |
|
400 | + return str_replace(' ', '_', ucwords($class_name)).'_Admin_Page'; |
|
401 | 401 | } |
402 | 402 | |
403 | 403 | |
@@ -411,7 +411,7 @@ discard block |
||
411 | 411 | private function _get_classname_for_admin_init_page($dir_name = '') |
412 | 412 | { |
413 | 413 | $class_name = str_replace('_', ' ', strtolower($dir_name)); |
414 | - return str_replace(' ', '_', ucwords($class_name)) . '_Admin_Page_Init'; |
|
414 | + return str_replace(' ', '_', ucwords($class_name)).'_Admin_Page_Init'; |
|
415 | 415 | } |
416 | 416 | |
417 | 417 | |
@@ -428,14 +428,14 @@ discard block |
||
428 | 428 | { |
429 | 429 | $class_name = $this->_get_classname_for_admin_init_page($page); |
430 | 430 | EE_Registry::instance()->load_file($path, $class_name, 'core'); |
431 | - if (! class_exists($class_name)) { |
|
431 | + if ( ! class_exists($class_name)) { |
|
432 | 432 | $inner_error_msg = '<br />' |
433 | 433 | . sprintf( |
434 | 434 | esc_html__( |
435 | 435 | 'Make sure you have %1$s defined. If this is a non-EE-core admin page then you also must have an autoloader in place for your class', |
436 | 436 | 'event_espresso' |
437 | 437 | ), |
438 | - '<strong>' . $class_name . '</strong>' |
|
438 | + '<strong>'.$class_name.'</strong>' |
|
439 | 439 | ); |
440 | 440 | $error_msg[] = sprintf( |
441 | 441 | __('Something went wrong with loading the %s admin page.', 'event_espresso'), |
@@ -515,7 +515,7 @@ discard block |
||
515 | 515 | // if we've got an array then the menu map is in the old format so let's throw a persistent notice that the admin system isn't setup correctly for this item. |
516 | 516 | if (is_array($page_map) || empty($page_map)) { |
517 | 517 | new PersistentAdminNotice( |
518 | - 'menu_map_warning_' . str_replace(' ', '_', $page->label) . '_' . EVENT_ESPRESSO_VERSION, |
|
518 | + 'menu_map_warning_'.str_replace(' ', '_', $page->label).'_'.EVENT_ESPRESSO_VERSION, |
|
519 | 519 | sprintf( |
520 | 520 | __( |
521 | 521 | 'The admin page for %s was not correctly setup because it is using an older method for integrating with Event Espresso Core. This means that full functionality for this component is not available. This error message usually appears with an Add-on that is out of date. Make sure you update all your Event Espresso 4 add-ons to the latest version to ensure they have necessary compatibility updates in place.', |
@@ -527,7 +527,7 @@ discard block |
||
527 | 527 | continue; |
528 | 528 | } |
529 | 529 | // if page map is NOT a EE_Admin_Page_Menu_Map object then throw error. |
530 | - if (! $page_map instanceof EE_Admin_Page_Menu_Map) { |
|
530 | + if ( ! $page_map instanceof EE_Admin_Page_Menu_Map) { |
|
531 | 531 | throw new EE_Error( |
532 | 532 | sprintf( |
533 | 533 | __( |
@@ -546,7 +546,7 @@ discard block |
||
546 | 546 | continue; |
547 | 547 | } |
548 | 548 | // assign to group (remember $page_map has the admin page stored in it). |
549 | - $pages_array[ $page_map->menu_group ][] = $page_map; |
|
549 | + $pages_array[$page_map->menu_group][] = $page_map; |
|
550 | 550 | } |
551 | 551 | } |
552 | 552 | if (empty($pages_array)) { |
@@ -555,20 +555,20 @@ discard block |
||
555 | 555 | // let's sort the groups, make sure it's a valid group, add header (if to show). |
556 | 556 | foreach ($pages_array as $group => $menu_maps) { |
557 | 557 | // valid_group? |
558 | - if (! array_key_exists($group, $menu_groups)) { |
|
558 | + if ( ! array_key_exists($group, $menu_groups)) { |
|
559 | 559 | continue; |
560 | 560 | } |
561 | 561 | // sort pages. |
562 | 562 | usort($menu_maps, array($this, '_sort_menu_maps')); |
563 | 563 | // prepend header |
564 | - array_unshift($menu_maps, $menu_groups[ $group ]); |
|
564 | + array_unshift($menu_maps, $menu_groups[$group]); |
|
565 | 565 | // reset $pages_array with prepped data |
566 | - $pages_array[ $group ] = $menu_maps; |
|
566 | + $pages_array[$group] = $menu_maps; |
|
567 | 567 | } |
568 | 568 | // now let's setup the _prepped_menu_maps property |
569 | 569 | foreach ($menu_groups as $group => $group_objs) { |
570 | - if (isset($pages_array[ $group ])) { |
|
571 | - $this->_prepped_menu_maps = array_merge($this->_prepped_menu_maps, $pages_array[ $group ]); |
|
570 | + if (isset($pages_array[$group])) { |
|
571 | + $this->_prepped_menu_maps = array_merge($this->_prepped_menu_maps, $pages_array[$group]); |
|
572 | 572 | } |
573 | 573 | }/**/ |
574 | 574 | } |
@@ -596,26 +596,26 @@ discard block |
||
596 | 596 | { |
597 | 597 | |
598 | 598 | // first let's check if there IS a caffeinated folder. If there is not then lets get out. |
599 | - if (! is_dir(EE_PLUGIN_DIR_PATH . 'caffeinated/admin') || (defined('EE_DECAF') && EE_DECAF)) { |
|
599 | + if ( ! is_dir(EE_PLUGIN_DIR_PATH.'caffeinated/admin') || (defined('EE_DECAF') && EE_DECAF)) { |
|
600 | 600 | return $installed_refs; |
601 | 601 | } |
602 | 602 | $this->_define_caffeinated_constants(); |
603 | 603 | $exclude = array('tickets'); |
604 | 604 | // okay let's setup an "New" pages first (we'll return installed refs later) |
605 | - $new_admin_screens = glob(EE_CORE_CAF_ADMIN . 'new/*', GLOB_ONLYDIR); |
|
605 | + $new_admin_screens = glob(EE_CORE_CAF_ADMIN.'new/*', GLOB_ONLYDIR); |
|
606 | 606 | if ($new_admin_screens) { |
607 | 607 | foreach ($new_admin_screens as $admin_screen) { |
608 | 608 | // files and anything in the exclude array need not apply |
609 | 609 | if (is_dir($admin_screen) && ! in_array(basename($admin_screen), $exclude)) { |
610 | 610 | // these folders represent the different NEW EE admin pages |
611 | - $installed_refs[ basename($admin_screen) ] = $admin_screen; |
|
611 | + $installed_refs[basename($admin_screen)] = $admin_screen; |
|
612 | 612 | // set autoloaders for our admin page classes based on included path information |
613 | 613 | EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($admin_screen); |
614 | 614 | } |
615 | 615 | } |
616 | 616 | } |
617 | 617 | // let's see if there are any EXTENDS to setup in the $_caffeinated_extends array (that will be used later for hooking into the _initialize_admin_age in the related core_init admin page) |
618 | - $extends = glob(EE_CORE_CAF_ADMIN . 'extend/*', GLOB_ONLYDIR); |
|
618 | + $extends = glob(EE_CORE_CAF_ADMIN.'extend/*', GLOB_ONLYDIR); |
|
619 | 619 | if ($extends) { |
620 | 620 | foreach ($extends as $extend) { |
621 | 621 | if (is_dir($extend)) { |
@@ -632,8 +632,8 @@ discard block |
||
632 | 632 | ) |
633 | 633 | ) |
634 | 634 | ); |
635 | - $filename = 'Extend_' . $filename . '_Admin_Page'; |
|
636 | - $this->_caffeinated_extends[ $extend_ref ]['path'] = str_replace( |
|
635 | + $filename = 'Extend_'.$filename.'_Admin_Page'; |
|
636 | + $this->_caffeinated_extends[$extend_ref]['path'] = str_replace( |
|
637 | 637 | array('\\', '/'), |
638 | 638 | '/', |
639 | 639 | EE_CORE_CAF_ADMIN |
@@ -643,7 +643,7 @@ discard block |
||
643 | 643 | . $filename |
644 | 644 | . '.core.php' |
645 | 645 | ); |
646 | - $this->_caffeinated_extends[ $extend_ref ]['admin_page'] = $filename; |
|
646 | + $this->_caffeinated_extends[$extend_ref]['admin_page'] = $filename; |
|
647 | 647 | // set autoloaders for our admin page classes based on included path information |
648 | 648 | EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder($extend); |
649 | 649 | } |
@@ -651,12 +651,12 @@ discard block |
||
651 | 651 | } |
652 | 652 | // let's see if there are any HOOK files and instantiate them if there are (so that hooks are loaded early!). |
653 | 653 | $ee_admin_hooks = array(); |
654 | - $hooks = glob(EE_CORE_CAF_ADMIN . 'hooks/*.class.php'); |
|
654 | + $hooks = glob(EE_CORE_CAF_ADMIN.'hooks/*.class.php'); |
|
655 | 655 | if ($hooks) { |
656 | 656 | foreach ($hooks as $hook) { |
657 | 657 | if (is_readable($hook)) { |
658 | 658 | require_once $hook; |
659 | - $classname = str_replace(EE_CORE_CAF_ADMIN . 'hooks/', '', $hook); |
|
659 | + $classname = str_replace(EE_CORE_CAF_ADMIN.'hooks/', '', $hook); |
|
660 | 660 | $classname = str_replace('.class.php', '', $classname); |
661 | 661 | if (class_exists($classname)) { |
662 | 662 | $a = new ReflectionClass($classname); |
@@ -124,7 +124,7 @@ |
||
124 | 124 | * |
125 | 125 | * @param array $menu_args An array of arguments used to setup the menu |
126 | 126 | * properties on construct. |
127 | - * @param array $required An array of keys that should be in the $menu_args, this |
|
127 | + * @param string[] $required An array of keys that should be in the $menu_args, this |
|
128 | 128 | * is used to validate that the items that should be defined |
129 | 129 | * are present. |
130 | 130 | * @return void |
@@ -11,257 +11,257 @@ discard block |
||
11 | 11 | { |
12 | 12 | |
13 | 13 | |
14 | - /** |
|
15 | - * The title for the menu page. (the page the menu links to) |
|
16 | - * |
|
17 | - * @since 4.4.0 |
|
18 | - * @var string |
|
19 | - */ |
|
20 | - public $title; |
|
21 | - |
|
22 | - |
|
23 | - /** |
|
24 | - * The label for the menu item. (What shows up in the actual menu). |
|
25 | - * |
|
26 | - * @since 4.4.0 |
|
27 | - * @var string |
|
28 | - */ |
|
29 | - public $menu_label; |
|
30 | - |
|
31 | - |
|
32 | - /** |
|
33 | - * What menu item is the parent of this menu item. |
|
34 | - * |
|
35 | - * @since 4.4.0 |
|
36 | - * @var string |
|
37 | - */ |
|
38 | - public $parent_slug; |
|
39 | - |
|
40 | - |
|
41 | - /** |
|
42 | - * What capability is required to access this page. |
|
43 | - * |
|
44 | - * @since 4.4.0 |
|
45 | - * @var string |
|
46 | - */ |
|
47 | - public $capability = 'administrator'; |
|
48 | - |
|
49 | - |
|
50 | - /** |
|
51 | - * What slug should be used to reference this menu item. |
|
52 | - * |
|
53 | - * @since 4.4.0 |
|
54 | - * @var string |
|
55 | - */ |
|
56 | - public $menu_slug; |
|
57 | - |
|
58 | - |
|
59 | - /** |
|
60 | - * The callback for displaying the page that the menu references. |
|
61 | - * |
|
62 | - * @since 4.4.0 |
|
63 | - * @var string |
|
64 | - */ |
|
65 | - public $menu_callback; |
|
66 | - |
|
67 | - |
|
68 | - /** |
|
69 | - * The EE_Admin_Page_Init attached to this map. |
|
70 | - * |
|
71 | - * @var EE_Admin_Page_Init |
|
72 | - */ |
|
73 | - public $admin_init_page; |
|
74 | - |
|
75 | - |
|
76 | - /** |
|
77 | - * The EE specific group this menu item belongs in (group slug). |
|
78 | - * |
|
79 | - * @since 4.4.0 |
|
80 | - * @var string |
|
81 | - */ |
|
82 | - public $menu_group; |
|
83 | - |
|
84 | - |
|
85 | - /** |
|
86 | - * What order this item should be in the menu. |
|
87 | - * |
|
88 | - * @since 4.4.0 |
|
89 | - * @var int |
|
90 | - */ |
|
91 | - public $menu_order; |
|
92 | - |
|
93 | - |
|
94 | - const NONE = 0; |
|
95 | - const BLOG_ADMIN_ONLY = 1; |
|
96 | - const BLOG_AND_NETWORK_ADMIN = 2; |
|
97 | - const NETWORK_ADMIN_ONLY = 3; |
|
98 | - |
|
99 | - |
|
100 | - /** |
|
101 | - * Whether this item is displayed in the menu or not. |
|
102 | - * Sometimes an EE Admin Page needs to register itself but is not accessible via the WordPress |
|
103 | - * admin menu. |
|
104 | - * |
|
105 | - * @since 4.4.0 |
|
106 | - * @var int |
|
107 | - */ |
|
108 | - public $show_on_menu = self::BLOG_ADMIN_ONLY; |
|
109 | - |
|
110 | - |
|
111 | - /** |
|
112 | - * Menu maps can define a parent slug that gets used instead of the main parent slug for the menu when |
|
113 | - * EE_Maintenance_Mode::level_2_complete_maintenance is active. |
|
114 | - * |
|
115 | - * @var bool |
|
116 | - */ |
|
117 | - public $maintenance_mode_parent = ''; |
|
118 | - |
|
119 | - |
|
120 | - /** |
|
121 | - * Constructor. |
|
122 | - * |
|
123 | - * @since 4.4.0 |
|
124 | - * |
|
125 | - * @param array $menu_args An array of arguments used to setup the menu |
|
126 | - * properties on construct. |
|
127 | - * @param array $required An array of keys that should be in the $menu_args, this |
|
128 | - * is used to validate that the items that should be defined |
|
129 | - * are present. |
|
130 | - * @return void |
|
131 | - */ |
|
132 | - public function __construct($menu_args, $required) |
|
133 | - { |
|
134 | - // filter all args before processing so plugins can manipulate various settings for menus. |
|
135 | - $menu_args = apply_filters( |
|
136 | - 'FHEE__EE_Admin_Page_Menu_Map__construct__menu_args', |
|
137 | - $menu_args, |
|
138 | - $required, |
|
139 | - get_class($this) |
|
140 | - ); |
|
141 | - |
|
142 | - |
|
143 | - // verify that required keys are present in the incoming array. |
|
144 | - $missing = array_diff((array) $required, array_keys((array) $menu_args)); |
|
145 | - |
|
146 | - if (! empty($missing)) { |
|
147 | - throw new EE_Error( |
|
148 | - sprintf( |
|
149 | - __( |
|
150 | - '%s is missing some expected keys in the argument array. The following keys are missing: %s', |
|
151 | - 'event_espresso' |
|
152 | - ), |
|
153 | - get_class($this), |
|
154 | - implode(', ', $missing) |
|
155 | - ) |
|
156 | - ); |
|
157 | - } |
|
158 | - |
|
159 | - // made it here okay, so let's set the properties! |
|
160 | - foreach ($menu_args as $prop => $value) { |
|
161 | - switch ($prop) { |
|
162 | - case 'show_on_menu': |
|
163 | - $value = (int) $value; |
|
164 | - break; |
|
165 | - case 'admin_init_page': |
|
166 | - if (in_array('admin_init_page', $required) && ! $value instanceof EE_Admin_Page_Init) { |
|
167 | - throw new EE_Error( |
|
168 | - sprintf( |
|
169 | - __( |
|
170 | - 'The value for the "admin_init_page" argument must be an instance of an EE_Admin_Page_Init object. Instead %s was given as the value.', |
|
171 | - 'event_espresso' |
|
172 | - ), |
|
173 | - print_r($value, true) |
|
174 | - ) |
|
175 | - ); |
|
176 | - } |
|
177 | - break; |
|
178 | - case 'menu_callback': |
|
179 | - break; |
|
180 | - |
|
181 | - default: |
|
182 | - $value = (string) $value; |
|
183 | - break; |
|
184 | - } |
|
185 | - if (! EEH_Class_Tools::has_property($this, $prop)) { |
|
186 | - throw new EE_Error( |
|
187 | - sprintf( |
|
188 | - __( |
|
189 | - 'The $menu_args coming into %s has a index key (%s) representing a property that is not defined by the class. Perhaps there is a typo?', |
|
190 | - 'event_espresso' |
|
191 | - ), |
|
192 | - get_class($this), |
|
193 | - $prop |
|
194 | - ) |
|
195 | - ); |
|
196 | - } |
|
197 | - $this->{$prop} = $value; |
|
198 | - } |
|
199 | - |
|
200 | - // filter capabilities (both static and dynamic) |
|
201 | - $this->capability = apply_filters('FHEE_management_capability', $this->capability, null); |
|
202 | - $this->capability = apply_filters('FHEE_' . $this->menu_slug . '_capability', $this->capability, null); |
|
203 | - |
|
204 | - // Might need to change parent slug depending on maintenance mode. |
|
205 | - if (! empty($this->maintenance_mode_parent) |
|
206 | - && EE_Maintenance_Mode::instance()->level() == EE_Maintenance_Mode::level_2_complete_maintenance |
|
207 | - ) { |
|
208 | - $this->parent_slug = $this->maintenance_mode_parent; |
|
209 | - } |
|
210 | - |
|
211 | - // if empty menu_callback let's set default (but only if we have admin page init object) |
|
212 | - if (empty($this->menu_callback) && $this->admin_init_page instanceof EE_Admin_Page_Init) { |
|
213 | - $this->menu_callback = array($this->admin_init_page, 'initialize_admin_page'); |
|
214 | - } |
|
215 | - } |
|
216 | - |
|
217 | - |
|
218 | - /** |
|
219 | - * This method should define how the menu page gets added for this particular item |
|
220 | - * and go ahead and define it. Note that child classes MUST also return the result of |
|
221 | - * the function used to register the WordPress admin page (the wp_page_slug string) |
|
222 | - * |
|
223 | - * @since 4.4.0 |
|
224 | - * @return string wp_page_slug. |
|
225 | - */ |
|
226 | - abstract protected function _add_menu_page(); |
|
227 | - |
|
228 | - |
|
229 | - /** |
|
230 | - * Called by client code to use this menu map for registering a WordPress admin page |
|
231 | - * |
|
232 | - * @param boolean $network_admin whether this is being added to the network admin page or not |
|
233 | - * @since 4.4.0 |
|
234 | - */ |
|
235 | - public function add_menu_page($network_admin = false) |
|
236 | - { |
|
237 | - |
|
238 | - $show_on_menu_int = (int) $this->show_on_menu; |
|
239 | - if (($network_admin |
|
240 | - && in_array( |
|
241 | - $show_on_menu_int, |
|
242 | - array(self::BLOG_AND_NETWORK_ADMIN, self::NETWORK_ADMIN_ONLY), |
|
243 | - true |
|
244 | - )) |
|
245 | - || |
|
246 | - (! $network_admin |
|
247 | - && in_array( |
|
248 | - $show_on_menu_int, |
|
249 | - array(self::BLOG_AND_NETWORK_ADMIN, self::BLOG_ADMIN_ONLY), |
|
250 | - true |
|
251 | - ))) { |
|
252 | - $wp_page_slug = $this->_add_menu_page(); |
|
253 | - } else { |
|
254 | - $wp_page_slug = ''; |
|
255 | - } |
|
256 | - |
|
257 | - if (! empty($wp_page_slug) && $this->admin_init_page instanceof EE_Admin_Page_Init) { |
|
258 | - try { |
|
259 | - $this->admin_init_page->set_page_dependencies($wp_page_slug); |
|
260 | - } catch (EE_Error $e) { |
|
261 | - $e->get_error(); |
|
262 | - } |
|
263 | - } |
|
264 | - } |
|
14 | + /** |
|
15 | + * The title for the menu page. (the page the menu links to) |
|
16 | + * |
|
17 | + * @since 4.4.0 |
|
18 | + * @var string |
|
19 | + */ |
|
20 | + public $title; |
|
21 | + |
|
22 | + |
|
23 | + /** |
|
24 | + * The label for the menu item. (What shows up in the actual menu). |
|
25 | + * |
|
26 | + * @since 4.4.0 |
|
27 | + * @var string |
|
28 | + */ |
|
29 | + public $menu_label; |
|
30 | + |
|
31 | + |
|
32 | + /** |
|
33 | + * What menu item is the parent of this menu item. |
|
34 | + * |
|
35 | + * @since 4.4.0 |
|
36 | + * @var string |
|
37 | + */ |
|
38 | + public $parent_slug; |
|
39 | + |
|
40 | + |
|
41 | + /** |
|
42 | + * What capability is required to access this page. |
|
43 | + * |
|
44 | + * @since 4.4.0 |
|
45 | + * @var string |
|
46 | + */ |
|
47 | + public $capability = 'administrator'; |
|
48 | + |
|
49 | + |
|
50 | + /** |
|
51 | + * What slug should be used to reference this menu item. |
|
52 | + * |
|
53 | + * @since 4.4.0 |
|
54 | + * @var string |
|
55 | + */ |
|
56 | + public $menu_slug; |
|
57 | + |
|
58 | + |
|
59 | + /** |
|
60 | + * The callback for displaying the page that the menu references. |
|
61 | + * |
|
62 | + * @since 4.4.0 |
|
63 | + * @var string |
|
64 | + */ |
|
65 | + public $menu_callback; |
|
66 | + |
|
67 | + |
|
68 | + /** |
|
69 | + * The EE_Admin_Page_Init attached to this map. |
|
70 | + * |
|
71 | + * @var EE_Admin_Page_Init |
|
72 | + */ |
|
73 | + public $admin_init_page; |
|
74 | + |
|
75 | + |
|
76 | + /** |
|
77 | + * The EE specific group this menu item belongs in (group slug). |
|
78 | + * |
|
79 | + * @since 4.4.0 |
|
80 | + * @var string |
|
81 | + */ |
|
82 | + public $menu_group; |
|
83 | + |
|
84 | + |
|
85 | + /** |
|
86 | + * What order this item should be in the menu. |
|
87 | + * |
|
88 | + * @since 4.4.0 |
|
89 | + * @var int |
|
90 | + */ |
|
91 | + public $menu_order; |
|
92 | + |
|
93 | + |
|
94 | + const NONE = 0; |
|
95 | + const BLOG_ADMIN_ONLY = 1; |
|
96 | + const BLOG_AND_NETWORK_ADMIN = 2; |
|
97 | + const NETWORK_ADMIN_ONLY = 3; |
|
98 | + |
|
99 | + |
|
100 | + /** |
|
101 | + * Whether this item is displayed in the menu or not. |
|
102 | + * Sometimes an EE Admin Page needs to register itself but is not accessible via the WordPress |
|
103 | + * admin menu. |
|
104 | + * |
|
105 | + * @since 4.4.0 |
|
106 | + * @var int |
|
107 | + */ |
|
108 | + public $show_on_menu = self::BLOG_ADMIN_ONLY; |
|
109 | + |
|
110 | + |
|
111 | + /** |
|
112 | + * Menu maps can define a parent slug that gets used instead of the main parent slug for the menu when |
|
113 | + * EE_Maintenance_Mode::level_2_complete_maintenance is active. |
|
114 | + * |
|
115 | + * @var bool |
|
116 | + */ |
|
117 | + public $maintenance_mode_parent = ''; |
|
118 | + |
|
119 | + |
|
120 | + /** |
|
121 | + * Constructor. |
|
122 | + * |
|
123 | + * @since 4.4.0 |
|
124 | + * |
|
125 | + * @param array $menu_args An array of arguments used to setup the menu |
|
126 | + * properties on construct. |
|
127 | + * @param array $required An array of keys that should be in the $menu_args, this |
|
128 | + * is used to validate that the items that should be defined |
|
129 | + * are present. |
|
130 | + * @return void |
|
131 | + */ |
|
132 | + public function __construct($menu_args, $required) |
|
133 | + { |
|
134 | + // filter all args before processing so plugins can manipulate various settings for menus. |
|
135 | + $menu_args = apply_filters( |
|
136 | + 'FHEE__EE_Admin_Page_Menu_Map__construct__menu_args', |
|
137 | + $menu_args, |
|
138 | + $required, |
|
139 | + get_class($this) |
|
140 | + ); |
|
141 | + |
|
142 | + |
|
143 | + // verify that required keys are present in the incoming array. |
|
144 | + $missing = array_diff((array) $required, array_keys((array) $menu_args)); |
|
145 | + |
|
146 | + if (! empty($missing)) { |
|
147 | + throw new EE_Error( |
|
148 | + sprintf( |
|
149 | + __( |
|
150 | + '%s is missing some expected keys in the argument array. The following keys are missing: %s', |
|
151 | + 'event_espresso' |
|
152 | + ), |
|
153 | + get_class($this), |
|
154 | + implode(', ', $missing) |
|
155 | + ) |
|
156 | + ); |
|
157 | + } |
|
158 | + |
|
159 | + // made it here okay, so let's set the properties! |
|
160 | + foreach ($menu_args as $prop => $value) { |
|
161 | + switch ($prop) { |
|
162 | + case 'show_on_menu': |
|
163 | + $value = (int) $value; |
|
164 | + break; |
|
165 | + case 'admin_init_page': |
|
166 | + if (in_array('admin_init_page', $required) && ! $value instanceof EE_Admin_Page_Init) { |
|
167 | + throw new EE_Error( |
|
168 | + sprintf( |
|
169 | + __( |
|
170 | + 'The value for the "admin_init_page" argument must be an instance of an EE_Admin_Page_Init object. Instead %s was given as the value.', |
|
171 | + 'event_espresso' |
|
172 | + ), |
|
173 | + print_r($value, true) |
|
174 | + ) |
|
175 | + ); |
|
176 | + } |
|
177 | + break; |
|
178 | + case 'menu_callback': |
|
179 | + break; |
|
180 | + |
|
181 | + default: |
|
182 | + $value = (string) $value; |
|
183 | + break; |
|
184 | + } |
|
185 | + if (! EEH_Class_Tools::has_property($this, $prop)) { |
|
186 | + throw new EE_Error( |
|
187 | + sprintf( |
|
188 | + __( |
|
189 | + 'The $menu_args coming into %s has a index key (%s) representing a property that is not defined by the class. Perhaps there is a typo?', |
|
190 | + 'event_espresso' |
|
191 | + ), |
|
192 | + get_class($this), |
|
193 | + $prop |
|
194 | + ) |
|
195 | + ); |
|
196 | + } |
|
197 | + $this->{$prop} = $value; |
|
198 | + } |
|
199 | + |
|
200 | + // filter capabilities (both static and dynamic) |
|
201 | + $this->capability = apply_filters('FHEE_management_capability', $this->capability, null); |
|
202 | + $this->capability = apply_filters('FHEE_' . $this->menu_slug . '_capability', $this->capability, null); |
|
203 | + |
|
204 | + // Might need to change parent slug depending on maintenance mode. |
|
205 | + if (! empty($this->maintenance_mode_parent) |
|
206 | + && EE_Maintenance_Mode::instance()->level() == EE_Maintenance_Mode::level_2_complete_maintenance |
|
207 | + ) { |
|
208 | + $this->parent_slug = $this->maintenance_mode_parent; |
|
209 | + } |
|
210 | + |
|
211 | + // if empty menu_callback let's set default (but only if we have admin page init object) |
|
212 | + if (empty($this->menu_callback) && $this->admin_init_page instanceof EE_Admin_Page_Init) { |
|
213 | + $this->menu_callback = array($this->admin_init_page, 'initialize_admin_page'); |
|
214 | + } |
|
215 | + } |
|
216 | + |
|
217 | + |
|
218 | + /** |
|
219 | + * This method should define how the menu page gets added for this particular item |
|
220 | + * and go ahead and define it. Note that child classes MUST also return the result of |
|
221 | + * the function used to register the WordPress admin page (the wp_page_slug string) |
|
222 | + * |
|
223 | + * @since 4.4.0 |
|
224 | + * @return string wp_page_slug. |
|
225 | + */ |
|
226 | + abstract protected function _add_menu_page(); |
|
227 | + |
|
228 | + |
|
229 | + /** |
|
230 | + * Called by client code to use this menu map for registering a WordPress admin page |
|
231 | + * |
|
232 | + * @param boolean $network_admin whether this is being added to the network admin page or not |
|
233 | + * @since 4.4.0 |
|
234 | + */ |
|
235 | + public function add_menu_page($network_admin = false) |
|
236 | + { |
|
237 | + |
|
238 | + $show_on_menu_int = (int) $this->show_on_menu; |
|
239 | + if (($network_admin |
|
240 | + && in_array( |
|
241 | + $show_on_menu_int, |
|
242 | + array(self::BLOG_AND_NETWORK_ADMIN, self::NETWORK_ADMIN_ONLY), |
|
243 | + true |
|
244 | + )) |
|
245 | + || |
|
246 | + (! $network_admin |
|
247 | + && in_array( |
|
248 | + $show_on_menu_int, |
|
249 | + array(self::BLOG_AND_NETWORK_ADMIN, self::BLOG_ADMIN_ONLY), |
|
250 | + true |
|
251 | + ))) { |
|
252 | + $wp_page_slug = $this->_add_menu_page(); |
|
253 | + } else { |
|
254 | + $wp_page_slug = ''; |
|
255 | + } |
|
256 | + |
|
257 | + if (! empty($wp_page_slug) && $this->admin_init_page instanceof EE_Admin_Page_Init) { |
|
258 | + try { |
|
259 | + $this->admin_init_page->set_page_dependencies($wp_page_slug); |
|
260 | + } catch (EE_Error $e) { |
|
261 | + $e->get_error(); |
|
262 | + } |
|
263 | + } |
|
264 | + } |
|
265 | 265 | } |
266 | 266 | |
267 | 267 | |
@@ -275,75 +275,75 @@ discard block |
||
275 | 275 | class EE_Admin_Page_Main_Menu extends EE_Admin_Page_Menu_Map |
276 | 276 | { |
277 | 277 | |
278 | - /** |
|
279 | - * If included int incoming params, then this class will also register a Sub Menue Admin page with a different |
|
280 | - * subtitle than the main menu item. |
|
281 | - * |
|
282 | - * @since 4.4.0 |
|
283 | - * |
|
284 | - * @var string |
|
285 | - */ |
|
286 | - public $subtitle; |
|
287 | - |
|
288 | - /** |
|
289 | - * The page to a icon used for this menu. |
|
290 | - * |
|
291 | - * @since 4.4.0 |
|
292 | - * @see http://codex.wordpress.org/Function_Reference/add_menu_page#Parameters |
|
293 | - * for what can be set for this property. |
|
294 | - * @var string |
|
295 | - */ |
|
296 | - public $icon_url; |
|
297 | - |
|
298 | - |
|
299 | - /** |
|
300 | - * What position in the main menu order for the WP admin menu this menu item |
|
301 | - * should show. |
|
302 | - * |
|
303 | - * @since 4.4.0 |
|
304 | - * @see http://codex.wordpress.org/Function_Reference/add_menu_page#Parameters |
|
305 | - * for what can be set for this property. |
|
306 | - * @var integer |
|
307 | - */ |
|
308 | - public $position; |
|
309 | - |
|
310 | - |
|
311 | - public function __construct($menu_args) |
|
312 | - { |
|
313 | - $required = array('menu_label', 'parent_slug', 'menu_slug', 'menu_group', 'menu_order', 'admin_init_page'); |
|
314 | - |
|
315 | - parent::__construct($menu_args, $required); |
|
316 | - |
|
317 | - $this->position = ! empty($this->position) ? (int) $this->position : $this->position; |
|
318 | - } |
|
319 | - |
|
320 | - |
|
321 | - /** |
|
322 | - * Uses the proper WP utility for registering a menu page for the main WP pages. |
|
323 | - */ |
|
324 | - protected function _add_menu_page() |
|
325 | - { |
|
326 | - $main = add_menu_page( |
|
327 | - $this->title, |
|
328 | - $this->menu_label, |
|
329 | - $this->capability, |
|
330 | - $this->parent_slug, |
|
331 | - $this->menu_callback, |
|
332 | - $this->icon_url, |
|
333 | - $this->position |
|
334 | - ); |
|
335 | - if (! empty($this->subtitle)) { |
|
336 | - add_submenu_page( |
|
337 | - $this->parent_slug, |
|
338 | - $this->subtitle, |
|
339 | - $this->subtitle, |
|
340 | - $this->capability, |
|
341 | - $this->menu_slug, |
|
342 | - $this->menu_callback |
|
343 | - ); |
|
344 | - } |
|
345 | - return $main; |
|
346 | - } |
|
278 | + /** |
|
279 | + * If included int incoming params, then this class will also register a Sub Menue Admin page with a different |
|
280 | + * subtitle than the main menu item. |
|
281 | + * |
|
282 | + * @since 4.4.0 |
|
283 | + * |
|
284 | + * @var string |
|
285 | + */ |
|
286 | + public $subtitle; |
|
287 | + |
|
288 | + /** |
|
289 | + * The page to a icon used for this menu. |
|
290 | + * |
|
291 | + * @since 4.4.0 |
|
292 | + * @see http://codex.wordpress.org/Function_Reference/add_menu_page#Parameters |
|
293 | + * for what can be set for this property. |
|
294 | + * @var string |
|
295 | + */ |
|
296 | + public $icon_url; |
|
297 | + |
|
298 | + |
|
299 | + /** |
|
300 | + * What position in the main menu order for the WP admin menu this menu item |
|
301 | + * should show. |
|
302 | + * |
|
303 | + * @since 4.4.0 |
|
304 | + * @see http://codex.wordpress.org/Function_Reference/add_menu_page#Parameters |
|
305 | + * for what can be set for this property. |
|
306 | + * @var integer |
|
307 | + */ |
|
308 | + public $position; |
|
309 | + |
|
310 | + |
|
311 | + public function __construct($menu_args) |
|
312 | + { |
|
313 | + $required = array('menu_label', 'parent_slug', 'menu_slug', 'menu_group', 'menu_order', 'admin_init_page'); |
|
314 | + |
|
315 | + parent::__construct($menu_args, $required); |
|
316 | + |
|
317 | + $this->position = ! empty($this->position) ? (int) $this->position : $this->position; |
|
318 | + } |
|
319 | + |
|
320 | + |
|
321 | + /** |
|
322 | + * Uses the proper WP utility for registering a menu page for the main WP pages. |
|
323 | + */ |
|
324 | + protected function _add_menu_page() |
|
325 | + { |
|
326 | + $main = add_menu_page( |
|
327 | + $this->title, |
|
328 | + $this->menu_label, |
|
329 | + $this->capability, |
|
330 | + $this->parent_slug, |
|
331 | + $this->menu_callback, |
|
332 | + $this->icon_url, |
|
333 | + $this->position |
|
334 | + ); |
|
335 | + if (! empty($this->subtitle)) { |
|
336 | + add_submenu_page( |
|
337 | + $this->parent_slug, |
|
338 | + $this->subtitle, |
|
339 | + $this->subtitle, |
|
340 | + $this->capability, |
|
341 | + $this->menu_slug, |
|
342 | + $this->menu_callback |
|
343 | + ); |
|
344 | + } |
|
345 | + return $main; |
|
346 | + } |
|
347 | 347 | } //end EE_Admin_Page_Main_Menu |
348 | 348 | |
349 | 349 | |
@@ -357,23 +357,23 @@ discard block |
||
357 | 357 | class EE_Admin_Page_Sub_Menu extends EE_Admin_Page_Main_Menu |
358 | 358 | { |
359 | 359 | |
360 | - public function __construct($menu_args) |
|
361 | - { |
|
362 | - parent::__construct($menu_args); |
|
363 | - } |
|
364 | - |
|
365 | - |
|
366 | - protected function _add_menu_page() |
|
367 | - { |
|
368 | - return add_submenu_page( |
|
369 | - $this->parent_slug, |
|
370 | - $this->title, |
|
371 | - $this->menu_label, |
|
372 | - $this->capability, |
|
373 | - $this->menu_slug, |
|
374 | - $this->menu_callback |
|
375 | - ); |
|
376 | - } |
|
360 | + public function __construct($menu_args) |
|
361 | + { |
|
362 | + parent::__construct($menu_args); |
|
363 | + } |
|
364 | + |
|
365 | + |
|
366 | + protected function _add_menu_page() |
|
367 | + { |
|
368 | + return add_submenu_page( |
|
369 | + $this->parent_slug, |
|
370 | + $this->title, |
|
371 | + $this->menu_label, |
|
372 | + $this->capability, |
|
373 | + $this->menu_slug, |
|
374 | + $this->menu_callback |
|
375 | + ); |
|
376 | + } |
|
377 | 377 | } |
378 | 378 | |
379 | 379 | |
@@ -392,28 +392,28 @@ discard block |
||
392 | 392 | { |
393 | 393 | |
394 | 394 | |
395 | - public function __construct($menu_args = array()) |
|
396 | - { |
|
397 | - $required = array('menu_label', 'menu_slug', 'menu_order', 'parent_slug'); |
|
398 | - parent::__construct($menu_args, $required); |
|
399 | - } |
|
395 | + public function __construct($menu_args = array()) |
|
396 | + { |
|
397 | + $required = array('menu_label', 'menu_slug', 'menu_order', 'parent_slug'); |
|
398 | + parent::__construct($menu_args, $required); |
|
399 | + } |
|
400 | 400 | |
401 | 401 | |
402 | - protected function _add_menu_page() |
|
403 | - { |
|
404 | - return add_submenu_page( |
|
405 | - $this->parent_slug, |
|
406 | - $this->menu_label, |
|
407 | - $this->_group_link(), |
|
408 | - $this->capability, |
|
409 | - $this->menu_slug, |
|
410 | - '__return_false' |
|
411 | - ); |
|
412 | - } |
|
402 | + protected function _add_menu_page() |
|
403 | + { |
|
404 | + return add_submenu_page( |
|
405 | + $this->parent_slug, |
|
406 | + $this->menu_label, |
|
407 | + $this->_group_link(), |
|
408 | + $this->capability, |
|
409 | + $this->menu_slug, |
|
410 | + '__return_false' |
|
411 | + ); |
|
412 | + } |
|
413 | 413 | |
414 | 414 | |
415 | - private function _group_link() |
|
416 | - { |
|
417 | - return '<span class="ee_menu_group" onclick="return false;">' . $this->menu_label . '</span>'; |
|
418 | - } |
|
415 | + private function _group_link() |
|
416 | + { |
|
417 | + return '<span class="ee_menu_group" onclick="return false;">' . $this->menu_label . '</span>'; |
|
418 | + } |
|
419 | 419 | } |
@@ -143,7 +143,7 @@ discard block |
||
143 | 143 | // verify that required keys are present in the incoming array. |
144 | 144 | $missing = array_diff((array) $required, array_keys((array) $menu_args)); |
145 | 145 | |
146 | - if (! empty($missing)) { |
|
146 | + if ( ! empty($missing)) { |
|
147 | 147 | throw new EE_Error( |
148 | 148 | sprintf( |
149 | 149 | __( |
@@ -182,7 +182,7 @@ discard block |
||
182 | 182 | $value = (string) $value; |
183 | 183 | break; |
184 | 184 | } |
185 | - if (! EEH_Class_Tools::has_property($this, $prop)) { |
|
185 | + if ( ! EEH_Class_Tools::has_property($this, $prop)) { |
|
186 | 186 | throw new EE_Error( |
187 | 187 | sprintf( |
188 | 188 | __( |
@@ -199,10 +199,10 @@ discard block |
||
199 | 199 | |
200 | 200 | // filter capabilities (both static and dynamic) |
201 | 201 | $this->capability = apply_filters('FHEE_management_capability', $this->capability, null); |
202 | - $this->capability = apply_filters('FHEE_' . $this->menu_slug . '_capability', $this->capability, null); |
|
202 | + $this->capability = apply_filters('FHEE_'.$this->menu_slug.'_capability', $this->capability, null); |
|
203 | 203 | |
204 | 204 | // Might need to change parent slug depending on maintenance mode. |
205 | - if (! empty($this->maintenance_mode_parent) |
|
205 | + if ( ! empty($this->maintenance_mode_parent) |
|
206 | 206 | && EE_Maintenance_Mode::instance()->level() == EE_Maintenance_Mode::level_2_complete_maintenance |
207 | 207 | ) { |
208 | 208 | $this->parent_slug = $this->maintenance_mode_parent; |
@@ -243,7 +243,7 @@ discard block |
||
243 | 243 | true |
244 | 244 | )) |
245 | 245 | || |
246 | - (! $network_admin |
|
246 | + ( ! $network_admin |
|
247 | 247 | && in_array( |
248 | 248 | $show_on_menu_int, |
249 | 249 | array(self::BLOG_AND_NETWORK_ADMIN, self::BLOG_ADMIN_ONLY), |
@@ -254,7 +254,7 @@ discard block |
||
254 | 254 | $wp_page_slug = ''; |
255 | 255 | } |
256 | 256 | |
257 | - if (! empty($wp_page_slug) && $this->admin_init_page instanceof EE_Admin_Page_Init) { |
|
257 | + if ( ! empty($wp_page_slug) && $this->admin_init_page instanceof EE_Admin_Page_Init) { |
|
258 | 258 | try { |
259 | 259 | $this->admin_init_page->set_page_dependencies($wp_page_slug); |
260 | 260 | } catch (EE_Error $e) { |
@@ -332,7 +332,7 @@ discard block |
||
332 | 332 | $this->icon_url, |
333 | 333 | $this->position |
334 | 334 | ); |
335 | - if (! empty($this->subtitle)) { |
|
335 | + if ( ! empty($this->subtitle)) { |
|
336 | 336 | add_submenu_page( |
337 | 337 | $this->parent_slug, |
338 | 338 | $this->subtitle, |
@@ -414,6 +414,6 @@ discard block |
||
414 | 414 | |
415 | 415 | private function _group_link() |
416 | 416 | { |
417 | - return '<span class="ee_menu_group" onclick="return false;">' . $this->menu_label . '</span>'; |
|
417 | + return '<span class="ee_menu_group" onclick="return false;">'.$this->menu_label.'</span>'; |
|
418 | 418 | } |
419 | 419 | } |
@@ -96,7 +96,7 @@ |
||
96 | 96 | * |
97 | 97 | * @access public |
98 | 98 | * @param boolean $caf used to indicate if this tour is happening on caf install or not. |
99 | - * @return void |
|
99 | + * @return EE_Help_Tour |
|
100 | 100 | */ |
101 | 101 | public function __construct($caf = false) |
102 | 102 | { |
@@ -15,268 +15,268 @@ |
||
15 | 15 | abstract class EE_Help_Tour extends EE_Base |
16 | 16 | { |
17 | 17 | |
18 | - /** |
|
19 | - * This is the label for the tour. It is used when regenerating restart buttons for the tour. Set this in the |
|
20 | - * constructor of the child class. |
|
21 | - * |
|
22 | - * @access protected |
|
23 | - * @var string |
|
24 | - */ |
|
25 | - protected $_label = ''; |
|
26 | - |
|
27 | - |
|
28 | - /** |
|
29 | - * This is the slug for the tour. It should be unique from all tours and is used for starting a tour and setting |
|
30 | - * cookies for the tour. Set this in the constructor of the child class. |
|
31 | - * |
|
32 | - * @access protected |
|
33 | - * @var string |
|
34 | - */ |
|
35 | - protected $_slug = ''; |
|
36 | - |
|
37 | - |
|
38 | - /** |
|
39 | - * This will contain the formatted array for the stops that gets used by EE_Admin_Page->_add_help_tour() for |
|
40 | - * setting up a tour on a given page. format for array is: array( |
|
41 | - * 0 => array( |
|
42 | - * 'id' => 'id_element', //if attached to an css id for an element then use this param. id's will take |
|
43 | - * precendence even if you also set class. |
|
44 | - * 'class' => 'class_element', //if attached to a css class for an element anchoring the stop then use |
|
45 | - * this param. The first element for that class is the anchor. If the class or the id are empty then the |
|
46 | - * stop will be a modal on the page anchored to the main body. |
|
47 | - * 'custom_class' => 'some_custom_class', //optional custom class to add for this stop. |
|
48 | - * 'button_text' => 'custom text for button', //optional |
|
49 | - * 'content' => 'The content for the stop', //required |
|
50 | - * 'pause_after' => false, //indicate if you want the tour to pause after this stop and it will get |
|
51 | - * added to the pauseAfter global option array setup for the joyride instance. This is only applicable |
|
52 | - * when this tour has been set to run on timer. |
|
53 | - * 'options' => array( |
|
54 | - * //override any of the global options set via the help_tour "option_callback" for the joyride |
|
55 | - * instance on this specific stop. |
|
56 | - * ) |
|
57 | - * ) |
|
58 | - * ); |
|
59 | - * |
|
60 | - * @access protected |
|
61 | - * @var array |
|
62 | - */ |
|
63 | - protected $_stops = array(); |
|
64 | - |
|
65 | - |
|
66 | - /** |
|
67 | - * This contains any stop specific options for the tour. |
|
68 | - * defaults are set but child classes can override. |
|
69 | - * |
|
70 | - * @access protected |
|
71 | - * @var array |
|
72 | - */ |
|
73 | - protected $_options = array(); |
|
74 | - |
|
75 | - |
|
76 | - /** |
|
77 | - * holds anything found in the $_REQUEST object (however we override any _gets with _post data). |
|
78 | - * |
|
79 | - * @access protected |
|
80 | - * @var array |
|
81 | - */ |
|
82 | - protected $_req_data = array(); |
|
83 | - |
|
84 | - |
|
85 | - /** |
|
86 | - * a flag that is set on init for whether this help_tour is happening on a caf install or not. |
|
87 | - * |
|
88 | - * @var boolean |
|
89 | - */ |
|
90 | - protected $_is_caf = false; |
|
91 | - |
|
92 | - |
|
93 | - /** |
|
94 | - * _constructor |
|
95 | - * initialized the tour object and sets up important properties required to setup the tour. |
|
96 | - * |
|
97 | - * @access public |
|
98 | - * @param boolean $caf used to indicate if this tour is happening on caf install or not. |
|
99 | - * @return void |
|
100 | - */ |
|
101 | - public function __construct($caf = false) |
|
102 | - { |
|
103 | - $this->_is_caf = $caf; |
|
104 | - $this->_req_data = array_merge($_GET, $_POST); |
|
105 | - $this->_set_tour_properties(); |
|
106 | - $this->_set_tour_stops(); |
|
107 | - $this->_set_tour_options(); |
|
108 | - |
|
109 | - // make sure the last tour stop has "end tour" for its button |
|
110 | - $end = array_pop($this->_stops); |
|
111 | - $end['button_text'] = __('End Tour', 'event_espresso'); |
|
112 | - // add back to stops |
|
113 | - $this->_stops[] = $end; |
|
114 | - } |
|
115 | - |
|
116 | - |
|
117 | - /** |
|
118 | - * required method that has the sole purpose of setting up the tour $_label and $_slug properties |
|
119 | - * |
|
120 | - * @abstract |
|
121 | - * @access protected |
|
122 | - * @return void |
|
123 | - */ |
|
124 | - abstract protected function _set_tour_properties(); |
|
125 | - |
|
126 | - |
|
127 | - /** |
|
128 | - * required method that's sole purpose is to setup the $_stops property |
|
129 | - * |
|
130 | - * @abstract |
|
131 | - * @access protected |
|
132 | - * @return void |
|
133 | - */ |
|
134 | - abstract protected function _set_tour_stops(); |
|
135 | - |
|
136 | - |
|
137 | - /** |
|
138 | - * The method can optionally be overridden by child classes to set the _options array if there are any default |
|
139 | - * options the child wishes to override for a this tour. See property definition for more info |
|
140 | - * |
|
141 | - * @access protected |
|
142 | - * @return void |
|
143 | - */ |
|
144 | - protected function _set_tour_options($options = array()) |
|
145 | - { |
|
146 | - $defaults = array( |
|
147 | - 'tipLocation' => 'bottom', |
|
148 | - // 'top', 'bottom', 'right', 'left' in relation to parent |
|
149 | - 'nubPosition' => 'auto', |
|
150 | - // override on a per tooltip bases. can be "auto", "right", "top", "bottom", "left" |
|
151 | - 'tipAdjustmentY' => 0, |
|
152 | - // allow for adjustment of tip |
|
153 | - 'tipAdjustmentX' => 0, |
|
154 | - // allow for adjustment of tip |
|
155 | - 'scroll' => true, |
|
156 | - // whether to scrollTo the next step or not |
|
157 | - 'scrollSpeed' => 300, |
|
158 | - // Page scrolling speed in ms |
|
159 | - 'timer' => 0, |
|
160 | - // 0 = off, all other numbers = time(ms) |
|
161 | - 'autoStart' => true, |
|
162 | - // true or false - false tour starts when restart called |
|
163 | - 'startTimerOnClick' => true, |
|
164 | - // true/false to start timer on first click |
|
165 | - 'nextButton' => true, |
|
166 | - // true/false for next button visibility |
|
167 | - 'button_text' => __('Next', 'event_espresso'), |
|
168 | - 'tipAnimation' => 'fade', |
|
169 | - // 'pop' or 'fade' in each tip |
|
170 | - 'pauseAfter' => array(), |
|
171 | - // array of indexes where to pause the tour after |
|
172 | - 'tipAnimationFadeSpeed' => 300, |
|
173 | - // if 'fade'- speed in ms of transition |
|
174 | - 'cookieMonster' => true, |
|
175 | - // true/false for whether cookies are used |
|
176 | - 'cookieName' => $this->get_slug(), |
|
177 | - // choose your own cookie name (setup will add the prefix for the specific page joyride) |
|
178 | - 'cookieDomain' => false, |
|
179 | - // set to false or yoursite.com |
|
180 | - // 'tipContainer' => 'body', // Where the tip be attached if not inline |
|
181 | - 'modal' => false, |
|
182 | - // Whether to cover page with modal during the tour |
|
183 | - 'expose' => false, |
|
184 | - // Whether to expose the elements at each step in the tour (requires modal:true), |
|
185 | - 'postExposeCallback' => 'EEHelpTour.postExposeCallback', |
|
186 | - // A method to call after an element has been exposed |
|
187 | - 'preRideCallback' => 'EEHelpTour_preRideCallback', |
|
188 | - // A method to call before the tour starts (passed index, tip, and cloned exposed element) |
|
189 | - 'postRideCallback' => 'EEHelpTour_postRideCallback', |
|
190 | - // a method to call once the tour closes. This will correspond to the name of a js method that will have to be defined in loaded js. |
|
191 | - 'preStepCallback' => 'EEHelpTour_preStepCallback', |
|
192 | - // A method to call before each step |
|
193 | - 'postStepCallback' => 'EEHelpTour_postStepCallback', |
|
194 | - // A method to call after each step (remember this will correspond with a js method that you will have to define in a js file BEFORE ee-help-tour.js loads, if the default methods do not exist, then ee-help-tour.js just substitues empty functions $.noop)/**/ |
|
195 | - ); |
|
196 | - |
|
197 | - $options = ! empty($options) && is_array($options) ? array_merge($defaults, $options) : $defaults; |
|
198 | - $this->_options = $options; |
|
199 | - } |
|
200 | - |
|
201 | - |
|
202 | - /** |
|
203 | - * getter functions to return all the properties for the tour. |
|
204 | - */ |
|
205 | - |
|
206 | - |
|
207 | - /** |
|
208 | - * get_slug |
|
209 | - * |
|
210 | - * @return string slug for the tour |
|
211 | - */ |
|
212 | - public function get_slug() |
|
213 | - { |
|
214 | - if (empty($this->_slug)) { |
|
215 | - throw new EE_Error( |
|
216 | - sprintf( |
|
217 | - __( |
|
218 | - 'There is no slug set for the help tour class (%s). Make sure that the $_slug property is set in the class constructor', |
|
219 | - 'event_espresso' |
|
220 | - ), |
|
221 | - get_class($this) |
|
222 | - ) |
|
223 | - ); |
|
224 | - } |
|
225 | - return $this->_slug; |
|
226 | - } |
|
227 | - |
|
228 | - |
|
229 | - /** |
|
230 | - * get_label |
|
231 | - * |
|
232 | - * @return string |
|
233 | - */ |
|
234 | - public function get_label() |
|
235 | - { |
|
236 | - if (empty($this->_label)) { |
|
237 | - throw new EE_Error( |
|
238 | - sprintf( |
|
239 | - __( |
|
240 | - 'There is no label set for the help tour class (%s). Make sure that the $_label property is set in the class constructor', |
|
241 | - 'event_espresso' |
|
242 | - ), |
|
243 | - get_class($this) |
|
244 | - ) |
|
245 | - ); |
|
246 | - } |
|
247 | - return $this->_label; |
|
248 | - } |
|
249 | - |
|
250 | - |
|
251 | - /** |
|
252 | - * get_stops |
|
253 | - * |
|
254 | - * @return array |
|
255 | - */ |
|
256 | - public function get_stops() |
|
257 | - { |
|
258 | - foreach ($this->_stops as $ind => $stop) { |
|
259 | - if (! isset($stop['button_text'])) { |
|
260 | - $this->_stops[ $ind ]['button_text'] = $this->_options['button_text']; |
|
261 | - } |
|
262 | - } |
|
263 | - return $this->_stops; |
|
264 | - } |
|
265 | - |
|
266 | - |
|
267 | - /** |
|
268 | - * get options |
|
269 | - * |
|
270 | - * @return array |
|
271 | - */ |
|
272 | - public function get_options() |
|
273 | - { |
|
274 | - // let's make sure there are not pauses set |
|
275 | - foreach ($this->_stops as $ind => $stop) { |
|
276 | - if (isset($stop['pause_after']) && $stop['pause_after']) { |
|
277 | - $this->_options['pauseAfter'][] = $ind; |
|
278 | - } |
|
279 | - } |
|
280 | - return apply_filters('FHEE__' . get_class($this) . '__get_options', $this->_options, $this); |
|
281 | - } |
|
18 | + /** |
|
19 | + * This is the label for the tour. It is used when regenerating restart buttons for the tour. Set this in the |
|
20 | + * constructor of the child class. |
|
21 | + * |
|
22 | + * @access protected |
|
23 | + * @var string |
|
24 | + */ |
|
25 | + protected $_label = ''; |
|
26 | + |
|
27 | + |
|
28 | + /** |
|
29 | + * This is the slug for the tour. It should be unique from all tours and is used for starting a tour and setting |
|
30 | + * cookies for the tour. Set this in the constructor of the child class. |
|
31 | + * |
|
32 | + * @access protected |
|
33 | + * @var string |
|
34 | + */ |
|
35 | + protected $_slug = ''; |
|
36 | + |
|
37 | + |
|
38 | + /** |
|
39 | + * This will contain the formatted array for the stops that gets used by EE_Admin_Page->_add_help_tour() for |
|
40 | + * setting up a tour on a given page. format for array is: array( |
|
41 | + * 0 => array( |
|
42 | + * 'id' => 'id_element', //if attached to an css id for an element then use this param. id's will take |
|
43 | + * precendence even if you also set class. |
|
44 | + * 'class' => 'class_element', //if attached to a css class for an element anchoring the stop then use |
|
45 | + * this param. The first element for that class is the anchor. If the class or the id are empty then the |
|
46 | + * stop will be a modal on the page anchored to the main body. |
|
47 | + * 'custom_class' => 'some_custom_class', //optional custom class to add for this stop. |
|
48 | + * 'button_text' => 'custom text for button', //optional |
|
49 | + * 'content' => 'The content for the stop', //required |
|
50 | + * 'pause_after' => false, //indicate if you want the tour to pause after this stop and it will get |
|
51 | + * added to the pauseAfter global option array setup for the joyride instance. This is only applicable |
|
52 | + * when this tour has been set to run on timer. |
|
53 | + * 'options' => array( |
|
54 | + * //override any of the global options set via the help_tour "option_callback" for the joyride |
|
55 | + * instance on this specific stop. |
|
56 | + * ) |
|
57 | + * ) |
|
58 | + * ); |
|
59 | + * |
|
60 | + * @access protected |
|
61 | + * @var array |
|
62 | + */ |
|
63 | + protected $_stops = array(); |
|
64 | + |
|
65 | + |
|
66 | + /** |
|
67 | + * This contains any stop specific options for the tour. |
|
68 | + * defaults are set but child classes can override. |
|
69 | + * |
|
70 | + * @access protected |
|
71 | + * @var array |
|
72 | + */ |
|
73 | + protected $_options = array(); |
|
74 | + |
|
75 | + |
|
76 | + /** |
|
77 | + * holds anything found in the $_REQUEST object (however we override any _gets with _post data). |
|
78 | + * |
|
79 | + * @access protected |
|
80 | + * @var array |
|
81 | + */ |
|
82 | + protected $_req_data = array(); |
|
83 | + |
|
84 | + |
|
85 | + /** |
|
86 | + * a flag that is set on init for whether this help_tour is happening on a caf install or not. |
|
87 | + * |
|
88 | + * @var boolean |
|
89 | + */ |
|
90 | + protected $_is_caf = false; |
|
91 | + |
|
92 | + |
|
93 | + /** |
|
94 | + * _constructor |
|
95 | + * initialized the tour object and sets up important properties required to setup the tour. |
|
96 | + * |
|
97 | + * @access public |
|
98 | + * @param boolean $caf used to indicate if this tour is happening on caf install or not. |
|
99 | + * @return void |
|
100 | + */ |
|
101 | + public function __construct($caf = false) |
|
102 | + { |
|
103 | + $this->_is_caf = $caf; |
|
104 | + $this->_req_data = array_merge($_GET, $_POST); |
|
105 | + $this->_set_tour_properties(); |
|
106 | + $this->_set_tour_stops(); |
|
107 | + $this->_set_tour_options(); |
|
108 | + |
|
109 | + // make sure the last tour stop has "end tour" for its button |
|
110 | + $end = array_pop($this->_stops); |
|
111 | + $end['button_text'] = __('End Tour', 'event_espresso'); |
|
112 | + // add back to stops |
|
113 | + $this->_stops[] = $end; |
|
114 | + } |
|
115 | + |
|
116 | + |
|
117 | + /** |
|
118 | + * required method that has the sole purpose of setting up the tour $_label and $_slug properties |
|
119 | + * |
|
120 | + * @abstract |
|
121 | + * @access protected |
|
122 | + * @return void |
|
123 | + */ |
|
124 | + abstract protected function _set_tour_properties(); |
|
125 | + |
|
126 | + |
|
127 | + /** |
|
128 | + * required method that's sole purpose is to setup the $_stops property |
|
129 | + * |
|
130 | + * @abstract |
|
131 | + * @access protected |
|
132 | + * @return void |
|
133 | + */ |
|
134 | + abstract protected function _set_tour_stops(); |
|
135 | + |
|
136 | + |
|
137 | + /** |
|
138 | + * The method can optionally be overridden by child classes to set the _options array if there are any default |
|
139 | + * options the child wishes to override for a this tour. See property definition for more info |
|
140 | + * |
|
141 | + * @access protected |
|
142 | + * @return void |
|
143 | + */ |
|
144 | + protected function _set_tour_options($options = array()) |
|
145 | + { |
|
146 | + $defaults = array( |
|
147 | + 'tipLocation' => 'bottom', |
|
148 | + // 'top', 'bottom', 'right', 'left' in relation to parent |
|
149 | + 'nubPosition' => 'auto', |
|
150 | + // override on a per tooltip bases. can be "auto", "right", "top", "bottom", "left" |
|
151 | + 'tipAdjustmentY' => 0, |
|
152 | + // allow for adjustment of tip |
|
153 | + 'tipAdjustmentX' => 0, |
|
154 | + // allow for adjustment of tip |
|
155 | + 'scroll' => true, |
|
156 | + // whether to scrollTo the next step or not |
|
157 | + 'scrollSpeed' => 300, |
|
158 | + // Page scrolling speed in ms |
|
159 | + 'timer' => 0, |
|
160 | + // 0 = off, all other numbers = time(ms) |
|
161 | + 'autoStart' => true, |
|
162 | + // true or false - false tour starts when restart called |
|
163 | + 'startTimerOnClick' => true, |
|
164 | + // true/false to start timer on first click |
|
165 | + 'nextButton' => true, |
|
166 | + // true/false for next button visibility |
|
167 | + 'button_text' => __('Next', 'event_espresso'), |
|
168 | + 'tipAnimation' => 'fade', |
|
169 | + // 'pop' or 'fade' in each tip |
|
170 | + 'pauseAfter' => array(), |
|
171 | + // array of indexes where to pause the tour after |
|
172 | + 'tipAnimationFadeSpeed' => 300, |
|
173 | + // if 'fade'- speed in ms of transition |
|
174 | + 'cookieMonster' => true, |
|
175 | + // true/false for whether cookies are used |
|
176 | + 'cookieName' => $this->get_slug(), |
|
177 | + // choose your own cookie name (setup will add the prefix for the specific page joyride) |
|
178 | + 'cookieDomain' => false, |
|
179 | + // set to false or yoursite.com |
|
180 | + // 'tipContainer' => 'body', // Where the tip be attached if not inline |
|
181 | + 'modal' => false, |
|
182 | + // Whether to cover page with modal during the tour |
|
183 | + 'expose' => false, |
|
184 | + // Whether to expose the elements at each step in the tour (requires modal:true), |
|
185 | + 'postExposeCallback' => 'EEHelpTour.postExposeCallback', |
|
186 | + // A method to call after an element has been exposed |
|
187 | + 'preRideCallback' => 'EEHelpTour_preRideCallback', |
|
188 | + // A method to call before the tour starts (passed index, tip, and cloned exposed element) |
|
189 | + 'postRideCallback' => 'EEHelpTour_postRideCallback', |
|
190 | + // a method to call once the tour closes. This will correspond to the name of a js method that will have to be defined in loaded js. |
|
191 | + 'preStepCallback' => 'EEHelpTour_preStepCallback', |
|
192 | + // A method to call before each step |
|
193 | + 'postStepCallback' => 'EEHelpTour_postStepCallback', |
|
194 | + // A method to call after each step (remember this will correspond with a js method that you will have to define in a js file BEFORE ee-help-tour.js loads, if the default methods do not exist, then ee-help-tour.js just substitues empty functions $.noop)/**/ |
|
195 | + ); |
|
196 | + |
|
197 | + $options = ! empty($options) && is_array($options) ? array_merge($defaults, $options) : $defaults; |
|
198 | + $this->_options = $options; |
|
199 | + } |
|
200 | + |
|
201 | + |
|
202 | + /** |
|
203 | + * getter functions to return all the properties for the tour. |
|
204 | + */ |
|
205 | + |
|
206 | + |
|
207 | + /** |
|
208 | + * get_slug |
|
209 | + * |
|
210 | + * @return string slug for the tour |
|
211 | + */ |
|
212 | + public function get_slug() |
|
213 | + { |
|
214 | + if (empty($this->_slug)) { |
|
215 | + throw new EE_Error( |
|
216 | + sprintf( |
|
217 | + __( |
|
218 | + 'There is no slug set for the help tour class (%s). Make sure that the $_slug property is set in the class constructor', |
|
219 | + 'event_espresso' |
|
220 | + ), |
|
221 | + get_class($this) |
|
222 | + ) |
|
223 | + ); |
|
224 | + } |
|
225 | + return $this->_slug; |
|
226 | + } |
|
227 | + |
|
228 | + |
|
229 | + /** |
|
230 | + * get_label |
|
231 | + * |
|
232 | + * @return string |
|
233 | + */ |
|
234 | + public function get_label() |
|
235 | + { |
|
236 | + if (empty($this->_label)) { |
|
237 | + throw new EE_Error( |
|
238 | + sprintf( |
|
239 | + __( |
|
240 | + 'There is no label set for the help tour class (%s). Make sure that the $_label property is set in the class constructor', |
|
241 | + 'event_espresso' |
|
242 | + ), |
|
243 | + get_class($this) |
|
244 | + ) |
|
245 | + ); |
|
246 | + } |
|
247 | + return $this->_label; |
|
248 | + } |
|
249 | + |
|
250 | + |
|
251 | + /** |
|
252 | + * get_stops |
|
253 | + * |
|
254 | + * @return array |
|
255 | + */ |
|
256 | + public function get_stops() |
|
257 | + { |
|
258 | + foreach ($this->_stops as $ind => $stop) { |
|
259 | + if (! isset($stop['button_text'])) { |
|
260 | + $this->_stops[ $ind ]['button_text'] = $this->_options['button_text']; |
|
261 | + } |
|
262 | + } |
|
263 | + return $this->_stops; |
|
264 | + } |
|
265 | + |
|
266 | + |
|
267 | + /** |
|
268 | + * get options |
|
269 | + * |
|
270 | + * @return array |
|
271 | + */ |
|
272 | + public function get_options() |
|
273 | + { |
|
274 | + // let's make sure there are not pauses set |
|
275 | + foreach ($this->_stops as $ind => $stop) { |
|
276 | + if (isset($stop['pause_after']) && $stop['pause_after']) { |
|
277 | + $this->_options['pauseAfter'][] = $ind; |
|
278 | + } |
|
279 | + } |
|
280 | + return apply_filters('FHEE__' . get_class($this) . '__get_options', $this->_options, $this); |
|
281 | + } |
|
282 | 282 | } |
@@ -256,8 +256,8 @@ discard block |
||
256 | 256 | public function get_stops() |
257 | 257 | { |
258 | 258 | foreach ($this->_stops as $ind => $stop) { |
259 | - if (! isset($stop['button_text'])) { |
|
260 | - $this->_stops[ $ind ]['button_text'] = $this->_options['button_text']; |
|
259 | + if ( ! isset($stop['button_text'])) { |
|
260 | + $this->_stops[$ind]['button_text'] = $this->_options['button_text']; |
|
261 | 261 | } |
262 | 262 | } |
263 | 263 | return $this->_stops; |
@@ -277,6 +277,6 @@ discard block |
||
277 | 277 | $this->_options['pauseAfter'][] = $ind; |
278 | 278 | } |
279 | 279 | } |
280 | - return apply_filters('FHEE__' . get_class($this) . '__get_options', $this->_options, $this); |
|
280 | + return apply_filters('FHEE__'.get_class($this).'__get_options', $this->_options, $this); |
|
281 | 281 | } |
282 | 282 | } |
@@ -62,7 +62,6 @@ |
||
62 | 62 | /** |
63 | 63 | * Creates a 4.1 price base type |
64 | 64 | * @global type $wpdb |
65 | - * @param array $old_price |
|
66 | 65 | * @param int $new_reg_id |
67 | 66 | * @return int |
68 | 67 | */ |
@@ -42,8 +42,8 @@ discard block |
||
42 | 42 | // join to attendee and then join to events table |
43 | 43 | $this->select_expression = 'ans.*, e.event_status'; |
44 | 44 | $this->_extra_where_sql = ' AS ans |
45 | - INNER JOIN ' . $wpdb->prefix . 'events_attendee AS att ON ans.attendee_id = att.id |
|
46 | - INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id = e.id |
|
45 | + INNER JOIN ' . $wpdb->prefix.'events_attendee AS att ON ans.attendee_id = att.id |
|
46 | + INNER JOIN ' . $wpdb->prefix.'events_detail AS e ON att.event_id = e.id |
|
47 | 47 | WHERE e.event_status !="D"'; |
48 | 48 | $this->_new_answer_table = $wpdb->prefix."esp_answer"; |
49 | 49 | $this->_new_question_table = $wpdb->prefix."esp_question"; |
@@ -56,7 +56,7 @@ discard block |
||
56 | 56 | $old_attendee_table = $wpdb->prefix."events_attendee"; |
57 | 57 | $new_reg_table = $wpdb->prefix."esp_registration"; |
58 | 58 | $regs = $this->get_migration_script()->get_mapping_new_pk($old_attendee_table, $old_row['attendee_id'], $new_reg_table); |
59 | - if (! $regs) { |
|
59 | + if ( ! $regs) { |
|
60 | 60 | $this->add_error(sprintf(__("Could not find new registrations for old attendee %d when creating answer %s", "event_espresso"), $old_row['attendee_id'], $this->_json_encode($old_row))); |
61 | 61 | return false; |
62 | 62 | } |
@@ -90,12 +90,12 @@ discard block |
||
90 | 90 | 'ANS_value'=>$ans_value |
91 | 91 | ); |
92 | 92 | $datatypes = array( |
93 | - '%d',// REG_ID |
|
94 | - '%d',// QST_ID |
|
95 | - '%s',// ANS_value |
|
93 | + '%d', // REG_ID |
|
94 | + '%d', // QST_ID |
|
95 | + '%s', // ANS_value |
|
96 | 96 | ); |
97 | 97 | $success = $wpdb->insert($this->_new_answer_table, $cols_n_values, $datatypes); |
98 | - if (! $success) { |
|
98 | + if ( ! $success) { |
|
99 | 99 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_answer, $this->_new_answer_table, $cols_n_values, $datatypes)); |
100 | 100 | return 0; |
101 | 101 | } |
@@ -32,102 +32,102 @@ |
||
32 | 32 | |
33 | 33 | class EE_DMS_4_1_0_answers extends EE_Data_Migration_Script_Stage_Table |
34 | 34 | { |
35 | - private $_new_answer_table; |
|
36 | - private $_new_question_table; |
|
37 | - public function __construct() |
|
38 | - { |
|
39 | - global $wpdb; |
|
40 | - $this->_pretty_name = __("Answers", "event_espresso"); |
|
41 | - $this->_old_table = $wpdb->prefix."events_answer"; |
|
42 | - // join to attendee and then join to events table |
|
43 | - $this->select_expression = 'ans.*, e.event_status'; |
|
44 | - $this->_extra_where_sql = ' AS ans |
|
35 | + private $_new_answer_table; |
|
36 | + private $_new_question_table; |
|
37 | + public function __construct() |
|
38 | + { |
|
39 | + global $wpdb; |
|
40 | + $this->_pretty_name = __("Answers", "event_espresso"); |
|
41 | + $this->_old_table = $wpdb->prefix."events_answer"; |
|
42 | + // join to attendee and then join to events table |
|
43 | + $this->select_expression = 'ans.*, e.event_status'; |
|
44 | + $this->_extra_where_sql = ' AS ans |
|
45 | 45 | INNER JOIN ' . $wpdb->prefix . 'events_attendee AS att ON ans.attendee_id = att.id |
46 | 46 | INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id = e.id |
47 | 47 | WHERE e.event_status !="D"'; |
48 | - $this->_new_answer_table = $wpdb->prefix."esp_answer"; |
|
49 | - $this->_new_question_table = $wpdb->prefix."esp_question"; |
|
50 | - parent::__construct(); |
|
51 | - } |
|
52 | - protected function _migrate_old_row($old_row) |
|
53 | - { |
|
54 | - // get the new REGs for the old answer |
|
55 | - global $wpdb; |
|
56 | - $old_attendee_table = $wpdb->prefix."events_attendee"; |
|
57 | - $new_reg_table = $wpdb->prefix."esp_registration"; |
|
58 | - $regs = $this->get_migration_script()->get_mapping_new_pk($old_attendee_table, $old_row['attendee_id'], $new_reg_table); |
|
59 | - if (! $regs) { |
|
60 | - $this->add_error(sprintf(__("Could not find new registrations for old attendee %d when creating answer %s", "event_espresso"), $old_row['attendee_id'], $this->_json_encode($old_row))); |
|
61 | - return false; |
|
62 | - } |
|
63 | - // as inefficient as this sounds, we create an answer per REGISTRATION, (even if the registrations use the same attendee) |
|
64 | - foreach ($regs as $new_reg_id) { |
|
65 | - $this->_insert_new_answer($old_row, $new_reg_id); |
|
66 | - } |
|
67 | - } |
|
68 | - /** |
|
69 | - * Creates a 4.1 price base type |
|
70 | - * @global type $wpdb |
|
71 | - * @param array $old_price |
|
72 | - * @param int $new_reg_id |
|
73 | - * @return int |
|
74 | - */ |
|
75 | - private function _insert_new_answer($old_answer, $new_reg_id) |
|
76 | - { |
|
77 | - global $wpdb; |
|
78 | - $old_question_table = $wpdb->prefix."events_question"; |
|
79 | - $new_question_id = $this->get_migration_script()->get_mapping_new_pk($old_question_table, $old_answer['question_id'], $this->_new_question_table); |
|
48 | + $this->_new_answer_table = $wpdb->prefix."esp_answer"; |
|
49 | + $this->_new_question_table = $wpdb->prefix."esp_question"; |
|
50 | + parent::__construct(); |
|
51 | + } |
|
52 | + protected function _migrate_old_row($old_row) |
|
53 | + { |
|
54 | + // get the new REGs for the old answer |
|
55 | + global $wpdb; |
|
56 | + $old_attendee_table = $wpdb->prefix."events_attendee"; |
|
57 | + $new_reg_table = $wpdb->prefix."esp_registration"; |
|
58 | + $regs = $this->get_migration_script()->get_mapping_new_pk($old_attendee_table, $old_row['attendee_id'], $new_reg_table); |
|
59 | + if (! $regs) { |
|
60 | + $this->add_error(sprintf(__("Could not find new registrations for old attendee %d when creating answer %s", "event_espresso"), $old_row['attendee_id'], $this->_json_encode($old_row))); |
|
61 | + return false; |
|
62 | + } |
|
63 | + // as inefficient as this sounds, we create an answer per REGISTRATION, (even if the registrations use the same attendee) |
|
64 | + foreach ($regs as $new_reg_id) { |
|
65 | + $this->_insert_new_answer($old_row, $new_reg_id); |
|
66 | + } |
|
67 | + } |
|
68 | + /** |
|
69 | + * Creates a 4.1 price base type |
|
70 | + * @global type $wpdb |
|
71 | + * @param array $old_price |
|
72 | + * @param int $new_reg_id |
|
73 | + * @return int |
|
74 | + */ |
|
75 | + private function _insert_new_answer($old_answer, $new_reg_id) |
|
76 | + { |
|
77 | + global $wpdb; |
|
78 | + $old_question_table = $wpdb->prefix."events_question"; |
|
79 | + $new_question_id = $this->get_migration_script()->get_mapping_new_pk($old_question_table, $old_answer['question_id'], $this->_new_question_table); |
|
80 | 80 | |
81 | - $question_row = $this->_get_question_type_and_system($new_question_id); |
|
82 | - if ($question_row['QST_system']) { |
|
83 | - // It's an answer to a system question? EE3 used to store that on both the attendee and the answers column, |
|
84 | - // but not EE4! It's just stored in the attendee meta table. The answers table is ONLY for answers to custom |
|
85 | - // questions. |
|
86 | - return 0; |
|
87 | - } |
|
88 | - if (in_array($question_row['QST_type'], array('MULTIPLE'))) { |
|
89 | - $ans_value = serialize(explode(",", stripslashes($old_answer['answer']))); |
|
90 | - } else { |
|
91 | - $ans_value = stripslashes($old_answer['answer']); |
|
92 | - } |
|
93 | - $cols_n_values = array( |
|
94 | - 'REG_ID'=>$new_reg_id, |
|
95 | - 'QST_ID'=>$new_question_id, |
|
96 | - 'ANS_value'=>$ans_value |
|
97 | - ); |
|
98 | - $datatypes = array( |
|
99 | - '%d',// REG_ID |
|
100 | - '%d',// QST_ID |
|
101 | - '%s',// ANS_value |
|
102 | - ); |
|
103 | - $success = $wpdb->insert($this->_new_answer_table, $cols_n_values, $datatypes); |
|
104 | - if (! $success) { |
|
105 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_answer, $this->_new_answer_table, $cols_n_values, $datatypes)); |
|
106 | - return 0; |
|
107 | - } |
|
108 | - $new_id = $wpdb->insert_id; |
|
109 | - return $new_id; |
|
110 | - } |
|
81 | + $question_row = $this->_get_question_type_and_system($new_question_id); |
|
82 | + if ($question_row['QST_system']) { |
|
83 | + // It's an answer to a system question? EE3 used to store that on both the attendee and the answers column, |
|
84 | + // but not EE4! It's just stored in the attendee meta table. The answers table is ONLY for answers to custom |
|
85 | + // questions. |
|
86 | + return 0; |
|
87 | + } |
|
88 | + if (in_array($question_row['QST_type'], array('MULTIPLE'))) { |
|
89 | + $ans_value = serialize(explode(",", stripslashes($old_answer['answer']))); |
|
90 | + } else { |
|
91 | + $ans_value = stripslashes($old_answer['answer']); |
|
92 | + } |
|
93 | + $cols_n_values = array( |
|
94 | + 'REG_ID'=>$new_reg_id, |
|
95 | + 'QST_ID'=>$new_question_id, |
|
96 | + 'ANS_value'=>$ans_value |
|
97 | + ); |
|
98 | + $datatypes = array( |
|
99 | + '%d',// REG_ID |
|
100 | + '%d',// QST_ID |
|
101 | + '%s',// ANS_value |
|
102 | + ); |
|
103 | + $success = $wpdb->insert($this->_new_answer_table, $cols_n_values, $datatypes); |
|
104 | + if (! $success) { |
|
105 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_answer, $this->_new_answer_table, $cols_n_values, $datatypes)); |
|
106 | + return 0; |
|
107 | + } |
|
108 | + $new_id = $wpdb->insert_id; |
|
109 | + return $new_id; |
|
110 | + } |
|
111 | 111 | |
112 | - /** |
|
113 | - * Gets the question's type |
|
114 | - * @global type $wpdb |
|
115 | - * @param type $question_id |
|
116 | - * @return array { |
|
117 | - * @type string $QST_type |
|
118 | - * @type string $QST_system |
|
119 | - * } |
|
120 | - */ |
|
121 | - private function _get_question_type_and_system($question_id) |
|
122 | - { |
|
123 | - global $wpdb; |
|
124 | - $row = $wpdb->get_row( |
|
125 | - $wpdb->prepare( |
|
126 | - "SELECT QST_type, QST_system FROM ".$this->_new_question_table." WHERE QST_ID=%d LIMIT 1", |
|
127 | - $question_id |
|
128 | - ), |
|
129 | - ARRAY_A |
|
130 | - ); |
|
131 | - return $row; |
|
132 | - } |
|
112 | + /** |
|
113 | + * Gets the question's type |
|
114 | + * @global type $wpdb |
|
115 | + * @param type $question_id |
|
116 | + * @return array { |
|
117 | + * @type string $QST_type |
|
118 | + * @type string $QST_system |
|
119 | + * } |
|
120 | + */ |
|
121 | + private function _get_question_type_and_system($question_id) |
|
122 | + { |
|
123 | + global $wpdb; |
|
124 | + $row = $wpdb->get_row( |
|
125 | + $wpdb->prepare( |
|
126 | + "SELECT QST_type, QST_system FROM ".$this->_new_question_table." WHERE QST_ID=%d LIMIT 1", |
|
127 | + $question_id |
|
128 | + ), |
|
129 | + ARRAY_A |
|
130 | + ); |
|
131 | + return $row; |
|
132 | + } |
|
133 | 133 | } |
@@ -85,7 +85,7 @@ discard block |
||
85 | 85 | * (because we know the attendee was for an event as a specific time, and we know |
86 | 86 | * the event's OLD ID...) |
87 | 87 | * @global type $wpdb |
88 | - * @param array $old_attendee_row |
|
88 | + * @param array $old_attendee |
|
89 | 89 | * @return array row of datetime from DB |
90 | 90 | */ |
91 | 91 | private function _try_to_find_datetime($old_attendee) |
@@ -121,8 +121,7 @@ discard block |
||
121 | 121 | /** |
122 | 122 | * Adds a new Check-in/checkout record according for $new_reg_id,$new_datetime_id,$checking_in, and $timestmap |
123 | 123 | * @param int $new_reg_id |
124 | - * @param int $new_datetime_id |
|
125 | - * @param string $timestamp mysql datetime |
|
124 | + * @param int $new_datetime |
|
126 | 125 | * @return int new Check-in id |
127 | 126 | */ |
128 | 127 | private function _insert_checkin_record($new_reg_id, $new_datetime) |
@@ -26,160 +26,160 @@ |
||
26 | 26 | |
27 | 27 | class EE_DMS_4_1_0_checkins extends EE_Data_Migration_Script_Stage_Table |
28 | 28 | { |
29 | - private $_new_table; |
|
30 | - public function __construct() |
|
31 | - { |
|
32 | - global $wpdb; |
|
33 | - $this->_pretty_name = esc_html__('Checkins', 'event_espresso'); |
|
34 | - $this->_old_table = $wpdb->prefix."events_attendee"; |
|
35 | - $this->select_expression = 'att.*, e.event_status'; |
|
36 | - $this->_extra_where_sql = 'AS att |
|
29 | + private $_new_table; |
|
30 | + public function __construct() |
|
31 | + { |
|
32 | + global $wpdb; |
|
33 | + $this->_pretty_name = esc_html__('Checkins', 'event_espresso'); |
|
34 | + $this->_old_table = $wpdb->prefix."events_attendee"; |
|
35 | + $this->select_expression = 'att.*, e.event_status'; |
|
36 | + $this->_extra_where_sql = 'AS att |
|
37 | 37 | INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id=e.id |
38 | 38 | WHERE e.event_status!="D"'; |
39 | - $this->_new_table = $wpdb->prefix."esp_checkin"; |
|
40 | - parent::__construct(); |
|
41 | - } |
|
42 | - protected function _migrate_old_row($old_row) |
|
43 | - { |
|
44 | - global $wpdb; |
|
45 | - $new_reg_table = $wpdb->prefix."esp_registration"; |
|
39 | + $this->_new_table = $wpdb->prefix."esp_checkin"; |
|
40 | + parent::__construct(); |
|
41 | + } |
|
42 | + protected function _migrate_old_row($old_row) |
|
43 | + { |
|
44 | + global $wpdb; |
|
45 | + $new_reg_table = $wpdb->prefix."esp_registration"; |
|
46 | 46 | |
47 | - $num_to_checkin_at_this_time = max(array(intval($old_row['checked_in_quantity']),intval($old_row['checked_in']))) ; |
|
47 | + $num_to_checkin_at_this_time = max(array(intval($old_row['checked_in_quantity']),intval($old_row['checked_in']))) ; |
|
48 | 48 | |
49 | - $new_registrations_for_attendee = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $new_reg_table); |
|
50 | - if (! $new_registrations_for_attendee) { |
|
51 | - $new_registrations_for_attendee = array(); |
|
52 | - } |
|
53 | - $new_datetime = $this->_try_to_find_datetime($old_row); |
|
49 | + $new_registrations_for_attendee = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $new_reg_table); |
|
50 | + if (! $new_registrations_for_attendee) { |
|
51 | + $new_registrations_for_attendee = array(); |
|
52 | + } |
|
53 | + $new_datetime = $this->_try_to_find_datetime($old_row); |
|
54 | 54 | |
55 | - // make sure registrations array is numerically indexed starting at 0 (it probably already is) |
|
56 | - $new_registrations_for_attendee = array_values($new_registrations_for_attendee); |
|
57 | - $new_checkin_ids = array(); |
|
58 | - for ($i = 0; $i<abs($num_to_checkin_at_this_time); $i++) { |
|
59 | - $new_reg_id = $new_registrations_for_attendee[ $i ]; |
|
60 | - if (! $new_reg_id) { |
|
61 | - $this->add_error(sprintf( |
|
62 | - esc_html__( |
|
63 | - /* translators: %1$s database row represented in JSON, %2$s number of registrations to check-in |
|
55 | + // make sure registrations array is numerically indexed starting at 0 (it probably already is) |
|
56 | + $new_registrations_for_attendee = array_values($new_registrations_for_attendee); |
|
57 | + $new_checkin_ids = array(); |
|
58 | + for ($i = 0; $i<abs($num_to_checkin_at_this_time); $i++) { |
|
59 | + $new_reg_id = $new_registrations_for_attendee[ $i ]; |
|
60 | + if (! $new_reg_id) { |
|
61 | + $this->add_error(sprintf( |
|
62 | + esc_html__( |
|
63 | + /* translators: %1$s database row represented in JSON, %2$s number of registrations to check-in |
|
64 | 64 | * %3$s number of registrations for the attendee, %4$s new registration rows represented in JSON |
65 | 65 | */ |
66 | - // @codingStandardsIgnoreStart |
|
67 | - 'It appears we wanted to check-in more registrations than actually exist. The old attendee record (%1$s) indicated we should check-in %2$d registrations, but there are only %3$d registrations for that attendee (%4$s)', |
|
68 | - // @codingStandardsIgnoreEnd |
|
69 | - 'event_espresso' |
|
70 | - ), |
|
71 | - $this->_json_encode($old_row), |
|
72 | - abs($num_to_checkin_at_this_time), |
|
73 | - count($new_registrations_for_attendee), |
|
74 | - $this->_json_encode($new_registrations_for_attendee) |
|
75 | - )); |
|
76 | - break; |
|
77 | - } |
|
78 | - $existing_checkin_record = $wpdb->get_var( |
|
79 | - $wpdb->prepare( |
|
80 | - "SELECT CHK_ID FROM $this->_new_table WHERE REG_ID = %d ORDER BY CHK_ID DESC LIMIT 1", |
|
81 | - $new_reg_id |
|
82 | - ) |
|
83 | - ); |
|
84 | - if (! $existing_checkin_record) { |
|
85 | - $new_id = $this->_insert_checkin_record($new_reg_id, $new_datetime); |
|
86 | - if ($new_id) { |
|
87 | - $new_checkin_ids[]= $new_id; |
|
88 | - } |
|
89 | - } |
|
90 | - } |
|
91 | - if ($new_checkin_ids) { |
|
92 | - $this->get_migration_script()->set_mapping( |
|
93 | - $this->_old_table, |
|
94 | - $old_row['id'], |
|
95 | - $this->_new_table, |
|
96 | - $new_checkin_ids |
|
97 | - ); |
|
98 | - } |
|
99 | - } |
|
66 | + // @codingStandardsIgnoreStart |
|
67 | + 'It appears we wanted to check-in more registrations than actually exist. The old attendee record (%1$s) indicated we should check-in %2$d registrations, but there are only %3$d registrations for that attendee (%4$s)', |
|
68 | + // @codingStandardsIgnoreEnd |
|
69 | + 'event_espresso' |
|
70 | + ), |
|
71 | + $this->_json_encode($old_row), |
|
72 | + abs($num_to_checkin_at_this_time), |
|
73 | + count($new_registrations_for_attendee), |
|
74 | + $this->_json_encode($new_registrations_for_attendee) |
|
75 | + )); |
|
76 | + break; |
|
77 | + } |
|
78 | + $existing_checkin_record = $wpdb->get_var( |
|
79 | + $wpdb->prepare( |
|
80 | + "SELECT CHK_ID FROM $this->_new_table WHERE REG_ID = %d ORDER BY CHK_ID DESC LIMIT 1", |
|
81 | + $new_reg_id |
|
82 | + ) |
|
83 | + ); |
|
84 | + if (! $existing_checkin_record) { |
|
85 | + $new_id = $this->_insert_checkin_record($new_reg_id, $new_datetime); |
|
86 | + if ($new_id) { |
|
87 | + $new_checkin_ids[]= $new_id; |
|
88 | + } |
|
89 | + } |
|
90 | + } |
|
91 | + if ($new_checkin_ids) { |
|
92 | + $this->get_migration_script()->set_mapping( |
|
93 | + $this->_old_table, |
|
94 | + $old_row['id'], |
|
95 | + $this->_new_table, |
|
96 | + $new_checkin_ids |
|
97 | + ); |
|
98 | + } |
|
99 | + } |
|
100 | 100 | |
101 | 101 | |
102 | - /** |
|
103 | - * Tries to find the new datetime the Check-in was for, based on the attendee row |
|
104 | - * (because we know the attendee was for an event as a specific time, and we know |
|
105 | - * the event's OLD ID...) |
|
106 | - * @global type $wpdb |
|
107 | - * @param array $old_attendee_row |
|
108 | - * @return array row of datetime from DB |
|
109 | - */ |
|
110 | - private function _try_to_find_datetime($old_attendee) |
|
111 | - { |
|
112 | - global $wpdb; |
|
102 | + /** |
|
103 | + * Tries to find the new datetime the Check-in was for, based on the attendee row |
|
104 | + * (because we know the attendee was for an event as a specific time, and we know |
|
105 | + * the event's OLD ID...) |
|
106 | + * @global type $wpdb |
|
107 | + * @param array $old_attendee_row |
|
108 | + * @return array row of datetime from DB |
|
109 | + */ |
|
110 | + private function _try_to_find_datetime($old_attendee) |
|
111 | + { |
|
112 | + global $wpdb; |
|
113 | 113 | |
114 | - $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_attendee['event_id'], $wpdb->posts); |
|
115 | - if (! $new_event_id) { |
|
116 | - $this->add_error( |
|
117 | - sprintf( |
|
118 | - esc_html__( |
|
119 | - /* translators: 1: original event ID, 2: original attendee database row */ |
|
120 | - // @codingStandardsIgnoreStart |
|
121 | - 'Could not find new event ID with old event ID %1$d, on attendee row %2$s; and because of that couldn\'t find the correct datetime for Check-in', |
|
122 | - // @codingStandardsIgnoreEnd |
|
123 | - 'event_espresso' |
|
124 | - ), |
|
125 | - $old_attendee['event_id'], |
|
126 | - $this->_json_encode($old_attendee) |
|
127 | - ) |
|
128 | - ); |
|
129 | - return 0; |
|
130 | - } |
|
131 | - $old_att_start_date = $old_attendee['start_date']; |
|
132 | - $old_att_start_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']); |
|
133 | - $old_att_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_start_date $old_att_start_time:00"); |
|
114 | + $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_attendee['event_id'], $wpdb->posts); |
|
115 | + if (! $new_event_id) { |
|
116 | + $this->add_error( |
|
117 | + sprintf( |
|
118 | + esc_html__( |
|
119 | + /* translators: 1: original event ID, 2: original attendee database row */ |
|
120 | + // @codingStandardsIgnoreStart |
|
121 | + 'Could not find new event ID with old event ID %1$d, on attendee row %2$s; and because of that couldn\'t find the correct datetime for Check-in', |
|
122 | + // @codingStandardsIgnoreEnd |
|
123 | + 'event_espresso' |
|
124 | + ), |
|
125 | + $old_attendee['event_id'], |
|
126 | + $this->_json_encode($old_attendee) |
|
127 | + ) |
|
128 | + ); |
|
129 | + return 0; |
|
130 | + } |
|
131 | + $old_att_start_date = $old_attendee['start_date']; |
|
132 | + $old_att_start_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']); |
|
133 | + $old_att_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_start_date $old_att_start_time:00"); |
|
134 | 134 | |
135 | - $datetime_table = $wpdb->prefix."esp_datetime"; |
|
136 | - // add all conditions to an array from which we can SHIFT conditions off in order to widen our search |
|
137 | - // the most important condition should be last, as it will be array_shift'ed off last |
|
138 | - $conditions = array( |
|
139 | - $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match? |
|
140 | - $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match? |
|
141 | - ); |
|
142 | - // start running queries, widening search each time by removing a condition |
|
143 | - $datetime_found = null; |
|
144 | - do { |
|
145 | - $full_query = "SELECT * FROM $datetime_table WHERE ".implode(" AND ", $conditions)." LIMIT 1"; |
|
146 | - $datetime_found = $wpdb->get_row($full_query, ARRAY_A); |
|
147 | - array_shift($conditions); |
|
148 | - } while (! $datetime_found && $conditions); |
|
149 | - return $datetime_found; |
|
150 | - } |
|
135 | + $datetime_table = $wpdb->prefix."esp_datetime"; |
|
136 | + // add all conditions to an array from which we can SHIFT conditions off in order to widen our search |
|
137 | + // the most important condition should be last, as it will be array_shift'ed off last |
|
138 | + $conditions = array( |
|
139 | + $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match? |
|
140 | + $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match? |
|
141 | + ); |
|
142 | + // start running queries, widening search each time by removing a condition |
|
143 | + $datetime_found = null; |
|
144 | + do { |
|
145 | + $full_query = "SELECT * FROM $datetime_table WHERE ".implode(" AND ", $conditions)." LIMIT 1"; |
|
146 | + $datetime_found = $wpdb->get_row($full_query, ARRAY_A); |
|
147 | + array_shift($conditions); |
|
148 | + } while (! $datetime_found && $conditions); |
|
149 | + return $datetime_found; |
|
150 | + } |
|
151 | 151 | |
152 | - /** |
|
153 | - * Adds a new Check-in/checkout record according for $new_reg_id,$new_datetime_id,$checking_in, and $timestmap |
|
154 | - * @param int $new_reg_id |
|
155 | - * @param int $new_datetime_id |
|
156 | - * @param string $timestamp mysql datetime |
|
157 | - * @return int new Check-in id |
|
158 | - */ |
|
159 | - private function _insert_checkin_record($new_reg_id, $new_datetime) |
|
160 | - { |
|
161 | - global $wpdb; |
|
152 | + /** |
|
153 | + * Adds a new Check-in/checkout record according for $new_reg_id,$new_datetime_id,$checking_in, and $timestmap |
|
154 | + * @param int $new_reg_id |
|
155 | + * @param int $new_datetime_id |
|
156 | + * @param string $timestamp mysql datetime |
|
157 | + * @return int new Check-in id |
|
158 | + */ |
|
159 | + private function _insert_checkin_record($new_reg_id, $new_datetime) |
|
160 | + { |
|
161 | + global $wpdb; |
|
162 | 162 | |
163 | 163 | |
164 | - // ok we can actually do what we set out to do: add a checkin/checkout record |
|
165 | - $cols_n_values = array( |
|
166 | - 'REG_ID'=>$new_reg_id, |
|
167 | - 'DTT_ID'=>$new_datetime['DTT_ID'], |
|
168 | - 'CHK_in'=>true, |
|
169 | - 'CHK_timestamp'=>$new_datetime['DTT_EVT_start'] |
|
170 | - ); |
|
171 | - $datatypes = array( |
|
172 | - '%d',// REG_ID |
|
173 | - '%d',// DTT_ID |
|
174 | - '%d',// CHK_in |
|
175 | - '%s',// CHK_timestamp |
|
176 | - ); |
|
177 | - $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes); |
|
178 | - if (! $success) { |
|
179 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_checkin, $this->_new_table, $cols_n_values, $datatypes)); |
|
180 | - return 0; |
|
181 | - } |
|
182 | - $new_id = $wpdb->insert_id; |
|
183 | - return $new_id; |
|
184 | - } |
|
164 | + // ok we can actually do what we set out to do: add a checkin/checkout record |
|
165 | + $cols_n_values = array( |
|
166 | + 'REG_ID'=>$new_reg_id, |
|
167 | + 'DTT_ID'=>$new_datetime['DTT_ID'], |
|
168 | + 'CHK_in'=>true, |
|
169 | + 'CHK_timestamp'=>$new_datetime['DTT_EVT_start'] |
|
170 | + ); |
|
171 | + $datatypes = array( |
|
172 | + '%d',// REG_ID |
|
173 | + '%d',// DTT_ID |
|
174 | + '%d',// CHK_in |
|
175 | + '%s',// CHK_timestamp |
|
176 | + ); |
|
177 | + $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes); |
|
178 | + if (! $success) { |
|
179 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_checkin, $this->_new_table, $cols_n_values, $datatypes)); |
|
180 | + return 0; |
|
181 | + } |
|
182 | + $new_id = $wpdb->insert_id; |
|
183 | + return $new_id; |
|
184 | + } |
|
185 | 185 | } |
@@ -34,7 +34,7 @@ discard block |
||
34 | 34 | $this->_old_table = $wpdb->prefix."events_attendee"; |
35 | 35 | $this->select_expression = 'att.*, e.event_status'; |
36 | 36 | $this->_extra_where_sql = 'AS att |
37 | - INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id=e.id |
|
37 | + INNER JOIN ' . $wpdb->prefix.'events_detail AS e ON att.event_id=e.id |
|
38 | 38 | WHERE e.event_status!="D"'; |
39 | 39 | $this->_new_table = $wpdb->prefix."esp_checkin"; |
40 | 40 | parent::__construct(); |
@@ -44,10 +44,10 @@ discard block |
||
44 | 44 | global $wpdb; |
45 | 45 | $new_reg_table = $wpdb->prefix."esp_registration"; |
46 | 46 | |
47 | - $num_to_checkin_at_this_time = max(array(intval($old_row['checked_in_quantity']),intval($old_row['checked_in']))) ; |
|
47 | + $num_to_checkin_at_this_time = max(array(intval($old_row['checked_in_quantity']), intval($old_row['checked_in']))); |
|
48 | 48 | |
49 | 49 | $new_registrations_for_attendee = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $new_reg_table); |
50 | - if (! $new_registrations_for_attendee) { |
|
50 | + if ( ! $new_registrations_for_attendee) { |
|
51 | 51 | $new_registrations_for_attendee = array(); |
52 | 52 | } |
53 | 53 | $new_datetime = $this->_try_to_find_datetime($old_row); |
@@ -55,9 +55,9 @@ discard block |
||
55 | 55 | // make sure registrations array is numerically indexed starting at 0 (it probably already is) |
56 | 56 | $new_registrations_for_attendee = array_values($new_registrations_for_attendee); |
57 | 57 | $new_checkin_ids = array(); |
58 | - for ($i = 0; $i<abs($num_to_checkin_at_this_time); $i++) { |
|
59 | - $new_reg_id = $new_registrations_for_attendee[ $i ]; |
|
60 | - if (! $new_reg_id) { |
|
58 | + for ($i = 0; $i < abs($num_to_checkin_at_this_time); $i++) { |
|
59 | + $new_reg_id = $new_registrations_for_attendee[$i]; |
|
60 | + if ( ! $new_reg_id) { |
|
61 | 61 | $this->add_error(sprintf( |
62 | 62 | esc_html__( |
63 | 63 | /* translators: %1$s database row represented in JSON, %2$s number of registrations to check-in |
@@ -81,10 +81,10 @@ discard block |
||
81 | 81 | $new_reg_id |
82 | 82 | ) |
83 | 83 | ); |
84 | - if (! $existing_checkin_record) { |
|
84 | + if ( ! $existing_checkin_record) { |
|
85 | 85 | $new_id = $this->_insert_checkin_record($new_reg_id, $new_datetime); |
86 | 86 | if ($new_id) { |
87 | - $new_checkin_ids[]= $new_id; |
|
87 | + $new_checkin_ids[] = $new_id; |
|
88 | 88 | } |
89 | 89 | } |
90 | 90 | } |
@@ -112,7 +112,7 @@ discard block |
||
112 | 112 | global $wpdb; |
113 | 113 | |
114 | 114 | $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_attendee['event_id'], $wpdb->posts); |
115 | - if (! $new_event_id) { |
|
115 | + if ( ! $new_event_id) { |
|
116 | 116 | $this->add_error( |
117 | 117 | sprintf( |
118 | 118 | esc_html__( |
@@ -136,8 +136,8 @@ discard block |
||
136 | 136 | // add all conditions to an array from which we can SHIFT conditions off in order to widen our search |
137 | 137 | // the most important condition should be last, as it will be array_shift'ed off last |
138 | 138 | $conditions = array( |
139 | - $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match? |
|
140 | - $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match? |
|
139 | + $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime), // times match? |
|
140 | + $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id), // events match? |
|
141 | 141 | ); |
142 | 142 | // start running queries, widening search each time by removing a condition |
143 | 143 | $datetime_found = null; |
@@ -145,7 +145,7 @@ discard block |
||
145 | 145 | $full_query = "SELECT * FROM $datetime_table WHERE ".implode(" AND ", $conditions)." LIMIT 1"; |
146 | 146 | $datetime_found = $wpdb->get_row($full_query, ARRAY_A); |
147 | 147 | array_shift($conditions); |
148 | - } while (! $datetime_found && $conditions); |
|
148 | + }while ( ! $datetime_found && $conditions); |
|
149 | 149 | return $datetime_found; |
150 | 150 | } |
151 | 151 | |
@@ -169,13 +169,13 @@ discard block |
||
169 | 169 | 'CHK_timestamp'=>$new_datetime['DTT_EVT_start'] |
170 | 170 | ); |
171 | 171 | $datatypes = array( |
172 | - '%d',// REG_ID |
|
173 | - '%d',// DTT_ID |
|
174 | - '%d',// CHK_in |
|
175 | - '%s',// CHK_timestamp |
|
172 | + '%d', // REG_ID |
|
173 | + '%d', // DTT_ID |
|
174 | + '%d', // CHK_in |
|
175 | + '%s', // CHK_timestamp |
|
176 | 176 | ); |
177 | 177 | $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes); |
178 | - if (! $success) { |
|
178 | + if ( ! $success) { |
|
179 | 179 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_checkin, $this->_new_table, $cols_n_values, $datatypes)); |
180 | 180 | return 0; |
181 | 181 | } |
@@ -98,6 +98,9 @@ |
||
98 | 98 | $this->get_migration_script()->set_mapping($this->_old_table, $old_event['id'], $this->_new_table, $new_event_question_group_ids); |
99 | 99 | } |
100 | 100 | |
101 | + /** |
|
102 | + * @param boolean $primary |
|
103 | + */ |
|
101 | 104 | private function _insert_event_question_group($old_event, $old_question_group_id, $primary) |
102 | 105 | { |
103 | 106 | global $wpdb; |
@@ -16,15 +16,13 @@ discard block |
||
16 | 16 | 'EQG_primary'=>new EE_Boolean_Field('EQG_primary', __('Flag indicating question is only for primary attendees','event_espresso'), false, false) |
17 | 17 | ) |
18 | 18 | ); |
19 | - |
|
20 | - |
|
21 | 19 | * |
22 | 20 | */ |
23 | 21 | class EE_DMS_4_1_0_event_question_group extends EE_Data_Migration_Script_Stage_Table |
24 | 22 | { |
25 | - private $_new_table; |
|
26 | - public function _migrate_old_row($old_row) |
|
27 | - { |
|
23 | + private $_new_table; |
|
24 | + public function _migrate_old_row($old_row) |
|
25 | + { |
|
28 | 26 | // $txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $this->_new_transaction_table); |
29 | 27 | // if ( ! $txn_id ){ |
30 | 28 | // $this->add_error(sprintf(__("Could not find the transaction for the 3.1 attendee %d from row %s", "event_espresso"),$old_row['id'],$this->_json_encode($old_row))); |
@@ -34,8 +32,8 @@ discard block |
||
34 | 32 | // $new_line_items = $this->_insert_new_line_items($txn,$old_row); |
35 | 33 | // $this->get_migration_script()->set_mapping($this->_old_table,$old_row['id'],$this->_new_line_table,$new_line_items); |
36 | 34 | |
37 | - $this->_insert_new_event_question_groups($old_row); |
|
38 | - } |
|
35 | + $this->_insert_new_event_question_groups($old_row); |
|
36 | + } |
|
39 | 37 | // function _migration_step($num_items=50){ |
40 | 38 | // global $wpdb; |
41 | 39 | // $start_at_record = $this->count_records_migrated(); |
@@ -55,109 +53,109 @@ discard block |
||
55 | 53 | // $count = $wpdb->get_var("SELECT COUNT(id) FROM ".$this->_old_table); |
56 | 54 | // return $count; |
57 | 55 | // } |
58 | - public function __construct() |
|
59 | - { |
|
60 | - global $wpdb; |
|
61 | - $this->_old_table = $wpdb->prefix."events_detail"; |
|
62 | - $this->_extra_where_sql = 'WHERE event_status!="D"'; |
|
63 | - $this->_new_table = $wpdb->prefix."esp_event_question_group"; |
|
64 | - $this->_pretty_name = __("Question Groups in each Event", "event_espresso"); |
|
65 | - parent::__construct(); |
|
66 | - } |
|
56 | + public function __construct() |
|
57 | + { |
|
58 | + global $wpdb; |
|
59 | + $this->_old_table = $wpdb->prefix."events_detail"; |
|
60 | + $this->_extra_where_sql = 'WHERE event_status!="D"'; |
|
61 | + $this->_new_table = $wpdb->prefix."esp_event_question_group"; |
|
62 | + $this->_pretty_name = __("Question Groups in each Event", "event_espresso"); |
|
63 | + parent::__construct(); |
|
64 | + } |
|
67 | 65 | |
68 | - /** |
|
69 | - * Attempts to insert a new question group inthe new format given an old one |
|
70 | - * @global type $wpdb |
|
71 | - * @param array $old_event |
|
72 | - * @return void |
|
73 | - */ |
|
74 | - private function _insert_new_event_question_groups($old_event) |
|
75 | - { |
|
76 | - $new_event_question_group_ids = array(); |
|
77 | - $question_groups_for_primary = maybe_unserialize($old_event['question_groups']); |
|
78 | - if (is_array($question_groups_for_primary)) { |
|
79 | - foreach ($question_groups_for_primary as $old_question_group_id) { |
|
80 | - $new_id = $this->_insert_event_question_group($old_event, $old_question_group_id, true); |
|
81 | - if ($new_id) { |
|
82 | - $new_event_question_group_ids[] = $new_id; |
|
83 | - } |
|
84 | - } |
|
85 | - } |
|
86 | - $event_meta = maybe_unserialize($old_event['event_meta']); |
|
87 | - if (isset($event_meta['add_attendee_question_groups'])) { |
|
88 | - if (is_array($event_meta['add_attendee_question_groups'])) { |
|
89 | - foreach ($event_meta['add_attendee_question_groups'] as $old_question_group_id) { |
|
90 | - $new_id = $this->_insert_event_question_group($old_event, $old_question_group_id, false); |
|
91 | - if ($new_id) { |
|
92 | - $new_event_question_group_ids[] = $new_id; |
|
93 | - } |
|
94 | - } |
|
95 | - } |
|
96 | - } |
|
66 | + /** |
|
67 | + * Attempts to insert a new question group inthe new format given an old one |
|
68 | + * @global type $wpdb |
|
69 | + * @param array $old_event |
|
70 | + * @return void |
|
71 | + */ |
|
72 | + private function _insert_new_event_question_groups($old_event) |
|
73 | + { |
|
74 | + $new_event_question_group_ids = array(); |
|
75 | + $question_groups_for_primary = maybe_unserialize($old_event['question_groups']); |
|
76 | + if (is_array($question_groups_for_primary)) { |
|
77 | + foreach ($question_groups_for_primary as $old_question_group_id) { |
|
78 | + $new_id = $this->_insert_event_question_group($old_event, $old_question_group_id, true); |
|
79 | + if ($new_id) { |
|
80 | + $new_event_question_group_ids[] = $new_id; |
|
81 | + } |
|
82 | + } |
|
83 | + } |
|
84 | + $event_meta = maybe_unserialize($old_event['event_meta']); |
|
85 | + if (isset($event_meta['add_attendee_question_groups'])) { |
|
86 | + if (is_array($event_meta['add_attendee_question_groups'])) { |
|
87 | + foreach ($event_meta['add_attendee_question_groups'] as $old_question_group_id) { |
|
88 | + $new_id = $this->_insert_event_question_group($old_event, $old_question_group_id, false); |
|
89 | + if ($new_id) { |
|
90 | + $new_event_question_group_ids[] = $new_id; |
|
91 | + } |
|
92 | + } |
|
93 | + } |
|
94 | + } |
|
97 | 95 | |
98 | 96 | |
99 | - $this->get_migration_script()->set_mapping($this->_old_table, $old_event['id'], $this->_new_table, $new_event_question_group_ids); |
|
100 | - } |
|
97 | + $this->get_migration_script()->set_mapping($this->_old_table, $old_event['id'], $this->_new_table, $new_event_question_group_ids); |
|
98 | + } |
|
101 | 99 | |
102 | - private function _insert_event_question_group($old_event, $old_question_group_id, $primary) |
|
103 | - { |
|
104 | - global $wpdb; |
|
105 | - $new_question_group_id = $this->get_migration_script()->get_mapping_new_pk( |
|
106 | - $wpdb->prefix . "events_qst_group", |
|
107 | - intval($old_question_group_id), |
|
108 | - $wpdb->prefix . "esp_question_group" |
|
109 | - ); |
|
100 | + private function _insert_event_question_group($old_event, $old_question_group_id, $primary) |
|
101 | + { |
|
102 | + global $wpdb; |
|
103 | + $new_question_group_id = $this->get_migration_script()->get_mapping_new_pk( |
|
104 | + $wpdb->prefix . "events_qst_group", |
|
105 | + intval($old_question_group_id), |
|
106 | + $wpdb->prefix . "esp_question_group" |
|
107 | + ); |
|
110 | 108 | |
111 | - if (! $new_question_group_id) { |
|
112 | - $this->add_error( |
|
113 | - sprintf( |
|
114 | - // translators: %s question ID, %s event ID |
|
115 | - __("Could not find 4.1 question ID for 3.1 question id #%s on event $%s", "event_espresso"), |
|
116 | - $old_question_group_id, |
|
117 | - $old_event['id'] |
|
118 | - ) |
|
119 | - ); |
|
120 | - return 0; |
|
121 | - } |
|
122 | - $new_event_id = $this->get_migration_script()->get_mapping_new_pk( |
|
123 | - $wpdb->prefix . "events_detail", |
|
124 | - intval($old_event['id']), |
|
125 | - $wpdb->posts |
|
126 | - ); |
|
127 | - if (! $new_question_group_id) { |
|
128 | - $this->add_error( |
|
129 | - sprintf( |
|
130 | - // translators: %s event ID |
|
131 | - __("Could not find 4.1 event 3.1 event id #%s", "event_espresso"), |
|
132 | - $old_event['id'] |
|
133 | - ) |
|
134 | - ); |
|
135 | - return 0; |
|
136 | - } |
|
137 | - $cols_n_values = array( |
|
138 | - 'EVT_ID'=>$new_event_id, |
|
139 | - 'QSG_ID'=>$new_question_group_id, |
|
140 | - 'EQG_primary' => $primary |
|
141 | - ); |
|
109 | + if (! $new_question_group_id) { |
|
110 | + $this->add_error( |
|
111 | + sprintf( |
|
112 | + // translators: %s question ID, %s event ID |
|
113 | + __("Could not find 4.1 question ID for 3.1 question id #%s on event $%s", "event_espresso"), |
|
114 | + $old_question_group_id, |
|
115 | + $old_event['id'] |
|
116 | + ) |
|
117 | + ); |
|
118 | + return 0; |
|
119 | + } |
|
120 | + $new_event_id = $this->get_migration_script()->get_mapping_new_pk( |
|
121 | + $wpdb->prefix . "events_detail", |
|
122 | + intval($old_event['id']), |
|
123 | + $wpdb->posts |
|
124 | + ); |
|
125 | + if (! $new_question_group_id) { |
|
126 | + $this->add_error( |
|
127 | + sprintf( |
|
128 | + // translators: %s event ID |
|
129 | + __("Could not find 4.1 event 3.1 event id #%s", "event_espresso"), |
|
130 | + $old_event['id'] |
|
131 | + ) |
|
132 | + ); |
|
133 | + return 0; |
|
134 | + } |
|
135 | + $cols_n_values = array( |
|
136 | + 'EVT_ID'=>$new_event_id, |
|
137 | + 'QSG_ID'=>$new_question_group_id, |
|
138 | + 'EQG_primary' => $primary |
|
139 | + ); |
|
142 | 140 | |
143 | - $datatypes = array( |
|
144 | - '%d',// EVT_ID |
|
145 | - '%d',// QSG_ID |
|
146 | - '%d',// EQG_primary |
|
147 | - ); |
|
148 | - $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes); |
|
149 | - if (! $success) { |
|
150 | - $this->add_error( |
|
151 | - $this->get_migration_script()->_create_error_message_for_db_insertion( |
|
152 | - $this->_old_table, |
|
153 | - $old_event, |
|
154 | - $this->_new_table, |
|
155 | - $cols_n_values, |
|
156 | - $datatypes |
|
157 | - ) |
|
158 | - ); |
|
159 | - return 0; |
|
160 | - } |
|
161 | - return $wpdb->insert_id; |
|
162 | - } |
|
141 | + $datatypes = array( |
|
142 | + '%d',// EVT_ID |
|
143 | + '%d',// QSG_ID |
|
144 | + '%d',// EQG_primary |
|
145 | + ); |
|
146 | + $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes); |
|
147 | + if (! $success) { |
|
148 | + $this->add_error( |
|
149 | + $this->get_migration_script()->_create_error_message_for_db_insertion( |
|
150 | + $this->_old_table, |
|
151 | + $old_event, |
|
152 | + $this->_new_table, |
|
153 | + $cols_n_values, |
|
154 | + $datatypes |
|
155 | + ) |
|
156 | + ); |
|
157 | + return 0; |
|
158 | + } |
|
159 | + return $wpdb->insert_id; |
|
160 | + } |
|
163 | 161 | } |
@@ -103,12 +103,12 @@ discard block |
||
103 | 103 | { |
104 | 104 | global $wpdb; |
105 | 105 | $new_question_group_id = $this->get_migration_script()->get_mapping_new_pk( |
106 | - $wpdb->prefix . "events_qst_group", |
|
106 | + $wpdb->prefix."events_qst_group", |
|
107 | 107 | intval($old_question_group_id), |
108 | - $wpdb->prefix . "esp_question_group" |
|
108 | + $wpdb->prefix."esp_question_group" |
|
109 | 109 | ); |
110 | 110 | |
111 | - if (! $new_question_group_id) { |
|
111 | + if ( ! $new_question_group_id) { |
|
112 | 112 | $this->add_error( |
113 | 113 | sprintf( |
114 | 114 | // translators: %s question ID, %s event ID |
@@ -120,11 +120,11 @@ discard block |
||
120 | 120 | return 0; |
121 | 121 | } |
122 | 122 | $new_event_id = $this->get_migration_script()->get_mapping_new_pk( |
123 | - $wpdb->prefix . "events_detail", |
|
123 | + $wpdb->prefix."events_detail", |
|
124 | 124 | intval($old_event['id']), |
125 | 125 | $wpdb->posts |
126 | 126 | ); |
127 | - if (! $new_question_group_id) { |
|
127 | + if ( ! $new_question_group_id) { |
|
128 | 128 | $this->add_error( |
129 | 129 | sprintf( |
130 | 130 | // translators: %s event ID |
@@ -141,12 +141,12 @@ discard block |
||
141 | 141 | ); |
142 | 142 | |
143 | 143 | $datatypes = array( |
144 | - '%d',// EVT_ID |
|
145 | - '%d',// QSG_ID |
|
146 | - '%d',// EQG_primary |
|
144 | + '%d', // EVT_ID |
|
145 | + '%d', // QSG_ID |
|
146 | + '%d', // EQG_primary |
|
147 | 147 | ); |
148 | 148 | $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes); |
149 | - if (! $success) { |
|
149 | + if ( ! $success) { |
|
150 | 150 | $this->add_error( |
151 | 151 | $this->get_migration_script()->_create_error_message_for_db_insertion( |
152 | 152 | $this->_old_table, |
@@ -426,7 +426,7 @@ discard block |
||
426 | 426 | |
427 | 427 | /** |
428 | 428 | * @param $old_event |
429 | - * @param $new_cpt_id |
|
429 | + * @param integer $new_cpt_id |
|
430 | 430 | * @return int |
431 | 431 | */ |
432 | 432 | private function _insert_event_meta($old_event, $new_cpt_id) |
@@ -693,8 +693,8 @@ discard block |
||
693 | 693 | |
694 | 694 | |
695 | 695 | /** |
696 | - * @param $new_event_id |
|
697 | - * @param $new_venue_id |
|
696 | + * @param integer $new_event_id |
|
697 | + * @param integer $new_venue_id |
|
698 | 698 | * @return int |
699 | 699 | */ |
700 | 700 | private function _insert_new_venue_to_event($new_event_id, $new_venue_id) |
@@ -84,8 +84,6 @@ discard block |
||
84 | 84 | KEY `submitted` (`submitted`), |
85 | 85 | KEY `likes` (`likes`) |
86 | 86 | ) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8$$ |
87 | - |
|
88 | - |
|
89 | 87 | * |
90 | 88 | * 4.1 Event model: |
91 | 89 | * $this->_tables = array( |
@@ -124,7 +122,6 @@ discard block |
||
124 | 122 | 'EVT_donations'=>new EE_Boolean_Field('EVT_donations', __("Accept Donations?", "event_espresso"), false, false) |
125 | 123 | |
126 | 124 | )); |
127 | - |
|
128 | 125 | * |
129 | 126 | * 3.1's start end table |
130 | 127 | * |
@@ -137,8 +134,6 @@ discard block |
||
137 | 134 | PRIMARY KEY (`id`), |
138 | 135 | KEY `event_id` (`event_id`) |
139 | 136 | ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8$$ |
140 | - |
|
141 | - |
|
142 | 137 | * |
143 | 138 | * and 4.1 Datetime model's tables and fields: |
144 | 139 | * $this->_tables = array( |
@@ -160,172 +155,172 @@ discard block |
||
160 | 155 | */ |
161 | 156 | class EE_DMS_4_1_0_events extends EE_Data_Migration_Script_Stage |
162 | 157 | { |
163 | - private $_old_table; |
|
164 | - private $_old_start_end_table; |
|
165 | - private $_new_table; |
|
166 | - private $_new_meta_table; |
|
167 | - private $_new_datetime_table; |
|
168 | - |
|
169 | - |
|
170 | - |
|
171 | - /** |
|
172 | - * Just initializes the status of the migration |
|
173 | - * @throws EE_Error |
|
174 | - */ |
|
175 | - public function __construct() |
|
176 | - { |
|
177 | - global $wpdb; |
|
178 | - $this->_old_table = $wpdb->prefix."events_detail"; |
|
179 | - $this->_old_start_end_table = $wpdb->prefix."events_start_end"; |
|
180 | - $this->_new_table = $wpdb->prefix."posts"; |
|
181 | - $this->_new_meta_table = $wpdb->prefix."esp_event_meta"; |
|
182 | - $this->_new_datetime_table = $wpdb->prefix."esp_datetime"; |
|
183 | - $this->_pretty_name = __("Events", "event_espresso"); |
|
184 | - parent::__construct(); |
|
185 | - } |
|
186 | - |
|
187 | - |
|
188 | - |
|
189 | - /** |
|
190 | - * Counts the records to migrate; the public version may cache it |
|
191 | - * @return int |
|
192 | - */ |
|
193 | - public function _count_records_to_migrate() |
|
194 | - { |
|
195 | - global $wpdb; |
|
196 | - $count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->_old_table . ' WHERE event_status !="D"'); |
|
197 | - return intval($count); |
|
198 | - } |
|
199 | - |
|
200 | - |
|
201 | - |
|
202 | - /** |
|
203 | - * IMPORTANT: if an error is encountered, or everything is finished, this stage should update its status property accordingly. |
|
204 | - * Note: it should not alter the count of items migrated. That is done in the public function that calls this. |
|
205 | - * IMPORTANT: The count of items migrated should ONLY be less than $num_items_to_migrate when it's the last migration step, otherwise it |
|
206 | - * should always return $num_items_to_migrate. (Eg, if we're migrating attendees rows from the database, and $num_items_to_migrate is set to 50, |
|
207 | - * then we SHOULD actually migrate 50 rows,but at very least we MUST report/return 50 items migrated) |
|
208 | - * @param int $num_items_to_migrate |
|
209 | - * @return int number of items ACTUALLY migrated |
|
210 | - */ |
|
211 | - protected function _migration_step($num_items_to_migrate = 50) |
|
212 | - { |
|
213 | - global $wpdb; |
|
214 | - // because the migration of each event can be a LOT more work, make each step smaller |
|
215 | - $num_items_to_migrate = max(1, $num_items_to_migrate/5); |
|
216 | - $events = $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_table WHERE event_status!='D' LIMIT %d,%d", $this->count_records_migrated(), $num_items_to_migrate), ARRAY_A); |
|
217 | - $items_migrated_this_step = 0; |
|
218 | - |
|
219 | - foreach ($events as $event_row) { |
|
220 | - $guid = null; |
|
221 | - // insert new 4.1 Attendee object using $wpdb |
|
222 | - $post_id = $this->_insert_cpt($event_row); |
|
223 | - if ($post_id) { |
|
224 | - $this->get_migration_script()->set_mapping($this->_old_table, $event_row['id'], $this->_new_table, $post_id); |
|
225 | - $meta_id = $this->_insert_event_meta($event_row, $post_id); |
|
226 | - if ($meta_id) { |
|
227 | - $this->get_migration_script()->set_mapping($this->_old_table, $event_row['id'], $this->_new_meta_table, $meta_id); |
|
228 | - } |
|
229 | - $this->_convert_start_end_times($event_row, $post_id); |
|
230 | - $event_meta = maybe_unserialize($event_row['event_meta']); |
|
231 | - $guid = isset($event_meta['event_thumbnail_url']) ? $event_meta['event_thumbnail_url'] : null; |
|
232 | - $this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $post_id, $this); |
|
233 | - |
|
234 | - // maybe create a venue from info on the event? |
|
235 | - $new_venue_id = $this->_maybe_create_venue($event_row); |
|
236 | - if ($new_venue_id) { |
|
237 | - $this->_insert_new_venue_to_event($post_id, $new_venue_id); |
|
238 | - } |
|
239 | - $this->_add_post_metas($event_row, $post_id); |
|
240 | - } |
|
241 | - $items_migrated_this_step++; |
|
242 | - if ($guid) { |
|
243 | - // if we had to check for an image attachment |
|
244 | - // then let's call it a day (avoid timing out, because this took a long time) |
|
245 | - break; |
|
246 | - } |
|
247 | - } |
|
248 | - if ($this->count_records_migrated() + $items_migrated_this_step >= $this->count_records_to_migrate()) { |
|
249 | - $this->set_status(EE_Data_Migration_Manager::status_completed); |
|
250 | - } |
|
251 | - return $items_migrated_this_step; |
|
252 | - } |
|
253 | - |
|
254 | - /** |
|
255 | - * Stores any extra 3.1 "event_meta" column things as post meta |
|
256 | - * @param array $old_event |
|
257 | - * @param int $post_id |
|
258 | - * @return void |
|
259 | - */ |
|
260 | - private function _add_post_metas($old_event, $post_id) |
|
261 | - { |
|
262 | - $event_meta = maybe_unserialize($old_event['event_meta']); |
|
263 | - if (! $event_meta || ! is_array($event_meta)) { |
|
264 | - return; |
|
265 | - } |
|
266 | - unset($event_meta['date_submitted']);// factored into CPT |
|
267 | - unset($event_meta['additional_attendee_reg_info']);// factored into event meta table |
|
268 | - unset($event_meta['default_payment_status']);// dido |
|
269 | - unset($event_meta['event_thumbnail_url']);// used to find post featured image |
|
270 | - foreach ($event_meta as $meta_key => $meta_value) { |
|
271 | - if ($meta_key) {// if the meta key is just an empty string, ignore it |
|
272 | - $success = add_post_meta($post_id, $meta_key, $meta_value, true); |
|
273 | - if (! $success) { |
|
274 | - $this->add_error(sprintf(__("Could not add post meta for CPT with ID #%d. Meta key: '%s',meta value:'%d' for 3.1 event: %s", "event_espresso"), $post_id, $meta_key, $meta_value, implode(",", $old_event))); |
|
275 | - } |
|
276 | - } |
|
277 | - } |
|
278 | - if ($old_event['alt_email']) { |
|
279 | - add_post_meta($post_id, 'alt_email', $old_event['alt_email']); |
|
280 | - } |
|
281 | - if ($old_event['recurrence_id']) { |
|
282 | - add_post_meta($post_id, 'recurrence_id', $old_event['recurrence_id']); |
|
283 | - } |
|
284 | - } |
|
285 | - |
|
286 | - |
|
287 | - |
|
288 | - /** |
|
289 | - * Finds a unique slug for this event, given its name (we could have simply used |
|
290 | - * the old unique_identifier column, but it added a long string of seemingly random characters onto the end |
|
291 | - * and really wasn't that pretty for a slug, so we decided we'd make our own slug again) |
|
292 | - * @param string $event_name (the name of the event for reading by humans) |
|
293 | - * @param string $old_identifier the old EE3 identifier (a long unique string) |
|
294 | - * @param string $new_post_status a post status |
|
295 | - * @return string |
|
296 | - */ |
|
297 | - private function _find_unique_slug($event_name, $old_identifier = '', $new_post_status = 'publish') |
|
298 | - { |
|
299 | - $count = 0; |
|
300 | - $original_name = $event_name ? sanitize_title($event_name) : $old_identifier; |
|
301 | - return wp_unique_post_slug($original_name, 0, $new_post_status, 'espresso_events', 0); |
|
302 | - } |
|
303 | - |
|
304 | - /** |
|
305 | - * returns whether or not there is a post that has this same slug (post_title) |
|
306 | - * @global wpdb $wpdb |
|
307 | - * @param string $slug |
|
308 | - * @return boolean |
|
309 | - */ |
|
310 | - private function _other_post_exists_with_that_slug($slug) |
|
311 | - { |
|
312 | - global $wpdb; |
|
313 | - $query = $wpdb->prepare("SELECT COUNT(ID) FROM {$this->_new_table} WHERE event_status != 'D' AND post_name = %s", $slug); |
|
314 | - $count = $wpdb->get_var($query); |
|
315 | - return (boolean) intval($count); |
|
316 | - } |
|
317 | - |
|
318 | - |
|
319 | - |
|
320 | - /** |
|
321 | - * @param $old_event |
|
322 | - * @return int |
|
323 | - */ |
|
324 | - private function _insert_cpt($old_event) |
|
325 | - { |
|
326 | - global $wpdb; |
|
327 | - // convert 3.1 event status to 4.1 CPT status |
|
328 | - // for reference, 3.1 event stati available for setting are: |
|
158 | + private $_old_table; |
|
159 | + private $_old_start_end_table; |
|
160 | + private $_new_table; |
|
161 | + private $_new_meta_table; |
|
162 | + private $_new_datetime_table; |
|
163 | + |
|
164 | + |
|
165 | + |
|
166 | + /** |
|
167 | + * Just initializes the status of the migration |
|
168 | + * @throws EE_Error |
|
169 | + */ |
|
170 | + public function __construct() |
|
171 | + { |
|
172 | + global $wpdb; |
|
173 | + $this->_old_table = $wpdb->prefix."events_detail"; |
|
174 | + $this->_old_start_end_table = $wpdb->prefix."events_start_end"; |
|
175 | + $this->_new_table = $wpdb->prefix."posts"; |
|
176 | + $this->_new_meta_table = $wpdb->prefix."esp_event_meta"; |
|
177 | + $this->_new_datetime_table = $wpdb->prefix."esp_datetime"; |
|
178 | + $this->_pretty_name = __("Events", "event_espresso"); |
|
179 | + parent::__construct(); |
|
180 | + } |
|
181 | + |
|
182 | + |
|
183 | + |
|
184 | + /** |
|
185 | + * Counts the records to migrate; the public version may cache it |
|
186 | + * @return int |
|
187 | + */ |
|
188 | + public function _count_records_to_migrate() |
|
189 | + { |
|
190 | + global $wpdb; |
|
191 | + $count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->_old_table . ' WHERE event_status !="D"'); |
|
192 | + return intval($count); |
|
193 | + } |
|
194 | + |
|
195 | + |
|
196 | + |
|
197 | + /** |
|
198 | + * IMPORTANT: if an error is encountered, or everything is finished, this stage should update its status property accordingly. |
|
199 | + * Note: it should not alter the count of items migrated. That is done in the public function that calls this. |
|
200 | + * IMPORTANT: The count of items migrated should ONLY be less than $num_items_to_migrate when it's the last migration step, otherwise it |
|
201 | + * should always return $num_items_to_migrate. (Eg, if we're migrating attendees rows from the database, and $num_items_to_migrate is set to 50, |
|
202 | + * then we SHOULD actually migrate 50 rows,but at very least we MUST report/return 50 items migrated) |
|
203 | + * @param int $num_items_to_migrate |
|
204 | + * @return int number of items ACTUALLY migrated |
|
205 | + */ |
|
206 | + protected function _migration_step($num_items_to_migrate = 50) |
|
207 | + { |
|
208 | + global $wpdb; |
|
209 | + // because the migration of each event can be a LOT more work, make each step smaller |
|
210 | + $num_items_to_migrate = max(1, $num_items_to_migrate/5); |
|
211 | + $events = $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_table WHERE event_status!='D' LIMIT %d,%d", $this->count_records_migrated(), $num_items_to_migrate), ARRAY_A); |
|
212 | + $items_migrated_this_step = 0; |
|
213 | + |
|
214 | + foreach ($events as $event_row) { |
|
215 | + $guid = null; |
|
216 | + // insert new 4.1 Attendee object using $wpdb |
|
217 | + $post_id = $this->_insert_cpt($event_row); |
|
218 | + if ($post_id) { |
|
219 | + $this->get_migration_script()->set_mapping($this->_old_table, $event_row['id'], $this->_new_table, $post_id); |
|
220 | + $meta_id = $this->_insert_event_meta($event_row, $post_id); |
|
221 | + if ($meta_id) { |
|
222 | + $this->get_migration_script()->set_mapping($this->_old_table, $event_row['id'], $this->_new_meta_table, $meta_id); |
|
223 | + } |
|
224 | + $this->_convert_start_end_times($event_row, $post_id); |
|
225 | + $event_meta = maybe_unserialize($event_row['event_meta']); |
|
226 | + $guid = isset($event_meta['event_thumbnail_url']) ? $event_meta['event_thumbnail_url'] : null; |
|
227 | + $this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $post_id, $this); |
|
228 | + |
|
229 | + // maybe create a venue from info on the event? |
|
230 | + $new_venue_id = $this->_maybe_create_venue($event_row); |
|
231 | + if ($new_venue_id) { |
|
232 | + $this->_insert_new_venue_to_event($post_id, $new_venue_id); |
|
233 | + } |
|
234 | + $this->_add_post_metas($event_row, $post_id); |
|
235 | + } |
|
236 | + $items_migrated_this_step++; |
|
237 | + if ($guid) { |
|
238 | + // if we had to check for an image attachment |
|
239 | + // then let's call it a day (avoid timing out, because this took a long time) |
|
240 | + break; |
|
241 | + } |
|
242 | + } |
|
243 | + if ($this->count_records_migrated() + $items_migrated_this_step >= $this->count_records_to_migrate()) { |
|
244 | + $this->set_status(EE_Data_Migration_Manager::status_completed); |
|
245 | + } |
|
246 | + return $items_migrated_this_step; |
|
247 | + } |
|
248 | + |
|
249 | + /** |
|
250 | + * Stores any extra 3.1 "event_meta" column things as post meta |
|
251 | + * @param array $old_event |
|
252 | + * @param int $post_id |
|
253 | + * @return void |
|
254 | + */ |
|
255 | + private function _add_post_metas($old_event, $post_id) |
|
256 | + { |
|
257 | + $event_meta = maybe_unserialize($old_event['event_meta']); |
|
258 | + if (! $event_meta || ! is_array($event_meta)) { |
|
259 | + return; |
|
260 | + } |
|
261 | + unset($event_meta['date_submitted']);// factored into CPT |
|
262 | + unset($event_meta['additional_attendee_reg_info']);// factored into event meta table |
|
263 | + unset($event_meta['default_payment_status']);// dido |
|
264 | + unset($event_meta['event_thumbnail_url']);// used to find post featured image |
|
265 | + foreach ($event_meta as $meta_key => $meta_value) { |
|
266 | + if ($meta_key) {// if the meta key is just an empty string, ignore it |
|
267 | + $success = add_post_meta($post_id, $meta_key, $meta_value, true); |
|
268 | + if (! $success) { |
|
269 | + $this->add_error(sprintf(__("Could not add post meta for CPT with ID #%d. Meta key: '%s',meta value:'%d' for 3.1 event: %s", "event_espresso"), $post_id, $meta_key, $meta_value, implode(",", $old_event))); |
|
270 | + } |
|
271 | + } |
|
272 | + } |
|
273 | + if ($old_event['alt_email']) { |
|
274 | + add_post_meta($post_id, 'alt_email', $old_event['alt_email']); |
|
275 | + } |
|
276 | + if ($old_event['recurrence_id']) { |
|
277 | + add_post_meta($post_id, 'recurrence_id', $old_event['recurrence_id']); |
|
278 | + } |
|
279 | + } |
|
280 | + |
|
281 | + |
|
282 | + |
|
283 | + /** |
|
284 | + * Finds a unique slug for this event, given its name (we could have simply used |
|
285 | + * the old unique_identifier column, but it added a long string of seemingly random characters onto the end |
|
286 | + * and really wasn't that pretty for a slug, so we decided we'd make our own slug again) |
|
287 | + * @param string $event_name (the name of the event for reading by humans) |
|
288 | + * @param string $old_identifier the old EE3 identifier (a long unique string) |
|
289 | + * @param string $new_post_status a post status |
|
290 | + * @return string |
|
291 | + */ |
|
292 | + private function _find_unique_slug($event_name, $old_identifier = '', $new_post_status = 'publish') |
|
293 | + { |
|
294 | + $count = 0; |
|
295 | + $original_name = $event_name ? sanitize_title($event_name) : $old_identifier; |
|
296 | + return wp_unique_post_slug($original_name, 0, $new_post_status, 'espresso_events', 0); |
|
297 | + } |
|
298 | + |
|
299 | + /** |
|
300 | + * returns whether or not there is a post that has this same slug (post_title) |
|
301 | + * @global wpdb $wpdb |
|
302 | + * @param string $slug |
|
303 | + * @return boolean |
|
304 | + */ |
|
305 | + private function _other_post_exists_with_that_slug($slug) |
|
306 | + { |
|
307 | + global $wpdb; |
|
308 | + $query = $wpdb->prepare("SELECT COUNT(ID) FROM {$this->_new_table} WHERE event_status != 'D' AND post_name = %s", $slug); |
|
309 | + $count = $wpdb->get_var($query); |
|
310 | + return (boolean) intval($count); |
|
311 | + } |
|
312 | + |
|
313 | + |
|
314 | + |
|
315 | + /** |
|
316 | + * @param $old_event |
|
317 | + * @return int |
|
318 | + */ |
|
319 | + private function _insert_cpt($old_event) |
|
320 | + { |
|
321 | + global $wpdb; |
|
322 | + // convert 3.1 event status to 4.1 CPT status |
|
323 | + // for reference, 3.1 event stati available for setting are: |
|
329 | 324 | // $status = array(array('id' => 'A', 'text' => __('Public', 'event_espresso')), array('id' => 'S', 'text' => __('Waitlist', 'event_espresso')), array('id' => 'O', 'text' => __('Ongoing', 'event_espresso')), array('id' => 'R', 'text' => __('Draft', 'event_espresso')), array('id' => 'D', 'text' => __('Deleted', 'event_espresso'))); |
330 | 325 | // and the json api uses the following to convert from 3.1 to 4.0 |
331 | 326 | // 'S'=>'secondary/waitlist', |
@@ -339,486 +334,486 @@ discard block |
||
339 | 334 | // 4.1 Event Post stati are the normal post statis |
340 | 335 | // (publish,future,draft,pending,private,trash,auto-draft,inherit) |
341 | 336 | // and 3 custom ones: cancelled,postponed,sold_out |
342 | - $status_conversions = array( |
|
343 | - 'R'=>'draft', |
|
344 | - 'X'=>'draft',// 4.1 doesn't have a "not approved for publishing" status. this is what posts are set to that aren't approved |
|
345 | - 'P'=>'pending', |
|
346 | - 'IA'=>'draft',// draft and in the past |
|
337 | + $status_conversions = array( |
|
338 | + 'R'=>'draft', |
|
339 | + 'X'=>'draft',// 4.1 doesn't have a "not approved for publishing" status. this is what posts are set to that aren't approved |
|
340 | + 'P'=>'pending', |
|
341 | + 'IA'=>'draft',// draft and in the past |
|
347 | 342 | // IA=inactive in 3.1: events were switched to this when they expired. in 4.1 that's just calculated |
348 | - 'O'=>'publish',// @todo: will be an event type later; if this is the status, set the end date WAAAY later; and add term for 'ongoing' |
|
349 | - 'A'=>'publish', |
|
350 | - 'S'=>'draft',// @todo: is it ok to just mark secondary/waitlist events as DRAFTS? |
|
351 | - 'D'=>'trash', |
|
352 | - ); |
|
353 | - $post_status = $status_conversions[ $old_event['event_status'] ]; |
|
354 | - // check if we've sold out |
|
355 | - if (intval($old_event['reg_limit']) <= self::count_registrations($old_event['id'])) { |
|
356 | - $post_status = 'sold_out'; |
|
357 | - } |
|
343 | + 'O'=>'publish',// @todo: will be an event type later; if this is the status, set the end date WAAAY later; and add term for 'ongoing' |
|
344 | + 'A'=>'publish', |
|
345 | + 'S'=>'draft',// @todo: is it ok to just mark secondary/waitlist events as DRAFTS? |
|
346 | + 'D'=>'trash', |
|
347 | + ); |
|
348 | + $post_status = $status_conversions[ $old_event['event_status'] ]; |
|
349 | + // check if we've sold out |
|
350 | + if (intval($old_event['reg_limit']) <= self::count_registrations($old_event['id'])) { |
|
351 | + $post_status = 'sold_out'; |
|
352 | + } |
|
358 | 353 | // FYI postponed and cancelled don't exist in 3.1 |
359 | - $cols_n_values = array( |
|
360 | - 'post_title'=>stripslashes($old_event['event_name']),// EVT_name |
|
361 | - 'post_content'=>stripslashes($old_event['event_desc']),// EVT_desc |
|
362 | - 'post_name'=>$this->_find_unique_slug($old_event['event_name'], $old_event['event_identifier'], $post_status),// EVT_slug |
|
363 | - 'post_date'=>$old_event['submitted'],// EVT_created NOT |
|
364 | - 'post_date_gmt'=>get_gmt_from_date($old_event['submitted']), |
|
365 | - 'post_excerpt'=>'',// EVT_short_desc |
|
366 | - 'post_modified'=>$old_event['submitted'],// EVT_modified |
|
367 | - 'post_modified_gmt'=>get_gmt_from_date($old_event['submitted']), |
|
368 | - 'post_author'=>$old_event['wp_user'],// EVT_wp_user |
|
369 | - 'post_parent'=>0,// parent maybe get this from some REM field? |
|
370 | - 'menu_order'=>0,// EVT_order |
|
371 | - 'post_type'=>'espresso_events',// post_type |
|
372 | - 'post_status'=>$post_status,// status |
|
373 | - ); |
|
374 | - $cols_n_values_with_no_invalid_text = array(); |
|
375 | - foreach ($cols_n_values as $col => $value) { |
|
376 | - $value_sans_invalid_chars = $wpdb->strip_invalid_text_for_column($this->_new_table, $col, $value); |
|
377 | - if (! is_wp_error($value_sans_invalid_chars)) { |
|
378 | - $cols_n_values_with_no_invalid_text[ $col ] = $value_sans_invalid_chars; |
|
379 | - } else { |
|
380 | - // otherwise leave it as-is. It will blow everything up and stop the migration |
|
381 | - $cols_n_values_with_no_invalid_text[ $col ] = $value; |
|
382 | - } |
|
383 | - } |
|
384 | - $cols_n_values = $cols_n_values_with_no_invalid_text; |
|
385 | - $datatypes = array( |
|
386 | - '%s',// EVT_name |
|
387 | - '%s',// EVT_desc |
|
388 | - '%s',// EVT_slug |
|
389 | - '%s',// EVT_created |
|
390 | - '%s', |
|
391 | - '%s',// EVT_short_desc |
|
392 | - '%s',// EVT_modified |
|
393 | - '%s', |
|
394 | - '%s',// EVT_wp_user |
|
395 | - '%d',// post_parent |
|
396 | - '%d',// EVT_order |
|
397 | - '%s',// post_type |
|
398 | - '%s',// status |
|
399 | - ); |
|
400 | - $success = $wpdb->insert( |
|
401 | - $this->_new_table, |
|
402 | - $cols_n_values, |
|
403 | - $datatypes |
|
404 | - ); |
|
405 | - if (! $success) { |
|
406 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_table, $cols_n_values, $datatypes)); |
|
407 | - return 0; |
|
408 | - } |
|
409 | - return $wpdb->insert_id; |
|
410 | - } |
|
411 | - |
|
412 | - /** |
|
413 | - * Counts all the registrations for the event in the 3.1 DB. (takes into account attendee rows which represent various registrations) |
|
414 | - * @global wpdb $wpdb |
|
415 | - * @param int $event_id |
|
416 | - * @return int |
|
417 | - */ |
|
418 | - public static function count_registrations($event_id) |
|
419 | - { |
|
420 | - global $wpdb; |
|
421 | - $count = $wpdb->get_var($wpdb->prepare("SELECT sum(quantity) FROM {$wpdb->prefix}events_attendee WHERE event_id=%d", $event_id)); |
|
422 | - return intval($count); |
|
423 | - } |
|
424 | - |
|
425 | - |
|
426 | - |
|
427 | - /** |
|
428 | - * @param $old_event |
|
429 | - * @param $new_cpt_id |
|
430 | - * @return int |
|
431 | - */ |
|
432 | - private function _insert_event_meta($old_event, $new_cpt_id) |
|
433 | - { |
|
434 | - global $wpdb; |
|
435 | - $event_meta = maybe_unserialize($old_event['event_meta']); |
|
354 | + $cols_n_values = array( |
|
355 | + 'post_title'=>stripslashes($old_event['event_name']),// EVT_name |
|
356 | + 'post_content'=>stripslashes($old_event['event_desc']),// EVT_desc |
|
357 | + 'post_name'=>$this->_find_unique_slug($old_event['event_name'], $old_event['event_identifier'], $post_status),// EVT_slug |
|
358 | + 'post_date'=>$old_event['submitted'],// EVT_created NOT |
|
359 | + 'post_date_gmt'=>get_gmt_from_date($old_event['submitted']), |
|
360 | + 'post_excerpt'=>'',// EVT_short_desc |
|
361 | + 'post_modified'=>$old_event['submitted'],// EVT_modified |
|
362 | + 'post_modified_gmt'=>get_gmt_from_date($old_event['submitted']), |
|
363 | + 'post_author'=>$old_event['wp_user'],// EVT_wp_user |
|
364 | + 'post_parent'=>0,// parent maybe get this from some REM field? |
|
365 | + 'menu_order'=>0,// EVT_order |
|
366 | + 'post_type'=>'espresso_events',// post_type |
|
367 | + 'post_status'=>$post_status,// status |
|
368 | + ); |
|
369 | + $cols_n_values_with_no_invalid_text = array(); |
|
370 | + foreach ($cols_n_values as $col => $value) { |
|
371 | + $value_sans_invalid_chars = $wpdb->strip_invalid_text_for_column($this->_new_table, $col, $value); |
|
372 | + if (! is_wp_error($value_sans_invalid_chars)) { |
|
373 | + $cols_n_values_with_no_invalid_text[ $col ] = $value_sans_invalid_chars; |
|
374 | + } else { |
|
375 | + // otherwise leave it as-is. It will blow everything up and stop the migration |
|
376 | + $cols_n_values_with_no_invalid_text[ $col ] = $value; |
|
377 | + } |
|
378 | + } |
|
379 | + $cols_n_values = $cols_n_values_with_no_invalid_text; |
|
380 | + $datatypes = array( |
|
381 | + '%s',// EVT_name |
|
382 | + '%s',// EVT_desc |
|
383 | + '%s',// EVT_slug |
|
384 | + '%s',// EVT_created |
|
385 | + '%s', |
|
386 | + '%s',// EVT_short_desc |
|
387 | + '%s',// EVT_modified |
|
388 | + '%s', |
|
389 | + '%s',// EVT_wp_user |
|
390 | + '%d',// post_parent |
|
391 | + '%d',// EVT_order |
|
392 | + '%s',// post_type |
|
393 | + '%s',// status |
|
394 | + ); |
|
395 | + $success = $wpdb->insert( |
|
396 | + $this->_new_table, |
|
397 | + $cols_n_values, |
|
398 | + $datatypes |
|
399 | + ); |
|
400 | + if (! $success) { |
|
401 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_table, $cols_n_values, $datatypes)); |
|
402 | + return 0; |
|
403 | + } |
|
404 | + return $wpdb->insert_id; |
|
405 | + } |
|
406 | + |
|
407 | + /** |
|
408 | + * Counts all the registrations for the event in the 3.1 DB. (takes into account attendee rows which represent various registrations) |
|
409 | + * @global wpdb $wpdb |
|
410 | + * @param int $event_id |
|
411 | + * @return int |
|
412 | + */ |
|
413 | + public static function count_registrations($event_id) |
|
414 | + { |
|
415 | + global $wpdb; |
|
416 | + $count = $wpdb->get_var($wpdb->prepare("SELECT sum(quantity) FROM {$wpdb->prefix}events_attendee WHERE event_id=%d", $event_id)); |
|
417 | + return intval($count); |
|
418 | + } |
|
419 | + |
|
420 | + |
|
421 | + |
|
422 | + /** |
|
423 | + * @param $old_event |
|
424 | + * @param $new_cpt_id |
|
425 | + * @return int |
|
426 | + */ |
|
427 | + private function _insert_event_meta($old_event, $new_cpt_id) |
|
428 | + { |
|
429 | + global $wpdb; |
|
430 | + $event_meta = maybe_unserialize($old_event['event_meta']); |
|
436 | 431 | // for reference, 3.1 'default_payment_status' are: $default_payment_status = array( |
437 | 432 | // array('id' => "", 'text' => 'No Change'), |
438 | 433 | // array('id' => 'Incomplete', 'text' => 'Incomplete'), |
439 | 434 | // array('id' => 'Pending', 'text' => 'Pending'), |
440 | 435 | // //array('id' => 'Completed', 'text' => 'Completed') |
441 | 436 | // ); |
442 | - $default_reg_status = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID(isset($event_meta['default_payment_status']) ? $event_meta['default_payment_status'] : '', intval($old_event['require_pre_approval'])); |
|
443 | - $cols_n_values = array( |
|
444 | - 'EVT_ID'=>$new_cpt_id,// EVT_ID_fk |
|
445 | - 'EVT_display_desc'=> 'Y' == $old_event['display_desc'], |
|
446 | - 'EVT_display_ticket_selector'=> 'Y'== $old_event['display_reg_form'], |
|
447 | - 'EVT_visible_on'=> $this->get_migration_script()->convert_date_string_to_utc($this, $old_event, current_time('mysql'), $old_event['timezone_string']),// don't use the old 'visible_on', as it wasn't ever used |
|
448 | - 'EVT_additional_limit'=> $old_event['allow_multiple'] == 'N' ? 1 : $old_event['additional_limit'], |
|
449 | - 'EVT_default_registration_status' => $default_reg_status, |
|
450 | - 'EVT_member_only'=>$old_event['member_only'], |
|
451 | - 'EVT_phone'=> $old_event['phone'], |
|
452 | - 'EVT_allow_overflow' => 'Y' == $old_event['allow_overflow'], |
|
453 | - 'EVT_timezone_string'=> $old_event['timezone_string'], |
|
454 | - 'EVT_external_URL'=>$old_event['externalURL'], |
|
455 | - 'EVT_donations'=>false// doesnt exist in 3.1 |
|
456 | - |
|
457 | - ); |
|
458 | - $datatypes = array( |
|
459 | - '%s',// EVT_ID |
|
460 | - '%d',// EVT_display_desc |
|
461 | - '%d',// EVT_display_ticket_selector |
|
462 | - '%s',// EVT_visible_on |
|
463 | - '%d',// EVT_additional_limit |
|
464 | - '%s',// EVT_default_registration_status |
|
465 | - '%d',// EVT_member_only |
|
466 | - '%s',// EVT_phone |
|
467 | - '%d',// EVT_allow_overflow |
|
468 | - '%s',// EVT_timezone_string |
|
469 | - '%s',// EVT_external_URL |
|
470 | - '%d',// EVT_donations |
|
471 | - ); |
|
472 | - $success = $wpdb->insert( |
|
473 | - $this->_new_meta_table, |
|
474 | - $cols_n_values, |
|
475 | - $datatypes |
|
476 | - ); |
|
477 | - if (! $success) { |
|
478 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $cols_n_values, $datatypes)); |
|
479 | - return 0; |
|
480 | - } |
|
481 | - return $wpdb->insert_id; |
|
482 | - } |
|
483 | - |
|
484 | - |
|
485 | - |
|
486 | - /** |
|
487 | - * @param $old_event |
|
488 | - * @return int |
|
489 | - */ |
|
490 | - private function _maybe_create_venue($old_event) |
|
491 | - { |
|
492 | - if ($old_event['address'] || |
|
493 | - $old_event['address2'] || |
|
494 | - $old_event['city'] || |
|
495 | - $old_event['state'] || |
|
496 | - $old_event['zip'] || |
|
497 | - $old_event['venue_title'] || |
|
498 | - $old_event['venue_url'] || |
|
499 | - $old_event['venue_image'] || |
|
500 | - $old_event['venue_phone'] || |
|
501 | - $old_event['virtual_url'] || |
|
502 | - $old_event['virtual_phone'] |
|
503 | - ) { |
|
504 | - $old_id = $this->_duplicate_venue_exists($old_event); |
|
505 | - if ($old_id) { |
|
506 | - return $old_id; |
|
507 | - } |
|
508 | - $new_id = $this->_insert_venue_into_posts($old_event); |
|
509 | - if ($new_id) { |
|
510 | - $this->_insert_venue_into_meta_table($new_id, $old_event); |
|
511 | - $guid = isset($old_event['venue_image']) ? $old_event['venue_image'] : null; |
|
512 | - $this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $new_id, $this); |
|
513 | - } |
|
514 | - // we don't bother recording the conversion from old events to venues as that |
|
515 | - // will complicate finding the conversion from old venues to new events |
|
516 | - return $new_id; |
|
517 | - } else { |
|
518 | - return 0; |
|
519 | - } |
|
520 | - } |
|
521 | - |
|
522 | - /** |
|
523 | - * Assuming there is venue data on this event, check if there is a duplicate venue already in the system for it. |
|
524 | - * If so, return it. Otherwise return NULL. |
|
525 | - * @param array $old_event |
|
526 | - * @return int duplicate venue id |
|
527 | - */ |
|
528 | - private function _duplicate_venue_exists($old_event) |
|
529 | - { |
|
530 | - global $wpdb; |
|
531 | - $conditions = array( |
|
532 | - 'VNU_address' => $old_event ['address'], |
|
533 | - 'VNU_address2' => $old_event['address2'], |
|
534 | - 'VNU_city' => $old_event['city'], |
|
535 | - 'VNU_zip' => $old_event['zip'], |
|
536 | - 'post_title'=> $this->_get_venue_title_for_event($old_event), |
|
537 | - 'VNU_phone'=>$old_event['venue_phone'],// VNU_phone |
|
538 | - 'VNU_url'=>$old_event['venue_url'],// VNU_url |
|
539 | - 'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone |
|
540 | - 'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url |
|
541 | - ); |
|
542 | - $sql_conditions = array(); |
|
543 | - foreach ($conditions as $column => $value) { |
|
544 | - $sql_conditions [] = $wpdb->prepare("$column = %s", $value); |
|
545 | - } |
|
546 | - $query = "SELECT VNU_ID |
|
437 | + $default_reg_status = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID(isset($event_meta['default_payment_status']) ? $event_meta['default_payment_status'] : '', intval($old_event['require_pre_approval'])); |
|
438 | + $cols_n_values = array( |
|
439 | + 'EVT_ID'=>$new_cpt_id,// EVT_ID_fk |
|
440 | + 'EVT_display_desc'=> 'Y' == $old_event['display_desc'], |
|
441 | + 'EVT_display_ticket_selector'=> 'Y'== $old_event['display_reg_form'], |
|
442 | + 'EVT_visible_on'=> $this->get_migration_script()->convert_date_string_to_utc($this, $old_event, current_time('mysql'), $old_event['timezone_string']),// don't use the old 'visible_on', as it wasn't ever used |
|
443 | + 'EVT_additional_limit'=> $old_event['allow_multiple'] == 'N' ? 1 : $old_event['additional_limit'], |
|
444 | + 'EVT_default_registration_status' => $default_reg_status, |
|
445 | + 'EVT_member_only'=>$old_event['member_only'], |
|
446 | + 'EVT_phone'=> $old_event['phone'], |
|
447 | + 'EVT_allow_overflow' => 'Y' == $old_event['allow_overflow'], |
|
448 | + 'EVT_timezone_string'=> $old_event['timezone_string'], |
|
449 | + 'EVT_external_URL'=>$old_event['externalURL'], |
|
450 | + 'EVT_donations'=>false// doesnt exist in 3.1 |
|
451 | + |
|
452 | + ); |
|
453 | + $datatypes = array( |
|
454 | + '%s',// EVT_ID |
|
455 | + '%d',// EVT_display_desc |
|
456 | + '%d',// EVT_display_ticket_selector |
|
457 | + '%s',// EVT_visible_on |
|
458 | + '%d',// EVT_additional_limit |
|
459 | + '%s',// EVT_default_registration_status |
|
460 | + '%d',// EVT_member_only |
|
461 | + '%s',// EVT_phone |
|
462 | + '%d',// EVT_allow_overflow |
|
463 | + '%s',// EVT_timezone_string |
|
464 | + '%s',// EVT_external_URL |
|
465 | + '%d',// EVT_donations |
|
466 | + ); |
|
467 | + $success = $wpdb->insert( |
|
468 | + $this->_new_meta_table, |
|
469 | + $cols_n_values, |
|
470 | + $datatypes |
|
471 | + ); |
|
472 | + if (! $success) { |
|
473 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $cols_n_values, $datatypes)); |
|
474 | + return 0; |
|
475 | + } |
|
476 | + return $wpdb->insert_id; |
|
477 | + } |
|
478 | + |
|
479 | + |
|
480 | + |
|
481 | + /** |
|
482 | + * @param $old_event |
|
483 | + * @return int |
|
484 | + */ |
|
485 | + private function _maybe_create_venue($old_event) |
|
486 | + { |
|
487 | + if ($old_event['address'] || |
|
488 | + $old_event['address2'] || |
|
489 | + $old_event['city'] || |
|
490 | + $old_event['state'] || |
|
491 | + $old_event['zip'] || |
|
492 | + $old_event['venue_title'] || |
|
493 | + $old_event['venue_url'] || |
|
494 | + $old_event['venue_image'] || |
|
495 | + $old_event['venue_phone'] || |
|
496 | + $old_event['virtual_url'] || |
|
497 | + $old_event['virtual_phone'] |
|
498 | + ) { |
|
499 | + $old_id = $this->_duplicate_venue_exists($old_event); |
|
500 | + if ($old_id) { |
|
501 | + return $old_id; |
|
502 | + } |
|
503 | + $new_id = $this->_insert_venue_into_posts($old_event); |
|
504 | + if ($new_id) { |
|
505 | + $this->_insert_venue_into_meta_table($new_id, $old_event); |
|
506 | + $guid = isset($old_event['venue_image']) ? $old_event['venue_image'] : null; |
|
507 | + $this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $new_id, $this); |
|
508 | + } |
|
509 | + // we don't bother recording the conversion from old events to venues as that |
|
510 | + // will complicate finding the conversion from old venues to new events |
|
511 | + return $new_id; |
|
512 | + } else { |
|
513 | + return 0; |
|
514 | + } |
|
515 | + } |
|
516 | + |
|
517 | + /** |
|
518 | + * Assuming there is venue data on this event, check if there is a duplicate venue already in the system for it. |
|
519 | + * If so, return it. Otherwise return NULL. |
|
520 | + * @param array $old_event |
|
521 | + * @return int duplicate venue id |
|
522 | + */ |
|
523 | + private function _duplicate_venue_exists($old_event) |
|
524 | + { |
|
525 | + global $wpdb; |
|
526 | + $conditions = array( |
|
527 | + 'VNU_address' => $old_event ['address'], |
|
528 | + 'VNU_address2' => $old_event['address2'], |
|
529 | + 'VNU_city' => $old_event['city'], |
|
530 | + 'VNU_zip' => $old_event['zip'], |
|
531 | + 'post_title'=> $this->_get_venue_title_for_event($old_event), |
|
532 | + 'VNU_phone'=>$old_event['venue_phone'],// VNU_phone |
|
533 | + 'VNU_url'=>$old_event['venue_url'],// VNU_url |
|
534 | + 'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone |
|
535 | + 'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url |
|
536 | + ); |
|
537 | + $sql_conditions = array(); |
|
538 | + foreach ($conditions as $column => $value) { |
|
539 | + $sql_conditions [] = $wpdb->prepare("$column = %s", $value); |
|
540 | + } |
|
541 | + $query = "SELECT VNU_ID |
|
547 | 542 | FROM |
548 | 543 | {$wpdb->posts} as p INNER JOIN |
549 | 544 | {$wpdb->prefix}esp_venue_meta as v ON p.ID = v.VNU_ID |
550 | 545 | WHERE " . implode(" AND ", $sql_conditions) . " LIMIT 1"; |
551 | - $id = $wpdb->get_var($query); |
|
552 | - return $id; |
|
553 | - } |
|
554 | - |
|
555 | - /** |
|
556 | - * Gets teh venue's title or makes one up if there is none |
|
557 | - * @param array $event_data_array keys are events_details columns and values are their values |
|
558 | - * @return string |
|
559 | - */ |
|
560 | - protected function _get_venue_title_for_event($event_data_array) |
|
561 | - { |
|
562 | - return $event_data_array['venue_title'] ? stripslashes($event_data_array['venue_title']) : stripslashes(sprintf(__('Venue of %s', 'event_espresso'), $event_data_array['event_name'])); |
|
563 | - } |
|
564 | - |
|
565 | - /** |
|
566 | - * Inserts the CPT |
|
567 | - * |
|
568 | - * @param array $old_event keys are cols, values are col values |
|
569 | - * @return int |
|
570 | - */ |
|
571 | - private function _insert_venue_into_posts($old_event) |
|
572 | - { |
|
573 | - global $wpdb; |
|
574 | - $insertion_array = array( |
|
575 | - 'post_title'=> $this->_get_venue_title_for_event($old_event),// VNU_name |
|
576 | - 'post_content'=>'',// VNU_desc |
|
577 | - 'post_name'=> $this->_find_unique_slug($old_event['venue_title'], sanitize_title('venue-of-' . $old_event['event_name'])),// VNU_identifier |
|
578 | - 'post_date'=>current_time('mysql'),// VNU_created |
|
579 | - 'post_date_gmt'=>get_gmt_from_date(current_time('mysql')), |
|
580 | - 'post_excerpt'=>'',// VNU_short_desc arbitrary only 50 characters |
|
581 | - 'post_modified'=>current_time('mysql'),// VNU_modified |
|
582 | - 'post_modified_gmt'=>get_gmt_from_date(current_time('mysql')), |
|
583 | - 'post_author'=>$old_event['wp_user'],// VNU_wp_user |
|
584 | - 'post_parent'=>0,// parent |
|
585 | - 'menu_order'=>0,// VNU_order |
|
586 | - 'post_type'=>'espresso_venues'// post_type |
|
587 | - ); |
|
588 | - $datatypes_array = array( |
|
589 | - '%s',// VNU_name |
|
590 | - '%s',// VNU_desc |
|
591 | - '%s',// VNU_identifier |
|
592 | - '%s',// VNU_created |
|
593 | - '%s', |
|
594 | - '%s',// VNU_short_desc |
|
595 | - '%s',// VNU_modified |
|
596 | - '%s', |
|
597 | - '%d',// VNU_wp_user |
|
598 | - '%d',// parent |
|
599 | - '%d',// VNU_order |
|
600 | - '%s',// post_type |
|
601 | - ); |
|
602 | - $success = $wpdb->insert( |
|
603 | - $wpdb->posts, |
|
604 | - $insertion_array, |
|
605 | - $datatypes_array |
|
606 | - ); |
|
607 | - if (! $success) { |
|
608 | - $this->add_error( |
|
609 | - $this->get_migration_script()->_create_error_message_for_db_insertion( |
|
610 | - $this->_old_table, |
|
611 | - $old_event, |
|
612 | - $this->_new_table, |
|
613 | - $insertion_array, |
|
614 | - $datatypes_array |
|
615 | - ) |
|
616 | - ); |
|
617 | - return 0; |
|
618 | - } |
|
619 | - return $wpdb->insert_id; |
|
620 | - } |
|
621 | - |
|
622 | - /** |
|
623 | - * Inserts into the venue_meta table |
|
624 | - * @param int $cpt_id |
|
625 | - * @param array $old_event |
|
626 | - * @return int |
|
627 | - */ |
|
628 | - private function _insert_venue_into_meta_table($cpt_id, $old_event) |
|
629 | - { |
|
630 | - global $wpdb; |
|
631 | - |
|
632 | - // assume the country is the same as the organization's old settings |
|
633 | - $country_iso = $this->get_migration_script()->get_default_country_iso(); |
|
634 | - // find the state from the venue, or the organization, or just guess california |
|
635 | - if (! $old_event['state']) { |
|
636 | - $old_org_options = get_option('events_organization_settings'); |
|
637 | - $state_name = stripslashes($old_org_options['organization_state']); |
|
638 | - } else { |
|
639 | - $state_name = $old_event['state']; |
|
640 | - } |
|
641 | - if (! $state_name) { |
|
642 | - $state_name = 'CA'; |
|
643 | - } |
|
644 | - // get a state ID with the same name, if possible |
|
645 | - try { |
|
646 | - $state = $this->get_migration_script()->get_or_create_state($state_name, $country_iso); |
|
647 | - $state_id = $state['STA_ID']; |
|
648 | - } catch (EE_Error $e) { |
|
649 | - $this->add_error($e->getMessage()); |
|
650 | - $state_id = 0; |
|
651 | - } |
|
652 | - // now insert into meta table |
|
653 | - $insertion_array = array( |
|
654 | - 'VNU_ID'=>$cpt_id,// VNU_ID_fk |
|
655 | - 'VNU_address'=>stripslashes($old_event['address']),// VNU_address |
|
656 | - 'VNU_address2'=>stripslashes($old_event['address2']),// VNU_address2 |
|
657 | - 'VNU_city'=>stripslashes($old_event['city']),// VNU_city |
|
658 | - 'STA_ID'=>$state_id,// STA_ID |
|
659 | - 'CNT_ISO'=>$country_iso,// CNT_ISO |
|
660 | - 'VNU_zip'=>$old_event['zip'],// VNU_zip |
|
661 | - 'VNU_phone'=>$old_event['venue_phone'],// VNU_phone |
|
662 | - 'VNU_capacity'=>-1,// VNU_capacity |
|
663 | - 'VNU_url'=>$old_event['venue_url'],// VNU_url |
|
664 | - 'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone |
|
665 | - 'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url |
|
666 | - 'VNU_google_map_link'=>'',// VNU_google_map_link |
|
667 | - 'VNU_enable_for_gmap'=>true // VNU_enable_for_gmap |
|
668 | - ); |
|
669 | - $datatypes = array( |
|
670 | - '%d',// VNU_ID_fk |
|
671 | - '%s',// VNU_address |
|
672 | - '%s',// VNU_address2 |
|
673 | - '%s',// VNU_city |
|
674 | - '%d',// STA_ID |
|
675 | - '%s',// CNT_ISO |
|
676 | - '%s',// VNU_zip |
|
677 | - '%s',// VNU_phone |
|
678 | - '%d',// VNU_capacity |
|
679 | - '%s',// VNU_url |
|
680 | - '%s',// VNU_virtual_phone |
|
681 | - '%s',// VNU_virtual_url |
|
682 | - '%s',// VNU_google_map_link |
|
683 | - '%d',// VNU_enable_for_gmap |
|
684 | - ); |
|
685 | - $success = $wpdb->insert($wpdb->prefix."esp_venue_meta", $insertion_array, $datatypes); |
|
686 | - if (! $success) { |
|
687 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $insertion_array, $datatypes)); |
|
688 | - return 0; |
|
689 | - } |
|
690 | - return $wpdb->insert_id; |
|
691 | - } |
|
692 | - |
|
693 | - |
|
694 | - |
|
695 | - /** |
|
696 | - * @param $new_event_id |
|
697 | - * @param $new_venue_id |
|
698 | - * @return int |
|
699 | - */ |
|
700 | - private function _insert_new_venue_to_event($new_event_id, $new_venue_id) |
|
701 | - { |
|
702 | - global $wpdb; |
|
703 | - if (! $new_event_id) { |
|
704 | - $this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $new_event_id)); |
|
705 | - return 0; |
|
706 | - } |
|
707 | - if (! $new_venue_id) { |
|
708 | - $this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $new_venue_id)); |
|
709 | - return 0; |
|
710 | - } |
|
711 | - $cols_n_values = array( |
|
712 | - 'EVT_ID'=>$new_event_id, |
|
713 | - 'VNU_ID'=>$new_venue_id, |
|
714 | - 'EVV_primary'=>true |
|
715 | - ); |
|
716 | - $datatypes = array( |
|
717 | - '%d',// EVT_ID |
|
718 | - '%d',// VNU_ID |
|
719 | - '%d',// EVT_primary |
|
720 | - ); |
|
721 | - $success = $wpdb->insert($wpdb->prefix."esp_event_venue", $cols_n_values, $datatypes); |
|
722 | - if (! $success) { |
|
723 | - $this->add_error( |
|
724 | - $this->get_migration_script()->_create_error_message_for_db_insertion( |
|
725 | - $this->_old_table, |
|
726 | - array(), |
|
727 | - $this->_new_table, |
|
728 | - $cols_n_values, |
|
729 | - $datatypes |
|
730 | - ) |
|
731 | - ); |
|
732 | - return 0; |
|
733 | - } |
|
734 | - return $wpdb->insert_id; |
|
735 | - } |
|
736 | - /** |
|
737 | - * Converts all the 3.1 start-end times for the event to 4.1 datetimes |
|
738 | - * @global wpdb $wpdb |
|
739 | - * @param array $old_event results of get_results(...,ARRAY_A) |
|
740 | - * @param int $new_cpt_id new post ID |
|
741 | - * @return void (if there are errors though, adds them to the stage's error list |
|
742 | - */ |
|
743 | - private function _convert_start_end_times($old_event, $new_cpt_id) |
|
744 | - { |
|
745 | - $start_end_times = $this->_get_old_start_end_times($old_event['id']); |
|
746 | - foreach ($start_end_times as $start_end_time) { |
|
747 | - $datetime_id = $this->_insert_new_datetime($start_end_time, $old_event, $new_cpt_id); |
|
748 | - if ($datetime_id) { |
|
749 | - $this->get_migration_script()->set_mapping($this->_old_start_end_table, $start_end_time['id'], $this->_new_datetime_table, $datetime_id); |
|
750 | - } |
|
751 | - } |
|
752 | - } |
|
753 | - /** |
|
754 | - * Queries the 3.1 wp_events_start_end table to get all the start and end times for the event |
|
755 | - * @global wpdb $wpdb |
|
756 | - * @param int $old_event_id |
|
757 | - * @return array |
|
758 | - */ |
|
759 | - private function _get_old_start_end_times($old_event_id) |
|
760 | - { |
|
761 | - global $wpdb; |
|
762 | - return $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_start_end_table WHERE event_id=%d", $old_event_id), ARRAY_A); |
|
763 | - } |
|
764 | - /** |
|
765 | - * Inserts a 4.1 datetime given the 3.1 start_end db row and event_details row |
|
766 | - * @param array $start_end_time_row |
|
767 | - * @param array $old_event_row |
|
768 | - * @param int $new_cpt_id |
|
769 | - * @return int ID of new datetime |
|
770 | - */ |
|
771 | - private function _insert_new_datetime($start_end_time_row, $old_event_row, $new_cpt_id) |
|
772 | - { |
|
773 | - global $wpdb; |
|
774 | - $start_date = $old_event_row['start_date']; |
|
775 | - $start_time = $this->get_migration_script()->convertTimeFromAMPM($start_end_time_row['start_time']); |
|
776 | - $end_date = $old_event_row['end_date']; |
|
777 | - $end_time = $this->get_migration_script()->convertTimeFromAMPM($start_end_time_row['end_time']); |
|
778 | - $existing_datetimes = $this->_count_other_datetimes_exist_for_new_event($new_cpt_id); |
|
779 | - $start_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$start_date $start_time:00", $old_event_row['timezone_string']); |
|
780 | - $end_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$end_date $end_time:00", $old_event_row['timezone_string']); |
|
781 | - $cols_n_values = array( |
|
782 | - 'EVT_ID'=>$new_cpt_id,// EVT_ID |
|
783 | - 'DTT_EVT_start'=>$start_datetime_utc,// DTT_EVT_start |
|
784 | - 'DTT_EVT_end'=> $end_datetime_utc,// DTT_EVT_end |
|
785 | - 'DTT_reg_limit'=>intval($start_end_time_row['reg_limit']) ? $start_end_time_row['reg_limit'] : $old_event_row['reg_limit'],// DTT_reg_limit |
|
786 | - 'DTT_sold'=>0,// note: we will increment this as registrations are added during the migration |
|
546 | + $id = $wpdb->get_var($query); |
|
547 | + return $id; |
|
548 | + } |
|
549 | + |
|
550 | + /** |
|
551 | + * Gets teh venue's title or makes one up if there is none |
|
552 | + * @param array $event_data_array keys are events_details columns and values are their values |
|
553 | + * @return string |
|
554 | + */ |
|
555 | + protected function _get_venue_title_for_event($event_data_array) |
|
556 | + { |
|
557 | + return $event_data_array['venue_title'] ? stripslashes($event_data_array['venue_title']) : stripslashes(sprintf(__('Venue of %s', 'event_espresso'), $event_data_array['event_name'])); |
|
558 | + } |
|
559 | + |
|
560 | + /** |
|
561 | + * Inserts the CPT |
|
562 | + * |
|
563 | + * @param array $old_event keys are cols, values are col values |
|
564 | + * @return int |
|
565 | + */ |
|
566 | + private function _insert_venue_into_posts($old_event) |
|
567 | + { |
|
568 | + global $wpdb; |
|
569 | + $insertion_array = array( |
|
570 | + 'post_title'=> $this->_get_venue_title_for_event($old_event),// VNU_name |
|
571 | + 'post_content'=>'',// VNU_desc |
|
572 | + 'post_name'=> $this->_find_unique_slug($old_event['venue_title'], sanitize_title('venue-of-' . $old_event['event_name'])),// VNU_identifier |
|
573 | + 'post_date'=>current_time('mysql'),// VNU_created |
|
574 | + 'post_date_gmt'=>get_gmt_from_date(current_time('mysql')), |
|
575 | + 'post_excerpt'=>'',// VNU_short_desc arbitrary only 50 characters |
|
576 | + 'post_modified'=>current_time('mysql'),// VNU_modified |
|
577 | + 'post_modified_gmt'=>get_gmt_from_date(current_time('mysql')), |
|
578 | + 'post_author'=>$old_event['wp_user'],// VNU_wp_user |
|
579 | + 'post_parent'=>0,// parent |
|
580 | + 'menu_order'=>0,// VNU_order |
|
581 | + 'post_type'=>'espresso_venues'// post_type |
|
582 | + ); |
|
583 | + $datatypes_array = array( |
|
584 | + '%s',// VNU_name |
|
585 | + '%s',// VNU_desc |
|
586 | + '%s',// VNU_identifier |
|
587 | + '%s',// VNU_created |
|
588 | + '%s', |
|
589 | + '%s',// VNU_short_desc |
|
590 | + '%s',// VNU_modified |
|
591 | + '%s', |
|
592 | + '%d',// VNU_wp_user |
|
593 | + '%d',// parent |
|
594 | + '%d',// VNU_order |
|
595 | + '%s',// post_type |
|
596 | + ); |
|
597 | + $success = $wpdb->insert( |
|
598 | + $wpdb->posts, |
|
599 | + $insertion_array, |
|
600 | + $datatypes_array |
|
601 | + ); |
|
602 | + if (! $success) { |
|
603 | + $this->add_error( |
|
604 | + $this->get_migration_script()->_create_error_message_for_db_insertion( |
|
605 | + $this->_old_table, |
|
606 | + $old_event, |
|
607 | + $this->_new_table, |
|
608 | + $insertion_array, |
|
609 | + $datatypes_array |
|
610 | + ) |
|
611 | + ); |
|
612 | + return 0; |
|
613 | + } |
|
614 | + return $wpdb->insert_id; |
|
615 | + } |
|
616 | + |
|
617 | + /** |
|
618 | + * Inserts into the venue_meta table |
|
619 | + * @param int $cpt_id |
|
620 | + * @param array $old_event |
|
621 | + * @return int |
|
622 | + */ |
|
623 | + private function _insert_venue_into_meta_table($cpt_id, $old_event) |
|
624 | + { |
|
625 | + global $wpdb; |
|
626 | + |
|
627 | + // assume the country is the same as the organization's old settings |
|
628 | + $country_iso = $this->get_migration_script()->get_default_country_iso(); |
|
629 | + // find the state from the venue, or the organization, or just guess california |
|
630 | + if (! $old_event['state']) { |
|
631 | + $old_org_options = get_option('events_organization_settings'); |
|
632 | + $state_name = stripslashes($old_org_options['organization_state']); |
|
633 | + } else { |
|
634 | + $state_name = $old_event['state']; |
|
635 | + } |
|
636 | + if (! $state_name) { |
|
637 | + $state_name = 'CA'; |
|
638 | + } |
|
639 | + // get a state ID with the same name, if possible |
|
640 | + try { |
|
641 | + $state = $this->get_migration_script()->get_or_create_state($state_name, $country_iso); |
|
642 | + $state_id = $state['STA_ID']; |
|
643 | + } catch (EE_Error $e) { |
|
644 | + $this->add_error($e->getMessage()); |
|
645 | + $state_id = 0; |
|
646 | + } |
|
647 | + // now insert into meta table |
|
648 | + $insertion_array = array( |
|
649 | + 'VNU_ID'=>$cpt_id,// VNU_ID_fk |
|
650 | + 'VNU_address'=>stripslashes($old_event['address']),// VNU_address |
|
651 | + 'VNU_address2'=>stripslashes($old_event['address2']),// VNU_address2 |
|
652 | + 'VNU_city'=>stripslashes($old_event['city']),// VNU_city |
|
653 | + 'STA_ID'=>$state_id,// STA_ID |
|
654 | + 'CNT_ISO'=>$country_iso,// CNT_ISO |
|
655 | + 'VNU_zip'=>$old_event['zip'],// VNU_zip |
|
656 | + 'VNU_phone'=>$old_event['venue_phone'],// VNU_phone |
|
657 | + 'VNU_capacity'=>-1,// VNU_capacity |
|
658 | + 'VNU_url'=>$old_event['venue_url'],// VNU_url |
|
659 | + 'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone |
|
660 | + 'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url |
|
661 | + 'VNU_google_map_link'=>'',// VNU_google_map_link |
|
662 | + 'VNU_enable_for_gmap'=>true // VNU_enable_for_gmap |
|
663 | + ); |
|
664 | + $datatypes = array( |
|
665 | + '%d',// VNU_ID_fk |
|
666 | + '%s',// VNU_address |
|
667 | + '%s',// VNU_address2 |
|
668 | + '%s',// VNU_city |
|
669 | + '%d',// STA_ID |
|
670 | + '%s',// CNT_ISO |
|
671 | + '%s',// VNU_zip |
|
672 | + '%s',// VNU_phone |
|
673 | + '%d',// VNU_capacity |
|
674 | + '%s',// VNU_url |
|
675 | + '%s',// VNU_virtual_phone |
|
676 | + '%s',// VNU_virtual_url |
|
677 | + '%s',// VNU_google_map_link |
|
678 | + '%d',// VNU_enable_for_gmap |
|
679 | + ); |
|
680 | + $success = $wpdb->insert($wpdb->prefix."esp_venue_meta", $insertion_array, $datatypes); |
|
681 | + if (! $success) { |
|
682 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $insertion_array, $datatypes)); |
|
683 | + return 0; |
|
684 | + } |
|
685 | + return $wpdb->insert_id; |
|
686 | + } |
|
687 | + |
|
688 | + |
|
689 | + |
|
690 | + /** |
|
691 | + * @param $new_event_id |
|
692 | + * @param $new_venue_id |
|
693 | + * @return int |
|
694 | + */ |
|
695 | + private function _insert_new_venue_to_event($new_event_id, $new_venue_id) |
|
696 | + { |
|
697 | + global $wpdb; |
|
698 | + if (! $new_event_id) { |
|
699 | + $this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $new_event_id)); |
|
700 | + return 0; |
|
701 | + } |
|
702 | + if (! $new_venue_id) { |
|
703 | + $this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $new_venue_id)); |
|
704 | + return 0; |
|
705 | + } |
|
706 | + $cols_n_values = array( |
|
707 | + 'EVT_ID'=>$new_event_id, |
|
708 | + 'VNU_ID'=>$new_venue_id, |
|
709 | + 'EVV_primary'=>true |
|
710 | + ); |
|
711 | + $datatypes = array( |
|
712 | + '%d',// EVT_ID |
|
713 | + '%d',// VNU_ID |
|
714 | + '%d',// EVT_primary |
|
715 | + ); |
|
716 | + $success = $wpdb->insert($wpdb->prefix."esp_event_venue", $cols_n_values, $datatypes); |
|
717 | + if (! $success) { |
|
718 | + $this->add_error( |
|
719 | + $this->get_migration_script()->_create_error_message_for_db_insertion( |
|
720 | + $this->_old_table, |
|
721 | + array(), |
|
722 | + $this->_new_table, |
|
723 | + $cols_n_values, |
|
724 | + $datatypes |
|
725 | + ) |
|
726 | + ); |
|
727 | + return 0; |
|
728 | + } |
|
729 | + return $wpdb->insert_id; |
|
730 | + } |
|
731 | + /** |
|
732 | + * Converts all the 3.1 start-end times for the event to 4.1 datetimes |
|
733 | + * @global wpdb $wpdb |
|
734 | + * @param array $old_event results of get_results(...,ARRAY_A) |
|
735 | + * @param int $new_cpt_id new post ID |
|
736 | + * @return void (if there are errors though, adds them to the stage's error list |
|
737 | + */ |
|
738 | + private function _convert_start_end_times($old_event, $new_cpt_id) |
|
739 | + { |
|
740 | + $start_end_times = $this->_get_old_start_end_times($old_event['id']); |
|
741 | + foreach ($start_end_times as $start_end_time) { |
|
742 | + $datetime_id = $this->_insert_new_datetime($start_end_time, $old_event, $new_cpt_id); |
|
743 | + if ($datetime_id) { |
|
744 | + $this->get_migration_script()->set_mapping($this->_old_start_end_table, $start_end_time['id'], $this->_new_datetime_table, $datetime_id); |
|
745 | + } |
|
746 | + } |
|
747 | + } |
|
748 | + /** |
|
749 | + * Queries the 3.1 wp_events_start_end table to get all the start and end times for the event |
|
750 | + * @global wpdb $wpdb |
|
751 | + * @param int $old_event_id |
|
752 | + * @return array |
|
753 | + */ |
|
754 | + private function _get_old_start_end_times($old_event_id) |
|
755 | + { |
|
756 | + global $wpdb; |
|
757 | + return $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_start_end_table WHERE event_id=%d", $old_event_id), ARRAY_A); |
|
758 | + } |
|
759 | + /** |
|
760 | + * Inserts a 4.1 datetime given the 3.1 start_end db row and event_details row |
|
761 | + * @param array $start_end_time_row |
|
762 | + * @param array $old_event_row |
|
763 | + * @param int $new_cpt_id |
|
764 | + * @return int ID of new datetime |
|
765 | + */ |
|
766 | + private function _insert_new_datetime($start_end_time_row, $old_event_row, $new_cpt_id) |
|
767 | + { |
|
768 | + global $wpdb; |
|
769 | + $start_date = $old_event_row['start_date']; |
|
770 | + $start_time = $this->get_migration_script()->convertTimeFromAMPM($start_end_time_row['start_time']); |
|
771 | + $end_date = $old_event_row['end_date']; |
|
772 | + $end_time = $this->get_migration_script()->convertTimeFromAMPM($start_end_time_row['end_time']); |
|
773 | + $existing_datetimes = $this->_count_other_datetimes_exist_for_new_event($new_cpt_id); |
|
774 | + $start_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$start_date $start_time:00", $old_event_row['timezone_string']); |
|
775 | + $end_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$end_date $end_time:00", $old_event_row['timezone_string']); |
|
776 | + $cols_n_values = array( |
|
777 | + 'EVT_ID'=>$new_cpt_id,// EVT_ID |
|
778 | + 'DTT_EVT_start'=>$start_datetime_utc,// DTT_EVT_start |
|
779 | + 'DTT_EVT_end'=> $end_datetime_utc,// DTT_EVT_end |
|
780 | + 'DTT_reg_limit'=>intval($start_end_time_row['reg_limit']) ? $start_end_time_row['reg_limit'] : $old_event_row['reg_limit'],// DTT_reg_limit |
|
781 | + 'DTT_sold'=>0,// note: we will increment this as registrations are added during the migration |
|
787 | 782 | // 'DTT_is_primary'=> 0 == $existing_datetimes ,//DTT_is_primary... if count==0, then we'll call it the 'primary' |
788 | - 'DTT_order'=> $existing_datetimes,// DTT_order, just give it the same order as the count of how many datetimes already exist |
|
789 | - 'DTT_parent'=>0, |
|
790 | - 'DTT_deleted'=>false |
|
791 | - ); |
|
792 | - $datatypes = array( |
|
793 | - '%d',// EVT_Id |
|
794 | - '%s',// DTT_EVT_start |
|
795 | - '%s',// DTT_EVT_end |
|
796 | - '%d',// DTT_reg_limit |
|
797 | - '%d',// DTT_sold |
|
783 | + 'DTT_order'=> $existing_datetimes,// DTT_order, just give it the same order as the count of how many datetimes already exist |
|
784 | + 'DTT_parent'=>0, |
|
785 | + 'DTT_deleted'=>false |
|
786 | + ); |
|
787 | + $datatypes = array( |
|
788 | + '%d',// EVT_Id |
|
789 | + '%s',// DTT_EVT_start |
|
790 | + '%s',// DTT_EVT_end |
|
791 | + '%d',// DTT_reg_limit |
|
792 | + '%d',// DTT_sold |
|
798 | 793 | // '%d',//DTT_is_primary |
799 | - '%d',// DTT_order |
|
800 | - '%d',// DTT_parent |
|
801 | - '%d',// DTT_deleted |
|
802 | - ); |
|
803 | - $success = $wpdb->insert($this->_new_datetime_table, $cols_n_values, $datatypes); |
|
804 | - if (! $success) { |
|
805 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_start_end_table, array_merge($old_event_row, $start_end_time_row), $this->_new_datetime_table, $cols_n_values, $datatypes)); |
|
806 | - return 0; |
|
807 | - } |
|
808 | - return $wpdb->insert_id; |
|
809 | - } |
|
810 | - |
|
811 | - /** |
|
812 | - * Checks if there's a 4.1 datetime for this event already. This is mostly only handy |
|
813 | - * when deciding whether a datetime we're about ot insert should be the 'primary' or not |
|
814 | - * @global wpdb $wpdb |
|
815 | - * @param int $cpt_event_id |
|
816 | - * @return int |
|
817 | - */ |
|
818 | - private function _count_other_datetimes_exist_for_new_event($cpt_event_id) |
|
819 | - { |
|
820 | - global $wpdb; |
|
821 | - $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $this->_new_datetime_table WHERE EVT_ID=%d", $cpt_event_id)); |
|
822 | - return intval($count); |
|
823 | - } |
|
794 | + '%d',// DTT_order |
|
795 | + '%d',// DTT_parent |
|
796 | + '%d',// DTT_deleted |
|
797 | + ); |
|
798 | + $success = $wpdb->insert($this->_new_datetime_table, $cols_n_values, $datatypes); |
|
799 | + if (! $success) { |
|
800 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_start_end_table, array_merge($old_event_row, $start_end_time_row), $this->_new_datetime_table, $cols_n_values, $datatypes)); |
|
801 | + return 0; |
|
802 | + } |
|
803 | + return $wpdb->insert_id; |
|
804 | + } |
|
805 | + |
|
806 | + /** |
|
807 | + * Checks if there's a 4.1 datetime for this event already. This is mostly only handy |
|
808 | + * when deciding whether a datetime we're about ot insert should be the 'primary' or not |
|
809 | + * @global wpdb $wpdb |
|
810 | + * @param int $cpt_event_id |
|
811 | + * @return int |
|
812 | + */ |
|
813 | + private function _count_other_datetimes_exist_for_new_event($cpt_event_id) |
|
814 | + { |
|
815 | + global $wpdb; |
|
816 | + $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $this->_new_datetime_table WHERE EVT_ID=%d", $cpt_event_id)); |
|
817 | + return intval($count); |
|
818 | + } |
|
824 | 819 | } |
@@ -193,7 +193,7 @@ discard block |
||
193 | 193 | public function _count_records_to_migrate() |
194 | 194 | { |
195 | 195 | global $wpdb; |
196 | - $count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->_old_table . ' WHERE event_status !="D"'); |
|
196 | + $count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->_old_table.' WHERE event_status !="D"'); |
|
197 | 197 | return intval($count); |
198 | 198 | } |
199 | 199 | |
@@ -212,7 +212,7 @@ discard block |
||
212 | 212 | { |
213 | 213 | global $wpdb; |
214 | 214 | // because the migration of each event can be a LOT more work, make each step smaller |
215 | - $num_items_to_migrate = max(1, $num_items_to_migrate/5); |
|
215 | + $num_items_to_migrate = max(1, $num_items_to_migrate / 5); |
|
216 | 216 | $events = $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_table WHERE event_status!='D' LIMIT %d,%d", $this->count_records_migrated(), $num_items_to_migrate), ARRAY_A); |
217 | 217 | $items_migrated_this_step = 0; |
218 | 218 | |
@@ -260,17 +260,17 @@ discard block |
||
260 | 260 | private function _add_post_metas($old_event, $post_id) |
261 | 261 | { |
262 | 262 | $event_meta = maybe_unserialize($old_event['event_meta']); |
263 | - if (! $event_meta || ! is_array($event_meta)) { |
|
263 | + if ( ! $event_meta || ! is_array($event_meta)) { |
|
264 | 264 | return; |
265 | 265 | } |
266 | - unset($event_meta['date_submitted']);// factored into CPT |
|
267 | - unset($event_meta['additional_attendee_reg_info']);// factored into event meta table |
|
268 | - unset($event_meta['default_payment_status']);// dido |
|
269 | - unset($event_meta['event_thumbnail_url']);// used to find post featured image |
|
266 | + unset($event_meta['date_submitted']); // factored into CPT |
|
267 | + unset($event_meta['additional_attendee_reg_info']); // factored into event meta table |
|
268 | + unset($event_meta['default_payment_status']); // dido |
|
269 | + unset($event_meta['event_thumbnail_url']); // used to find post featured image |
|
270 | 270 | foreach ($event_meta as $meta_key => $meta_value) { |
271 | 271 | if ($meta_key) {// if the meta key is just an empty string, ignore it |
272 | 272 | $success = add_post_meta($post_id, $meta_key, $meta_value, true); |
273 | - if (! $success) { |
|
273 | + if ( ! $success) { |
|
274 | 274 | $this->add_error(sprintf(__("Could not add post meta for CPT with ID #%d. Meta key: '%s',meta value:'%d' for 3.1 event: %s", "event_espresso"), $post_id, $meta_key, $meta_value, implode(",", $old_event))); |
275 | 275 | } |
276 | 276 | } |
@@ -341,68 +341,68 @@ discard block |
||
341 | 341 | // and 3 custom ones: cancelled,postponed,sold_out |
342 | 342 | $status_conversions = array( |
343 | 343 | 'R'=>'draft', |
344 | - 'X'=>'draft',// 4.1 doesn't have a "not approved for publishing" status. this is what posts are set to that aren't approved |
|
344 | + 'X'=>'draft', // 4.1 doesn't have a "not approved for publishing" status. this is what posts are set to that aren't approved |
|
345 | 345 | 'P'=>'pending', |
346 | - 'IA'=>'draft',// draft and in the past |
|
346 | + 'IA'=>'draft', // draft and in the past |
|
347 | 347 | // IA=inactive in 3.1: events were switched to this when they expired. in 4.1 that's just calculated |
348 | - 'O'=>'publish',// @todo: will be an event type later; if this is the status, set the end date WAAAY later; and add term for 'ongoing' |
|
348 | + 'O'=>'publish', // @todo: will be an event type later; if this is the status, set the end date WAAAY later; and add term for 'ongoing' |
|
349 | 349 | 'A'=>'publish', |
350 | - 'S'=>'draft',// @todo: is it ok to just mark secondary/waitlist events as DRAFTS? |
|
350 | + 'S'=>'draft', // @todo: is it ok to just mark secondary/waitlist events as DRAFTS? |
|
351 | 351 | 'D'=>'trash', |
352 | 352 | ); |
353 | - $post_status = $status_conversions[ $old_event['event_status'] ]; |
|
353 | + $post_status = $status_conversions[$old_event['event_status']]; |
|
354 | 354 | // check if we've sold out |
355 | 355 | if (intval($old_event['reg_limit']) <= self::count_registrations($old_event['id'])) { |
356 | 356 | $post_status = 'sold_out'; |
357 | 357 | } |
358 | 358 | // FYI postponed and cancelled don't exist in 3.1 |
359 | 359 | $cols_n_values = array( |
360 | - 'post_title'=>stripslashes($old_event['event_name']),// EVT_name |
|
361 | - 'post_content'=>stripslashes($old_event['event_desc']),// EVT_desc |
|
362 | - 'post_name'=>$this->_find_unique_slug($old_event['event_name'], $old_event['event_identifier'], $post_status),// EVT_slug |
|
363 | - 'post_date'=>$old_event['submitted'],// EVT_created NOT |
|
360 | + 'post_title'=>stripslashes($old_event['event_name']), // EVT_name |
|
361 | + 'post_content'=>stripslashes($old_event['event_desc']), // EVT_desc |
|
362 | + 'post_name'=>$this->_find_unique_slug($old_event['event_name'], $old_event['event_identifier'], $post_status), // EVT_slug |
|
363 | + 'post_date'=>$old_event['submitted'], // EVT_created NOT |
|
364 | 364 | 'post_date_gmt'=>get_gmt_from_date($old_event['submitted']), |
365 | - 'post_excerpt'=>'',// EVT_short_desc |
|
366 | - 'post_modified'=>$old_event['submitted'],// EVT_modified |
|
365 | + 'post_excerpt'=>'', // EVT_short_desc |
|
366 | + 'post_modified'=>$old_event['submitted'], // EVT_modified |
|
367 | 367 | 'post_modified_gmt'=>get_gmt_from_date($old_event['submitted']), |
368 | - 'post_author'=>$old_event['wp_user'],// EVT_wp_user |
|
369 | - 'post_parent'=>0,// parent maybe get this from some REM field? |
|
370 | - 'menu_order'=>0,// EVT_order |
|
371 | - 'post_type'=>'espresso_events',// post_type |
|
372 | - 'post_status'=>$post_status,// status |
|
368 | + 'post_author'=>$old_event['wp_user'], // EVT_wp_user |
|
369 | + 'post_parent'=>0, // parent maybe get this from some REM field? |
|
370 | + 'menu_order'=>0, // EVT_order |
|
371 | + 'post_type'=>'espresso_events', // post_type |
|
372 | + 'post_status'=>$post_status, // status |
|
373 | 373 | ); |
374 | 374 | $cols_n_values_with_no_invalid_text = array(); |
375 | 375 | foreach ($cols_n_values as $col => $value) { |
376 | 376 | $value_sans_invalid_chars = $wpdb->strip_invalid_text_for_column($this->_new_table, $col, $value); |
377 | - if (! is_wp_error($value_sans_invalid_chars)) { |
|
378 | - $cols_n_values_with_no_invalid_text[ $col ] = $value_sans_invalid_chars; |
|
377 | + if ( ! is_wp_error($value_sans_invalid_chars)) { |
|
378 | + $cols_n_values_with_no_invalid_text[$col] = $value_sans_invalid_chars; |
|
379 | 379 | } else { |
380 | 380 | // otherwise leave it as-is. It will blow everything up and stop the migration |
381 | - $cols_n_values_with_no_invalid_text[ $col ] = $value; |
|
381 | + $cols_n_values_with_no_invalid_text[$col] = $value; |
|
382 | 382 | } |
383 | 383 | } |
384 | 384 | $cols_n_values = $cols_n_values_with_no_invalid_text; |
385 | 385 | $datatypes = array( |
386 | - '%s',// EVT_name |
|
387 | - '%s',// EVT_desc |
|
388 | - '%s',// EVT_slug |
|
389 | - '%s',// EVT_created |
|
386 | + '%s', // EVT_name |
|
387 | + '%s', // EVT_desc |
|
388 | + '%s', // EVT_slug |
|
389 | + '%s', // EVT_created |
|
390 | 390 | '%s', |
391 | - '%s',// EVT_short_desc |
|
392 | - '%s',// EVT_modified |
|
391 | + '%s', // EVT_short_desc |
|
392 | + '%s', // EVT_modified |
|
393 | 393 | '%s', |
394 | - '%s',// EVT_wp_user |
|
395 | - '%d',// post_parent |
|
396 | - '%d',// EVT_order |
|
397 | - '%s',// post_type |
|
398 | - '%s',// status |
|
394 | + '%s', // EVT_wp_user |
|
395 | + '%d', // post_parent |
|
396 | + '%d', // EVT_order |
|
397 | + '%s', // post_type |
|
398 | + '%s', // status |
|
399 | 399 | ); |
400 | 400 | $success = $wpdb->insert( |
401 | 401 | $this->_new_table, |
402 | 402 | $cols_n_values, |
403 | 403 | $datatypes |
404 | 404 | ); |
405 | - if (! $success) { |
|
405 | + if ( ! $success) { |
|
406 | 406 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_table, $cols_n_values, $datatypes)); |
407 | 407 | return 0; |
408 | 408 | } |
@@ -441,10 +441,10 @@ discard block |
||
441 | 441 | // ); |
442 | 442 | $default_reg_status = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID(isset($event_meta['default_payment_status']) ? $event_meta['default_payment_status'] : '', intval($old_event['require_pre_approval'])); |
443 | 443 | $cols_n_values = array( |
444 | - 'EVT_ID'=>$new_cpt_id,// EVT_ID_fk |
|
444 | + 'EVT_ID'=>$new_cpt_id, // EVT_ID_fk |
|
445 | 445 | 'EVT_display_desc'=> 'Y' == $old_event['display_desc'], |
446 | - 'EVT_display_ticket_selector'=> 'Y'== $old_event['display_reg_form'], |
|
447 | - 'EVT_visible_on'=> $this->get_migration_script()->convert_date_string_to_utc($this, $old_event, current_time('mysql'), $old_event['timezone_string']),// don't use the old 'visible_on', as it wasn't ever used |
|
446 | + 'EVT_display_ticket_selector'=> 'Y' == $old_event['display_reg_form'], |
|
447 | + 'EVT_visible_on'=> $this->get_migration_script()->convert_date_string_to_utc($this, $old_event, current_time('mysql'), $old_event['timezone_string']), // don't use the old 'visible_on', as it wasn't ever used |
|
448 | 448 | 'EVT_additional_limit'=> $old_event['allow_multiple'] == 'N' ? 1 : $old_event['additional_limit'], |
449 | 449 | 'EVT_default_registration_status' => $default_reg_status, |
450 | 450 | 'EVT_member_only'=>$old_event['member_only'], |
@@ -456,25 +456,25 @@ discard block |
||
456 | 456 | |
457 | 457 | ); |
458 | 458 | $datatypes = array( |
459 | - '%s',// EVT_ID |
|
460 | - '%d',// EVT_display_desc |
|
461 | - '%d',// EVT_display_ticket_selector |
|
462 | - '%s',// EVT_visible_on |
|
463 | - '%d',// EVT_additional_limit |
|
464 | - '%s',// EVT_default_registration_status |
|
465 | - '%d',// EVT_member_only |
|
466 | - '%s',// EVT_phone |
|
467 | - '%d',// EVT_allow_overflow |
|
468 | - '%s',// EVT_timezone_string |
|
469 | - '%s',// EVT_external_URL |
|
470 | - '%d',// EVT_donations |
|
459 | + '%s', // EVT_ID |
|
460 | + '%d', // EVT_display_desc |
|
461 | + '%d', // EVT_display_ticket_selector |
|
462 | + '%s', // EVT_visible_on |
|
463 | + '%d', // EVT_additional_limit |
|
464 | + '%s', // EVT_default_registration_status |
|
465 | + '%d', // EVT_member_only |
|
466 | + '%s', // EVT_phone |
|
467 | + '%d', // EVT_allow_overflow |
|
468 | + '%s', // EVT_timezone_string |
|
469 | + '%s', // EVT_external_URL |
|
470 | + '%d', // EVT_donations |
|
471 | 471 | ); |
472 | 472 | $success = $wpdb->insert( |
473 | 473 | $this->_new_meta_table, |
474 | 474 | $cols_n_values, |
475 | 475 | $datatypes |
476 | 476 | ); |
477 | - if (! $success) { |
|
477 | + if ( ! $success) { |
|
478 | 478 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $cols_n_values, $datatypes)); |
479 | 479 | return 0; |
480 | 480 | } |
@@ -508,7 +508,7 @@ discard block |
||
508 | 508 | $new_id = $this->_insert_venue_into_posts($old_event); |
509 | 509 | if ($new_id) { |
510 | 510 | $this->_insert_venue_into_meta_table($new_id, $old_event); |
511 | - $guid = isset($old_event['venue_image']) ? $old_event['venue_image'] : null; |
|
511 | + $guid = isset($old_event['venue_image']) ? $old_event['venue_image'] : null; |
|
512 | 512 | $this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $new_id, $this); |
513 | 513 | } |
514 | 514 | // we don't bother recording the conversion from old events to venues as that |
@@ -534,10 +534,10 @@ discard block |
||
534 | 534 | 'VNU_city' => $old_event['city'], |
535 | 535 | 'VNU_zip' => $old_event['zip'], |
536 | 536 | 'post_title'=> $this->_get_venue_title_for_event($old_event), |
537 | - 'VNU_phone'=>$old_event['venue_phone'],// VNU_phone |
|
538 | - 'VNU_url'=>$old_event['venue_url'],// VNU_url |
|
539 | - 'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone |
|
540 | - 'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url |
|
537 | + 'VNU_phone'=>$old_event['venue_phone'], // VNU_phone |
|
538 | + 'VNU_url'=>$old_event['venue_url'], // VNU_url |
|
539 | + 'VNU_virtual_phone'=>$old_event['virtual_phone'], // VNU_virtual_phone |
|
540 | + 'VNU_virtual_url'=>$old_event['virtual_url'], // VNU_virtual_url |
|
541 | 541 | ); |
542 | 542 | $sql_conditions = array(); |
543 | 543 | foreach ($conditions as $column => $value) { |
@@ -547,7 +547,7 @@ discard block |
||
547 | 547 | FROM |
548 | 548 | {$wpdb->posts} as p INNER JOIN |
549 | 549 | {$wpdb->prefix}esp_venue_meta as v ON p.ID = v.VNU_ID |
550 | - WHERE " . implode(" AND ", $sql_conditions) . " LIMIT 1"; |
|
550 | + WHERE ".implode(" AND ", $sql_conditions)." LIMIT 1"; |
|
551 | 551 | $id = $wpdb->get_var($query); |
552 | 552 | return $id; |
553 | 553 | } |
@@ -572,39 +572,39 @@ discard block |
||
572 | 572 | { |
573 | 573 | global $wpdb; |
574 | 574 | $insertion_array = array( |
575 | - 'post_title'=> $this->_get_venue_title_for_event($old_event),// VNU_name |
|
576 | - 'post_content'=>'',// VNU_desc |
|
577 | - 'post_name'=> $this->_find_unique_slug($old_event['venue_title'], sanitize_title('venue-of-' . $old_event['event_name'])),// VNU_identifier |
|
578 | - 'post_date'=>current_time('mysql'),// VNU_created |
|
575 | + 'post_title'=> $this->_get_venue_title_for_event($old_event), // VNU_name |
|
576 | + 'post_content'=>'', // VNU_desc |
|
577 | + 'post_name'=> $this->_find_unique_slug($old_event['venue_title'], sanitize_title('venue-of-'.$old_event['event_name'])), // VNU_identifier |
|
578 | + 'post_date'=>current_time('mysql'), // VNU_created |
|
579 | 579 | 'post_date_gmt'=>get_gmt_from_date(current_time('mysql')), |
580 | - 'post_excerpt'=>'',// VNU_short_desc arbitrary only 50 characters |
|
581 | - 'post_modified'=>current_time('mysql'),// VNU_modified |
|
580 | + 'post_excerpt'=>'', // VNU_short_desc arbitrary only 50 characters |
|
581 | + 'post_modified'=>current_time('mysql'), // VNU_modified |
|
582 | 582 | 'post_modified_gmt'=>get_gmt_from_date(current_time('mysql')), |
583 | - 'post_author'=>$old_event['wp_user'],// VNU_wp_user |
|
584 | - 'post_parent'=>0,// parent |
|
585 | - 'menu_order'=>0,// VNU_order |
|
583 | + 'post_author'=>$old_event['wp_user'], // VNU_wp_user |
|
584 | + 'post_parent'=>0, // parent |
|
585 | + 'menu_order'=>0, // VNU_order |
|
586 | 586 | 'post_type'=>'espresso_venues'// post_type |
587 | 587 | ); |
588 | 588 | $datatypes_array = array( |
589 | - '%s',// VNU_name |
|
590 | - '%s',// VNU_desc |
|
591 | - '%s',// VNU_identifier |
|
592 | - '%s',// VNU_created |
|
589 | + '%s', // VNU_name |
|
590 | + '%s', // VNU_desc |
|
591 | + '%s', // VNU_identifier |
|
592 | + '%s', // VNU_created |
|
593 | 593 | '%s', |
594 | - '%s',// VNU_short_desc |
|
595 | - '%s',// VNU_modified |
|
594 | + '%s', // VNU_short_desc |
|
595 | + '%s', // VNU_modified |
|
596 | 596 | '%s', |
597 | - '%d',// VNU_wp_user |
|
598 | - '%d',// parent |
|
599 | - '%d',// VNU_order |
|
600 | - '%s',// post_type |
|
597 | + '%d', // VNU_wp_user |
|
598 | + '%d', // parent |
|
599 | + '%d', // VNU_order |
|
600 | + '%s', // post_type |
|
601 | 601 | ); |
602 | 602 | $success = $wpdb->insert( |
603 | 603 | $wpdb->posts, |
604 | 604 | $insertion_array, |
605 | 605 | $datatypes_array |
606 | 606 | ); |
607 | - if (! $success) { |
|
607 | + if ( ! $success) { |
|
608 | 608 | $this->add_error( |
609 | 609 | $this->get_migration_script()->_create_error_message_for_db_insertion( |
610 | 610 | $this->_old_table, |
@@ -632,13 +632,13 @@ discard block |
||
632 | 632 | // assume the country is the same as the organization's old settings |
633 | 633 | $country_iso = $this->get_migration_script()->get_default_country_iso(); |
634 | 634 | // find the state from the venue, or the organization, or just guess california |
635 | - if (! $old_event['state']) { |
|
635 | + if ( ! $old_event['state']) { |
|
636 | 636 | $old_org_options = get_option('events_organization_settings'); |
637 | 637 | $state_name = stripslashes($old_org_options['organization_state']); |
638 | 638 | } else { |
639 | 639 | $state_name = $old_event['state']; |
640 | 640 | } |
641 | - if (! $state_name) { |
|
641 | + if ( ! $state_name) { |
|
642 | 642 | $state_name = 'CA'; |
643 | 643 | } |
644 | 644 | // get a state ID with the same name, if possible |
@@ -651,39 +651,39 @@ discard block |
||
651 | 651 | } |
652 | 652 | // now insert into meta table |
653 | 653 | $insertion_array = array( |
654 | - 'VNU_ID'=>$cpt_id,// VNU_ID_fk |
|
655 | - 'VNU_address'=>stripslashes($old_event['address']),// VNU_address |
|
656 | - 'VNU_address2'=>stripslashes($old_event['address2']),// VNU_address2 |
|
657 | - 'VNU_city'=>stripslashes($old_event['city']),// VNU_city |
|
658 | - 'STA_ID'=>$state_id,// STA_ID |
|
659 | - 'CNT_ISO'=>$country_iso,// CNT_ISO |
|
660 | - 'VNU_zip'=>$old_event['zip'],// VNU_zip |
|
661 | - 'VNU_phone'=>$old_event['venue_phone'],// VNU_phone |
|
662 | - 'VNU_capacity'=>-1,// VNU_capacity |
|
663 | - 'VNU_url'=>$old_event['venue_url'],// VNU_url |
|
664 | - 'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone |
|
665 | - 'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url |
|
666 | - 'VNU_google_map_link'=>'',// VNU_google_map_link |
|
654 | + 'VNU_ID'=>$cpt_id, // VNU_ID_fk |
|
655 | + 'VNU_address'=>stripslashes($old_event['address']), // VNU_address |
|
656 | + 'VNU_address2'=>stripslashes($old_event['address2']), // VNU_address2 |
|
657 | + 'VNU_city'=>stripslashes($old_event['city']), // VNU_city |
|
658 | + 'STA_ID'=>$state_id, // STA_ID |
|
659 | + 'CNT_ISO'=>$country_iso, // CNT_ISO |
|
660 | + 'VNU_zip'=>$old_event['zip'], // VNU_zip |
|
661 | + 'VNU_phone'=>$old_event['venue_phone'], // VNU_phone |
|
662 | + 'VNU_capacity'=>-1, // VNU_capacity |
|
663 | + 'VNU_url'=>$old_event['venue_url'], // VNU_url |
|
664 | + 'VNU_virtual_phone'=>$old_event['virtual_phone'], // VNU_virtual_phone |
|
665 | + 'VNU_virtual_url'=>$old_event['virtual_url'], // VNU_virtual_url |
|
666 | + 'VNU_google_map_link'=>'', // VNU_google_map_link |
|
667 | 667 | 'VNU_enable_for_gmap'=>true // VNU_enable_for_gmap |
668 | 668 | ); |
669 | 669 | $datatypes = array( |
670 | - '%d',// VNU_ID_fk |
|
671 | - '%s',// VNU_address |
|
672 | - '%s',// VNU_address2 |
|
673 | - '%s',// VNU_city |
|
674 | - '%d',// STA_ID |
|
675 | - '%s',// CNT_ISO |
|
676 | - '%s',// VNU_zip |
|
677 | - '%s',// VNU_phone |
|
678 | - '%d',// VNU_capacity |
|
679 | - '%s',// VNU_url |
|
680 | - '%s',// VNU_virtual_phone |
|
681 | - '%s',// VNU_virtual_url |
|
682 | - '%s',// VNU_google_map_link |
|
683 | - '%d',// VNU_enable_for_gmap |
|
670 | + '%d', // VNU_ID_fk |
|
671 | + '%s', // VNU_address |
|
672 | + '%s', // VNU_address2 |
|
673 | + '%s', // VNU_city |
|
674 | + '%d', // STA_ID |
|
675 | + '%s', // CNT_ISO |
|
676 | + '%s', // VNU_zip |
|
677 | + '%s', // VNU_phone |
|
678 | + '%d', // VNU_capacity |
|
679 | + '%s', // VNU_url |
|
680 | + '%s', // VNU_virtual_phone |
|
681 | + '%s', // VNU_virtual_url |
|
682 | + '%s', // VNU_google_map_link |
|
683 | + '%d', // VNU_enable_for_gmap |
|
684 | 684 | ); |
685 | 685 | $success = $wpdb->insert($wpdb->prefix."esp_venue_meta", $insertion_array, $datatypes); |
686 | - if (! $success) { |
|
686 | + if ( ! $success) { |
|
687 | 687 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $insertion_array, $datatypes)); |
688 | 688 | return 0; |
689 | 689 | } |
@@ -700,11 +700,11 @@ discard block |
||
700 | 700 | private function _insert_new_venue_to_event($new_event_id, $new_venue_id) |
701 | 701 | { |
702 | 702 | global $wpdb; |
703 | - if (! $new_event_id) { |
|
703 | + if ( ! $new_event_id) { |
|
704 | 704 | $this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $new_event_id)); |
705 | 705 | return 0; |
706 | 706 | } |
707 | - if (! $new_venue_id) { |
|
707 | + if ( ! $new_venue_id) { |
|
708 | 708 | $this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $new_venue_id)); |
709 | 709 | return 0; |
710 | 710 | } |
@@ -714,12 +714,12 @@ discard block |
||
714 | 714 | 'EVV_primary'=>true |
715 | 715 | ); |
716 | 716 | $datatypes = array( |
717 | - '%d',// EVT_ID |
|
718 | - '%d',// VNU_ID |
|
719 | - '%d',// EVT_primary |
|
717 | + '%d', // EVT_ID |
|
718 | + '%d', // VNU_ID |
|
719 | + '%d', // EVT_primary |
|
720 | 720 | ); |
721 | 721 | $success = $wpdb->insert($wpdb->prefix."esp_event_venue", $cols_n_values, $datatypes); |
722 | - if (! $success) { |
|
722 | + if ( ! $success) { |
|
723 | 723 | $this->add_error( |
724 | 724 | $this->get_migration_script()->_create_error_message_for_db_insertion( |
725 | 725 | $this->_old_table, |
@@ -779,29 +779,29 @@ discard block |
||
779 | 779 | $start_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$start_date $start_time:00", $old_event_row['timezone_string']); |
780 | 780 | $end_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$end_date $end_time:00", $old_event_row['timezone_string']); |
781 | 781 | $cols_n_values = array( |
782 | - 'EVT_ID'=>$new_cpt_id,// EVT_ID |
|
783 | - 'DTT_EVT_start'=>$start_datetime_utc,// DTT_EVT_start |
|
784 | - 'DTT_EVT_end'=> $end_datetime_utc,// DTT_EVT_end |
|
785 | - 'DTT_reg_limit'=>intval($start_end_time_row['reg_limit']) ? $start_end_time_row['reg_limit'] : $old_event_row['reg_limit'],// DTT_reg_limit |
|
786 | - 'DTT_sold'=>0,// note: we will increment this as registrations are added during the migration |
|
782 | + 'EVT_ID'=>$new_cpt_id, // EVT_ID |
|
783 | + 'DTT_EVT_start'=>$start_datetime_utc, // DTT_EVT_start |
|
784 | + 'DTT_EVT_end'=> $end_datetime_utc, // DTT_EVT_end |
|
785 | + 'DTT_reg_limit'=>intval($start_end_time_row['reg_limit']) ? $start_end_time_row['reg_limit'] : $old_event_row['reg_limit'], // DTT_reg_limit |
|
786 | + 'DTT_sold'=>0, // note: we will increment this as registrations are added during the migration |
|
787 | 787 | // 'DTT_is_primary'=> 0 == $existing_datetimes ,//DTT_is_primary... if count==0, then we'll call it the 'primary' |
788 | - 'DTT_order'=> $existing_datetimes,// DTT_order, just give it the same order as the count of how many datetimes already exist |
|
788 | + 'DTT_order'=> $existing_datetimes, // DTT_order, just give it the same order as the count of how many datetimes already exist |
|
789 | 789 | 'DTT_parent'=>0, |
790 | 790 | 'DTT_deleted'=>false |
791 | 791 | ); |
792 | 792 | $datatypes = array( |
793 | - '%d',// EVT_Id |
|
794 | - '%s',// DTT_EVT_start |
|
795 | - '%s',// DTT_EVT_end |
|
796 | - '%d',// DTT_reg_limit |
|
797 | - '%d',// DTT_sold |
|
793 | + '%d', // EVT_Id |
|
794 | + '%s', // DTT_EVT_start |
|
795 | + '%s', // DTT_EVT_end |
|
796 | + '%d', // DTT_reg_limit |
|
797 | + '%d', // DTT_sold |
|
798 | 798 | // '%d',//DTT_is_primary |
799 | - '%d',// DTT_order |
|
800 | - '%d',// DTT_parent |
|
801 | - '%d',// DTT_deleted |
|
799 | + '%d', // DTT_order |
|
800 | + '%d', // DTT_parent |
|
801 | + '%d', // DTT_deleted |
|
802 | 802 | ); |
803 | 803 | $success = $wpdb->insert($this->_new_datetime_table, $cols_n_values, $datatypes); |
804 | - if (! $success) { |
|
804 | + if ( ! $success) { |
|
805 | 805 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_start_end_table, array_merge($old_event_row, $start_end_time_row), $this->_new_datetime_table, $cols_n_values, $datatypes)); |
806 | 806 | return 0; |
807 | 807 | } |
@@ -273,7 +273,6 @@ |
||
273 | 273 | /** |
274 | 274 | * Creates a 4.1 member price discount |
275 | 275 | * @global type $wpdb |
276 | - * @param type $old_price |
|
277 | 276 | * @return int |
278 | 277 | */ |
279 | 278 | private function _insert_new_global_surcharge_price($org_options) |
@@ -110,17 +110,17 @@ discard block |
||
110 | 110 | $old_org_options = get_option('events_organization_settings'); |
111 | 111 | foreach ($this->_org_options_we_know_how_to_migrate as $option_name) { |
112 | 112 | // only bother migrating if there's a setting to migrate. Otherwise we'll just use the default |
113 | - if (isset($old_org_options[ $option_name ])) { |
|
114 | - $this->_handle_org_option($option_name, $old_org_options[ $option_name ]); |
|
113 | + if (isset($old_org_options[$option_name])) { |
|
114 | + $this->_handle_org_option($option_name, $old_org_options[$option_name]); |
|
115 | 115 | } |
116 | - if ($option_name=='surcharge') { |
|
116 | + if ($option_name == 'surcharge') { |
|
117 | 117 | $this->_insert_new_global_surcharge_price($old_org_options); |
118 | 118 | } |
119 | 119 | $items_actually_migrated++; |
120 | 120 | } |
121 | 121 | |
122 | 122 | $success = EE_Config::instance()->update_espresso_config(false, true); |
123 | - if (! $success) { |
|
123 | + if ( ! $success) { |
|
124 | 124 | $this->add_error(sprintf(__('Could not save EE Config during org options stage. Reason: %s', 'event_espresso'), EE_Error::get_notices(false))); |
125 | 125 | EE_Error::overwrite_errors(); |
126 | 126 | } |
@@ -176,24 +176,24 @@ discard block |
||
176 | 176 | $c->organization->email = $value; |
177 | 177 | break; |
178 | 178 | case 'default_payment_status': |
179 | - $c->registration->default_STS_ID = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID($value); |
|
179 | + $c->registration->default_STS_ID = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID($value); |
|
180 | 180 | break; |
181 | 181 | case 'organization_country': |
182 | - $iso =$this->get_migration_script()->get_iso_from_3_1_country_id($value); |
|
182 | + $iso = $this->get_migration_script()->get_iso_from_3_1_country_id($value); |
|
183 | 183 | $c->organization->CNT_ISO = $iso; |
184 | 184 | $country_row = $this->get_migration_script()->get_or_create_country($iso); |
185 | - if (! $country_row) { |
|
185 | + if ( ! $country_row) { |
|
186 | 186 | $this->add_error(sprintf(__("Could not set country's currency config because no country exists for ISO %s", "event_espresso"), $iso)); |
187 | 187 | } |
188 | 188 | // can't use EE_Currency_Config's handy constructor because the models are off-limits right now (and it uses them) |
189 | - $c->currency->code = $country_row['CNT_cur_code']; // currency code: USD, CAD, EUR |
|
190 | - $c->currency->name = $country_row['CNT_cur_single']; // Dollar |
|
191 | - $c->currency->plural = $country_row['CNT_cur_plural']; // Dollars |
|
192 | - $c->currency->sign = $country_row['CNT_cur_sign']; // currency sign: $ |
|
193 | - $c->currency->sign_b4 = filter_var($country_row['CNT_cur_sign_b4'], FILTER_VALIDATE_BOOLEAN); // currency sign before or after: $TRUE or FALSE$ |
|
194 | - $c->currency->dec_plc = (int) $country_row['CNT_cur_dec_plc']; // decimal places: 2 = 0.00 3 = 0.000 |
|
195 | - $c->currency->dec_mrk = $country_row['CNT_cur_dec_mrk']; // decimal mark: (comma) ',' = 0,01 or (decimal) '.' = 0.01 |
|
196 | - $c->currency->thsnds = $country_row['CNT_cur_thsnds']; // thousands separator: (comma) ',' = 1,000 or (decimal) '.' = 1.000 |
|
189 | + $c->currency->code = $country_row['CNT_cur_code']; // currency code: USD, CAD, EUR |
|
190 | + $c->currency->name = $country_row['CNT_cur_single']; // Dollar |
|
191 | + $c->currency->plural = $country_row['CNT_cur_plural']; // Dollars |
|
192 | + $c->currency->sign = $country_row['CNT_cur_sign']; // currency sign: $ |
|
193 | + $c->currency->sign_b4 = filter_var($country_row['CNT_cur_sign_b4'], FILTER_VALIDATE_BOOLEAN); // currency sign before or after: $TRUE or FALSE$ |
|
194 | + $c->currency->dec_plc = (int) $country_row['CNT_cur_dec_plc']; // decimal places: 2 = 0.00 3 = 0.000 |
|
195 | + $c->currency->dec_mrk = $country_row['CNT_cur_dec_mrk']; // decimal mark: (comma) ',' = 0,01 or (decimal) '.' = 0.01 |
|
196 | + $c->currency->thsnds = $country_row['CNT_cur_thsnds']; // thousands separator: (comma) ',' = 1,000 or (decimal) '.' = 1.000 |
|
197 | 197 | // $c->currency = new EE_Currency_Config($c->organization->CNT_ISO);break; |
198 | 198 | // case 'currency_symbol': ignore the currency symbol. we'll just go by their country. |
199 | 199 | // $c->currency->sign = $value;break; |
@@ -280,7 +280,7 @@ discard block |
||
280 | 280 | { |
281 | 281 | $amount = floatval($org_options['surcharge']); |
282 | 282 | // dont createa a price if the surcharge is 0 |
283 | - if ($amount <=.01) { |
|
283 | + if ($amount <= .01) { |
|
284 | 284 | return 0; |
285 | 285 | } |
286 | 286 | if ($org_options['surcharge_type'] == 'flat_rate') { |
@@ -301,18 +301,18 @@ discard block |
||
301 | 301 | |
302 | 302 | ); |
303 | 303 | $datatypes = array( |
304 | - '%d',// PRT_ID |
|
305 | - '%f',// PRT_amount |
|
306 | - '%s',// PRC_name |
|
307 | - '%d',// PRC_is_default |
|
308 | - '%d',// PRC_overrides |
|
309 | - '%d',// PRC_order |
|
310 | - '%d',// PRC_deleted |
|
311 | - '%d',// PRC_parent |
|
304 | + '%d', // PRT_ID |
|
305 | + '%f', // PRT_amount |
|
306 | + '%s', // PRC_name |
|
307 | + '%d', // PRC_is_default |
|
308 | + '%d', // PRC_overrides |
|
309 | + '%d', // PRC_order |
|
310 | + '%d', // PRC_deleted |
|
311 | + '%d', // PRC_parent |
|
312 | 312 | ); |
313 | 313 | $price_table = $wpdb->prefix."esp_price"; |
314 | 314 | $success = $wpdb->insert($price_table, $cols_n_values, $datatypes); |
315 | - if (! $success) { |
|
315 | + if ( ! $success) { |
|
316 | 316 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion( |
317 | 317 | 'org_options', |
318 | 318 | array( |
@@ -342,8 +342,8 @@ discard block |
||
342 | 342 | 'payment_message', |
343 | 343 | 'message', |
344 | 344 | 'default_payment_status', |
345 | - 'surcharge',// unused? |
|
346 | - 'country_id',// unused? |
|
345 | + 'surcharge', // unused? |
|
346 | + 'country_id', // unused? |
|
347 | 347 | 'organization_country', |
348 | 348 | // 'currency_symbol', |
349 | 349 | 'expire_on_registration_end', |
@@ -355,13 +355,13 @@ discard block |
||
355 | 355 | 'show_pending_payment_options', |
356 | 356 | 'show_reg_footer', |
357 | 357 | 'skip_confirmation_page', |
358 | - 'allow_mer_discounts',// no equiv |
|
359 | - 'allow_mer_vouchers',// no equiv |
|
358 | + 'allow_mer_discounts', // no equiv |
|
359 | + 'allow_mer_vouchers', // no equiv |
|
360 | 360 | 'display_short_description_in_event_list', |
361 | 361 | 'display_description_on_multi_reg_page', |
362 | 362 | 'display_address_in_event_list', |
363 | 363 | 'display_address_in_regform', |
364 | - 'use_custom_post_types',// no equiv |
|
364 | + 'use_custom_post_types', // no equiv |
|
365 | 365 | 'display_ical_download', |
366 | 366 | 'display_featured_image', |
367 | 367 | 'themeroller', |
@@ -380,11 +380,11 @@ discard block |
||
380 | 380 | 'espresso_dashboard_widget', |
381 | 381 | 'time_reg_limit', |
382 | 382 | // 'use_attendee_pre_approval', removed in 4.1- instead this is factored into the default reg status |
383 | - 'use_personnel_manager',// no equiv |
|
383 | + 'use_personnel_manager', // no equiv |
|
384 | 384 | 'use_event_timezones', |
385 | 385 | 'full_logging', |
386 | - 'surcharge_type',// unused |
|
387 | - 'surcharge_text',// unused |
|
386 | + 'surcharge_type', // unused |
|
387 | + 'surcharge_text', // unused |
|
388 | 388 | 'affiliate_id', |
389 | 389 | 'site_license_key', |
390 | 390 | ); |
@@ -103,286 +103,286 @@ |
||
103 | 103 | class EE_DMS_4_1_0_org_options extends EE_Data_Migration_Script_Stage |
104 | 104 | { |
105 | 105 | |
106 | - public function _migration_step($num_items = 50) |
|
107 | - { |
|
106 | + public function _migration_step($num_items = 50) |
|
107 | + { |
|
108 | 108 | |
109 | - $items_actually_migrated = 0; |
|
110 | - $old_org_options = get_option('events_organization_settings'); |
|
111 | - foreach ($this->_org_options_we_know_how_to_migrate as $option_name) { |
|
112 | - // only bother migrating if there's a setting to migrate. Otherwise we'll just use the default |
|
113 | - if (isset($old_org_options[ $option_name ])) { |
|
114 | - $this->_handle_org_option($option_name, $old_org_options[ $option_name ]); |
|
115 | - } |
|
116 | - if ($option_name=='surcharge') { |
|
117 | - $this->_insert_new_global_surcharge_price($old_org_options); |
|
118 | - } |
|
119 | - $items_actually_migrated++; |
|
120 | - } |
|
109 | + $items_actually_migrated = 0; |
|
110 | + $old_org_options = get_option('events_organization_settings'); |
|
111 | + foreach ($this->_org_options_we_know_how_to_migrate as $option_name) { |
|
112 | + // only bother migrating if there's a setting to migrate. Otherwise we'll just use the default |
|
113 | + if (isset($old_org_options[ $option_name ])) { |
|
114 | + $this->_handle_org_option($option_name, $old_org_options[ $option_name ]); |
|
115 | + } |
|
116 | + if ($option_name=='surcharge') { |
|
117 | + $this->_insert_new_global_surcharge_price($old_org_options); |
|
118 | + } |
|
119 | + $items_actually_migrated++; |
|
120 | + } |
|
121 | 121 | |
122 | - $success = EE_Config::instance()->update_espresso_config(false, true); |
|
123 | - if (! $success) { |
|
124 | - $this->add_error(sprintf(__('Could not save EE Config during org options stage. Reason: %s', 'event_espresso'), EE_Error::get_notices(false))); |
|
125 | - EE_Error::overwrite_errors(); |
|
126 | - } |
|
127 | - EE_Network_Config::instance()->update_config(false, false); |
|
128 | - if ($this->count_records_migrated() + $items_actually_migrated >= $this->count_records_to_migrate()) { |
|
129 | - // we may have added new pages and this might be necessary |
|
130 | - flush_rewrite_rules(); |
|
131 | - $this->set_completed(); |
|
132 | - } |
|
133 | - return $items_actually_migrated; |
|
134 | - } |
|
135 | - public function _count_records_to_migrate() |
|
136 | - { |
|
137 | - $count_of_options_to_migrate = count($this->_org_options_we_know_how_to_migrate); |
|
138 | - return $count_of_options_to_migrate; |
|
139 | - } |
|
140 | - public function __construct() |
|
141 | - { |
|
142 | - $this->_pretty_name = __("Organization Options/Config", "event_espresso"); |
|
143 | - $this->_org_options_we_know_how_to_migrate = apply_filters('FHEE__EE_DMS_4_1_0_org_options__org_options_we_know_how_to_migrate', $this->_org_options_we_know_how_to_migrate); |
|
144 | - parent::__construct(); |
|
145 | - } |
|
122 | + $success = EE_Config::instance()->update_espresso_config(false, true); |
|
123 | + if (! $success) { |
|
124 | + $this->add_error(sprintf(__('Could not save EE Config during org options stage. Reason: %s', 'event_espresso'), EE_Error::get_notices(false))); |
|
125 | + EE_Error::overwrite_errors(); |
|
126 | + } |
|
127 | + EE_Network_Config::instance()->update_config(false, false); |
|
128 | + if ($this->count_records_migrated() + $items_actually_migrated >= $this->count_records_to_migrate()) { |
|
129 | + // we may have added new pages and this might be necessary |
|
130 | + flush_rewrite_rules(); |
|
131 | + $this->set_completed(); |
|
132 | + } |
|
133 | + return $items_actually_migrated; |
|
134 | + } |
|
135 | + public function _count_records_to_migrate() |
|
136 | + { |
|
137 | + $count_of_options_to_migrate = count($this->_org_options_we_know_how_to_migrate); |
|
138 | + return $count_of_options_to_migrate; |
|
139 | + } |
|
140 | + public function __construct() |
|
141 | + { |
|
142 | + $this->_pretty_name = __("Organization Options/Config", "event_espresso"); |
|
143 | + $this->_org_options_we_know_how_to_migrate = apply_filters('FHEE__EE_DMS_4_1_0_org_options__org_options_we_know_how_to_migrate', $this->_org_options_we_know_how_to_migrate); |
|
144 | + parent::__construct(); |
|
145 | + } |
|
146 | 146 | |
147 | - private function _handle_org_option($option_name, $value) |
|
148 | - { |
|
149 | - $c = EE_Config::instance(); |
|
150 | - $cn = EE_Network_Config::instance(); |
|
151 | - switch ($option_name) { |
|
152 | - case 'organization': |
|
153 | - $c->organization->name = $value; |
|
154 | - break; |
|
155 | - case 'organization_street1': |
|
156 | - $c->organization->address_1 = $value; |
|
157 | - break; |
|
158 | - case 'organization_street2': |
|
159 | - $c->organization->address_2 = $value; |
|
160 | - break; |
|
161 | - case 'organization_city': |
|
162 | - $c->organization->city = $value; |
|
163 | - break; |
|
164 | - case 'organization_state': |
|
165 | - try { |
|
166 | - $state = $this->get_migration_script()->get_or_create_state($value); |
|
167 | - $state_id = $state['STA_ID']; |
|
168 | - $c->organization->STA_ID = $state_id; |
|
169 | - } catch (EE_Error $e) { |
|
170 | - } |
|
171 | - break; |
|
172 | - case 'organization_zip': |
|
173 | - $c->organization->zip = $value; |
|
174 | - break; |
|
175 | - case 'contact_email': |
|
176 | - $c->organization->email = $value; |
|
177 | - break; |
|
178 | - case 'default_payment_status': |
|
179 | - $c->registration->default_STS_ID = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID($value); |
|
180 | - break; |
|
181 | - case 'organization_country': |
|
182 | - $iso =$this->get_migration_script()->get_iso_from_3_1_country_id($value); |
|
183 | - $c->organization->CNT_ISO = $iso; |
|
184 | - $country_row = $this->get_migration_script()->get_or_create_country($iso); |
|
185 | - if (! $country_row) { |
|
186 | - $this->add_error(sprintf(__("Could not set country's currency config because no country exists for ISO %s", "event_espresso"), $iso)); |
|
187 | - } |
|
188 | - // can't use EE_Currency_Config's handy constructor because the models are off-limits right now (and it uses them) |
|
189 | - $c->currency->code = $country_row['CNT_cur_code']; // currency code: USD, CAD, EUR |
|
190 | - $c->currency->name = $country_row['CNT_cur_single']; // Dollar |
|
191 | - $c->currency->plural = $country_row['CNT_cur_plural']; // Dollars |
|
192 | - $c->currency->sign = $country_row['CNT_cur_sign']; // currency sign: $ |
|
193 | - $c->currency->sign_b4 = filter_var($country_row['CNT_cur_sign_b4'], FILTER_VALIDATE_BOOLEAN); // currency sign before or after: $TRUE or FALSE$ |
|
194 | - $c->currency->dec_plc = (int) $country_row['CNT_cur_dec_plc']; // decimal places: 2 = 0.00 3 = 0.000 |
|
195 | - $c->currency->dec_mrk = $country_row['CNT_cur_dec_mrk']; // decimal mark: (comma) ',' = 0,01 or (decimal) '.' = 0.01 |
|
196 | - $c->currency->thsnds = $country_row['CNT_cur_thsnds']; // thousands separator: (comma) ',' = 1,000 or (decimal) '.' = 1.000 |
|
147 | + private function _handle_org_option($option_name, $value) |
|
148 | + { |
|
149 | + $c = EE_Config::instance(); |
|
150 | + $cn = EE_Network_Config::instance(); |
|
151 | + switch ($option_name) { |
|
152 | + case 'organization': |
|
153 | + $c->organization->name = $value; |
|
154 | + break; |
|
155 | + case 'organization_street1': |
|
156 | + $c->organization->address_1 = $value; |
|
157 | + break; |
|
158 | + case 'organization_street2': |
|
159 | + $c->organization->address_2 = $value; |
|
160 | + break; |
|
161 | + case 'organization_city': |
|
162 | + $c->organization->city = $value; |
|
163 | + break; |
|
164 | + case 'organization_state': |
|
165 | + try { |
|
166 | + $state = $this->get_migration_script()->get_or_create_state($value); |
|
167 | + $state_id = $state['STA_ID']; |
|
168 | + $c->organization->STA_ID = $state_id; |
|
169 | + } catch (EE_Error $e) { |
|
170 | + } |
|
171 | + break; |
|
172 | + case 'organization_zip': |
|
173 | + $c->organization->zip = $value; |
|
174 | + break; |
|
175 | + case 'contact_email': |
|
176 | + $c->organization->email = $value; |
|
177 | + break; |
|
178 | + case 'default_payment_status': |
|
179 | + $c->registration->default_STS_ID = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID($value); |
|
180 | + break; |
|
181 | + case 'organization_country': |
|
182 | + $iso =$this->get_migration_script()->get_iso_from_3_1_country_id($value); |
|
183 | + $c->organization->CNT_ISO = $iso; |
|
184 | + $country_row = $this->get_migration_script()->get_or_create_country($iso); |
|
185 | + if (! $country_row) { |
|
186 | + $this->add_error(sprintf(__("Could not set country's currency config because no country exists for ISO %s", "event_espresso"), $iso)); |
|
187 | + } |
|
188 | + // can't use EE_Currency_Config's handy constructor because the models are off-limits right now (and it uses them) |
|
189 | + $c->currency->code = $country_row['CNT_cur_code']; // currency code: USD, CAD, EUR |
|
190 | + $c->currency->name = $country_row['CNT_cur_single']; // Dollar |
|
191 | + $c->currency->plural = $country_row['CNT_cur_plural']; // Dollars |
|
192 | + $c->currency->sign = $country_row['CNT_cur_sign']; // currency sign: $ |
|
193 | + $c->currency->sign_b4 = filter_var($country_row['CNT_cur_sign_b4'], FILTER_VALIDATE_BOOLEAN); // currency sign before or after: $TRUE or FALSE$ |
|
194 | + $c->currency->dec_plc = (int) $country_row['CNT_cur_dec_plc']; // decimal places: 2 = 0.00 3 = 0.000 |
|
195 | + $c->currency->dec_mrk = $country_row['CNT_cur_dec_mrk']; // decimal mark: (comma) ',' = 0,01 or (decimal) '.' = 0.01 |
|
196 | + $c->currency->thsnds = $country_row['CNT_cur_thsnds']; // thousands separator: (comma) ',' = 1,000 or (decimal) '.' = 1.000 |
|
197 | 197 | // $c->currency = new EE_Currency_Config($c->organization->CNT_ISO);break; |
198 | 198 | // case 'currency_symbol': ignore the currency symbol. we'll just go by their country. |
199 | 199 | // $c->currency->sign = $value;break; |
200 | - case 'show_pending_payment_options': |
|
201 | - $c->registration->show_pending_payment_options = ($value == 'Y'); |
|
202 | - break; |
|
203 | - case 'display_address_in_regform': |
|
204 | - $c->template_settings->display_address_in_regform = ($value == 'Y'); |
|
205 | - break; |
|
206 | - case 'default_logo_url': |
|
207 | - $c->organization->logo_url = $value; |
|
208 | - break; |
|
209 | - case 'event_page_id': |
|
210 | - // also, find that post, and changes the shortcode in it from ESPRESSO_PAYMENTS |
|
211 | - // to ESPRESSO_THANK_YOU |
|
212 | - $reg_page_post = get_post($value); |
|
213 | - $reg_page_post->post_content = str_replace("[ESPRESSO_EVENTS]", "[ESPRESSO_CHECKOUT]", $reg_page_post->post_content); |
|
214 | - wp_update_post($reg_page_post); |
|
215 | - $c->core->reg_page_id = $value; |
|
216 | - break; |
|
217 | - case 'return_url': |
|
218 | - // also, find that post, and changes the shortcode in it from ESPRESSO_PAYMENTS |
|
219 | - // to ESPRESSO_THANK_YOU |
|
220 | - $thank_you_page_post = get_post($value); |
|
221 | - $thank_you_page_post->post_content = str_replace("[ESPRESSO_PAYMENTS]", "[ESPRESSO_THANK_YOU]", $thank_you_page_post->post_content); |
|
222 | - wp_update_post($thank_you_page_post); |
|
223 | - $c->core->thank_you_page_id = $value; |
|
224 | - break; |
|
225 | - case 'cancel_return': |
|
226 | - $c->core->cancel_page_id = $value; |
|
200 | + case 'show_pending_payment_options': |
|
201 | + $c->registration->show_pending_payment_options = ($value == 'Y'); |
|
202 | + break; |
|
203 | + case 'display_address_in_regform': |
|
204 | + $c->template_settings->display_address_in_regform = ($value == 'Y'); |
|
205 | + break; |
|
206 | + case 'default_logo_url': |
|
207 | + $c->organization->logo_url = $value; |
|
208 | + break; |
|
209 | + case 'event_page_id': |
|
210 | + // also, find that post, and changes the shortcode in it from ESPRESSO_PAYMENTS |
|
211 | + // to ESPRESSO_THANK_YOU |
|
212 | + $reg_page_post = get_post($value); |
|
213 | + $reg_page_post->post_content = str_replace("[ESPRESSO_EVENTS]", "[ESPRESSO_CHECKOUT]", $reg_page_post->post_content); |
|
214 | + wp_update_post($reg_page_post); |
|
215 | + $c->core->reg_page_id = $value; |
|
216 | + break; |
|
217 | + case 'return_url': |
|
218 | + // also, find that post, and changes the shortcode in it from ESPRESSO_PAYMENTS |
|
219 | + // to ESPRESSO_THANK_YOU |
|
220 | + $thank_you_page_post = get_post($value); |
|
221 | + $thank_you_page_post->post_content = str_replace("[ESPRESSO_PAYMENTS]", "[ESPRESSO_THANK_YOU]", $thank_you_page_post->post_content); |
|
222 | + wp_update_post($thank_you_page_post); |
|
223 | + $c->core->thank_you_page_id = $value; |
|
224 | + break; |
|
225 | + case 'cancel_return': |
|
226 | + $c->core->cancel_page_id = $value; |
|
227 | 227 | |
228 | - break; |
|
229 | - case 'notify_url': |
|
230 | - $c->core->txn_page_id = $value; |
|
231 | - break; |
|
232 | - case 'use_captcha': |
|
233 | - $c->registration->use_captcha = ($value == 'Y'); |
|
234 | - break; |
|
235 | - case 'recaptcha_publickey': |
|
236 | - $c->registration->recaptcha_publickey = $value; |
|
237 | - break; |
|
238 | - case 'recaptcha_privatekey': |
|
239 | - $c->registration->recaptcha_privatekey = $value; |
|
240 | - break; |
|
241 | - case 'recaptcha_theme': |
|
242 | - $c->registration->recaptcha_theme = $value; |
|
243 | - break; |
|
244 | - case 'recaptcha_width': |
|
245 | - $c->registration->recaptcha_width = $value; |
|
246 | - break; |
|
247 | - case 'recaptcha_language': |
|
248 | - $c->registration->recaptcha_language = $value; |
|
249 | - break; |
|
250 | - case 'espresso_dashboard_widget': |
|
251 | - $c->admin->use_dashboard_widget = ($value == 'Y'); |
|
252 | - break; |
|
253 | - case 'use_personnel_manager': |
|
254 | - $c->admin->use_personnel_manager = ($value == 'Y'); |
|
255 | - break; |
|
256 | - case 'use_event_timezones': |
|
257 | - $c->admin->use_event_timezones = ($value == 'Y'); |
|
258 | - break; |
|
259 | - case 'affiliate_id': |
|
260 | - $c->admin->affiliate_id = $value; |
|
261 | - break; |
|
262 | - case 'site_license_key': |
|
263 | - $cn->core->site_license_key = $value; |
|
264 | - break; |
|
265 | - default: |
|
266 | - do_action('AHEE__EE_DMS_4_1_0__handle_org_option', $option_name, $value); |
|
267 | - } |
|
268 | - } |
|
228 | + break; |
|
229 | + case 'notify_url': |
|
230 | + $c->core->txn_page_id = $value; |
|
231 | + break; |
|
232 | + case 'use_captcha': |
|
233 | + $c->registration->use_captcha = ($value == 'Y'); |
|
234 | + break; |
|
235 | + case 'recaptcha_publickey': |
|
236 | + $c->registration->recaptcha_publickey = $value; |
|
237 | + break; |
|
238 | + case 'recaptcha_privatekey': |
|
239 | + $c->registration->recaptcha_privatekey = $value; |
|
240 | + break; |
|
241 | + case 'recaptcha_theme': |
|
242 | + $c->registration->recaptcha_theme = $value; |
|
243 | + break; |
|
244 | + case 'recaptcha_width': |
|
245 | + $c->registration->recaptcha_width = $value; |
|
246 | + break; |
|
247 | + case 'recaptcha_language': |
|
248 | + $c->registration->recaptcha_language = $value; |
|
249 | + break; |
|
250 | + case 'espresso_dashboard_widget': |
|
251 | + $c->admin->use_dashboard_widget = ($value == 'Y'); |
|
252 | + break; |
|
253 | + case 'use_personnel_manager': |
|
254 | + $c->admin->use_personnel_manager = ($value == 'Y'); |
|
255 | + break; |
|
256 | + case 'use_event_timezones': |
|
257 | + $c->admin->use_event_timezones = ($value == 'Y'); |
|
258 | + break; |
|
259 | + case 'affiliate_id': |
|
260 | + $c->admin->affiliate_id = $value; |
|
261 | + break; |
|
262 | + case 'site_license_key': |
|
263 | + $cn->core->site_license_key = $value; |
|
264 | + break; |
|
265 | + default: |
|
266 | + do_action('AHEE__EE_DMS_4_1_0__handle_org_option', $option_name, $value); |
|
267 | + } |
|
268 | + } |
|
269 | 269 | |
270 | - /** |
|
271 | - * Creates a 4.1 member price discount |
|
272 | - * @global type $wpdb |
|
273 | - * @param type $old_price |
|
274 | - * @return int |
|
275 | - */ |
|
276 | - private function _insert_new_global_surcharge_price($org_options) |
|
277 | - { |
|
278 | - $amount = floatval($org_options['surcharge']); |
|
279 | - // dont createa a price if the surcharge is 0 |
|
280 | - if ($amount <=.01) { |
|
281 | - return 0; |
|
282 | - } |
|
283 | - if ($org_options['surcharge_type'] == 'flat_rate') { |
|
284 | - $price_type = EE_DMS_4_1_0_prices::price_type_flat_surcharge; |
|
285 | - } else { |
|
286 | - $price_type = EE_DMS_4_1_0_prices::price_type_percent_surcharge; |
|
287 | - } |
|
288 | - global $wpdb; |
|
289 | - $cols_n_values = array( |
|
290 | - 'PRT_ID'=>$price_type, |
|
291 | - 'PRC_amount'=>$amount, |
|
292 | - 'PRC_name'=> $org_options['surcharge_text'], |
|
293 | - 'PRC_is_default'=>true, |
|
294 | - 'PRC_overrides'=>false, |
|
295 | - 'PRC_order'=>100, |
|
296 | - 'PRC_deleted'=>false, |
|
297 | - 'PRC_parent'=>null |
|
270 | + /** |
|
271 | + * Creates a 4.1 member price discount |
|
272 | + * @global type $wpdb |
|
273 | + * @param type $old_price |
|
274 | + * @return int |
|
275 | + */ |
|
276 | + private function _insert_new_global_surcharge_price($org_options) |
|
277 | + { |
|
278 | + $amount = floatval($org_options['surcharge']); |
|
279 | + // dont createa a price if the surcharge is 0 |
|
280 | + if ($amount <=.01) { |
|
281 | + return 0; |
|
282 | + } |
|
283 | + if ($org_options['surcharge_type'] == 'flat_rate') { |
|
284 | + $price_type = EE_DMS_4_1_0_prices::price_type_flat_surcharge; |
|
285 | + } else { |
|
286 | + $price_type = EE_DMS_4_1_0_prices::price_type_percent_surcharge; |
|
287 | + } |
|
288 | + global $wpdb; |
|
289 | + $cols_n_values = array( |
|
290 | + 'PRT_ID'=>$price_type, |
|
291 | + 'PRC_amount'=>$amount, |
|
292 | + 'PRC_name'=> $org_options['surcharge_text'], |
|
293 | + 'PRC_is_default'=>true, |
|
294 | + 'PRC_overrides'=>false, |
|
295 | + 'PRC_order'=>100, |
|
296 | + 'PRC_deleted'=>false, |
|
297 | + 'PRC_parent'=>null |
|
298 | 298 | |
299 | - ); |
|
300 | - $datatypes = array( |
|
301 | - '%d',// PRT_ID |
|
302 | - '%f',// PRT_amount |
|
303 | - '%s',// PRC_name |
|
304 | - '%d',// PRC_is_default |
|
305 | - '%d',// PRC_overrides |
|
306 | - '%d',// PRC_order |
|
307 | - '%d',// PRC_deleted |
|
308 | - '%d',// PRC_parent |
|
309 | - ); |
|
310 | - $price_table = $wpdb->prefix."esp_price"; |
|
311 | - $success = $wpdb->insert($price_table, $cols_n_values, $datatypes); |
|
312 | - if (! $success) { |
|
313 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion( |
|
314 | - 'org_options', |
|
315 | - array( |
|
316 | - 'surcharge'=>$org_options['surcharge'], |
|
317 | - 'surcharge_type'=>$org_options['surcharge_type'], |
|
318 | - 'surcharge_text'=>$org_options['surcharge_text']), |
|
319 | - $price_table, |
|
320 | - $cols_n_values, |
|
321 | - $datatypes |
|
322 | - )); |
|
323 | - return 0; |
|
324 | - } |
|
325 | - $new_id = $wpdb->insert_id; |
|
326 | - return $new_id; |
|
327 | - } |
|
299 | + ); |
|
300 | + $datatypes = array( |
|
301 | + '%d',// PRT_ID |
|
302 | + '%f',// PRT_amount |
|
303 | + '%s',// PRC_name |
|
304 | + '%d',// PRC_is_default |
|
305 | + '%d',// PRC_overrides |
|
306 | + '%d',// PRC_order |
|
307 | + '%d',// PRC_deleted |
|
308 | + '%d',// PRC_parent |
|
309 | + ); |
|
310 | + $price_table = $wpdb->prefix."esp_price"; |
|
311 | + $success = $wpdb->insert($price_table, $cols_n_values, $datatypes); |
|
312 | + if (! $success) { |
|
313 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion( |
|
314 | + 'org_options', |
|
315 | + array( |
|
316 | + 'surcharge'=>$org_options['surcharge'], |
|
317 | + 'surcharge_type'=>$org_options['surcharge_type'], |
|
318 | + 'surcharge_text'=>$org_options['surcharge_text']), |
|
319 | + $price_table, |
|
320 | + $cols_n_values, |
|
321 | + $datatypes |
|
322 | + )); |
|
323 | + return 0; |
|
324 | + } |
|
325 | + $new_id = $wpdb->insert_id; |
|
326 | + return $new_id; |
|
327 | + } |
|
328 | 328 | |
329 | - protected $_org_options_we_know_how_to_migrate = array( |
|
330 | - 'organization', |
|
331 | - 'organization_street1', |
|
332 | - 'organization_street2', |
|
333 | - 'organization_city', |
|
334 | - 'organization_state', |
|
335 | - 'organization_zip', |
|
336 | - 'contact_email', |
|
337 | - 'default_mail', |
|
338 | - 'payment_subject', |
|
339 | - 'payment_message', |
|
340 | - 'message', |
|
341 | - 'default_payment_status', |
|
342 | - 'surcharge',// unused? |
|
343 | - 'country_id',// unused? |
|
344 | - 'organization_country', |
|
329 | + protected $_org_options_we_know_how_to_migrate = array( |
|
330 | + 'organization', |
|
331 | + 'organization_street1', |
|
332 | + 'organization_street2', |
|
333 | + 'organization_city', |
|
334 | + 'organization_state', |
|
335 | + 'organization_zip', |
|
336 | + 'contact_email', |
|
337 | + 'default_mail', |
|
338 | + 'payment_subject', |
|
339 | + 'payment_message', |
|
340 | + 'message', |
|
341 | + 'default_payment_status', |
|
342 | + 'surcharge',// unused? |
|
343 | + 'country_id',// unused? |
|
344 | + 'organization_country', |
|
345 | 345 | // 'currency_symbol', |
346 | - 'expire_on_registration_end', |
|
347 | - 'email_before_payment', |
|
348 | - 'email_fancy_headers', |
|
349 | - 'enable_default_style', |
|
350 | - 'event_ssl_active', |
|
351 | - 'selected_style', |
|
352 | - 'show_pending_payment_options', |
|
353 | - 'show_reg_footer', |
|
354 | - 'skip_confirmation_page', |
|
355 | - 'allow_mer_discounts',// no equiv |
|
356 | - 'allow_mer_vouchers',// no equiv |
|
357 | - 'display_short_description_in_event_list', |
|
358 | - 'display_description_on_multi_reg_page', |
|
359 | - 'display_address_in_event_list', |
|
360 | - 'display_address_in_regform', |
|
361 | - 'use_custom_post_types',// no equiv |
|
362 | - 'display_ical_download', |
|
363 | - 'display_featured_image', |
|
364 | - 'themeroller', |
|
365 | - 'default_logo_url', |
|
366 | - 'event_page_id', |
|
367 | - 'return_url', |
|
368 | - 'cancel_return', |
|
369 | - 'notify_url', |
|
370 | - 'events_in_dashboard', |
|
371 | - 'use_captcha', |
|
372 | - 'recaptcha_publickey', |
|
373 | - 'recaptcha_privatekey', |
|
374 | - 'recaptcha_theme', |
|
375 | - 'recaptcha_width', |
|
376 | - 'recaptcha_language', |
|
377 | - 'espresso_dashboard_widget', |
|
378 | - 'time_reg_limit', |
|
346 | + 'expire_on_registration_end', |
|
347 | + 'email_before_payment', |
|
348 | + 'email_fancy_headers', |
|
349 | + 'enable_default_style', |
|
350 | + 'event_ssl_active', |
|
351 | + 'selected_style', |
|
352 | + 'show_pending_payment_options', |
|
353 | + 'show_reg_footer', |
|
354 | + 'skip_confirmation_page', |
|
355 | + 'allow_mer_discounts',// no equiv |
|
356 | + 'allow_mer_vouchers',// no equiv |
|
357 | + 'display_short_description_in_event_list', |
|
358 | + 'display_description_on_multi_reg_page', |
|
359 | + 'display_address_in_event_list', |
|
360 | + 'display_address_in_regform', |
|
361 | + 'use_custom_post_types',// no equiv |
|
362 | + 'display_ical_download', |
|
363 | + 'display_featured_image', |
|
364 | + 'themeroller', |
|
365 | + 'default_logo_url', |
|
366 | + 'event_page_id', |
|
367 | + 'return_url', |
|
368 | + 'cancel_return', |
|
369 | + 'notify_url', |
|
370 | + 'events_in_dashboard', |
|
371 | + 'use_captcha', |
|
372 | + 'recaptcha_publickey', |
|
373 | + 'recaptcha_privatekey', |
|
374 | + 'recaptcha_theme', |
|
375 | + 'recaptcha_width', |
|
376 | + 'recaptcha_language', |
|
377 | + 'espresso_dashboard_widget', |
|
378 | + 'time_reg_limit', |
|
379 | 379 | // 'use_attendee_pre_approval', removed in 4.1- instead this is factored into the default reg status |
380 | - 'use_personnel_manager',// no equiv |
|
381 | - 'use_event_timezones', |
|
382 | - 'full_logging', |
|
383 | - 'surcharge_type',// unused |
|
384 | - 'surcharge_text',// unused |
|
385 | - 'affiliate_id', |
|
386 | - 'site_license_key', |
|
387 | - ); |
|
380 | + 'use_personnel_manager',// no equiv |
|
381 | + 'use_event_timezones', |
|
382 | + 'full_logging', |
|
383 | + 'surcharge_type',// unused |
|
384 | + 'surcharge_text',// unused |
|
385 | + 'affiliate_id', |
|
386 | + 'site_license_key', |
|
387 | + ); |
|
388 | 388 | } |
@@ -349,8 +349,8 @@ discard block |
||
349 | 349 | /** |
350 | 350 | * Adds a join between a ticket and a price |
351 | 351 | * @global type $wpdb |
352 | - * @param type $new_ticket_id |
|
353 | - * @param type $new_price_id |
|
352 | + * @param integer $new_ticket_id |
|
353 | + * @param integer $new_price_id |
|
354 | 354 | * @return int |
355 | 355 | */ |
356 | 356 | private function _insert_ticket_price_relation($new_ticket_id, $new_price_id) |
@@ -376,8 +376,7 @@ discard block |
||
376 | 376 | /** |
377 | 377 | * Adds a join between a ticket and a datetime |
378 | 378 | * @global type $wpdb |
379 | - * @param type $new_ticket_id |
|
380 | - * @param type $new_price_id |
|
379 | + * @param integer $new_ticket_id |
|
381 | 380 | * @return int |
382 | 381 | */ |
383 | 382 | private function _insert_datetime_ticket_relation($new_datetime_id, $new_ticket_id) |
@@ -87,57 +87,57 @@ discard block |
||
87 | 87 | */ |
88 | 88 | class EE_DMS_4_1_0_prices extends EE_Data_Migration_Script_Stage_Table |
89 | 89 | { |
90 | - private $_new_price_table; |
|
91 | - private $_new_ticket_table; |
|
92 | - private $_new_ticket_price_table; |
|
93 | - private $_new_datetime_ticket_table; |
|
94 | - /** |
|
95 | - * A count of all the different tickets created, used for setting the new ones' TKT_Order |
|
96 | - * @var int |
|
97 | - */ |
|
98 | - private $_ticket_count = 0; |
|
99 | - const price_type_base = 1; |
|
100 | - const price_type_member_discount = 3; |
|
101 | - const price_type_percent_surcharge = 4; |
|
102 | - const price_type_flat_surcharge = 5; |
|
90 | + private $_new_price_table; |
|
91 | + private $_new_ticket_table; |
|
92 | + private $_new_ticket_price_table; |
|
93 | + private $_new_datetime_ticket_table; |
|
94 | + /** |
|
95 | + * A count of all the different tickets created, used for setting the new ones' TKT_Order |
|
96 | + * @var int |
|
97 | + */ |
|
98 | + private $_ticket_count = 0; |
|
99 | + const price_type_base = 1; |
|
100 | + const price_type_member_discount = 3; |
|
101 | + const price_type_percent_surcharge = 4; |
|
102 | + const price_type_flat_surcharge = 5; |
|
103 | 103 | |
104 | - public function __construct() |
|
105 | - { |
|
106 | - global $wpdb; |
|
107 | - $this->_pretty_name = __("Prices", "event_espresso"); |
|
108 | - $this->_old_table = $wpdb->prefix."events_prices"; |
|
109 | - $this->select_expression = 'p.*, e.event_status'; |
|
110 | - $this->_extra_where_sql = ' AS p |
|
104 | + public function __construct() |
|
105 | + { |
|
106 | + global $wpdb; |
|
107 | + $this->_pretty_name = __("Prices", "event_espresso"); |
|
108 | + $this->_old_table = $wpdb->prefix."events_prices"; |
|
109 | + $this->select_expression = 'p.*, e.event_status'; |
|
110 | + $this->_extra_where_sql = ' AS p |
|
111 | 111 | INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON p.event_id=e.id |
112 | 112 | WHERE e.event_status!="D"'; |
113 | - $this->_new_price_table = $wpdb->prefix."esp_price"; |
|
114 | - $this->_new_ticket_table = $wpdb->prefix."esp_ticket"; |
|
115 | - $this->_new_ticket_price_table = $wpdb->prefix."esp_ticket_price"; |
|
116 | - $this->_new_datetime_ticket_table = $wpdb->prefix."esp_datetime_ticket"; |
|
117 | - parent::__construct(); |
|
118 | - } |
|
119 | - protected function _migrate_old_row($old_row) |
|
120 | - { |
|
121 | - // create the base price |
|
122 | - $new_price_id = $this->_insert_new_price($old_row); |
|
123 | - // create the member discount if there is any |
|
124 | - // commented-out because we may actually NOT be supporting this in 4.1 |
|
113 | + $this->_new_price_table = $wpdb->prefix."esp_price"; |
|
114 | + $this->_new_ticket_table = $wpdb->prefix."esp_ticket"; |
|
115 | + $this->_new_ticket_price_table = $wpdb->prefix."esp_ticket_price"; |
|
116 | + $this->_new_datetime_ticket_table = $wpdb->prefix."esp_datetime_ticket"; |
|
117 | + parent::__construct(); |
|
118 | + } |
|
119 | + protected function _migrate_old_row($old_row) |
|
120 | + { |
|
121 | + // create the base price |
|
122 | + $new_price_id = $this->_insert_new_price($old_row); |
|
123 | + // create the member discount if there is any |
|
124 | + // commented-out because we may actually NOT be supporting this in 4.1 |
|
125 | 125 | // if($old_row['event_cost'] != $old_row['member_price']){ |
126 | 126 | // $member_price_discount_id = $this->_insert_new_member_price($old_row); |
127 | 127 | // }else{ |
128 | 128 | // $member_price_discount_id = 0; |
129 | 129 | // } |
130 | - // create the surcharge if there is any |
|
131 | - if (floatval($old_row['surcharge']) >= 0.01) { |
|
132 | - $surcharge_price_id = $this->_insert_new_surcharge_price($old_row); |
|
133 | - $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id,$surcharge_price_id)); |
|
134 | - } else { |
|
135 | - $surcharge_price_id = 0; |
|
136 | - $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id)); |
|
137 | - } |
|
138 | - // associate the ticket to all datetimes for event (ie, this ONE ticket grants access to ALL datetimes, not just one of the attendee's choice. |
|
139 | - // if the latter were the case, then we'd create a separate ticket for each datetime and ahve their association be one-to-one) |
|
140 | - // create ticket |
|
130 | + // create the surcharge if there is any |
|
131 | + if (floatval($old_row['surcharge']) >= 0.01) { |
|
132 | + $surcharge_price_id = $this->_insert_new_surcharge_price($old_row); |
|
133 | + $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id,$surcharge_price_id)); |
|
134 | + } else { |
|
135 | + $surcharge_price_id = 0; |
|
136 | + $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id)); |
|
137 | + } |
|
138 | + // associate the ticket to all datetimes for event (ie, this ONE ticket grants access to ALL datetimes, not just one of the attendee's choice. |
|
139 | + // if the latter were the case, then we'd create a separate ticket for each datetime and ahve their association be one-to-one) |
|
140 | + // create ticket |
|
141 | 141 | // $ticket_id = $this->_insert_new_ticket($old_row); |
142 | 142 | // if($ticket_id){ |
143 | 143 | // $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_ticket_table, $ticket_id); |
@@ -149,62 +149,62 @@ discard block |
||
149 | 149 | // $this->_insert_datetime_ticket_relation($new_datetime_id, $ticket_id); |
150 | 150 | // } |
151 | 151 | // } |
152 | - // create a ticket for each old price -old datetime combo |
|
153 | - $tickets_for_old_price = array(); |
|
154 | - foreach ($this->_get_datetime_ids_for_old_event_id($old_row['event_id']) as $new_datetime_id) { |
|
155 | - $ticket_id = $this->_insert_new_ticket($old_row); |
|
156 | - $tickets_for_old_price[] = $ticket_id; |
|
157 | - // associate to old prices |
|
158 | - $this->_insert_ticket_price_relation($ticket_id, $new_price_id); |
|
159 | - $this->_insert_ticket_price_relation($ticket_id, $surcharge_price_id); |
|
160 | - $this->_insert_datetime_ticket_relation($new_datetime_id, $ticket_id); |
|
161 | - } |
|
162 | - $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_ticket_table, $tickets_for_old_price); |
|
163 | - } |
|
164 | - /** |
|
165 | - * Creates a 4.1 price base type |
|
166 | - * @global type $wpdb |
|
167 | - * @param type $old_price |
|
168 | - * @return int |
|
169 | - */ |
|
170 | - private function _insert_new_price($old_price) |
|
171 | - { |
|
172 | - global $wpdb; |
|
173 | - $cols_n_values = array( |
|
174 | - 'PRT_ID'=>self::price_type_base, |
|
175 | - 'PRC_amount'=>floatval($old_price['event_cost']), |
|
176 | - 'PRC_name'=>$old_price['price_type'], |
|
177 | - 'PRC_is_default'=>false, |
|
178 | - 'PRC_overrides'=>false, |
|
179 | - 'PRC_order'=>0, |
|
180 | - 'PRC_deleted'=>false, |
|
181 | - 'PRC_parent'=>null |
|
152 | + // create a ticket for each old price -old datetime combo |
|
153 | + $tickets_for_old_price = array(); |
|
154 | + foreach ($this->_get_datetime_ids_for_old_event_id($old_row['event_id']) as $new_datetime_id) { |
|
155 | + $ticket_id = $this->_insert_new_ticket($old_row); |
|
156 | + $tickets_for_old_price[] = $ticket_id; |
|
157 | + // associate to old prices |
|
158 | + $this->_insert_ticket_price_relation($ticket_id, $new_price_id); |
|
159 | + $this->_insert_ticket_price_relation($ticket_id, $surcharge_price_id); |
|
160 | + $this->_insert_datetime_ticket_relation($new_datetime_id, $ticket_id); |
|
161 | + } |
|
162 | + $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_ticket_table, $tickets_for_old_price); |
|
163 | + } |
|
164 | + /** |
|
165 | + * Creates a 4.1 price base type |
|
166 | + * @global type $wpdb |
|
167 | + * @param type $old_price |
|
168 | + * @return int |
|
169 | + */ |
|
170 | + private function _insert_new_price($old_price) |
|
171 | + { |
|
172 | + global $wpdb; |
|
173 | + $cols_n_values = array( |
|
174 | + 'PRT_ID'=>self::price_type_base, |
|
175 | + 'PRC_amount'=>floatval($old_price['event_cost']), |
|
176 | + 'PRC_name'=>$old_price['price_type'], |
|
177 | + 'PRC_is_default'=>false, |
|
178 | + 'PRC_overrides'=>false, |
|
179 | + 'PRC_order'=>0, |
|
180 | + 'PRC_deleted'=>false, |
|
181 | + 'PRC_parent'=>null |
|
182 | 182 | |
183 | - ); |
|
184 | - $datatypes = array( |
|
185 | - '%d',// PRT_ID |
|
186 | - '%f',// PRT_amount |
|
187 | - '%s',// PRC_name |
|
188 | - '%d',// PRC_is_default |
|
189 | - '%d',// PRC_overrides |
|
190 | - '%d',// PRC_order |
|
191 | - '%d',// PRC_deleted |
|
192 | - '%d',// PRC_parent |
|
193 | - ); |
|
194 | - $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes); |
|
195 | - if (! $success) { |
|
196 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes)); |
|
197 | - return 0; |
|
198 | - } |
|
199 | - $new_id = $wpdb->insert_id; |
|
200 | - return $new_id; |
|
201 | - } |
|
202 | - /** |
|
203 | - * Creates a 4.1 member price discount |
|
204 | - * @global type $wpdb |
|
205 | - * @param type $old_price |
|
206 | - * @return int |
|
207 | - */ |
|
183 | + ); |
|
184 | + $datatypes = array( |
|
185 | + '%d',// PRT_ID |
|
186 | + '%f',// PRT_amount |
|
187 | + '%s',// PRC_name |
|
188 | + '%d',// PRC_is_default |
|
189 | + '%d',// PRC_overrides |
|
190 | + '%d',// PRC_order |
|
191 | + '%d',// PRC_deleted |
|
192 | + '%d',// PRC_parent |
|
193 | + ); |
|
194 | + $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes); |
|
195 | + if (! $success) { |
|
196 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes)); |
|
197 | + return 0; |
|
198 | + } |
|
199 | + $new_id = $wpdb->insert_id; |
|
200 | + return $new_id; |
|
201 | + } |
|
202 | + /** |
|
203 | + * Creates a 4.1 member price discount |
|
204 | + * @global type $wpdb |
|
205 | + * @param type $old_price |
|
206 | + * @return int |
|
207 | + */ |
|
208 | 208 | // private function _insert_new_member_price($old_price){ |
209 | 209 | // $discount_amount = floatval($old_price['event_cost']) - floatval($old_price['member_price']); |
210 | 210 | // global $wpdb; |
@@ -237,207 +237,207 @@ discard block |
||
237 | 237 | // $new_id = $wpdb->insert_id; |
238 | 238 | // return $new_id; |
239 | 239 | // } |
240 | - /** |
|
241 | - * Creates a 4.1 member price discount |
|
242 | - * @global type $wpdb |
|
243 | - * @param type $old_price |
|
244 | - * @return int |
|
245 | - */ |
|
246 | - private function _insert_new_surcharge_price($old_price) |
|
247 | - { |
|
240 | + /** |
|
241 | + * Creates a 4.1 member price discount |
|
242 | + * @global type $wpdb |
|
243 | + * @param type $old_price |
|
244 | + * @return int |
|
245 | + */ |
|
246 | + private function _insert_new_surcharge_price($old_price) |
|
247 | + { |
|
248 | 248 | |
249 | - if ($old_price['surcharge_type'] == 'flat_rate') { |
|
250 | - $price_type = self::price_type_flat_surcharge; |
|
251 | - } else { |
|
252 | - $price_type = self::price_type_percent_surcharge; |
|
253 | - } |
|
254 | - global $wpdb; |
|
255 | - $cols_n_values = array( |
|
256 | - 'PRT_ID'=>$price_type, |
|
257 | - 'PRC_amount'=>floatval($old_price['surcharge']), |
|
258 | - 'PRC_name'=> __("Surcharge", "event_espresso"), |
|
259 | - 'PRC_is_default'=>false, |
|
260 | - 'PRC_overrides'=>false, |
|
261 | - 'PRC_order'=>20, |
|
262 | - 'PRC_deleted'=>false, |
|
263 | - 'PRC_parent'=>null |
|
249 | + if ($old_price['surcharge_type'] == 'flat_rate') { |
|
250 | + $price_type = self::price_type_flat_surcharge; |
|
251 | + } else { |
|
252 | + $price_type = self::price_type_percent_surcharge; |
|
253 | + } |
|
254 | + global $wpdb; |
|
255 | + $cols_n_values = array( |
|
256 | + 'PRT_ID'=>$price_type, |
|
257 | + 'PRC_amount'=>floatval($old_price['surcharge']), |
|
258 | + 'PRC_name'=> __("Surcharge", "event_espresso"), |
|
259 | + 'PRC_is_default'=>false, |
|
260 | + 'PRC_overrides'=>false, |
|
261 | + 'PRC_order'=>20, |
|
262 | + 'PRC_deleted'=>false, |
|
263 | + 'PRC_parent'=>null |
|
264 | 264 | |
265 | - ); |
|
266 | - $datatypes = array( |
|
267 | - '%d',// PRT_ID |
|
268 | - '%f',// PRT_amount |
|
269 | - '%s',// PRC_name |
|
270 | - '%d',// PRC_is_default |
|
271 | - '%d',// PRC_overrides |
|
272 | - '%d',// PRC_order |
|
273 | - '%d',// PRC_deleted |
|
274 | - '%d',// PRC_parent |
|
275 | - ); |
|
276 | - $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes); |
|
277 | - if (! $success) { |
|
278 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes)); |
|
279 | - return 0; |
|
280 | - } |
|
281 | - $new_id = $wpdb->insert_id; |
|
282 | - return $new_id; |
|
283 | - } |
|
284 | - /** |
|
285 | - * Inserts a 4.1 ticket based off the 3.1 price, and the price IDs we've already made from the 3.1 price |
|
286 | - * @param $old_price_row array where keys are columns |
|
287 | - * @param $new_base_price_id int |
|
288 | - * @param $new_member_discount_id int |
|
289 | - * @param $new_surcharge_id int |
|
290 | - * @return int new ticket id |
|
291 | - */ |
|
292 | - private function _insert_new_ticket($old_price_row) |
|
293 | - { |
|
294 | - global $wpdb; |
|
295 | - $event_row = $this->_get_event_row($old_price_row['event_id']); |
|
296 | - if ($old_price_row['surcharge_type'] == 'flat_rate') { |
|
297 | - $final_ticket_price = floatval($old_price_row['event_cost']) + floatval($old_price_row['surcharge']); |
|
298 | - } else {// percent surcharge |
|
299 | - $final_ticket_price = floatval($old_price_row['event_cost']) * (1 + floatval($old_price_row['surcharge'])/100); |
|
300 | - } |
|
301 | - $start_date = $event_row['registration_start']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_startT']); |
|
302 | - $start_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $start_date, $event_row['timezone_string']); |
|
303 | - $end_date = $event_row['registration_end']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_endT']); |
|
304 | - $end_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $end_date, $event_row['timezone_string']); |
|
305 | - $cols_n_values = array( |
|
306 | - 'TTM_ID'=>0, |
|
307 | - 'TKT_name'=>$old_price_row['price_type'], |
|
308 | - 'TKT_description'=>'', |
|
309 | - 'TKT_start_date'=>$start_date_utc, |
|
310 | - 'TKT_end_date'=>$end_date_utc, |
|
311 | - 'TKT_min'=>0, |
|
312 | - 'TKT_max'=>-1, |
|
313 | - 'TKT_price'=>$final_ticket_price, |
|
314 | - 'TKT_sold'=> 0,// note: this will get calculated as we actually add registrations during the migration |
|
315 | - 'TKT_qty'=> -1, |
|
316 | - 'TKT_uses'=> 1, |
|
317 | - 'TKT_taxable'=>false,// so by default, old prices are NOT taxable. This way they don't suddenly have a sudden spike in prices |
|
318 | - 'TKT_is_default'=>false, |
|
319 | - 'TKT_order'=>$this->_get_ticket_count(), |
|
320 | - 'TKT_row'=>0,// doesn't matter because UI reset this on first save anyways |
|
321 | - 'TKT_deleted'=>false, |
|
322 | - 'TKT_parent'=>0 |
|
265 | + ); |
|
266 | + $datatypes = array( |
|
267 | + '%d',// PRT_ID |
|
268 | + '%f',// PRT_amount |
|
269 | + '%s',// PRC_name |
|
270 | + '%d',// PRC_is_default |
|
271 | + '%d',// PRC_overrides |
|
272 | + '%d',// PRC_order |
|
273 | + '%d',// PRC_deleted |
|
274 | + '%d',// PRC_parent |
|
275 | + ); |
|
276 | + $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes); |
|
277 | + if (! $success) { |
|
278 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes)); |
|
279 | + return 0; |
|
280 | + } |
|
281 | + $new_id = $wpdb->insert_id; |
|
282 | + return $new_id; |
|
283 | + } |
|
284 | + /** |
|
285 | + * Inserts a 4.1 ticket based off the 3.1 price, and the price IDs we've already made from the 3.1 price |
|
286 | + * @param $old_price_row array where keys are columns |
|
287 | + * @param $new_base_price_id int |
|
288 | + * @param $new_member_discount_id int |
|
289 | + * @param $new_surcharge_id int |
|
290 | + * @return int new ticket id |
|
291 | + */ |
|
292 | + private function _insert_new_ticket($old_price_row) |
|
293 | + { |
|
294 | + global $wpdb; |
|
295 | + $event_row = $this->_get_event_row($old_price_row['event_id']); |
|
296 | + if ($old_price_row['surcharge_type'] == 'flat_rate') { |
|
297 | + $final_ticket_price = floatval($old_price_row['event_cost']) + floatval($old_price_row['surcharge']); |
|
298 | + } else {// percent surcharge |
|
299 | + $final_ticket_price = floatval($old_price_row['event_cost']) * (1 + floatval($old_price_row['surcharge'])/100); |
|
300 | + } |
|
301 | + $start_date = $event_row['registration_start']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_startT']); |
|
302 | + $start_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $start_date, $event_row['timezone_string']); |
|
303 | + $end_date = $event_row['registration_end']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_endT']); |
|
304 | + $end_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $end_date, $event_row['timezone_string']); |
|
305 | + $cols_n_values = array( |
|
306 | + 'TTM_ID'=>0, |
|
307 | + 'TKT_name'=>$old_price_row['price_type'], |
|
308 | + 'TKT_description'=>'', |
|
309 | + 'TKT_start_date'=>$start_date_utc, |
|
310 | + 'TKT_end_date'=>$end_date_utc, |
|
311 | + 'TKT_min'=>0, |
|
312 | + 'TKT_max'=>-1, |
|
313 | + 'TKT_price'=>$final_ticket_price, |
|
314 | + 'TKT_sold'=> 0,// note: this will get calculated as we actually add registrations during the migration |
|
315 | + 'TKT_qty'=> -1, |
|
316 | + 'TKT_uses'=> 1, |
|
317 | + 'TKT_taxable'=>false,// so by default, old prices are NOT taxable. This way they don't suddenly have a sudden spike in prices |
|
318 | + 'TKT_is_default'=>false, |
|
319 | + 'TKT_order'=>$this->_get_ticket_count(), |
|
320 | + 'TKT_row'=>0,// doesn't matter because UI reset this on first save anyways |
|
321 | + 'TKT_deleted'=>false, |
|
322 | + 'TKT_parent'=>0 |
|
323 | 323 | |
324 | - ); |
|
325 | - $datatypes = array( |
|
326 | - '%d',// TTM_ID |
|
327 | - '%s',// TKT_name |
|
328 | - '%s',// TKT_description |
|
329 | - '%s',// TKT_start_date |
|
330 | - '%s',// TKT_end_date |
|
331 | - '%d',// TKT_min |
|
332 | - '%d',// TKT_max |
|
333 | - '%f',// TKT_price |
|
334 | - '%d',// TKT_sold |
|
335 | - '%d',// TKT_qty |
|
336 | - '%d',// TKT_uses |
|
337 | - '%d',// TKT_taxable |
|
338 | - '%d',// TKT_is_default |
|
339 | - '%d',// TKT_order |
|
340 | - '%d',// TKT_row |
|
341 | - '%d',// TKT_deleted |
|
342 | - '%d',// TKT_parent |
|
343 | - ); |
|
344 | - $success = $wpdb->insert($this->_new_ticket_table, $cols_n_values, $datatypes); |
|
345 | - if (! $success) { |
|
346 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price_row, $this->_new_ticket_table, $cols_n_values, $datatypes)); |
|
347 | - return 0; |
|
348 | - } |
|
349 | - $new_id = $wpdb->insert_id; |
|
350 | - return $new_id; |
|
351 | - } |
|
324 | + ); |
|
325 | + $datatypes = array( |
|
326 | + '%d',// TTM_ID |
|
327 | + '%s',// TKT_name |
|
328 | + '%s',// TKT_description |
|
329 | + '%s',// TKT_start_date |
|
330 | + '%s',// TKT_end_date |
|
331 | + '%d',// TKT_min |
|
332 | + '%d',// TKT_max |
|
333 | + '%f',// TKT_price |
|
334 | + '%d',// TKT_sold |
|
335 | + '%d',// TKT_qty |
|
336 | + '%d',// TKT_uses |
|
337 | + '%d',// TKT_taxable |
|
338 | + '%d',// TKT_is_default |
|
339 | + '%d',// TKT_order |
|
340 | + '%d',// TKT_row |
|
341 | + '%d',// TKT_deleted |
|
342 | + '%d',// TKT_parent |
|
343 | + ); |
|
344 | + $success = $wpdb->insert($this->_new_ticket_table, $cols_n_values, $datatypes); |
|
345 | + if (! $success) { |
|
346 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price_row, $this->_new_ticket_table, $cols_n_values, $datatypes)); |
|
347 | + return 0; |
|
348 | + } |
|
349 | + $new_id = $wpdb->insert_id; |
|
350 | + return $new_id; |
|
351 | + } |
|
352 | 352 | |
353 | - /** |
|
354 | - * Adds a join between a ticket and a price |
|
355 | - * @global type $wpdb |
|
356 | - * @param type $new_ticket_id |
|
357 | - * @param type $new_price_id |
|
358 | - * @return int |
|
359 | - */ |
|
360 | - private function _insert_ticket_price_relation($new_ticket_id, $new_price_id) |
|
361 | - { |
|
362 | - global $wpdb; |
|
363 | - $cols_n_values = array( |
|
364 | - 'TKT_ID'=>$new_ticket_id, |
|
365 | - 'PRC_ID'=>$new_price_id, |
|
366 | - ); |
|
367 | - $datatypes = array( |
|
368 | - '%d',// TKT_ID |
|
369 | - '%d',// PRC_ID |
|
370 | - ); |
|
371 | - $success = $wpdb->insert($this->_new_ticket_price_table, $cols_n_values, $datatypes); |
|
372 | - if (! $success) { |
|
373 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'price id'=>$new_price_id), $this->_new_ticket_price_table, $cols_n_values, $datatypes)); |
|
374 | - return 0; |
|
375 | - } |
|
376 | - $new_id = $wpdb->insert_id; |
|
377 | - return $new_id; |
|
378 | - } |
|
353 | + /** |
|
354 | + * Adds a join between a ticket and a price |
|
355 | + * @global type $wpdb |
|
356 | + * @param type $new_ticket_id |
|
357 | + * @param type $new_price_id |
|
358 | + * @return int |
|
359 | + */ |
|
360 | + private function _insert_ticket_price_relation($new_ticket_id, $new_price_id) |
|
361 | + { |
|
362 | + global $wpdb; |
|
363 | + $cols_n_values = array( |
|
364 | + 'TKT_ID'=>$new_ticket_id, |
|
365 | + 'PRC_ID'=>$new_price_id, |
|
366 | + ); |
|
367 | + $datatypes = array( |
|
368 | + '%d',// TKT_ID |
|
369 | + '%d',// PRC_ID |
|
370 | + ); |
|
371 | + $success = $wpdb->insert($this->_new_ticket_price_table, $cols_n_values, $datatypes); |
|
372 | + if (! $success) { |
|
373 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'price id'=>$new_price_id), $this->_new_ticket_price_table, $cols_n_values, $datatypes)); |
|
374 | + return 0; |
|
375 | + } |
|
376 | + $new_id = $wpdb->insert_id; |
|
377 | + return $new_id; |
|
378 | + } |
|
379 | 379 | |
380 | - /** |
|
381 | - * Adds a join between a ticket and a datetime |
|
382 | - * @global type $wpdb |
|
383 | - * @param type $new_ticket_id |
|
384 | - * @param type $new_price_id |
|
385 | - * @return int |
|
386 | - */ |
|
387 | - private function _insert_datetime_ticket_relation($new_datetime_id, $new_ticket_id) |
|
388 | - { |
|
389 | - global $wpdb; |
|
390 | - $cols_n_values = array( |
|
391 | - 'TKT_ID'=>$new_ticket_id, |
|
392 | - 'DTT_ID'=>$new_datetime_id, |
|
393 | - ); |
|
394 | - $datatypes = array( |
|
395 | - '%d',// TKT_ID |
|
396 | - '%d',// DTT_ID |
|
397 | - ); |
|
398 | - $success = $wpdb->insert($this->_new_datetime_ticket_table, $cols_n_values, $datatypes); |
|
399 | - if (! $success) { |
|
400 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'datetime id'=>$new_datetime_id), $this->_new_datetime_ticket_table, $cols_n_values, $datatypes)); |
|
401 | - return 0; |
|
402 | - } |
|
403 | - $new_id = $wpdb->insert_id; |
|
404 | - return $new_id; |
|
405 | - } |
|
380 | + /** |
|
381 | + * Adds a join between a ticket and a datetime |
|
382 | + * @global type $wpdb |
|
383 | + * @param type $new_ticket_id |
|
384 | + * @param type $new_price_id |
|
385 | + * @return int |
|
386 | + */ |
|
387 | + private function _insert_datetime_ticket_relation($new_datetime_id, $new_ticket_id) |
|
388 | + { |
|
389 | + global $wpdb; |
|
390 | + $cols_n_values = array( |
|
391 | + 'TKT_ID'=>$new_ticket_id, |
|
392 | + 'DTT_ID'=>$new_datetime_id, |
|
393 | + ); |
|
394 | + $datatypes = array( |
|
395 | + '%d',// TKT_ID |
|
396 | + '%d',// DTT_ID |
|
397 | + ); |
|
398 | + $success = $wpdb->insert($this->_new_datetime_ticket_table, $cols_n_values, $datatypes); |
|
399 | + if (! $success) { |
|
400 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'datetime id'=>$new_datetime_id), $this->_new_datetime_ticket_table, $cols_n_values, $datatypes)); |
|
401 | + return 0; |
|
402 | + } |
|
403 | + $new_id = $wpdb->insert_id; |
|
404 | + return $new_id; |
|
405 | + } |
|
406 | 406 | |
407 | - /** |
|
408 | - * Simply gets the 3.1 event row data |
|
409 | - * @global type $wpdb |
|
410 | - * @param type $event_id |
|
411 | - * @return array |
|
412 | - */ |
|
413 | - private function _get_event_row($event_id) |
|
414 | - { |
|
415 | - global $wpdb; |
|
416 | - $old_event_table = $wpdb->prefix."events_detail"; |
|
417 | - return $wpdb->get_row($wpdb->prepare("SELECT * FROM $old_event_table WHERE id=%d", $event_id), ARRAY_A); |
|
418 | - } |
|
419 | - /** |
|
420 | - * Gets a higher ticket count than last time it was called (and is persisted between HTTP requests). |
|
421 | - * Yes we COULD run a query joining events->datetimes->ticket_datetimes->tickets, but this should work fine too |
|
422 | - * @return int |
|
423 | - */ |
|
424 | - private function _get_ticket_count() |
|
425 | - { |
|
426 | - return $this->_ticket_count++; |
|
427 | - } |
|
407 | + /** |
|
408 | + * Simply gets the 3.1 event row data |
|
409 | + * @global type $wpdb |
|
410 | + * @param type $event_id |
|
411 | + * @return array |
|
412 | + */ |
|
413 | + private function _get_event_row($event_id) |
|
414 | + { |
|
415 | + global $wpdb; |
|
416 | + $old_event_table = $wpdb->prefix."events_detail"; |
|
417 | + return $wpdb->get_row($wpdb->prepare("SELECT * FROM $old_event_table WHERE id=%d", $event_id), ARRAY_A); |
|
418 | + } |
|
419 | + /** |
|
420 | + * Gets a higher ticket count than last time it was called (and is persisted between HTTP requests). |
|
421 | + * Yes we COULD run a query joining events->datetimes->ticket_datetimes->tickets, but this should work fine too |
|
422 | + * @return int |
|
423 | + */ |
|
424 | + private function _get_ticket_count() |
|
425 | + { |
|
426 | + return $this->_ticket_count++; |
|
427 | + } |
|
428 | 428 | |
429 | - /** |
|
430 | - * Using the 3.1 event id, gets the 4.1 datetimes for it |
|
431 | - * @param int $old_event_id |
|
432 | - * @return array where values are datetime ids |
|
433 | - */ |
|
434 | - private function _get_datetime_ids_for_old_event_id($old_event_id) |
|
435 | - { |
|
436 | - global $wpdb; |
|
437 | - $new_cpt_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_event_id, $wpdb->posts); |
|
438 | - $datetime_ids = $wpdb->get_col($wpdb->prepare("SELECT DTT_ID FROM {$wpdb->prefix}esp_datetime WHERE EVT_ID=%d", $new_cpt_id)); |
|
439 | - return $datetime_ids; |
|
440 | - } |
|
429 | + /** |
|
430 | + * Using the 3.1 event id, gets the 4.1 datetimes for it |
|
431 | + * @param int $old_event_id |
|
432 | + * @return array where values are datetime ids |
|
433 | + */ |
|
434 | + private function _get_datetime_ids_for_old_event_id($old_event_id) |
|
435 | + { |
|
436 | + global $wpdb; |
|
437 | + $new_cpt_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_event_id, $wpdb->posts); |
|
438 | + $datetime_ids = $wpdb->get_col($wpdb->prepare("SELECT DTT_ID FROM {$wpdb->prefix}esp_datetime WHERE EVT_ID=%d", $new_cpt_id)); |
|
439 | + return $datetime_ids; |
|
440 | + } |
|
441 | 441 | } |
442 | 442 | // @todo: tell users that in 3.1 the limit was on registration PER event,in 4.1 it's limit PER TICKET... SO, if they sell 2 different types of tickets |
443 | 443 | // |
@@ -108,7 +108,7 @@ discard block |
||
108 | 108 | $this->_old_table = $wpdb->prefix."events_prices"; |
109 | 109 | $this->select_expression = 'p.*, e.event_status'; |
110 | 110 | $this->_extra_where_sql = ' AS p |
111 | - INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON p.event_id=e.id |
|
111 | + INNER JOIN ' . $wpdb->prefix.'events_detail AS e ON p.event_id=e.id |
|
112 | 112 | WHERE e.event_status!="D"'; |
113 | 113 | $this->_new_price_table = $wpdb->prefix."esp_price"; |
114 | 114 | $this->_new_ticket_table = $wpdb->prefix."esp_ticket"; |
@@ -130,7 +130,7 @@ discard block |
||
130 | 130 | // create the surcharge if there is any |
131 | 131 | if (floatval($old_row['surcharge']) >= 0.01) { |
132 | 132 | $surcharge_price_id = $this->_insert_new_surcharge_price($old_row); |
133 | - $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id,$surcharge_price_id)); |
|
133 | + $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id, $surcharge_price_id)); |
|
134 | 134 | } else { |
135 | 135 | $surcharge_price_id = 0; |
136 | 136 | $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id)); |
@@ -182,17 +182,17 @@ discard block |
||
182 | 182 | |
183 | 183 | ); |
184 | 184 | $datatypes = array( |
185 | - '%d',// PRT_ID |
|
186 | - '%f',// PRT_amount |
|
187 | - '%s',// PRC_name |
|
188 | - '%d',// PRC_is_default |
|
189 | - '%d',// PRC_overrides |
|
190 | - '%d',// PRC_order |
|
191 | - '%d',// PRC_deleted |
|
192 | - '%d',// PRC_parent |
|
185 | + '%d', // PRT_ID |
|
186 | + '%f', // PRT_amount |
|
187 | + '%s', // PRC_name |
|
188 | + '%d', // PRC_is_default |
|
189 | + '%d', // PRC_overrides |
|
190 | + '%d', // PRC_order |
|
191 | + '%d', // PRC_deleted |
|
192 | + '%d', // PRC_parent |
|
193 | 193 | ); |
194 | 194 | $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes); |
195 | - if (! $success) { |
|
195 | + if ( ! $success) { |
|
196 | 196 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes)); |
197 | 197 | return 0; |
198 | 198 | } |
@@ -264,17 +264,17 @@ discard block |
||
264 | 264 | |
265 | 265 | ); |
266 | 266 | $datatypes = array( |
267 | - '%d',// PRT_ID |
|
268 | - '%f',// PRT_amount |
|
269 | - '%s',// PRC_name |
|
270 | - '%d',// PRC_is_default |
|
271 | - '%d',// PRC_overrides |
|
272 | - '%d',// PRC_order |
|
273 | - '%d',// PRC_deleted |
|
274 | - '%d',// PRC_parent |
|
267 | + '%d', // PRT_ID |
|
268 | + '%f', // PRT_amount |
|
269 | + '%s', // PRC_name |
|
270 | + '%d', // PRC_is_default |
|
271 | + '%d', // PRC_overrides |
|
272 | + '%d', // PRC_order |
|
273 | + '%d', // PRC_deleted |
|
274 | + '%d', // PRC_parent |
|
275 | 275 | ); |
276 | 276 | $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes); |
277 | - if (! $success) { |
|
277 | + if ( ! $success) { |
|
278 | 278 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes)); |
279 | 279 | return 0; |
280 | 280 | } |
@@ -296,7 +296,7 @@ discard block |
||
296 | 296 | if ($old_price_row['surcharge_type'] == 'flat_rate') { |
297 | 297 | $final_ticket_price = floatval($old_price_row['event_cost']) + floatval($old_price_row['surcharge']); |
298 | 298 | } else {// percent surcharge |
299 | - $final_ticket_price = floatval($old_price_row['event_cost']) * (1 + floatval($old_price_row['surcharge'])/100); |
|
299 | + $final_ticket_price = floatval($old_price_row['event_cost']) * (1 + floatval($old_price_row['surcharge']) / 100); |
|
300 | 300 | } |
301 | 301 | $start_date = $event_row['registration_start']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_startT']); |
302 | 302 | $start_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $start_date, $event_row['timezone_string']); |
@@ -311,38 +311,38 @@ discard block |
||
311 | 311 | 'TKT_min'=>0, |
312 | 312 | 'TKT_max'=>-1, |
313 | 313 | 'TKT_price'=>$final_ticket_price, |
314 | - 'TKT_sold'=> 0,// note: this will get calculated as we actually add registrations during the migration |
|
314 | + 'TKT_sold'=> 0, // note: this will get calculated as we actually add registrations during the migration |
|
315 | 315 | 'TKT_qty'=> -1, |
316 | 316 | 'TKT_uses'=> 1, |
317 | - 'TKT_taxable'=>false,// so by default, old prices are NOT taxable. This way they don't suddenly have a sudden spike in prices |
|
317 | + 'TKT_taxable'=>false, // so by default, old prices are NOT taxable. This way they don't suddenly have a sudden spike in prices |
|
318 | 318 | 'TKT_is_default'=>false, |
319 | 319 | 'TKT_order'=>$this->_get_ticket_count(), |
320 | - 'TKT_row'=>0,// doesn't matter because UI reset this on first save anyways |
|
320 | + 'TKT_row'=>0, // doesn't matter because UI reset this on first save anyways |
|
321 | 321 | 'TKT_deleted'=>false, |
322 | 322 | 'TKT_parent'=>0 |
323 | 323 | |
324 | 324 | ); |
325 | 325 | $datatypes = array( |
326 | - '%d',// TTM_ID |
|
327 | - '%s',// TKT_name |
|
328 | - '%s',// TKT_description |
|
329 | - '%s',// TKT_start_date |
|
330 | - '%s',// TKT_end_date |
|
331 | - '%d',// TKT_min |
|
332 | - '%d',// TKT_max |
|
333 | - '%f',// TKT_price |
|
334 | - '%d',// TKT_sold |
|
335 | - '%d',// TKT_qty |
|
336 | - '%d',// TKT_uses |
|
337 | - '%d',// TKT_taxable |
|
338 | - '%d',// TKT_is_default |
|
339 | - '%d',// TKT_order |
|
340 | - '%d',// TKT_row |
|
341 | - '%d',// TKT_deleted |
|
342 | - '%d',// TKT_parent |
|
326 | + '%d', // TTM_ID |
|
327 | + '%s', // TKT_name |
|
328 | + '%s', // TKT_description |
|
329 | + '%s', // TKT_start_date |
|
330 | + '%s', // TKT_end_date |
|
331 | + '%d', // TKT_min |
|
332 | + '%d', // TKT_max |
|
333 | + '%f', // TKT_price |
|
334 | + '%d', // TKT_sold |
|
335 | + '%d', // TKT_qty |
|
336 | + '%d', // TKT_uses |
|
337 | + '%d', // TKT_taxable |
|
338 | + '%d', // TKT_is_default |
|
339 | + '%d', // TKT_order |
|
340 | + '%d', // TKT_row |
|
341 | + '%d', // TKT_deleted |
|
342 | + '%d', // TKT_parent |
|
343 | 343 | ); |
344 | 344 | $success = $wpdb->insert($this->_new_ticket_table, $cols_n_values, $datatypes); |
345 | - if (! $success) { |
|
345 | + if ( ! $success) { |
|
346 | 346 | $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price_row, $this->_new_ticket_table, $cols_n_values, $datatypes)); |
347 | 347 | return 0; |
348 | 348 | } |
@@ -365,12 +365,12 @@ discard block |
||
365 | 365 | 'PRC_ID'=>$new_price_id, |
366 | 366 | ); |
367 | 367 | $datatypes = array( |
368 | - '%d',// TKT_ID |
|
369 | - '%d',// PRC_ID |
|
368 | + '%d', // TKT_ID |
|
369 | + '%d', // PRC_ID |
|
370 | 370 | ); |
371 | 371 | $success = $wpdb->insert($this->_new_ticket_price_table, $cols_n_values, $datatypes); |
372 | - if (! $success) { |
|
373 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'price id'=>$new_price_id), $this->_new_ticket_price_table, $cols_n_values, $datatypes)); |
|
372 | + if ( ! $success) { |
|
373 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id, 'price id'=>$new_price_id), $this->_new_ticket_price_table, $cols_n_values, $datatypes)); |
|
374 | 374 | return 0; |
375 | 375 | } |
376 | 376 | $new_id = $wpdb->insert_id; |
@@ -392,12 +392,12 @@ discard block |
||
392 | 392 | 'DTT_ID'=>$new_datetime_id, |
393 | 393 | ); |
394 | 394 | $datatypes = array( |
395 | - '%d',// TKT_ID |
|
396 | - '%d',// DTT_ID |
|
395 | + '%d', // TKT_ID |
|
396 | + '%d', // DTT_ID |
|
397 | 397 | ); |
398 | 398 | $success = $wpdb->insert($this->_new_datetime_ticket_table, $cols_n_values, $datatypes); |
399 | - if (! $success) { |
|
400 | - $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'datetime id'=>$new_datetime_id), $this->_new_datetime_ticket_table, $cols_n_values, $datatypes)); |
|
399 | + if ( ! $success) { |
|
400 | + $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id, 'datetime id'=>$new_datetime_id), $this->_new_datetime_ticket_table, $cols_n_values, $datatypes)); |
|
401 | 401 | return 0; |
402 | 402 | } |
403 | 403 | $new_id = $wpdb->insert_id; |