@@ -69,7 +69,7 @@ discard block |
||
69 | 69 | // when adding a new registration... |
70 | 70 | if (isset($this->_req_data['action']) && $this->_req_data['action'] === 'new_registration') { |
71 | 71 | EE_System::do_not_cache(); |
72 | - if (! isset($this->_req_data['processing_registration']) |
|
72 | + if ( ! isset($this->_req_data['processing_registration']) |
|
73 | 73 | || absint($this->_req_data['processing_registration']) !== 1 |
74 | 74 | ) { |
75 | 75 | // and it's NOT the attendee information reg step |
@@ -577,7 +577,7 @@ discard block |
||
577 | 577 | //style |
578 | 578 | wp_register_style( |
579 | 579 | 'espresso_reg', |
580 | - REG_ASSETS_URL . 'espresso_registrations_admin.css', |
|
580 | + REG_ASSETS_URL.'espresso_registrations_admin.css', |
|
581 | 581 | array('ee-admin-css'), |
582 | 582 | EVENT_ESPRESSO_VERSION |
583 | 583 | ); |
@@ -585,7 +585,7 @@ discard block |
||
585 | 585 | //script |
586 | 586 | wp_register_script( |
587 | 587 | 'espresso_reg', |
588 | - REG_ASSETS_URL . 'espresso_registrations_admin.js', |
|
588 | + REG_ASSETS_URL.'espresso_registrations_admin.js', |
|
589 | 589 | array('jquery-ui-datepicker', 'jquery-ui-draggable', 'ee_admin_js'), |
590 | 590 | EVENT_ESPRESSO_VERSION, |
591 | 591 | true |
@@ -623,7 +623,7 @@ discard block |
||
623 | 623 | wp_deregister_style('espresso_reg'); |
624 | 624 | wp_register_style( |
625 | 625 | 'espresso_att', |
626 | - REG_ASSETS_URL . 'espresso_attendees_admin.css', |
|
626 | + REG_ASSETS_URL.'espresso_attendees_admin.css', |
|
627 | 627 | array('ee-admin-css'), |
628 | 628 | EVENT_ESPRESSO_VERSION |
629 | 629 | ); |
@@ -635,7 +635,7 @@ discard block |
||
635 | 635 | { |
636 | 636 | wp_register_script( |
637 | 637 | 'ee-spco-for-admin', |
638 | - REG_ASSETS_URL . 'spco_for_admin.js', |
|
638 | + REG_ASSETS_URL.'spco_for_admin.js', |
|
639 | 639 | array('underscore', 'jquery'), |
640 | 640 | EVENT_ESPRESSO_VERSION, |
641 | 641 | true |
@@ -768,7 +768,7 @@ discard block |
||
768 | 768 | 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
769 | 769 | ), |
770 | 770 | ); |
771 | - $this->_views['trash'] = array( |
|
771 | + $this->_views['trash'] = array( |
|
772 | 772 | 'slug' => 'trash', |
773 | 773 | 'label' => esc_html__('Trash', 'event_espresso'), |
774 | 774 | 'count' => 0, |
@@ -857,7 +857,7 @@ discard block |
||
857 | 857 | } |
858 | 858 | $sc_items = array( |
859 | 859 | 'approved_status' => array( |
860 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved, |
|
860 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_approved, |
|
861 | 861 | 'desc' => EEH_Template::pretty_status( |
862 | 862 | EEM_Registration::status_id_approved, |
863 | 863 | false, |
@@ -865,7 +865,7 @@ discard block |
||
865 | 865 | ), |
866 | 866 | ), |
867 | 867 | 'pending_status' => array( |
868 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment, |
|
868 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_pending_payment, |
|
869 | 869 | 'desc' => EEH_Template::pretty_status( |
870 | 870 | EEM_Registration::status_id_pending_payment, |
871 | 871 | false, |
@@ -873,7 +873,7 @@ discard block |
||
873 | 873 | ), |
874 | 874 | ), |
875 | 875 | 'wait_list' => array( |
876 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list, |
|
876 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_wait_list, |
|
877 | 877 | 'desc' => EEH_Template::pretty_status( |
878 | 878 | EEM_Registration::status_id_wait_list, |
879 | 879 | false, |
@@ -881,7 +881,7 @@ discard block |
||
881 | 881 | ), |
882 | 882 | ), |
883 | 883 | 'incomplete_status' => array( |
884 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_incomplete, |
|
884 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_incomplete, |
|
885 | 885 | 'desc' => EEH_Template::pretty_status( |
886 | 886 | EEM_Registration::status_id_incomplete, |
887 | 887 | false, |
@@ -889,7 +889,7 @@ discard block |
||
889 | 889 | ), |
890 | 890 | ), |
891 | 891 | 'not_approved' => array( |
892 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved, |
|
892 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_not_approved, |
|
893 | 893 | 'desc' => EEH_Template::pretty_status( |
894 | 894 | EEM_Registration::status_id_not_approved, |
895 | 895 | false, |
@@ -897,7 +897,7 @@ discard block |
||
897 | 897 | ), |
898 | 898 | ), |
899 | 899 | 'declined_status' => array( |
900 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined, |
|
900 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_declined, |
|
901 | 901 | 'desc' => EEH_Template::pretty_status( |
902 | 902 | EEM_Registration::status_id_declined, |
903 | 903 | false, |
@@ -905,7 +905,7 @@ discard block |
||
905 | 905 | ), |
906 | 906 | ), |
907 | 907 | 'cancelled_status' => array( |
908 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled, |
|
908 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_cancelled, |
|
909 | 909 | 'desc' => EEH_Template::pretty_status( |
910 | 910 | EEM_Registration::status_id_cancelled, |
911 | 911 | false, |
@@ -934,7 +934,7 @@ discard block |
||
934 | 934 | 'espresso_registrations_new_registration', |
935 | 935 | $EVT_ID |
936 | 936 | )) { |
937 | - $this->_admin_page_title .= ' ' . $this->get_action_link_or_button( |
|
937 | + $this->_admin_page_title .= ' '.$this->get_action_link_or_button( |
|
938 | 938 | 'new_registration', |
939 | 939 | 'add-registrant', |
940 | 940 | array('event_id' => $EVT_ID), |
@@ -974,7 +974,7 @@ discard block |
||
974 | 974 | $this->_template_args['admin_page_header'] .= ' <span class="drk-grey-text">'; |
975 | 975 | $this->_template_args['admin_page_header'] .= '<span class="dashicons dashicons-calendar"></span>'; |
976 | 976 | $this->_template_args['admin_page_header'] .= $datetime->name(); |
977 | - $this->_template_args['admin_page_header'] .= ' ( ' . $datetime->start_date() . ' )'; |
|
977 | + $this->_template_args['admin_page_header'] .= ' ( '.$datetime->start_date().' )'; |
|
978 | 978 | $this->_template_args['admin_page_header'] .= '</span></h3>'; |
979 | 979 | } |
980 | 980 | } |
@@ -1074,7 +1074,7 @@ discard block |
||
1074 | 1074 | 'caps' => EEM_Registration::caps_read_admin, |
1075 | 1075 | 'default_where_conditions' => 'this_model_only', |
1076 | 1076 | ); |
1077 | - if (! $count) { |
|
1077 | + if ( ! $count) { |
|
1078 | 1078 | $query_params = array_merge( |
1079 | 1079 | $query_params, |
1080 | 1080 | $this->_get_orderby_for_registrations_query(), |
@@ -1095,7 +1095,7 @@ discard block |
||
1095 | 1095 | protected function _add_event_id_to_where_conditions(array $request) |
1096 | 1096 | { |
1097 | 1097 | $where = array(); |
1098 | - if (! empty($request['event_id'])) { |
|
1098 | + if ( ! empty($request['event_id'])) { |
|
1099 | 1099 | $where['EVT_ID'] = absint($request['event_id']); |
1100 | 1100 | } |
1101 | 1101 | return $where; |
@@ -1111,7 +1111,7 @@ discard block |
||
1111 | 1111 | protected function _add_category_id_to_where_conditions(array $request) |
1112 | 1112 | { |
1113 | 1113 | $where = array(); |
1114 | - if (! empty($request['EVT_CAT']) && (int)$request['EVT_CAT'] !== -1) { |
|
1114 | + if ( ! empty($request['EVT_CAT']) && (int) $request['EVT_CAT'] !== -1) { |
|
1115 | 1115 | $where['Event.Term_Taxonomy.term_id'] = absint($request['EVT_CAT']); |
1116 | 1116 | } |
1117 | 1117 | return $where; |
@@ -1127,10 +1127,10 @@ discard block |
||
1127 | 1127 | protected function _add_datetime_id_to_where_conditions(array $request) |
1128 | 1128 | { |
1129 | 1129 | $where = array(); |
1130 | - if (! empty($request['datetime_id'])) { |
|
1130 | + if ( ! empty($request['datetime_id'])) { |
|
1131 | 1131 | $where['Ticket.Datetime.DTT_ID'] = absint($request['datetime_id']); |
1132 | 1132 | } |
1133 | - if (! empty($request['DTT_ID'])) { |
|
1133 | + if ( ! empty($request['DTT_ID'])) { |
|
1134 | 1134 | $where['Ticket.Datetime.DTT_ID'] = absint($request['DTT_ID']); |
1135 | 1135 | } |
1136 | 1136 | return $where; |
@@ -1156,7 +1156,7 @@ discard block |
||
1156 | 1156 | * If not filtering by specified status, then we show all registrations excluding incomplete registrations |
1157 | 1157 | * UNLESS viewing trashed registrations. |
1158 | 1158 | */ |
1159 | - if (! empty($registration_status)) { |
|
1159 | + if ( ! empty($registration_status)) { |
|
1160 | 1160 | $where['STS_ID'] = $registration_status; |
1161 | 1161 | } else { |
1162 | 1162 | //make sure we exclude incomplete registrations, but only if not trashed. |
@@ -1196,12 +1196,12 @@ discard block |
||
1196 | 1196 | array( |
1197 | 1197 | EEM_Registration::instance()->convert_datetime_for_query( |
1198 | 1198 | 'REG_date', |
1199 | - $now . ' 00:00:00', |
|
1199 | + $now.' 00:00:00', |
|
1200 | 1200 | 'Y-m-d H:i:s' |
1201 | 1201 | ), |
1202 | 1202 | EEM_Registration::instance()->convert_datetime_for_query( |
1203 | 1203 | 'REG_date', |
1204 | - $now . ' 23:59:59', |
|
1204 | + $now.' 23:59:59', |
|
1205 | 1205 | 'Y-m-d H:i:s' |
1206 | 1206 | ), |
1207 | 1207 | ), |
@@ -1214,12 +1214,12 @@ discard block |
||
1214 | 1214 | array( |
1215 | 1215 | EEM_Registration::instance()->convert_datetime_for_query( |
1216 | 1216 | 'REG_date', |
1217 | - $current_year_and_month . '-01 00:00:00', |
|
1217 | + $current_year_and_month.'-01 00:00:00', |
|
1218 | 1218 | 'Y-m-d H:i:s' |
1219 | 1219 | ), |
1220 | 1220 | EEM_Registration::instance()->convert_datetime_for_query( |
1221 | 1221 | 'REG_date', |
1222 | - $current_year_and_month . '-' . $days_this_month . ' 23:59:59', |
|
1222 | + $current_year_and_month.'-'.$days_this_month.' 23:59:59', |
|
1223 | 1223 | 'Y-m-d H:i:s' |
1224 | 1224 | ), |
1225 | 1225 | ), |
@@ -1234,18 +1234,18 @@ discard block |
||
1234 | 1234 | : ''; |
1235 | 1235 | //if there is not a month or year then we can't go further |
1236 | 1236 | if ($month_requested && $year_requested) { |
1237 | - $days_in_month = date('t', strtotime($year_requested . '-' . $month_requested . '-' . '01')); |
|
1237 | + $days_in_month = date('t', strtotime($year_requested.'-'.$month_requested.'-'.'01')); |
|
1238 | 1238 | $where['REG_date'] = array( |
1239 | 1239 | 'BETWEEN', |
1240 | 1240 | array( |
1241 | 1241 | EEM_Registration::instance()->convert_datetime_for_query( |
1242 | 1242 | 'REG_date', |
1243 | - $year_requested . '-' . $month_requested . '-01 00:00:00', |
|
1243 | + $year_requested.'-'.$month_requested.'-01 00:00:00', |
|
1244 | 1244 | 'Y-m-d H:i:s' |
1245 | 1245 | ), |
1246 | 1246 | EEM_Registration::instance()->convert_datetime_for_query( |
1247 | 1247 | 'REG_date', |
1248 | - $year_requested . '-' . $month_requested . '-' . $days_in_month . ' 23:59:59', |
|
1248 | + $year_requested.'-'.$month_requested.'-'.$days_in_month.' 23:59:59', |
|
1249 | 1249 | 'Y-m-d H:i:s' |
1250 | 1250 | ), |
1251 | 1251 | ), |
@@ -1265,8 +1265,8 @@ discard block |
||
1265 | 1265 | protected function _add_search_to_where_conditions(array $request) |
1266 | 1266 | { |
1267 | 1267 | $where = array(); |
1268 | - if (! empty($request['s'])) { |
|
1269 | - $search_string = '%' . sanitize_text_field($request['s']) . '%'; |
|
1268 | + if ( ! empty($request['s'])) { |
|
1269 | + $search_string = '%'.sanitize_text_field($request['s']).'%'; |
|
1270 | 1270 | $where['OR*search_conditions'] = array( |
1271 | 1271 | 'Event.EVT_name' => array('LIKE', $search_string), |
1272 | 1272 | 'Event.EVT_desc' => array('LIKE', $search_string), |
@@ -1379,7 +1379,7 @@ discard block |
||
1379 | 1379 | : $per_page; |
1380 | 1380 | |
1381 | 1381 | //-1 means return all results so get out if that's set. |
1382 | - if ((int)$per_page === -1) { |
|
1382 | + if ((int) $per_page === -1) { |
|
1383 | 1383 | return array(); |
1384 | 1384 | } |
1385 | 1385 | $per_page = absint($per_page); |
@@ -1432,7 +1432,7 @@ discard block |
||
1432 | 1432 | ), |
1433 | 1433 | REG_ADMIN_URL |
1434 | 1434 | ); |
1435 | - $this->_template_args['filtered_transactions_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1435 | + $this->_template_args['filtered_transactions_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1436 | 1436 | array( |
1437 | 1437 | 'action' => 'default', |
1438 | 1438 | 'EVT_ID' => $event_id, |
@@ -1440,7 +1440,7 @@ discard block |
||
1440 | 1440 | ), |
1441 | 1441 | admin_url('admin.php') |
1442 | 1442 | ); |
1443 | - $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1443 | + $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1444 | 1444 | array( |
1445 | 1445 | 'page' => 'espresso_events', |
1446 | 1446 | 'action' => 'edit', |
@@ -1449,12 +1449,12 @@ discard block |
||
1449 | 1449 | admin_url('admin.php') |
1450 | 1450 | ); |
1451 | 1451 | //next and previous links |
1452 | - $next_reg = $this->_registration->next( |
|
1452 | + $next_reg = $this->_registration->next( |
|
1453 | 1453 | null, |
1454 | 1454 | array(), |
1455 | 1455 | 'REG_ID' |
1456 | 1456 | ); |
1457 | - $this->_template_args['next_registration'] = $next_reg |
|
1457 | + $this->_template_args['next_registration'] = $next_reg |
|
1458 | 1458 | ? $this->_next_link( |
1459 | 1459 | EE_Admin_Page::add_query_args_and_nonce( |
1460 | 1460 | array( |
@@ -1466,7 +1466,7 @@ discard block |
||
1466 | 1466 | 'dashicons dashicons-arrow-right ee-icon-size-22' |
1467 | 1467 | ) |
1468 | 1468 | : ''; |
1469 | - $previous_reg = $this->_registration->previous( |
|
1469 | + $previous_reg = $this->_registration->previous( |
|
1470 | 1470 | null, |
1471 | 1471 | array(), |
1472 | 1472 | 'REG_ID' |
@@ -1484,7 +1484,7 @@ discard block |
||
1484 | 1484 | ) |
1485 | 1485 | : ''; |
1486 | 1486 | // grab header |
1487 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_header.template.php'; |
|
1487 | + $template_path = REG_TEMPLATE_PATH.'reg_admin_details_header.template.php'; |
|
1488 | 1488 | $this->_template_args['REG_ID'] = $this->_registration->ID(); |
1489 | 1489 | $this->_template_args['admin_page_header'] = EEH_Template::display_template( |
1490 | 1490 | $template_path, |
@@ -1599,7 +1599,7 @@ discard block |
||
1599 | 1599 | EEH_HTML::strong( |
1600 | 1600 | $this->_registration->pretty_status(), |
1601 | 1601 | '', |
1602 | - 'status-' . $this->_registration->status_ID(), |
|
1602 | + 'status-'.$this->_registration->status_ID(), |
|
1603 | 1603 | 'line-height: 1em; font-size: 1.5em; font-weight: bold;' |
1604 | 1604 | ) |
1605 | 1605 | ) |
@@ -1669,9 +1669,9 @@ discard block |
||
1669 | 1669 | { |
1670 | 1670 | if (isset($this->_req_data['reg_status_change_form'])) { |
1671 | 1671 | $REG_IDs = isset($this->_req_data['reg_status_change_form']['REG_ID']) |
1672 | - ? (array)$this->_req_data['reg_status_change_form']['REG_ID'] : array(); |
|
1672 | + ? (array) $this->_req_data['reg_status_change_form']['REG_ID'] : array(); |
|
1673 | 1673 | } else { |
1674 | - $REG_IDs = isset($this->_req_data['_REG_ID']) ? (array)$this->_req_data['_REG_ID'] : array(); |
|
1674 | + $REG_IDs = isset($this->_req_data['_REG_ID']) ? (array) $this->_req_data['_REG_ID'] : array(); |
|
1675 | 1675 | } |
1676 | 1676 | $success = $this->_set_registration_status($REG_IDs, $status); |
1677 | 1677 | //notify? |
@@ -1703,7 +1703,7 @@ discard block |
||
1703 | 1703 | { |
1704 | 1704 | $success = false; |
1705 | 1705 | // typecast $REG_IDs |
1706 | - $REG_IDs = (array)$REG_IDs; |
|
1706 | + $REG_IDs = (array) $REG_IDs; |
|
1707 | 1707 | if ( ! empty($REG_IDs)) { |
1708 | 1708 | $success = true; |
1709 | 1709 | // set default status if none is passed |
@@ -1933,7 +1933,7 @@ discard block |
||
1933 | 1933 | $filtered_line_item_tree, |
1934 | 1934 | array('EE_Registration' => $this->_registration) |
1935 | 1935 | ); |
1936 | - $attendee = $this->_registration->attendee(); |
|
1936 | + $attendee = $this->_registration->attendee(); |
|
1937 | 1937 | if (EE_Registry::instance()->CAP->current_user_can( |
1938 | 1938 | 'ee_read_transaction', |
1939 | 1939 | 'espresso_transactions_view_transaction' |
@@ -2012,7 +2012,7 @@ discard block |
||
2012 | 2012 | 'Payment method response', |
2013 | 2013 | 'event_espresso' |
2014 | 2014 | ); |
2015 | - $this->_template_args['reg_details']['response_msg']['class'] = 'regular-text'; |
|
2015 | + $this->_template_args['reg_details']['response_msg']['class'] = 'regular-text'; |
|
2016 | 2016 | } |
2017 | 2017 | $this->_template_args['reg_details']['registration_session']['value'] = $reg_details['registration_session']; |
2018 | 2018 | $this->_template_args['reg_details']['registration_session']['label'] = esc_html__( |
@@ -2040,7 +2040,7 @@ discard block |
||
2040 | 2040 | $this->_template_args['REG_ID'] = $this->_registration->ID(); |
2041 | 2041 | $this->_template_args['event_id'] = $this->_registration->event_ID(); |
2042 | 2042 | $template_path = |
2043 | - REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_details.template.php'; |
|
2043 | + REG_TEMPLATE_PATH.'reg_admin_details_main_meta_box_reg_details.template.php'; |
|
2044 | 2044 | echo EEH_Template::display_template($template_path, $this->_template_args, true); |
2045 | 2045 | } |
2046 | 2046 | |
@@ -2069,7 +2069,7 @@ discard block |
||
2069 | 2069 | $this->_template_args['reg_questions_form_action'] = 'edit_registration'; |
2070 | 2070 | $this->_template_args['REG_ID'] = $this->_registration->ID(); |
2071 | 2071 | $template_path = |
2072 | - REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_questions.template.php'; |
|
2072 | + REG_TEMPLATE_PATH.'reg_admin_details_main_meta_box_reg_questions.template.php'; |
|
2073 | 2073 | echo EEH_Template::display_template($template_path, $this->_template_args, true); |
2074 | 2074 | } |
2075 | 2075 | } |
@@ -2086,7 +2086,7 @@ discard block |
||
2086 | 2086 | public function form_before_question_group($output) |
2087 | 2087 | { |
2088 | 2088 | EE_Error::doing_it_wrong( |
2089 | - __CLASS__ . '::' . __FUNCTION__, |
|
2089 | + __CLASS__.'::'.__FUNCTION__, |
|
2090 | 2090 | esc_html__( |
2091 | 2091 | 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
2092 | 2092 | 'event_espresso' |
@@ -2111,7 +2111,7 @@ discard block |
||
2111 | 2111 | public function form_after_question_group($output) |
2112 | 2112 | { |
2113 | 2113 | EE_Error::doing_it_wrong( |
2114 | - __CLASS__ . '::' . __FUNCTION__, |
|
2114 | + __CLASS__.'::'.__FUNCTION__, |
|
2115 | 2115 | esc_html__( |
2116 | 2116 | 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
2117 | 2117 | 'event_espresso' |
@@ -2149,7 +2149,7 @@ discard block |
||
2149 | 2149 | public function form_form_field_label_wrap($label) |
2150 | 2150 | { |
2151 | 2151 | EE_Error::doing_it_wrong( |
2152 | - __CLASS__ . '::' . __FUNCTION__, |
|
2152 | + __CLASS__.'::'.__FUNCTION__, |
|
2153 | 2153 | esc_html__( |
2154 | 2154 | 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
2155 | 2155 | 'event_espresso' |
@@ -2159,7 +2159,7 @@ discard block |
||
2159 | 2159 | return ' |
2160 | 2160 | <tr> |
2161 | 2161 | <th> |
2162 | - ' . $label . ' |
|
2162 | + ' . $label.' |
|
2163 | 2163 | </th>'; |
2164 | 2164 | } |
2165 | 2165 | |
@@ -2175,7 +2175,7 @@ discard block |
||
2175 | 2175 | public function form_form_field_input__wrap($input) |
2176 | 2176 | { |
2177 | 2177 | EE_Error::doing_it_wrong( |
2178 | - __CLASS__ . '::' . __FUNCTION__, |
|
2178 | + __CLASS__.'::'.__FUNCTION__, |
|
2179 | 2179 | esc_html__( |
2180 | 2180 | 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
2181 | 2181 | 'event_espresso' |
@@ -2184,7 +2184,7 @@ discard block |
||
2184 | 2184 | ); |
2185 | 2185 | return ' |
2186 | 2186 | <td class="reg-admin-attendee-questions-input-td disabled-input"> |
2187 | - ' . $input . ' |
|
2187 | + ' . $input.' |
|
2188 | 2188 | </td> |
2189 | 2189 | </tr>'; |
2190 | 2190 | } |
@@ -2226,7 +2226,7 @@ discard block |
||
2226 | 2226 | protected function _get_reg_custom_questions_form($REG_ID) |
2227 | 2227 | { |
2228 | 2228 | if ( ! $this->_reg_custom_questions_form) { |
2229 | - require_once(REG_ADMIN . 'form_sections' . DS . 'EE_Registration_Custom_Questions_Form.form.php'); |
|
2229 | + require_once(REG_ADMIN.'form_sections'.DS.'EE_Registration_Custom_Questions_Form.form.php'); |
|
2230 | 2230 | $this->_reg_custom_questions_form = new EE_Registration_Custom_Questions_Form( |
2231 | 2231 | EEM_Registration::instance()->get_one_by_ID($REG_ID) |
2232 | 2232 | ); |
@@ -2259,7 +2259,7 @@ discard block |
||
2259 | 2259 | if ($form->is_valid()) { |
2260 | 2260 | foreach ($form->subforms() as $question_group_id => $question_group_form) { |
2261 | 2261 | foreach ($question_group_form->inputs() as $question_id => $input) { |
2262 | - $where_conditions = array( |
|
2262 | + $where_conditions = array( |
|
2263 | 2263 | 'QST_ID' => $question_id, |
2264 | 2264 | 'REG_ID' => $REG_ID, |
2265 | 2265 | ); |
@@ -2297,7 +2297,7 @@ discard block |
||
2297 | 2297 | $REG = EEM_Registration::instance(); |
2298 | 2298 | //get all other registrations on this transaction, and cache |
2299 | 2299 | //the attendees for them so we don't have to run another query using force_join |
2300 | - $registrations = $REG->get_all(array( |
|
2300 | + $registrations = $REG->get_all(array( |
|
2301 | 2301 | array( |
2302 | 2302 | 'TXN_ID' => $this->_registration->transaction_ID(), |
2303 | 2303 | 'REG_ID' => array('!=', $this->_registration->ID()), |
@@ -2321,7 +2321,7 @@ discard block |
||
2321 | 2321 | $att_nmbr = 1; |
2322 | 2322 | foreach ($registrations as $registration) { |
2323 | 2323 | /* @var $registration EE_Registration */ |
2324 | - $attendee = $registration->attendee() |
|
2324 | + $attendee = $registration->attendee() |
|
2325 | 2325 | ? $registration->attendee() |
2326 | 2326 | : EEM_Attendee::instance() |
2327 | 2327 | ->create_default_object(); |
@@ -2334,19 +2334,19 @@ discard block |
||
2334 | 2334 | ', ', |
2335 | 2335 | $attendee->full_address_as_array() |
2336 | 2336 | ); |
2337 | - $this->_template_args['attendees'][$att_nmbr]['att_link'] = self::add_query_args_and_nonce( |
|
2337 | + $this->_template_args['attendees'][$att_nmbr]['att_link'] = self::add_query_args_and_nonce( |
|
2338 | 2338 | array( |
2339 | 2339 | 'action' => 'edit_attendee', |
2340 | 2340 | 'post' => $attendee->ID(), |
2341 | 2341 | ), |
2342 | 2342 | REG_ADMIN_URL |
2343 | 2343 | ); |
2344 | - $this->_template_args['attendees'][$att_nmbr]['event_name'] = $registration->event_obj()->name(); |
|
2344 | + $this->_template_args['attendees'][$att_nmbr]['event_name'] = $registration->event_obj()->name(); |
|
2345 | 2345 | $att_nmbr++; |
2346 | 2346 | } |
2347 | 2347 | $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
2348 | 2348 | } |
2349 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_attendees.template.php'; |
|
2349 | + $template_path = REG_TEMPLATE_PATH.'reg_admin_details_main_meta_box_attendees.template.php'; |
|
2350 | 2350 | echo EEH_Template::display_template($template_path, $this->_template_args, true); |
2351 | 2351 | } |
2352 | 2352 | |
@@ -2386,20 +2386,20 @@ discard block |
||
2386 | 2386 | $this->_template_args['phone'] = $attendee->phone(); |
2387 | 2387 | $this->_template_args['formatted_address'] = EEH_Address::format($attendee); |
2388 | 2388 | //edit link |
2389 | - $this->_template_args['att_edit_link'] = EE_Admin_Page::add_query_args_and_nonce(array( |
|
2389 | + $this->_template_args['att_edit_link'] = EE_Admin_Page::add_query_args_and_nonce(array( |
|
2390 | 2390 | 'action' => 'edit_attendee', |
2391 | 2391 | 'post' => $attendee->ID(), |
2392 | 2392 | ), REG_ADMIN_URL); |
2393 | 2393 | $this->_template_args['att_edit_label'] = esc_html__('View/Edit Contact', 'event_espresso'); |
2394 | 2394 | //create link |
2395 | - $this->_template_args['create_link'] = $primary_registration instanceof EE_Registration |
|
2395 | + $this->_template_args['create_link'] = $primary_registration instanceof EE_Registration |
|
2396 | 2396 | ? EE_Admin_Page::add_query_args_and_nonce(array( |
2397 | 2397 | 'action' => 'duplicate_attendee', |
2398 | 2398 | '_REG_ID' => $this->_registration->ID(), |
2399 | 2399 | ), REG_ADMIN_URL) : ''; |
2400 | 2400 | $this->_template_args['create_label'] = esc_html__('Create Contact', 'event_espresso'); |
2401 | 2401 | $this->_template_args['att_check'] = $att_check; |
2402 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_side_meta_box_registrant.template.php'; |
|
2402 | + $template_path = REG_TEMPLATE_PATH.'reg_admin_details_side_meta_box_registrant.template.php'; |
|
2403 | 2403 | echo EEH_Template::display_template($template_path, $this->_template_args, true); |
2404 | 2404 | } |
2405 | 2405 | |
@@ -2441,7 +2441,7 @@ discard block |
||
2441 | 2441 | /** @var EE_Registration $REG */ |
2442 | 2442 | $REG = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
2443 | 2443 | $payments = $REG->registration_payments(); |
2444 | - if (! empty($payments)) { |
|
2444 | + if ( ! empty($payments)) { |
|
2445 | 2445 | $name = $REG->attendee() instanceof EE_Attendee |
2446 | 2446 | ? $REG->attendee()->full_name() |
2447 | 2447 | : esc_html__('Unknown Attendee', 'event_espresso'); |
@@ -2634,7 +2634,7 @@ discard block |
||
2634 | 2634 | 'action' => 'edit', |
2635 | 2635 | 'post' => $this->_reg_event->ID(), |
2636 | 2636 | ), EVENTS_ADMIN_URL); |
2637 | - $edit_event_lnk = '<a href="' |
|
2637 | + $edit_event_lnk = '<a href="' |
|
2638 | 2638 | . $edit_event_url |
2639 | 2639 | . '" title="' |
2640 | 2640 | . esc_attr__('Edit ', 'event_espresso') |
@@ -2652,7 +2652,7 @@ discard block |
||
2652 | 2652 | } |
2653 | 2653 | // grab header |
2654 | 2654 | $template_path = |
2655 | - REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee.template.php'; |
|
2655 | + REG_TEMPLATE_PATH.'reg_admin_register_new_attendee.template.php'; |
|
2656 | 2656 | $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
2657 | 2657 | $this->_template_args, true); |
2658 | 2658 | //$this->_set_publish_post_box_vars( NULL, FALSE, FALSE, NULL, FALSE ); |
@@ -2687,7 +2687,7 @@ discard block |
||
2687 | 2687 | '</b>' |
2688 | 2688 | ); |
2689 | 2689 | return ' |
2690 | - <div id="ee-add-reg-back-button-dv"><p>' . $warning_msg . '</p></div> |
|
2690 | + <div id="ee-add-reg-back-button-dv"><p>' . $warning_msg.'</p></div> |
|
2691 | 2691 | <script > |
2692 | 2692 | // WHOAH !!! it appears that someone is using the back button from the Transaction admin page |
2693 | 2693 | // after just adding a new registration... we gotta try to put a stop to that !!! |
@@ -2755,7 +2755,7 @@ discard block |
||
2755 | 2755 | //we come back to the process_registration_step route. |
2756 | 2756 | $this->_set_add_edit_form_tags('process_reg_step', $hidden_fields); |
2757 | 2757 | return EEH_Template::display_template( |
2758 | - REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee_step_content.template.php', |
|
2758 | + REG_TEMPLATE_PATH.'reg_admin_register_new_attendee_step_content.template.php', |
|
2759 | 2759 | $template_args, |
2760 | 2760 | true |
2761 | 2761 | ); |
@@ -2774,7 +2774,7 @@ discard block |
||
2774 | 2774 | if (is_object($this->_reg_event)) { |
2775 | 2775 | return true; |
2776 | 2776 | } |
2777 | - $EVT_ID = (! empty($this->_req_data['event_id'])) ? absint($this->_req_data['event_id']) : false; |
|
2777 | + $EVT_ID = ( ! empty($this->_req_data['event_id'])) ? absint($this->_req_data['event_id']) : false; |
|
2778 | 2778 | if ( ! $EVT_ID) { |
2779 | 2779 | return false; |
2780 | 2780 | } |
@@ -2840,7 +2840,7 @@ discard block |
||
2840 | 2840 | } |
2841 | 2841 | break; |
2842 | 2842 | case 'questions' : |
2843 | - if (! isset( |
|
2843 | + if ( ! isset( |
|
2844 | 2844 | $this->_req_data['txn_reg_status_change'], |
2845 | 2845 | $this->_req_data['txn_reg_status_change']['send_notifications']) |
2846 | 2846 | ) { |
@@ -2954,7 +2954,7 @@ discard block |
||
2954 | 2954 | public function get_attendees($per_page, $count = false, $trash = false) |
2955 | 2955 | { |
2956 | 2956 | do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
2957 | - require_once(REG_ADMIN . 'EE_Attendee_Contact_List_Table.class.php'); |
|
2957 | + require_once(REG_ADMIN.'EE_Attendee_Contact_List_Table.class.php'); |
|
2958 | 2958 | $ATT_MDL = EEM_Attendee::instance(); |
2959 | 2959 | $this->_req_data['orderby'] = ! empty($this->_req_data['orderby']) ? $this->_req_data['orderby'] : ''; |
2960 | 2960 | switch ($this->_req_data['orderby']) { |
@@ -2991,7 +2991,7 @@ discard block |
||
2991 | 2991 | : $per_page; |
2992 | 2992 | $_where = array(); |
2993 | 2993 | if ( ! empty($this->_req_data['s'])) { |
2994 | - $sstr = '%' . $this->_req_data['s'] . '%'; |
|
2994 | + $sstr = '%'.$this->_req_data['s'].'%'; |
|
2995 | 2995 | $_where['OR'] = array( |
2996 | 2996 | 'Registration.Event.EVT_name' => array('LIKE', $sstr), |
2997 | 2997 | 'Registration.Event.EVT_desc' => array('LIKE', $sstr), |
@@ -3067,9 +3067,9 @@ discard block |
||
3067 | 3067 | * the query parameters from the request |
3068 | 3068 | * @return void ends the request with a redirect or download |
3069 | 3069 | */ |
3070 | - public function _registrations_report_base( $method_name_for_getting_query_params ) |
|
3070 | + public function _registrations_report_base($method_name_for_getting_query_params) |
|
3071 | 3071 | { |
3072 | - if (! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
3072 | + if ( ! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
3073 | 3073 | wp_redirect(EE_Admin_Page::add_query_args_and_nonce( |
3074 | 3074 | array( |
3075 | 3075 | 'page' => 'espresso_batch', |
@@ -3078,7 +3078,7 @@ discard block |
||
3078 | 3078 | 'filters' => urlencode( |
3079 | 3079 | serialize( |
3080 | 3080 | call_user_func( |
3081 | - array( $this, $method_name_for_getting_query_params ), |
|
3081 | + array($this, $method_name_for_getting_query_params), |
|
3082 | 3082 | EEH_Array::is_set( |
3083 | 3083 | $this->_req_data, |
3084 | 3084 | 'filters', |
@@ -3098,8 +3098,8 @@ discard block |
||
3098 | 3098 | 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
3099 | 3099 | ); |
3100 | 3100 | $this->_req_data = array_merge($this->_req_data, $new_request_args); |
3101 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3102 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3101 | + if (is_readable(EE_CLASSES.'EE_Export.class.php')) { |
|
3102 | + require_once(EE_CLASSES.'EE_Export.class.php'); |
|
3103 | 3103 | $EE_Export = EE_Export::instance($this->_req_data); |
3104 | 3104 | $EE_Export->export(); |
3105 | 3105 | } |
@@ -3120,8 +3120,8 @@ discard block |
||
3120 | 3120 | |
3121 | 3121 | public function _contact_list_export() |
3122 | 3122 | { |
3123 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3124 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3123 | + if (is_readable(EE_CLASSES.'EE_Export.class.php')) { |
|
3124 | + require_once(EE_CLASSES.'EE_Export.class.php'); |
|
3125 | 3125 | $EE_Export = EE_Export::instance($this->_req_data); |
3126 | 3126 | $EE_Export->export_attendees(); |
3127 | 3127 | } |
@@ -3138,8 +3138,8 @@ discard block |
||
3138 | 3138 | 'return_url' => urlencode($this->_req_data['return_url']), |
3139 | 3139 | ))); |
3140 | 3140 | } else { |
3141 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3142 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3141 | + if (is_readable(EE_CLASSES.'EE_Export.class.php')) { |
|
3142 | + require_once(EE_CLASSES.'EE_Export.class.php'); |
|
3143 | 3143 | $EE_Export = EE_Export::instance($this->_req_data); |
3144 | 3144 | $EE_Export->report_attendees(); |
3145 | 3145 | } |
@@ -3205,7 +3205,7 @@ discard block |
||
3205 | 3205 | $updated_fields = array( |
3206 | 3206 | 'ATT_fname' => $this->_req_data['ATT_fname'], |
3207 | 3207 | 'ATT_lname' => $this->_req_data['ATT_lname'], |
3208 | - 'ATT_full_name' => $this->_req_data['ATT_fname'] . ' ' . $this->_req_data['ATT_lname'], |
|
3208 | + 'ATT_full_name' => $this->_req_data['ATT_fname'].' '.$this->_req_data['ATT_lname'], |
|
3209 | 3209 | 'ATT_address' => isset($this->_req_data['ATT_address']) ? $this->_req_data['ATT_address'] : '', |
3210 | 3210 | 'ATT_address2' => isset($this->_req_data['ATT_address2']) ? $this->_req_data['ATT_address2'] : '', |
3211 | 3211 | 'ATT_city' => isset($this->_req_data['ATT_city']) ? $this->_req_data['ATT_city'] : '', |
@@ -3338,7 +3338,7 @@ discard block |
||
3338 | 3338 | { |
3339 | 3339 | //get attendee object ( should already have it ) |
3340 | 3340 | $this->_template_args['attendee'] = $this->_cpt_model_obj; |
3341 | - $template = REG_TEMPLATE_PATH . 'attendee_contact_info_metabox_content.template.php'; |
|
3341 | + $template = REG_TEMPLATE_PATH.'attendee_contact_info_metabox_content.template.php'; |
|
3342 | 3342 | EEH_Template::display_template($template, $this->_template_args); |
3343 | 3343 | } |
3344 | 3344 | |
@@ -3400,8 +3400,8 @@ discard block |
||
3400 | 3400 | ) |
3401 | 3401 | ) |
3402 | 3402 | ); |
3403 | - $template = |
|
3404 | - REG_TEMPLATE_PATH . 'attendee_address_details_metabox_content.template.php'; |
|
3403 | + $template = |
|
3404 | + REG_TEMPLATE_PATH.'attendee_address_details_metabox_content.template.php'; |
|
3405 | 3405 | EEH_Template::display_template($template, $this->_template_args); |
3406 | 3406 | } |
3407 | 3407 | |
@@ -3420,7 +3420,7 @@ discard block |
||
3420 | 3420 | $this->_template_args['attendee'] = $this->_cpt_model_obj; |
3421 | 3421 | $this->_template_args['registrations'] = $this->_cpt_model_obj->get_many_related('Registration'); |
3422 | 3422 | $template = |
3423 | - REG_TEMPLATE_PATH . 'attendee_registrations_main_meta_box.template.php'; |
|
3423 | + REG_TEMPLATE_PATH.'attendee_registrations_main_meta_box.template.php'; |
|
3424 | 3424 | EEH_Template::display_template($template, $this->_template_args); |
3425 | 3425 | } |
3426 | 3426 | |
@@ -3435,7 +3435,7 @@ discard block |
||
3435 | 3435 | public function after_title_form_fields($post) |
3436 | 3436 | { |
3437 | 3437 | if ($post->post_type == 'espresso_attendees') { |
3438 | - $template = REG_TEMPLATE_PATH . 'attendee_details_after_title_form_fields.template.php'; |
|
3438 | + $template = REG_TEMPLATE_PATH.'attendee_details_after_title_form_fields.template.php'; |
|
3439 | 3439 | $template_args['attendee'] = $this->_cpt_model_obj; |
3440 | 3440 | EEH_Template::display_template($template, $template_args); |
3441 | 3441 | } |
@@ -1,5 +1,5 @@ discard block |
||
1 | 1 | <?php if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
2 | - exit('No direct script access allowed'); |
|
2 | + exit('No direct script access allowed'); |
|
3 | 3 | } |
4 | 4 | |
5 | 5 | |
@@ -23,2111 +23,2111 @@ discard block |
||
23 | 23 | class Registrations_Admin_Page extends EE_Admin_Page_CPT |
24 | 24 | { |
25 | 25 | |
26 | - /** |
|
27 | - * @var EE_Registration |
|
28 | - */ |
|
29 | - private $_registration; |
|
30 | - |
|
31 | - /** |
|
32 | - * @var EE_Event |
|
33 | - */ |
|
34 | - private $_reg_event; |
|
35 | - |
|
36 | - /** |
|
37 | - * @var EE_Session |
|
38 | - */ |
|
39 | - private $_session; |
|
40 | - |
|
41 | - private static $_reg_status; |
|
42 | - |
|
43 | - /** |
|
44 | - * Form for displaying the custom questions for this registration. |
|
45 | - * This gets used a few times throughout the request so its best to cache it |
|
46 | - * |
|
47 | - * @var EE_Registration_Custom_Questions_Form |
|
48 | - */ |
|
49 | - protected $_reg_custom_questions_form = null; |
|
50 | - |
|
51 | - |
|
52 | - /** |
|
53 | - * constructor |
|
54 | - * |
|
55 | - * @Constructor |
|
56 | - * @access public |
|
57 | - * @param bool $routing |
|
58 | - * @return Registrations_Admin_Page |
|
59 | - */ |
|
60 | - public function __construct($routing = true) |
|
61 | - { |
|
62 | - parent::__construct($routing); |
|
63 | - add_action('wp_loaded', array($this, 'wp_loaded')); |
|
64 | - } |
|
65 | - |
|
66 | - |
|
67 | - public function wp_loaded() |
|
68 | - { |
|
69 | - // when adding a new registration... |
|
70 | - if (isset($this->_req_data['action']) && $this->_req_data['action'] === 'new_registration') { |
|
71 | - EE_System::do_not_cache(); |
|
72 | - if (! isset($this->_req_data['processing_registration']) |
|
73 | - || absint($this->_req_data['processing_registration']) !== 1 |
|
74 | - ) { |
|
75 | - // and it's NOT the attendee information reg step |
|
76 | - // force cookie expiration by setting time to last week |
|
77 | - setcookie('ee_registration_added', 0, time() - WEEK_IN_SECONDS, '/'); |
|
78 | - // and update the global |
|
79 | - $_COOKIE['ee_registration_added'] = 0; |
|
80 | - } |
|
81 | - } |
|
82 | - } |
|
83 | - |
|
84 | - |
|
85 | - protected function _init_page_props() |
|
86 | - { |
|
87 | - $this->page_slug = REG_PG_SLUG; |
|
88 | - $this->_admin_base_url = REG_ADMIN_URL; |
|
89 | - $this->_admin_base_path = REG_ADMIN; |
|
90 | - $this->page_label = esc_html__('Registrations', 'event_espresso'); |
|
91 | - $this->_cpt_routes = array( |
|
92 | - 'add_new_attendee' => 'espresso_attendees', |
|
93 | - 'edit_attendee' => 'espresso_attendees', |
|
94 | - 'insert_attendee' => 'espresso_attendees', |
|
95 | - 'update_attendee' => 'espresso_attendees', |
|
96 | - ); |
|
97 | - $this->_cpt_model_names = array( |
|
98 | - 'add_new_attendee' => 'EEM_Attendee', |
|
99 | - 'edit_attendee' => 'EEM_Attendee', |
|
100 | - ); |
|
101 | - $this->_cpt_edit_routes = array( |
|
102 | - 'espresso_attendees' => 'edit_attendee', |
|
103 | - ); |
|
104 | - $this->_pagenow_map = array( |
|
105 | - 'add_new_attendee' => 'post-new.php', |
|
106 | - 'edit_attendee' => 'post.php', |
|
107 | - 'trash' => 'post.php', |
|
108 | - ); |
|
109 | - add_action('edit_form_after_title', array($this, 'after_title_form_fields'), 10); |
|
110 | - //add filters so that the comment urls don't take users to a confusing 404 page |
|
111 | - add_filter('get_comment_link', array($this, 'clear_comment_link'), 10, 3); |
|
112 | - } |
|
113 | - |
|
114 | - |
|
115 | - public function clear_comment_link($link, $comment, $args) |
|
116 | - { |
|
117 | - //gotta make sure this only happens on this route |
|
118 | - $post_type = get_post_type($comment->comment_post_ID); |
|
119 | - if ($post_type === 'espresso_attendees') { |
|
120 | - return '#commentsdiv'; |
|
121 | - } |
|
122 | - return $link; |
|
123 | - } |
|
124 | - |
|
125 | - |
|
126 | - protected function _ajax_hooks() |
|
127 | - { |
|
128 | - //todo: all hooks for registrations ajax goes in here |
|
129 | - add_action('wp_ajax_toggle_checkin_status', array($this, 'toggle_checkin_status')); |
|
130 | - } |
|
131 | - |
|
132 | - |
|
133 | - protected function _define_page_props() |
|
134 | - { |
|
135 | - $this->_admin_page_title = $this->page_label; |
|
136 | - $this->_labels = array( |
|
137 | - 'buttons' => array( |
|
138 | - 'add-registrant' => esc_html__('Add New Registration', 'event_espresso'), |
|
139 | - 'add-attendee' => esc_html__('Add Contact', 'event_espresso'), |
|
140 | - 'edit' => esc_html__('Edit Contact', 'event_espresso'), |
|
141 | - 'report' => esc_html__("Event Registrations CSV Report", "event_espresso"), |
|
142 | - 'report_all' => esc_html__('All Registrations CSV Report', 'event_espresso'), |
|
143 | - 'report_filtered' => esc_html__('Filtered CSV Report', 'event_espresso'), |
|
144 | - 'contact_list_report' => esc_html__('Contact List Report', 'event_espresso'), |
|
145 | - 'contact_list_export' => esc_html__("Export Data", "event_espresso"), |
|
146 | - ), |
|
147 | - 'publishbox' => array( |
|
148 | - 'add_new_attendee' => esc_html__("Add Contact Record", 'event_espresso'), |
|
149 | - 'edit_attendee' => esc_html__("Update Contact Record", 'event_espresso'), |
|
150 | - ), |
|
151 | - 'hide_add_button_on_cpt_route' => array( |
|
152 | - 'edit_attendee' => true, |
|
153 | - ), |
|
154 | - ); |
|
155 | - } |
|
156 | - |
|
157 | - |
|
158 | - /** |
|
159 | - * grab url requests and route them |
|
160 | - * |
|
161 | - * @access private |
|
162 | - * @return void |
|
163 | - */ |
|
164 | - public function _set_page_routes() |
|
165 | - { |
|
166 | - $this->_get_registration_status_array(); |
|
167 | - $reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID']) |
|
168 | - ? $this->_req_data['_REG_ID'] : 0; |
|
169 | - $att_id = ! empty($this->_req_data['ATT_ID']) && ! is_array($this->_req_data['ATT_ID']) |
|
170 | - ? $this->_req_data['ATT_ID'] : 0; |
|
171 | - $att_id = ! empty($this->_req_data['post']) && ! is_array($this->_req_data['post']) |
|
172 | - ? $this->_req_data['post'] |
|
173 | - : $att_id; |
|
174 | - $this->_page_routes = array( |
|
175 | - 'default' => array( |
|
176 | - 'func' => '_registrations_overview_list_table', |
|
177 | - 'capability' => 'ee_read_registrations', |
|
178 | - ), |
|
179 | - 'view_registration' => array( |
|
180 | - 'func' => '_registration_details', |
|
181 | - 'capability' => 'ee_read_registration', |
|
182 | - 'obj_id' => $reg_id, |
|
183 | - ), |
|
184 | - 'edit_registration' => array( |
|
185 | - 'func' => '_update_attendee_registration_form', |
|
186 | - 'noheader' => true, |
|
187 | - 'headers_sent_route' => 'view_registration', |
|
188 | - 'capability' => 'ee_edit_registration', |
|
189 | - 'obj_id' => $reg_id, |
|
190 | - '_REG_ID' => $reg_id, |
|
191 | - ), |
|
192 | - 'trash_registrations' => array( |
|
193 | - 'func' => '_trash_or_restore_registrations', |
|
194 | - 'args' => array('trash' => true), |
|
195 | - 'noheader' => true, |
|
196 | - 'capability' => 'ee_delete_registrations', |
|
197 | - ), |
|
198 | - 'restore_registrations' => array( |
|
199 | - 'func' => '_trash_or_restore_registrations', |
|
200 | - 'args' => array('trash' => false), |
|
201 | - 'noheader' => true, |
|
202 | - 'capability' => 'ee_delete_registrations', |
|
203 | - ), |
|
204 | - 'delete_registrations' => array( |
|
205 | - 'func' => '_delete_registrations', |
|
206 | - 'noheader' => true, |
|
207 | - 'capability' => 'ee_delete_registrations', |
|
208 | - ), |
|
209 | - 'new_registration' => array( |
|
210 | - 'func' => 'new_registration', |
|
211 | - 'capability' => 'ee_edit_registrations', |
|
212 | - ), |
|
213 | - 'process_reg_step' => array( |
|
214 | - 'func' => 'process_reg_step', |
|
215 | - 'noheader' => true, |
|
216 | - 'capability' => 'ee_edit_registrations', |
|
217 | - ), |
|
218 | - 'redirect_to_txn' => array( |
|
219 | - 'func' => 'redirect_to_txn', |
|
220 | - 'noheader' => true, |
|
221 | - 'capability' => 'ee_edit_registrations', |
|
222 | - ), |
|
223 | - 'change_reg_status' => array( |
|
224 | - 'func' => '_change_reg_status', |
|
225 | - 'noheader' => true, |
|
226 | - 'capability' => 'ee_edit_registration', |
|
227 | - 'obj_id' => $reg_id, |
|
228 | - ), |
|
229 | - 'approve_registration' => array( |
|
230 | - 'func' => 'approve_registration', |
|
231 | - 'noheader' => true, |
|
232 | - 'capability' => 'ee_edit_registration', |
|
233 | - 'obj_id' => $reg_id, |
|
234 | - ), |
|
235 | - 'approve_and_notify_registration' => array( |
|
236 | - 'func' => 'approve_registration', |
|
237 | - 'noheader' => true, |
|
238 | - 'args' => array(true), |
|
239 | - 'capability' => 'ee_edit_registration', |
|
240 | - 'obj_id' => $reg_id, |
|
241 | - ), |
|
242 | - 'decline_registration' => array( |
|
243 | - 'func' => 'decline_registration', |
|
244 | - 'noheader' => true, |
|
245 | - 'capability' => 'ee_edit_registration', |
|
246 | - 'obj_id' => $reg_id, |
|
247 | - ), |
|
248 | - 'decline_and_notify_registration' => array( |
|
249 | - 'func' => 'decline_registration', |
|
250 | - 'noheader' => true, |
|
251 | - 'args' => array(true), |
|
252 | - 'capability' => 'ee_edit_registration', |
|
253 | - 'obj_id' => $reg_id, |
|
254 | - ), |
|
255 | - 'pending_registration' => array( |
|
256 | - 'func' => 'pending_registration', |
|
257 | - 'noheader' => true, |
|
258 | - 'capability' => 'ee_edit_registration', |
|
259 | - 'obj_id' => $reg_id, |
|
260 | - ), |
|
261 | - 'pending_and_notify_registration' => array( |
|
262 | - 'func' => 'pending_registration', |
|
263 | - 'noheader' => true, |
|
264 | - 'args' => array(true), |
|
265 | - 'capability' => 'ee_edit_registration', |
|
266 | - 'obj_id' => $reg_id, |
|
267 | - ), |
|
268 | - 'no_approve_registration' => array( |
|
269 | - 'func' => 'not_approve_registration', |
|
270 | - 'noheader' => true, |
|
271 | - 'capability' => 'ee_edit_registration', |
|
272 | - 'obj_id' => $reg_id, |
|
273 | - ), |
|
274 | - 'no_approve_and_notify_registration' => array( |
|
275 | - 'func' => 'not_approve_registration', |
|
276 | - 'noheader' => true, |
|
277 | - 'args' => array(true), |
|
278 | - 'capability' => 'ee_edit_registration', |
|
279 | - 'obj_id' => $reg_id, |
|
280 | - ), |
|
281 | - 'cancel_registration' => array( |
|
282 | - 'func' => 'cancel_registration', |
|
283 | - 'noheader' => true, |
|
284 | - 'capability' => 'ee_edit_registration', |
|
285 | - 'obj_id' => $reg_id, |
|
286 | - ), |
|
287 | - 'cancel_and_notify_registration' => array( |
|
288 | - 'func' => 'cancel_registration', |
|
289 | - 'noheader' => true, |
|
290 | - 'args' => array(true), |
|
291 | - 'capability' => 'ee_edit_registration', |
|
292 | - 'obj_id' => $reg_id, |
|
293 | - ), |
|
294 | - 'contact_list' => array( |
|
295 | - 'func' => '_attendee_contact_list_table', |
|
296 | - 'capability' => 'ee_read_contacts', |
|
297 | - ), |
|
298 | - 'add_new_attendee' => array( |
|
299 | - 'func' => '_create_new_cpt_item', |
|
300 | - 'args' => array( |
|
301 | - 'new_attendee' => true, |
|
302 | - 'capability' => 'ee_edit_contacts', |
|
303 | - ), |
|
304 | - ), |
|
305 | - 'edit_attendee' => array( |
|
306 | - 'func' => '_edit_cpt_item', |
|
307 | - 'capability' => 'ee_edit_contacts', |
|
308 | - 'obj_id' => $att_id, |
|
309 | - ), |
|
310 | - 'duplicate_attendee' => array( |
|
311 | - 'func' => '_duplicate_attendee', |
|
312 | - 'noheader' => true, |
|
313 | - 'capability' => 'ee_edit_contacts', |
|
314 | - 'obj_id' => $att_id, |
|
315 | - ), |
|
316 | - 'insert_attendee' => array( |
|
317 | - 'func' => '_insert_or_update_attendee', |
|
318 | - 'args' => array( |
|
319 | - 'new_attendee' => true, |
|
320 | - ), |
|
321 | - 'noheader' => true, |
|
322 | - 'capability' => 'ee_edit_contacts', |
|
323 | - ), |
|
324 | - 'update_attendee' => array( |
|
325 | - 'func' => '_insert_or_update_attendee', |
|
326 | - 'args' => array( |
|
327 | - 'new_attendee' => false, |
|
328 | - ), |
|
329 | - 'noheader' => true, |
|
330 | - 'capability' => 'ee_edit_contacts', |
|
331 | - 'obj_id' => $att_id, |
|
332 | - ), |
|
333 | - 'trash_attendee' => array( |
|
334 | - 'func' => '_trash_or_restore_attendees', |
|
335 | - 'args' => array( |
|
336 | - 'trash' => true, |
|
337 | - ), |
|
338 | - 'noheader' => true, |
|
339 | - 'capability' => 'ee_delete_contacts', |
|
340 | - 'obj_id' => $att_id, |
|
341 | - ), |
|
342 | - 'restore_attendees' => array( |
|
343 | - 'func' => '_trash_or_restore_attendees', |
|
344 | - 'args' => array( |
|
345 | - 'trash' => false, |
|
346 | - ), |
|
347 | - 'noheader' => true, |
|
348 | - 'capability' => 'ee_delete_contacts', |
|
349 | - 'obj_id' => $att_id, |
|
350 | - ), |
|
351 | - 'resend_registration' => array( |
|
352 | - 'func' => '_resend_registration', |
|
353 | - 'noheader' => true, |
|
354 | - 'capability' => 'ee_send_message', |
|
355 | - ), |
|
356 | - 'registrations_report' => array( |
|
357 | - 'func' => '_registrations_report', |
|
358 | - 'noheader' => true, |
|
359 | - 'capability' => 'ee_read_registrations', |
|
360 | - ), |
|
361 | - 'contact_list_export' => array( |
|
362 | - 'func' => '_contact_list_export', |
|
363 | - 'noheader' => true, |
|
364 | - 'capability' => 'export', |
|
365 | - ), |
|
366 | - 'contact_list_report' => array( |
|
367 | - 'func' => '_contact_list_report', |
|
368 | - 'noheader' => true, |
|
369 | - 'capability' => 'ee_read_contacts', |
|
370 | - ), |
|
371 | - ); |
|
372 | - } |
|
373 | - |
|
374 | - |
|
375 | - protected function _set_page_config() |
|
376 | - { |
|
377 | - $this->_page_config = array( |
|
378 | - 'default' => array( |
|
379 | - 'nav' => array( |
|
380 | - 'label' => esc_html__('Overview', 'event_espresso'), |
|
381 | - 'order' => 5, |
|
382 | - ), |
|
383 | - 'help_tabs' => array( |
|
384 | - 'registrations_overview_help_tab' => array( |
|
385 | - 'title' => esc_html__('Registrations Overview', 'event_espresso'), |
|
386 | - 'filename' => 'registrations_overview', |
|
387 | - ), |
|
388 | - 'registrations_overview_table_column_headings_help_tab' => array( |
|
389 | - 'title' => esc_html__('Registrations Table Column Headings', 'event_espresso'), |
|
390 | - 'filename' => 'registrations_overview_table_column_headings', |
|
391 | - ), |
|
392 | - 'registrations_overview_filters_help_tab' => array( |
|
393 | - 'title' => esc_html__('Registration Filters', 'event_espresso'), |
|
394 | - 'filename' => 'registrations_overview_filters', |
|
395 | - ), |
|
396 | - 'registrations_overview_views_help_tab' => array( |
|
397 | - 'title' => esc_html__('Registration Views', 'event_espresso'), |
|
398 | - 'filename' => 'registrations_overview_views', |
|
399 | - ), |
|
400 | - 'registrations_regoverview_other_help_tab' => array( |
|
401 | - 'title' => esc_html__('Registrations Other', 'event_espresso'), |
|
402 | - 'filename' => 'registrations_overview_other', |
|
403 | - ), |
|
404 | - ), |
|
405 | - 'help_tour' => array('Registration_Overview_Help_Tour'), |
|
406 | - 'qtips' => array('Registration_List_Table_Tips'), |
|
407 | - 'list_table' => 'EE_Registrations_List_Table', |
|
408 | - 'require_nonce' => false, |
|
409 | - ), |
|
410 | - 'view_registration' => array( |
|
411 | - 'nav' => array( |
|
412 | - 'label' => esc_html__('REG Details', 'event_espresso'), |
|
413 | - 'order' => 15, |
|
414 | - 'url' => isset($this->_req_data['_REG_ID']) |
|
415 | - ? add_query_arg(array('_REG_ID' => $this->_req_data['_REG_ID']), $this->_current_page_view_url) |
|
416 | - : $this->_admin_base_url, |
|
417 | - 'persistent' => false, |
|
418 | - ), |
|
419 | - 'help_tabs' => array( |
|
420 | - 'registrations_details_help_tab' => array( |
|
421 | - 'title' => esc_html__('Registration Details', 'event_espresso'), |
|
422 | - 'filename' => 'registrations_details', |
|
423 | - ), |
|
424 | - 'registrations_details_table_help_tab' => array( |
|
425 | - 'title' => esc_html__('Registration Details Table', 'event_espresso'), |
|
426 | - 'filename' => 'registrations_details_table', |
|
427 | - ), |
|
428 | - 'registrations_details_form_answers_help_tab' => array( |
|
429 | - 'title' => esc_html__('Registration Form Answers', 'event_espresso'), |
|
430 | - 'filename' => 'registrations_details_form_answers', |
|
431 | - ), |
|
432 | - 'registrations_details_registrant_details_help_tab' => array( |
|
433 | - 'title' => esc_html__('Contact Details', 'event_espresso'), |
|
434 | - 'filename' => 'registrations_details_registrant_details', |
|
435 | - ), |
|
436 | - ), |
|
437 | - 'help_tour' => array('Registration_Details_Help_Tour'), |
|
438 | - 'metaboxes' => array_merge( |
|
439 | - $this->_default_espresso_metaboxes, |
|
440 | - array('_registration_details_metaboxes') |
|
441 | - ), |
|
442 | - 'require_nonce' => false, |
|
443 | - ), |
|
444 | - 'new_registration' => array( |
|
445 | - 'nav' => array( |
|
446 | - 'label' => esc_html__('Add New Registration', 'event_espresso'), |
|
447 | - 'url' => '#', |
|
448 | - 'order' => 15, |
|
449 | - 'persistent' => false, |
|
450 | - ), |
|
451 | - 'metaboxes' => $this->_default_espresso_metaboxes, |
|
452 | - 'labels' => array( |
|
453 | - 'publishbox' => esc_html__('Save Registration', 'event_espresso'), |
|
454 | - ), |
|
455 | - 'require_nonce' => false, |
|
456 | - ), |
|
457 | - 'add_new_attendee' => array( |
|
458 | - 'nav' => array( |
|
459 | - 'label' => esc_html__('Add Contact', 'event_espresso'), |
|
460 | - 'order' => 15, |
|
461 | - 'persistent' => false, |
|
462 | - ), |
|
463 | - 'metaboxes' => array_merge( |
|
464 | - $this->_default_espresso_metaboxes, |
|
465 | - array('_publish_post_box', 'attendee_editor_metaboxes') |
|
466 | - ), |
|
467 | - 'require_nonce' => false, |
|
468 | - ), |
|
469 | - 'edit_attendee' => array( |
|
470 | - 'nav' => array( |
|
471 | - 'label' => esc_html__('Edit Contact', 'event_espresso'), |
|
472 | - 'order' => 15, |
|
473 | - 'persistent' => false, |
|
474 | - 'url' => isset($this->_req_data['ATT_ID']) |
|
475 | - ? add_query_arg(array('ATT_ID' => $this->_req_data['ATT_ID']), $this->_current_page_view_url) |
|
476 | - : $this->_admin_base_url, |
|
477 | - ), |
|
478 | - 'metaboxes' => array('attendee_editor_metaboxes'), |
|
479 | - 'require_nonce' => false, |
|
480 | - ), |
|
481 | - 'contact_list' => array( |
|
482 | - 'nav' => array( |
|
483 | - 'label' => esc_html__('Contact List', 'event_espresso'), |
|
484 | - 'order' => 20, |
|
485 | - ), |
|
486 | - 'list_table' => 'EE_Attendee_Contact_List_Table', |
|
487 | - 'help_tabs' => array( |
|
488 | - 'registrations_contact_list_help_tab' => array( |
|
489 | - 'title' => esc_html__('Registrations Contact List', 'event_espresso'), |
|
490 | - 'filename' => 'registrations_contact_list', |
|
491 | - ), |
|
492 | - 'registrations_contact-list_table_column_headings_help_tab' => array( |
|
493 | - 'title' => esc_html__('Contact List Table Column Headings', 'event_espresso'), |
|
494 | - 'filename' => 'registrations_contact_list_table_column_headings', |
|
495 | - ), |
|
496 | - 'registrations_contact_list_views_help_tab' => array( |
|
497 | - 'title' => esc_html__('Contact List Views', 'event_espresso'), |
|
498 | - 'filename' => 'registrations_contact_list_views', |
|
499 | - ), |
|
500 | - 'registrations_contact_list_other_help_tab' => array( |
|
501 | - 'title' => esc_html__('Contact List Other', 'event_espresso'), |
|
502 | - 'filename' => 'registrations_contact_list_other', |
|
503 | - ), |
|
504 | - ), |
|
505 | - 'help_tour' => array('Contact_List_Help_Tour'), |
|
506 | - 'metaboxes' => array(), |
|
507 | - 'require_nonce' => false, |
|
508 | - ), |
|
509 | - //override default cpt routes |
|
510 | - 'create_new' => '', |
|
511 | - 'edit' => '', |
|
512 | - ); |
|
513 | - } |
|
514 | - |
|
515 | - |
|
516 | - /** |
|
517 | - * The below methods aren't used by this class currently |
|
518 | - */ |
|
519 | - protected function _add_screen_options() |
|
520 | - { |
|
521 | - } |
|
522 | - |
|
523 | - |
|
524 | - protected function _add_feature_pointers() |
|
525 | - { |
|
526 | - } |
|
527 | - |
|
528 | - |
|
529 | - public function admin_init() |
|
530 | - { |
|
531 | - EE_Registry::$i18n_js_strings['update_att_qstns'] = esc_html__( |
|
532 | - 'click "Update Registration Questions" to save your changes', |
|
533 | - 'event_espresso' |
|
534 | - ); |
|
535 | - } |
|
536 | - |
|
537 | - |
|
538 | - public function admin_notices() |
|
539 | - { |
|
540 | - } |
|
541 | - |
|
542 | - |
|
543 | - public function admin_footer_scripts() |
|
544 | - { |
|
545 | - } |
|
546 | - |
|
547 | - |
|
548 | - /** |
|
549 | - * get list of registration statuses |
|
550 | - * |
|
551 | - * @access private |
|
552 | - * @return void |
|
553 | - */ |
|
554 | - private function _get_registration_status_array() |
|
555 | - { |
|
556 | - self::$_reg_status = EEM_Registration::reg_status_array(array(), true); |
|
557 | - } |
|
558 | - |
|
559 | - |
|
560 | - protected function _add_screen_options_default() |
|
561 | - { |
|
562 | - $this->_per_page_screen_option(); |
|
563 | - } |
|
564 | - |
|
565 | - |
|
566 | - protected function _add_screen_options_contact_list() |
|
567 | - { |
|
568 | - $page_title = $this->_admin_page_title; |
|
569 | - $this->_admin_page_title = esc_html__("Contacts", 'event_espresso'); |
|
570 | - $this->_per_page_screen_option(); |
|
571 | - $this->_admin_page_title = $page_title; |
|
572 | - } |
|
573 | - |
|
574 | - |
|
575 | - public function load_scripts_styles() |
|
576 | - { |
|
577 | - //style |
|
578 | - wp_register_style( |
|
579 | - 'espresso_reg', |
|
580 | - REG_ASSETS_URL . 'espresso_registrations_admin.css', |
|
581 | - array('ee-admin-css'), |
|
582 | - EVENT_ESPRESSO_VERSION |
|
583 | - ); |
|
584 | - wp_enqueue_style('espresso_reg'); |
|
585 | - //script |
|
586 | - wp_register_script( |
|
587 | - 'espresso_reg', |
|
588 | - REG_ASSETS_URL . 'espresso_registrations_admin.js', |
|
589 | - array('jquery-ui-datepicker', 'jquery-ui-draggable', 'ee_admin_js'), |
|
590 | - EVENT_ESPRESSO_VERSION, |
|
591 | - true |
|
592 | - ); |
|
593 | - wp_enqueue_script('espresso_reg'); |
|
594 | - } |
|
595 | - |
|
596 | - |
|
597 | - public function load_scripts_styles_edit_attendee() |
|
598 | - { |
|
599 | - //stuff to only show up on our attendee edit details page. |
|
600 | - $attendee_details_translations = array( |
|
601 | - 'att_publish_text' => sprintf( |
|
602 | - esc_html__('Created on: <b>%1$s</b>', 'event_espresso'), |
|
603 | - $this->_cpt_model_obj->get_datetime('ATT_created') |
|
604 | - ), |
|
605 | - ); |
|
606 | - wp_localize_script('espresso_reg', 'ATTENDEE_DETAILS', $attendee_details_translations); |
|
607 | - wp_enqueue_script('jquery-validate'); |
|
608 | - } |
|
609 | - |
|
610 | - |
|
611 | - public function load_scripts_styles_view_registration() |
|
612 | - { |
|
613 | - //styles |
|
614 | - wp_enqueue_style('espresso-ui-theme'); |
|
615 | - //scripts |
|
616 | - $this->_get_reg_custom_questions_form($this->_registration->ID()); |
|
617 | - $this->_reg_custom_questions_form->wp_enqueue_scripts(true); |
|
618 | - } |
|
619 | - |
|
620 | - |
|
621 | - public function load_scripts_styles_contact_list() |
|
622 | - { |
|
623 | - wp_deregister_style('espresso_reg'); |
|
624 | - wp_register_style( |
|
625 | - 'espresso_att', |
|
626 | - REG_ASSETS_URL . 'espresso_attendees_admin.css', |
|
627 | - array('ee-admin-css'), |
|
628 | - EVENT_ESPRESSO_VERSION |
|
629 | - ); |
|
630 | - wp_enqueue_style('espresso_att'); |
|
631 | - } |
|
632 | - |
|
633 | - |
|
634 | - public function load_scripts_styles_new_registration() |
|
635 | - { |
|
636 | - wp_register_script( |
|
637 | - 'ee-spco-for-admin', |
|
638 | - REG_ASSETS_URL . 'spco_for_admin.js', |
|
639 | - array('underscore', 'jquery'), |
|
640 | - EVENT_ESPRESSO_VERSION, |
|
641 | - true |
|
642 | - ); |
|
643 | - wp_enqueue_script('ee-spco-for-admin'); |
|
644 | - add_filter('FHEE__EED_Ticket_Selector__load_tckt_slctr_assets', '__return_true'); |
|
645 | - EE_Form_Section_Proper::wp_enqueue_scripts(); |
|
646 | - EED_Ticket_Selector::load_tckt_slctr_assets(); |
|
647 | - EE_Datepicker_Input::enqueue_styles_and_scripts(); |
|
648 | - } |
|
649 | - |
|
650 | - |
|
651 | - public function AHEE__EE_Admin_Page__route_admin_request_resend_registration() |
|
652 | - { |
|
653 | - add_filter('FHEE_load_EE_messages', '__return_true'); |
|
654 | - } |
|
655 | - |
|
656 | - |
|
657 | - public function AHEE__EE_Admin_Page__route_admin_request_approve_registration() |
|
658 | - { |
|
659 | - add_filter('FHEE_load_EE_messages', '__return_true'); |
|
660 | - } |
|
661 | - |
|
662 | - |
|
663 | - protected function _set_list_table_views_default() |
|
664 | - { |
|
665 | - //for notification related bulk actions we need to make sure only active messengers have an option. |
|
666 | - EED_Messages::set_autoloaders(); |
|
667 | - /** @type EE_Message_Resource_Manager $message_resource_manager */ |
|
668 | - $message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager'); |
|
669 | - $active_mts = $message_resource_manager->list_of_active_message_types(); |
|
670 | - //key= bulk_action_slug, value= message type. |
|
671 | - $match_array = array( |
|
672 | - 'approve_registration' => 'registration', |
|
673 | - 'decline_registration' => 'declined_registration', |
|
674 | - 'pending_registration' => 'pending_approval', |
|
675 | - 'no_approve_registration' => 'not_approved_registration', |
|
676 | - 'cancel_registration' => 'cancelled_registration', |
|
677 | - ); |
|
678 | - /** setup reg status bulk actions **/ |
|
679 | - $def_reg_status_actions['approve_registration'] = esc_html__('Approve Registrations', 'event_espresso'); |
|
680 | - if (in_array($match_array['approve_registration'], $active_mts) |
|
681 | - && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
682 | - ) { |
|
683 | - $def_reg_status_actions['approve_and_notify_registration'] = esc_html__( |
|
684 | - 'Approve and Notify Registrations', |
|
685 | - 'event_espresso' |
|
686 | - ); |
|
687 | - } |
|
688 | - $def_reg_status_actions['decline_registration'] = esc_html__('Decline Registrations', 'event_espresso'); |
|
689 | - if (in_array($match_array['decline_registration'], $active_mts) |
|
690 | - && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
691 | - ) { |
|
692 | - $def_reg_status_actions['decline_and_notify_registration'] = esc_html__( |
|
693 | - 'Decline and Notify Registrations', |
|
694 | - 'event_espresso' |
|
695 | - ); |
|
696 | - } |
|
697 | - $def_reg_status_actions['pending_registration'] = esc_html__( |
|
698 | - 'Set Registrations to Pending Payment', |
|
699 | - 'event_espresso' |
|
700 | - ); |
|
701 | - if (in_array($match_array['pending_registration'], $active_mts) |
|
702 | - && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
703 | - ) { |
|
704 | - $def_reg_status_actions['pending_and_notify_registration'] = esc_html__( |
|
705 | - 'Set Registrations to Pending Payment and Notify', |
|
706 | - 'event_espresso' |
|
707 | - ); |
|
708 | - } |
|
709 | - $def_reg_status_actions['no_approve_registration'] = esc_html__( |
|
710 | - 'Set Registrations to Not Approved', |
|
711 | - 'event_espresso' |
|
712 | - ); |
|
713 | - if (in_array($match_array['no_approve_registration'], $active_mts) |
|
714 | - && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
715 | - ) { |
|
716 | - $def_reg_status_actions['no_approve_and_notify_registration'] = esc_html__( |
|
717 | - 'Set Registrations to Not Approved and Notify', |
|
718 | - 'event_espresso' |
|
719 | - ); |
|
720 | - } |
|
721 | - $def_reg_status_actions['cancel_registration'] = esc_html__('Cancel Registrations', 'event_espresso'); |
|
722 | - if (in_array($match_array['cancel_registration'], $active_mts) |
|
723 | - && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
724 | - ) { |
|
725 | - $def_reg_status_actions['cancel_and_notify_registration'] = esc_html__( |
|
726 | - 'Cancel Registrations and Notify', |
|
727 | - 'event_espresso' |
|
728 | - ); |
|
729 | - } |
|
730 | - $this->_views = array( |
|
731 | - 'all' => array( |
|
732 | - 'slug' => 'all', |
|
733 | - 'label' => esc_html__('View All Registrations', 'event_espresso'), |
|
734 | - 'count' => 0, |
|
735 | - 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
736 | - 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
737 | - )), |
|
738 | - ), |
|
739 | - 'month' => array( |
|
740 | - 'slug' => 'month', |
|
741 | - 'label' => esc_html__('This Month', 'event_espresso'), |
|
742 | - 'count' => 0, |
|
743 | - 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
744 | - 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
745 | - )), |
|
746 | - ), |
|
747 | - 'today' => array( |
|
748 | - 'slug' => 'today', |
|
749 | - 'label' => sprintf( |
|
750 | - esc_html__('Today - %s', 'event_espresso'), |
|
751 | - date('M d, Y', current_time('timestamp')) |
|
752 | - ), |
|
753 | - 'count' => 0, |
|
754 | - 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
755 | - 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
756 | - )), |
|
757 | - ), |
|
758 | - ); |
|
759 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
760 | - 'ee_delete_registrations', |
|
761 | - 'espresso_registrations_delete_registration' |
|
762 | - )) { |
|
763 | - $this->_views['incomplete'] = array( |
|
764 | - 'slug' => 'incomplete', |
|
765 | - 'label' => esc_html__('Incomplete', 'event_espresso'), |
|
766 | - 'count' => 0, |
|
767 | - 'bulk_action' => array( |
|
768 | - 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
769 | - ), |
|
770 | - ); |
|
771 | - $this->_views['trash'] = array( |
|
772 | - 'slug' => 'trash', |
|
773 | - 'label' => esc_html__('Trash', 'event_espresso'), |
|
774 | - 'count' => 0, |
|
775 | - 'bulk_action' => array( |
|
776 | - 'restore_registrations' => esc_html__('Restore Registrations', 'event_espresso'), |
|
777 | - 'delete_registrations' => esc_html__('Delete Registrations Permanently', 'event_espresso'), |
|
778 | - ), |
|
779 | - ); |
|
780 | - } |
|
781 | - } |
|
782 | - |
|
783 | - |
|
784 | - protected function _set_list_table_views_contact_list() |
|
785 | - { |
|
786 | - $this->_views = array( |
|
787 | - 'in_use' => array( |
|
788 | - 'slug' => 'in_use', |
|
789 | - 'label' => esc_html__('In Use', 'event_espresso'), |
|
790 | - 'count' => 0, |
|
791 | - 'bulk_action' => array( |
|
792 | - 'trash_attendees' => esc_html__('Move to Trash', 'event_espresso'), |
|
793 | - ), |
|
794 | - ), |
|
795 | - ); |
|
796 | - if (EE_Registry::instance()->CAP->current_user_can('ee_delete_contacts', |
|
797 | - 'espresso_registrations_trash_attendees') |
|
798 | - ) { |
|
799 | - $this->_views['trash'] = array( |
|
800 | - 'slug' => 'trash', |
|
801 | - 'label' => esc_html__('Trash', 'event_espresso'), |
|
802 | - 'count' => 0, |
|
803 | - 'bulk_action' => array( |
|
804 | - 'restore_attendees' => esc_html__('Restore from Trash', 'event_espresso'), |
|
805 | - ), |
|
806 | - ); |
|
807 | - } |
|
808 | - } |
|
809 | - |
|
810 | - |
|
811 | - protected function _registration_legend_items() |
|
812 | - { |
|
813 | - $fc_items = array( |
|
814 | - 'star-icon' => array( |
|
815 | - 'class' => 'dashicons dashicons-star-filled lt-blue-icon ee-icon-size-8', |
|
816 | - 'desc' => esc_html__('This is the Primary Registrant', 'event_espresso'), |
|
817 | - ), |
|
818 | - 'view_details' => array( |
|
819 | - 'class' => 'dashicons dashicons-clipboard', |
|
820 | - 'desc' => esc_html__('View Registration Details', 'event_espresso'), |
|
821 | - ), |
|
822 | - 'edit_attendee' => array( |
|
823 | - 'class' => 'ee-icon ee-icon-user-edit ee-icon-size-16', |
|
824 | - 'desc' => esc_html__('Edit Contact Details', 'event_espresso'), |
|
825 | - ), |
|
826 | - 'view_transaction' => array( |
|
827 | - 'class' => 'dashicons dashicons-cart', |
|
828 | - 'desc' => esc_html__('View Transaction Details', 'event_espresso'), |
|
829 | - ), |
|
830 | - 'view_invoice' => array( |
|
831 | - 'class' => 'dashicons dashicons-media-spreadsheet', |
|
832 | - 'desc' => esc_html__('View Transaction Invoice', 'event_espresso'), |
|
833 | - ), |
|
834 | - ); |
|
835 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
836 | - 'ee_send_message', |
|
837 | - 'espresso_registrations_resend_registration' |
|
838 | - )) { |
|
839 | - $fc_items['resend_registration'] = array( |
|
840 | - 'class' => 'dashicons dashicons-email-alt', |
|
841 | - 'desc' => esc_html__('Resend Registration Details', 'event_espresso'), |
|
842 | - ); |
|
843 | - } else { |
|
844 | - $fc_items['blank'] = array('class' => 'blank', 'desc' => ''); |
|
845 | - } |
|
846 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
847 | - 'ee_read_global_messages', |
|
848 | - 'view_filtered_messages' |
|
849 | - )) { |
|
850 | - $related_for_icon = EEH_MSG_Template::get_message_action_icon('see_notifications_for'); |
|
851 | - if (isset($related_for_icon['css_class']) && isset($related_for_icon['label'])) { |
|
852 | - $fc_items['view_related_messages'] = array( |
|
853 | - 'class' => $related_for_icon['css_class'], |
|
854 | - 'desc' => $related_for_icon['label'], |
|
855 | - ); |
|
856 | - } |
|
857 | - } |
|
858 | - $sc_items = array( |
|
859 | - 'approved_status' => array( |
|
860 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved, |
|
861 | - 'desc' => EEH_Template::pretty_status( |
|
862 | - EEM_Registration::status_id_approved, |
|
863 | - false, |
|
864 | - 'sentence' |
|
865 | - ), |
|
866 | - ), |
|
867 | - 'pending_status' => array( |
|
868 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment, |
|
869 | - 'desc' => EEH_Template::pretty_status( |
|
870 | - EEM_Registration::status_id_pending_payment, |
|
871 | - false, |
|
872 | - 'sentence' |
|
873 | - ), |
|
874 | - ), |
|
875 | - 'wait_list' => array( |
|
876 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list, |
|
877 | - 'desc' => EEH_Template::pretty_status( |
|
878 | - EEM_Registration::status_id_wait_list, |
|
879 | - false, |
|
880 | - 'sentence' |
|
881 | - ), |
|
882 | - ), |
|
883 | - 'incomplete_status' => array( |
|
884 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_incomplete, |
|
885 | - 'desc' => EEH_Template::pretty_status( |
|
886 | - EEM_Registration::status_id_incomplete, |
|
887 | - false, |
|
888 | - 'sentence' |
|
889 | - ), |
|
890 | - ), |
|
891 | - 'not_approved' => array( |
|
892 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved, |
|
893 | - 'desc' => EEH_Template::pretty_status( |
|
894 | - EEM_Registration::status_id_not_approved, |
|
895 | - false, |
|
896 | - 'sentence' |
|
897 | - ), |
|
898 | - ), |
|
899 | - 'declined_status' => array( |
|
900 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined, |
|
901 | - 'desc' => EEH_Template::pretty_status( |
|
902 | - EEM_Registration::status_id_declined, |
|
903 | - false, |
|
904 | - 'sentence' |
|
905 | - ), |
|
906 | - ), |
|
907 | - 'cancelled_status' => array( |
|
908 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled, |
|
909 | - 'desc' => EEH_Template::pretty_status( |
|
910 | - EEM_Registration::status_id_cancelled, |
|
911 | - false, |
|
912 | - 'sentence' |
|
913 | - ), |
|
914 | - ), |
|
915 | - ); |
|
916 | - return array_merge($fc_items, $sc_items); |
|
917 | - } |
|
918 | - |
|
919 | - |
|
920 | - |
|
921 | - /*************************************** REGISTRATION OVERVIEW **************************************/ |
|
922 | - /** |
|
923 | - * @throws \EE_Error |
|
924 | - */ |
|
925 | - protected function _registrations_overview_list_table() |
|
926 | - { |
|
927 | - $this->_template_args['admin_page_header'] = ''; |
|
928 | - $EVT_ID = ! empty($this->_req_data['event_id']) |
|
929 | - ? absint($this->_req_data['event_id']) |
|
930 | - : 0; |
|
931 | - if ($EVT_ID) { |
|
932 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
933 | - 'ee_edit_registrations', |
|
934 | - 'espresso_registrations_new_registration', |
|
935 | - $EVT_ID |
|
936 | - )) { |
|
937 | - $this->_admin_page_title .= ' ' . $this->get_action_link_or_button( |
|
938 | - 'new_registration', |
|
939 | - 'add-registrant', |
|
940 | - array('event_id' => $EVT_ID), |
|
941 | - 'add-new-h2' |
|
942 | - ); |
|
943 | - } |
|
944 | - $event = EEM_Event::instance()->get_one_by_ID($EVT_ID); |
|
945 | - if ($event instanceof EE_Event) { |
|
946 | - $this->_template_args['admin_page_header'] = sprintf( |
|
947 | - esc_html__( |
|
948 | - '%s Viewing registrations for the event: %s%s', |
|
949 | - 'event_espresso' |
|
950 | - ), |
|
951 | - '<h3 style="line-height:1.5em;">', |
|
952 | - '<br /><a href="' |
|
953 | - . EE_Admin_Page::add_query_args_and_nonce( |
|
954 | - array( |
|
955 | - 'action' => 'edit', |
|
956 | - 'post' => $event->ID(), |
|
957 | - ), |
|
958 | - EVENTS_ADMIN_URL |
|
959 | - ) |
|
960 | - . '"> ' |
|
961 | - . $event->get('EVT_name') |
|
962 | - . ' </a> ', |
|
963 | - '</h3>' |
|
964 | - ); |
|
965 | - } |
|
966 | - $DTT_ID = ! empty($this->_req_data['datetime_id']) ? absint($this->_req_data['datetime_id']) : 0; |
|
967 | - $datetime = EEM_Datetime::instance()->get_one_by_ID($DTT_ID); |
|
968 | - if ($datetime instanceof EE_Datetime && $this->_template_args['admin_page_header'] !== '') { |
|
969 | - $this->_template_args['admin_page_header'] = substr( |
|
970 | - $this->_template_args['admin_page_header'], |
|
971 | - 0, |
|
972 | - -5 |
|
973 | - ); |
|
974 | - $this->_template_args['admin_page_header'] .= ' <span class="drk-grey-text">'; |
|
975 | - $this->_template_args['admin_page_header'] .= '<span class="dashicons dashicons-calendar"></span>'; |
|
976 | - $this->_template_args['admin_page_header'] .= $datetime->name(); |
|
977 | - $this->_template_args['admin_page_header'] .= ' ( ' . $datetime->start_date() . ' )'; |
|
978 | - $this->_template_args['admin_page_header'] .= '</span></h3>'; |
|
979 | - } |
|
980 | - } |
|
981 | - $this->_template_args['after_list_table'] = $this->_display_legend($this->_registration_legend_items()); |
|
982 | - $this->display_admin_list_table_page_with_no_sidebar(); |
|
983 | - } |
|
984 | - |
|
985 | - |
|
986 | - /** |
|
987 | - * This sets the _registration property for the registration details screen |
|
988 | - * |
|
989 | - * @access private |
|
990 | - * @return bool |
|
991 | - */ |
|
992 | - private function _set_registration_object() |
|
993 | - { |
|
994 | - //get out if we've already set the object |
|
995 | - if (is_object($this->_registration)) { |
|
996 | - return true; |
|
997 | - } |
|
998 | - $REG = EEM_Registration::instance(); |
|
999 | - $REG_ID = ( ! empty($this->_req_data['_REG_ID'])) ? absint($this->_req_data['_REG_ID']) : false; |
|
1000 | - if ($this->_registration = $REG->get_one_by_ID($REG_ID)) { |
|
1001 | - return true; |
|
1002 | - } else { |
|
1003 | - $error_msg = sprintf( |
|
1004 | - esc_html__( |
|
1005 | - 'An error occurred and the details for Registration ID #%s could not be retrieved.', |
|
1006 | - 'event_espresso' |
|
1007 | - ), |
|
1008 | - $REG_ID |
|
1009 | - ); |
|
1010 | - EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__); |
|
1011 | - $this->_registration = null; |
|
1012 | - return false; |
|
1013 | - } |
|
1014 | - } |
|
1015 | - |
|
1016 | - |
|
1017 | - /** |
|
1018 | - * Used to retrieve registrations for the list table. |
|
1019 | - * |
|
1020 | - * @param int $per_page |
|
1021 | - * @param bool $count |
|
1022 | - * @param bool $this_month |
|
1023 | - * @param bool $today |
|
1024 | - * @return EE_Registration[]|int |
|
1025 | - * @throws EE_Error |
|
1026 | - */ |
|
1027 | - public function get_registrations( |
|
1028 | - $per_page = 10, |
|
1029 | - $count = false, |
|
1030 | - $this_month = false, |
|
1031 | - $today = false |
|
1032 | - ) { |
|
1033 | - if ($this_month) { |
|
1034 | - $this->_req_data['status'] = 'month'; |
|
1035 | - } |
|
1036 | - if ($today) { |
|
1037 | - $this->_req_data['status'] = 'today'; |
|
1038 | - } |
|
1039 | - $query_params = $this->_get_registration_query_parameters($this->_req_data, $per_page, $count); |
|
1040 | - /** |
|
1041 | - * Override the default groupby added by EEM_Base so that sorts with multiple order bys work as expected |
|
1042 | - * @link https://events.codebasehq.com/projects/event-espresso/tickets/10093 |
|
1043 | - * @see EEM_Base::get_all() |
|
1044 | - */ |
|
1045 | - $query_params['group_by'] = ''; |
|
1046 | - |
|
1047 | - return $count |
|
1048 | - ? EEM_Registration::instance()->count($query_params) |
|
1049 | - /** @type EE_Registration[] */ |
|
1050 | - : EEM_Registration::instance()->get_all($query_params); |
|
1051 | - } |
|
1052 | - |
|
1053 | - |
|
1054 | - |
|
1055 | - /** |
|
1056 | - * Retrieves the query parameters to be used by the Registration model for getting registrations. |
|
1057 | - * Note: this listens to values on the request for some of the query parameters. |
|
1058 | - * |
|
1059 | - * @param array $request |
|
1060 | - * @param int $per_page |
|
1061 | - * @param bool $count |
|
1062 | - * @return array |
|
1063 | - */ |
|
1064 | - protected function _get_registration_query_parameters( |
|
1065 | - $request = array(), |
|
1066 | - $per_page = 10, |
|
1067 | - $count = false |
|
1068 | - ) { |
|
1069 | - |
|
1070 | - $query_params = array( |
|
1071 | - 0 => $this->_get_where_conditions_for_registrations_query( |
|
1072 | - $request |
|
1073 | - ), |
|
1074 | - 'caps' => EEM_Registration::caps_read_admin, |
|
1075 | - 'default_where_conditions' => 'this_model_only', |
|
1076 | - ); |
|
1077 | - if (! $count) { |
|
1078 | - $query_params = array_merge( |
|
1079 | - $query_params, |
|
1080 | - $this->_get_orderby_for_registrations_query(), |
|
1081 | - $this->_get_limit($per_page) |
|
1082 | - ); |
|
1083 | - } |
|
1084 | - |
|
1085 | - return $query_params; |
|
1086 | - } |
|
1087 | - |
|
1088 | - |
|
1089 | - /** |
|
1090 | - * This will add EVT_ID to the provided $where array for EE model query parameters. |
|
1091 | - * |
|
1092 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
1093 | - * @return array |
|
1094 | - */ |
|
1095 | - protected function _add_event_id_to_where_conditions(array $request) |
|
1096 | - { |
|
1097 | - $where = array(); |
|
1098 | - if (! empty($request['event_id'])) { |
|
1099 | - $where['EVT_ID'] = absint($request['event_id']); |
|
1100 | - } |
|
1101 | - return $where; |
|
1102 | - } |
|
1103 | - |
|
1104 | - |
|
1105 | - /** |
|
1106 | - * Adds category ID if it exists in the request to the where conditions for the registrations query. |
|
1107 | - * |
|
1108 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
1109 | - * @return array |
|
1110 | - */ |
|
1111 | - protected function _add_category_id_to_where_conditions(array $request) |
|
1112 | - { |
|
1113 | - $where = array(); |
|
1114 | - if (! empty($request['EVT_CAT']) && (int)$request['EVT_CAT'] !== -1) { |
|
1115 | - $where['Event.Term_Taxonomy.term_id'] = absint($request['EVT_CAT']); |
|
1116 | - } |
|
1117 | - return $where; |
|
1118 | - } |
|
1119 | - |
|
1120 | - |
|
1121 | - /** |
|
1122 | - * Adds the datetime ID if it exists in the request to the where conditions for the registrations query. |
|
1123 | - * |
|
1124 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
1125 | - * @return array |
|
1126 | - */ |
|
1127 | - protected function _add_datetime_id_to_where_conditions(array $request) |
|
1128 | - { |
|
1129 | - $where = array(); |
|
1130 | - if (! empty($request['datetime_id'])) { |
|
1131 | - $where['Ticket.Datetime.DTT_ID'] = absint($request['datetime_id']); |
|
1132 | - } |
|
1133 | - if (! empty($request['DTT_ID'])) { |
|
1134 | - $where['Ticket.Datetime.DTT_ID'] = absint($request['DTT_ID']); |
|
1135 | - } |
|
1136 | - return $where; |
|
1137 | - } |
|
1138 | - |
|
1139 | - |
|
1140 | - /** |
|
1141 | - * Adds the correct registration status to the where conditions for the registrations query. |
|
1142 | - * |
|
1143 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
1144 | - * @return array |
|
1145 | - */ |
|
1146 | - protected function _add_registration_status_to_where_conditions(array $request) |
|
1147 | - { |
|
1148 | - $where = array(); |
|
1149 | - $view = EEH_Array::is_set($request, 'status', ''); |
|
1150 | - $registration_status = ! empty($request['_reg_status']) |
|
1151 | - ? sanitize_text_field($request['_reg_status']) |
|
1152 | - : ''; |
|
1153 | - |
|
1154 | - /* |
|
26 | + /** |
|
27 | + * @var EE_Registration |
|
28 | + */ |
|
29 | + private $_registration; |
|
30 | + |
|
31 | + /** |
|
32 | + * @var EE_Event |
|
33 | + */ |
|
34 | + private $_reg_event; |
|
35 | + |
|
36 | + /** |
|
37 | + * @var EE_Session |
|
38 | + */ |
|
39 | + private $_session; |
|
40 | + |
|
41 | + private static $_reg_status; |
|
42 | + |
|
43 | + /** |
|
44 | + * Form for displaying the custom questions for this registration. |
|
45 | + * This gets used a few times throughout the request so its best to cache it |
|
46 | + * |
|
47 | + * @var EE_Registration_Custom_Questions_Form |
|
48 | + */ |
|
49 | + protected $_reg_custom_questions_form = null; |
|
50 | + |
|
51 | + |
|
52 | + /** |
|
53 | + * constructor |
|
54 | + * |
|
55 | + * @Constructor |
|
56 | + * @access public |
|
57 | + * @param bool $routing |
|
58 | + * @return Registrations_Admin_Page |
|
59 | + */ |
|
60 | + public function __construct($routing = true) |
|
61 | + { |
|
62 | + parent::__construct($routing); |
|
63 | + add_action('wp_loaded', array($this, 'wp_loaded')); |
|
64 | + } |
|
65 | + |
|
66 | + |
|
67 | + public function wp_loaded() |
|
68 | + { |
|
69 | + // when adding a new registration... |
|
70 | + if (isset($this->_req_data['action']) && $this->_req_data['action'] === 'new_registration') { |
|
71 | + EE_System::do_not_cache(); |
|
72 | + if (! isset($this->_req_data['processing_registration']) |
|
73 | + || absint($this->_req_data['processing_registration']) !== 1 |
|
74 | + ) { |
|
75 | + // and it's NOT the attendee information reg step |
|
76 | + // force cookie expiration by setting time to last week |
|
77 | + setcookie('ee_registration_added', 0, time() - WEEK_IN_SECONDS, '/'); |
|
78 | + // and update the global |
|
79 | + $_COOKIE['ee_registration_added'] = 0; |
|
80 | + } |
|
81 | + } |
|
82 | + } |
|
83 | + |
|
84 | + |
|
85 | + protected function _init_page_props() |
|
86 | + { |
|
87 | + $this->page_slug = REG_PG_SLUG; |
|
88 | + $this->_admin_base_url = REG_ADMIN_URL; |
|
89 | + $this->_admin_base_path = REG_ADMIN; |
|
90 | + $this->page_label = esc_html__('Registrations', 'event_espresso'); |
|
91 | + $this->_cpt_routes = array( |
|
92 | + 'add_new_attendee' => 'espresso_attendees', |
|
93 | + 'edit_attendee' => 'espresso_attendees', |
|
94 | + 'insert_attendee' => 'espresso_attendees', |
|
95 | + 'update_attendee' => 'espresso_attendees', |
|
96 | + ); |
|
97 | + $this->_cpt_model_names = array( |
|
98 | + 'add_new_attendee' => 'EEM_Attendee', |
|
99 | + 'edit_attendee' => 'EEM_Attendee', |
|
100 | + ); |
|
101 | + $this->_cpt_edit_routes = array( |
|
102 | + 'espresso_attendees' => 'edit_attendee', |
|
103 | + ); |
|
104 | + $this->_pagenow_map = array( |
|
105 | + 'add_new_attendee' => 'post-new.php', |
|
106 | + 'edit_attendee' => 'post.php', |
|
107 | + 'trash' => 'post.php', |
|
108 | + ); |
|
109 | + add_action('edit_form_after_title', array($this, 'after_title_form_fields'), 10); |
|
110 | + //add filters so that the comment urls don't take users to a confusing 404 page |
|
111 | + add_filter('get_comment_link', array($this, 'clear_comment_link'), 10, 3); |
|
112 | + } |
|
113 | + |
|
114 | + |
|
115 | + public function clear_comment_link($link, $comment, $args) |
|
116 | + { |
|
117 | + //gotta make sure this only happens on this route |
|
118 | + $post_type = get_post_type($comment->comment_post_ID); |
|
119 | + if ($post_type === 'espresso_attendees') { |
|
120 | + return '#commentsdiv'; |
|
121 | + } |
|
122 | + return $link; |
|
123 | + } |
|
124 | + |
|
125 | + |
|
126 | + protected function _ajax_hooks() |
|
127 | + { |
|
128 | + //todo: all hooks for registrations ajax goes in here |
|
129 | + add_action('wp_ajax_toggle_checkin_status', array($this, 'toggle_checkin_status')); |
|
130 | + } |
|
131 | + |
|
132 | + |
|
133 | + protected function _define_page_props() |
|
134 | + { |
|
135 | + $this->_admin_page_title = $this->page_label; |
|
136 | + $this->_labels = array( |
|
137 | + 'buttons' => array( |
|
138 | + 'add-registrant' => esc_html__('Add New Registration', 'event_espresso'), |
|
139 | + 'add-attendee' => esc_html__('Add Contact', 'event_espresso'), |
|
140 | + 'edit' => esc_html__('Edit Contact', 'event_espresso'), |
|
141 | + 'report' => esc_html__("Event Registrations CSV Report", "event_espresso"), |
|
142 | + 'report_all' => esc_html__('All Registrations CSV Report', 'event_espresso'), |
|
143 | + 'report_filtered' => esc_html__('Filtered CSV Report', 'event_espresso'), |
|
144 | + 'contact_list_report' => esc_html__('Contact List Report', 'event_espresso'), |
|
145 | + 'contact_list_export' => esc_html__("Export Data", "event_espresso"), |
|
146 | + ), |
|
147 | + 'publishbox' => array( |
|
148 | + 'add_new_attendee' => esc_html__("Add Contact Record", 'event_espresso'), |
|
149 | + 'edit_attendee' => esc_html__("Update Contact Record", 'event_espresso'), |
|
150 | + ), |
|
151 | + 'hide_add_button_on_cpt_route' => array( |
|
152 | + 'edit_attendee' => true, |
|
153 | + ), |
|
154 | + ); |
|
155 | + } |
|
156 | + |
|
157 | + |
|
158 | + /** |
|
159 | + * grab url requests and route them |
|
160 | + * |
|
161 | + * @access private |
|
162 | + * @return void |
|
163 | + */ |
|
164 | + public function _set_page_routes() |
|
165 | + { |
|
166 | + $this->_get_registration_status_array(); |
|
167 | + $reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID']) |
|
168 | + ? $this->_req_data['_REG_ID'] : 0; |
|
169 | + $att_id = ! empty($this->_req_data['ATT_ID']) && ! is_array($this->_req_data['ATT_ID']) |
|
170 | + ? $this->_req_data['ATT_ID'] : 0; |
|
171 | + $att_id = ! empty($this->_req_data['post']) && ! is_array($this->_req_data['post']) |
|
172 | + ? $this->_req_data['post'] |
|
173 | + : $att_id; |
|
174 | + $this->_page_routes = array( |
|
175 | + 'default' => array( |
|
176 | + 'func' => '_registrations_overview_list_table', |
|
177 | + 'capability' => 'ee_read_registrations', |
|
178 | + ), |
|
179 | + 'view_registration' => array( |
|
180 | + 'func' => '_registration_details', |
|
181 | + 'capability' => 'ee_read_registration', |
|
182 | + 'obj_id' => $reg_id, |
|
183 | + ), |
|
184 | + 'edit_registration' => array( |
|
185 | + 'func' => '_update_attendee_registration_form', |
|
186 | + 'noheader' => true, |
|
187 | + 'headers_sent_route' => 'view_registration', |
|
188 | + 'capability' => 'ee_edit_registration', |
|
189 | + 'obj_id' => $reg_id, |
|
190 | + '_REG_ID' => $reg_id, |
|
191 | + ), |
|
192 | + 'trash_registrations' => array( |
|
193 | + 'func' => '_trash_or_restore_registrations', |
|
194 | + 'args' => array('trash' => true), |
|
195 | + 'noheader' => true, |
|
196 | + 'capability' => 'ee_delete_registrations', |
|
197 | + ), |
|
198 | + 'restore_registrations' => array( |
|
199 | + 'func' => '_trash_or_restore_registrations', |
|
200 | + 'args' => array('trash' => false), |
|
201 | + 'noheader' => true, |
|
202 | + 'capability' => 'ee_delete_registrations', |
|
203 | + ), |
|
204 | + 'delete_registrations' => array( |
|
205 | + 'func' => '_delete_registrations', |
|
206 | + 'noheader' => true, |
|
207 | + 'capability' => 'ee_delete_registrations', |
|
208 | + ), |
|
209 | + 'new_registration' => array( |
|
210 | + 'func' => 'new_registration', |
|
211 | + 'capability' => 'ee_edit_registrations', |
|
212 | + ), |
|
213 | + 'process_reg_step' => array( |
|
214 | + 'func' => 'process_reg_step', |
|
215 | + 'noheader' => true, |
|
216 | + 'capability' => 'ee_edit_registrations', |
|
217 | + ), |
|
218 | + 'redirect_to_txn' => array( |
|
219 | + 'func' => 'redirect_to_txn', |
|
220 | + 'noheader' => true, |
|
221 | + 'capability' => 'ee_edit_registrations', |
|
222 | + ), |
|
223 | + 'change_reg_status' => array( |
|
224 | + 'func' => '_change_reg_status', |
|
225 | + 'noheader' => true, |
|
226 | + 'capability' => 'ee_edit_registration', |
|
227 | + 'obj_id' => $reg_id, |
|
228 | + ), |
|
229 | + 'approve_registration' => array( |
|
230 | + 'func' => 'approve_registration', |
|
231 | + 'noheader' => true, |
|
232 | + 'capability' => 'ee_edit_registration', |
|
233 | + 'obj_id' => $reg_id, |
|
234 | + ), |
|
235 | + 'approve_and_notify_registration' => array( |
|
236 | + 'func' => 'approve_registration', |
|
237 | + 'noheader' => true, |
|
238 | + 'args' => array(true), |
|
239 | + 'capability' => 'ee_edit_registration', |
|
240 | + 'obj_id' => $reg_id, |
|
241 | + ), |
|
242 | + 'decline_registration' => array( |
|
243 | + 'func' => 'decline_registration', |
|
244 | + 'noheader' => true, |
|
245 | + 'capability' => 'ee_edit_registration', |
|
246 | + 'obj_id' => $reg_id, |
|
247 | + ), |
|
248 | + 'decline_and_notify_registration' => array( |
|
249 | + 'func' => 'decline_registration', |
|
250 | + 'noheader' => true, |
|
251 | + 'args' => array(true), |
|
252 | + 'capability' => 'ee_edit_registration', |
|
253 | + 'obj_id' => $reg_id, |
|
254 | + ), |
|
255 | + 'pending_registration' => array( |
|
256 | + 'func' => 'pending_registration', |
|
257 | + 'noheader' => true, |
|
258 | + 'capability' => 'ee_edit_registration', |
|
259 | + 'obj_id' => $reg_id, |
|
260 | + ), |
|
261 | + 'pending_and_notify_registration' => array( |
|
262 | + 'func' => 'pending_registration', |
|
263 | + 'noheader' => true, |
|
264 | + 'args' => array(true), |
|
265 | + 'capability' => 'ee_edit_registration', |
|
266 | + 'obj_id' => $reg_id, |
|
267 | + ), |
|
268 | + 'no_approve_registration' => array( |
|
269 | + 'func' => 'not_approve_registration', |
|
270 | + 'noheader' => true, |
|
271 | + 'capability' => 'ee_edit_registration', |
|
272 | + 'obj_id' => $reg_id, |
|
273 | + ), |
|
274 | + 'no_approve_and_notify_registration' => array( |
|
275 | + 'func' => 'not_approve_registration', |
|
276 | + 'noheader' => true, |
|
277 | + 'args' => array(true), |
|
278 | + 'capability' => 'ee_edit_registration', |
|
279 | + 'obj_id' => $reg_id, |
|
280 | + ), |
|
281 | + 'cancel_registration' => array( |
|
282 | + 'func' => 'cancel_registration', |
|
283 | + 'noheader' => true, |
|
284 | + 'capability' => 'ee_edit_registration', |
|
285 | + 'obj_id' => $reg_id, |
|
286 | + ), |
|
287 | + 'cancel_and_notify_registration' => array( |
|
288 | + 'func' => 'cancel_registration', |
|
289 | + 'noheader' => true, |
|
290 | + 'args' => array(true), |
|
291 | + 'capability' => 'ee_edit_registration', |
|
292 | + 'obj_id' => $reg_id, |
|
293 | + ), |
|
294 | + 'contact_list' => array( |
|
295 | + 'func' => '_attendee_contact_list_table', |
|
296 | + 'capability' => 'ee_read_contacts', |
|
297 | + ), |
|
298 | + 'add_new_attendee' => array( |
|
299 | + 'func' => '_create_new_cpt_item', |
|
300 | + 'args' => array( |
|
301 | + 'new_attendee' => true, |
|
302 | + 'capability' => 'ee_edit_contacts', |
|
303 | + ), |
|
304 | + ), |
|
305 | + 'edit_attendee' => array( |
|
306 | + 'func' => '_edit_cpt_item', |
|
307 | + 'capability' => 'ee_edit_contacts', |
|
308 | + 'obj_id' => $att_id, |
|
309 | + ), |
|
310 | + 'duplicate_attendee' => array( |
|
311 | + 'func' => '_duplicate_attendee', |
|
312 | + 'noheader' => true, |
|
313 | + 'capability' => 'ee_edit_contacts', |
|
314 | + 'obj_id' => $att_id, |
|
315 | + ), |
|
316 | + 'insert_attendee' => array( |
|
317 | + 'func' => '_insert_or_update_attendee', |
|
318 | + 'args' => array( |
|
319 | + 'new_attendee' => true, |
|
320 | + ), |
|
321 | + 'noheader' => true, |
|
322 | + 'capability' => 'ee_edit_contacts', |
|
323 | + ), |
|
324 | + 'update_attendee' => array( |
|
325 | + 'func' => '_insert_or_update_attendee', |
|
326 | + 'args' => array( |
|
327 | + 'new_attendee' => false, |
|
328 | + ), |
|
329 | + 'noheader' => true, |
|
330 | + 'capability' => 'ee_edit_contacts', |
|
331 | + 'obj_id' => $att_id, |
|
332 | + ), |
|
333 | + 'trash_attendee' => array( |
|
334 | + 'func' => '_trash_or_restore_attendees', |
|
335 | + 'args' => array( |
|
336 | + 'trash' => true, |
|
337 | + ), |
|
338 | + 'noheader' => true, |
|
339 | + 'capability' => 'ee_delete_contacts', |
|
340 | + 'obj_id' => $att_id, |
|
341 | + ), |
|
342 | + 'restore_attendees' => array( |
|
343 | + 'func' => '_trash_or_restore_attendees', |
|
344 | + 'args' => array( |
|
345 | + 'trash' => false, |
|
346 | + ), |
|
347 | + 'noheader' => true, |
|
348 | + 'capability' => 'ee_delete_contacts', |
|
349 | + 'obj_id' => $att_id, |
|
350 | + ), |
|
351 | + 'resend_registration' => array( |
|
352 | + 'func' => '_resend_registration', |
|
353 | + 'noheader' => true, |
|
354 | + 'capability' => 'ee_send_message', |
|
355 | + ), |
|
356 | + 'registrations_report' => array( |
|
357 | + 'func' => '_registrations_report', |
|
358 | + 'noheader' => true, |
|
359 | + 'capability' => 'ee_read_registrations', |
|
360 | + ), |
|
361 | + 'contact_list_export' => array( |
|
362 | + 'func' => '_contact_list_export', |
|
363 | + 'noheader' => true, |
|
364 | + 'capability' => 'export', |
|
365 | + ), |
|
366 | + 'contact_list_report' => array( |
|
367 | + 'func' => '_contact_list_report', |
|
368 | + 'noheader' => true, |
|
369 | + 'capability' => 'ee_read_contacts', |
|
370 | + ), |
|
371 | + ); |
|
372 | + } |
|
373 | + |
|
374 | + |
|
375 | + protected function _set_page_config() |
|
376 | + { |
|
377 | + $this->_page_config = array( |
|
378 | + 'default' => array( |
|
379 | + 'nav' => array( |
|
380 | + 'label' => esc_html__('Overview', 'event_espresso'), |
|
381 | + 'order' => 5, |
|
382 | + ), |
|
383 | + 'help_tabs' => array( |
|
384 | + 'registrations_overview_help_tab' => array( |
|
385 | + 'title' => esc_html__('Registrations Overview', 'event_espresso'), |
|
386 | + 'filename' => 'registrations_overview', |
|
387 | + ), |
|
388 | + 'registrations_overview_table_column_headings_help_tab' => array( |
|
389 | + 'title' => esc_html__('Registrations Table Column Headings', 'event_espresso'), |
|
390 | + 'filename' => 'registrations_overview_table_column_headings', |
|
391 | + ), |
|
392 | + 'registrations_overview_filters_help_tab' => array( |
|
393 | + 'title' => esc_html__('Registration Filters', 'event_espresso'), |
|
394 | + 'filename' => 'registrations_overview_filters', |
|
395 | + ), |
|
396 | + 'registrations_overview_views_help_tab' => array( |
|
397 | + 'title' => esc_html__('Registration Views', 'event_espresso'), |
|
398 | + 'filename' => 'registrations_overview_views', |
|
399 | + ), |
|
400 | + 'registrations_regoverview_other_help_tab' => array( |
|
401 | + 'title' => esc_html__('Registrations Other', 'event_espresso'), |
|
402 | + 'filename' => 'registrations_overview_other', |
|
403 | + ), |
|
404 | + ), |
|
405 | + 'help_tour' => array('Registration_Overview_Help_Tour'), |
|
406 | + 'qtips' => array('Registration_List_Table_Tips'), |
|
407 | + 'list_table' => 'EE_Registrations_List_Table', |
|
408 | + 'require_nonce' => false, |
|
409 | + ), |
|
410 | + 'view_registration' => array( |
|
411 | + 'nav' => array( |
|
412 | + 'label' => esc_html__('REG Details', 'event_espresso'), |
|
413 | + 'order' => 15, |
|
414 | + 'url' => isset($this->_req_data['_REG_ID']) |
|
415 | + ? add_query_arg(array('_REG_ID' => $this->_req_data['_REG_ID']), $this->_current_page_view_url) |
|
416 | + : $this->_admin_base_url, |
|
417 | + 'persistent' => false, |
|
418 | + ), |
|
419 | + 'help_tabs' => array( |
|
420 | + 'registrations_details_help_tab' => array( |
|
421 | + 'title' => esc_html__('Registration Details', 'event_espresso'), |
|
422 | + 'filename' => 'registrations_details', |
|
423 | + ), |
|
424 | + 'registrations_details_table_help_tab' => array( |
|
425 | + 'title' => esc_html__('Registration Details Table', 'event_espresso'), |
|
426 | + 'filename' => 'registrations_details_table', |
|
427 | + ), |
|
428 | + 'registrations_details_form_answers_help_tab' => array( |
|
429 | + 'title' => esc_html__('Registration Form Answers', 'event_espresso'), |
|
430 | + 'filename' => 'registrations_details_form_answers', |
|
431 | + ), |
|
432 | + 'registrations_details_registrant_details_help_tab' => array( |
|
433 | + 'title' => esc_html__('Contact Details', 'event_espresso'), |
|
434 | + 'filename' => 'registrations_details_registrant_details', |
|
435 | + ), |
|
436 | + ), |
|
437 | + 'help_tour' => array('Registration_Details_Help_Tour'), |
|
438 | + 'metaboxes' => array_merge( |
|
439 | + $this->_default_espresso_metaboxes, |
|
440 | + array('_registration_details_metaboxes') |
|
441 | + ), |
|
442 | + 'require_nonce' => false, |
|
443 | + ), |
|
444 | + 'new_registration' => array( |
|
445 | + 'nav' => array( |
|
446 | + 'label' => esc_html__('Add New Registration', 'event_espresso'), |
|
447 | + 'url' => '#', |
|
448 | + 'order' => 15, |
|
449 | + 'persistent' => false, |
|
450 | + ), |
|
451 | + 'metaboxes' => $this->_default_espresso_metaboxes, |
|
452 | + 'labels' => array( |
|
453 | + 'publishbox' => esc_html__('Save Registration', 'event_espresso'), |
|
454 | + ), |
|
455 | + 'require_nonce' => false, |
|
456 | + ), |
|
457 | + 'add_new_attendee' => array( |
|
458 | + 'nav' => array( |
|
459 | + 'label' => esc_html__('Add Contact', 'event_espresso'), |
|
460 | + 'order' => 15, |
|
461 | + 'persistent' => false, |
|
462 | + ), |
|
463 | + 'metaboxes' => array_merge( |
|
464 | + $this->_default_espresso_metaboxes, |
|
465 | + array('_publish_post_box', 'attendee_editor_metaboxes') |
|
466 | + ), |
|
467 | + 'require_nonce' => false, |
|
468 | + ), |
|
469 | + 'edit_attendee' => array( |
|
470 | + 'nav' => array( |
|
471 | + 'label' => esc_html__('Edit Contact', 'event_espresso'), |
|
472 | + 'order' => 15, |
|
473 | + 'persistent' => false, |
|
474 | + 'url' => isset($this->_req_data['ATT_ID']) |
|
475 | + ? add_query_arg(array('ATT_ID' => $this->_req_data['ATT_ID']), $this->_current_page_view_url) |
|
476 | + : $this->_admin_base_url, |
|
477 | + ), |
|
478 | + 'metaboxes' => array('attendee_editor_metaboxes'), |
|
479 | + 'require_nonce' => false, |
|
480 | + ), |
|
481 | + 'contact_list' => array( |
|
482 | + 'nav' => array( |
|
483 | + 'label' => esc_html__('Contact List', 'event_espresso'), |
|
484 | + 'order' => 20, |
|
485 | + ), |
|
486 | + 'list_table' => 'EE_Attendee_Contact_List_Table', |
|
487 | + 'help_tabs' => array( |
|
488 | + 'registrations_contact_list_help_tab' => array( |
|
489 | + 'title' => esc_html__('Registrations Contact List', 'event_espresso'), |
|
490 | + 'filename' => 'registrations_contact_list', |
|
491 | + ), |
|
492 | + 'registrations_contact-list_table_column_headings_help_tab' => array( |
|
493 | + 'title' => esc_html__('Contact List Table Column Headings', 'event_espresso'), |
|
494 | + 'filename' => 'registrations_contact_list_table_column_headings', |
|
495 | + ), |
|
496 | + 'registrations_contact_list_views_help_tab' => array( |
|
497 | + 'title' => esc_html__('Contact List Views', 'event_espresso'), |
|
498 | + 'filename' => 'registrations_contact_list_views', |
|
499 | + ), |
|
500 | + 'registrations_contact_list_other_help_tab' => array( |
|
501 | + 'title' => esc_html__('Contact List Other', 'event_espresso'), |
|
502 | + 'filename' => 'registrations_contact_list_other', |
|
503 | + ), |
|
504 | + ), |
|
505 | + 'help_tour' => array('Contact_List_Help_Tour'), |
|
506 | + 'metaboxes' => array(), |
|
507 | + 'require_nonce' => false, |
|
508 | + ), |
|
509 | + //override default cpt routes |
|
510 | + 'create_new' => '', |
|
511 | + 'edit' => '', |
|
512 | + ); |
|
513 | + } |
|
514 | + |
|
515 | + |
|
516 | + /** |
|
517 | + * The below methods aren't used by this class currently |
|
518 | + */ |
|
519 | + protected function _add_screen_options() |
|
520 | + { |
|
521 | + } |
|
522 | + |
|
523 | + |
|
524 | + protected function _add_feature_pointers() |
|
525 | + { |
|
526 | + } |
|
527 | + |
|
528 | + |
|
529 | + public function admin_init() |
|
530 | + { |
|
531 | + EE_Registry::$i18n_js_strings['update_att_qstns'] = esc_html__( |
|
532 | + 'click "Update Registration Questions" to save your changes', |
|
533 | + 'event_espresso' |
|
534 | + ); |
|
535 | + } |
|
536 | + |
|
537 | + |
|
538 | + public function admin_notices() |
|
539 | + { |
|
540 | + } |
|
541 | + |
|
542 | + |
|
543 | + public function admin_footer_scripts() |
|
544 | + { |
|
545 | + } |
|
546 | + |
|
547 | + |
|
548 | + /** |
|
549 | + * get list of registration statuses |
|
550 | + * |
|
551 | + * @access private |
|
552 | + * @return void |
|
553 | + */ |
|
554 | + private function _get_registration_status_array() |
|
555 | + { |
|
556 | + self::$_reg_status = EEM_Registration::reg_status_array(array(), true); |
|
557 | + } |
|
558 | + |
|
559 | + |
|
560 | + protected function _add_screen_options_default() |
|
561 | + { |
|
562 | + $this->_per_page_screen_option(); |
|
563 | + } |
|
564 | + |
|
565 | + |
|
566 | + protected function _add_screen_options_contact_list() |
|
567 | + { |
|
568 | + $page_title = $this->_admin_page_title; |
|
569 | + $this->_admin_page_title = esc_html__("Contacts", 'event_espresso'); |
|
570 | + $this->_per_page_screen_option(); |
|
571 | + $this->_admin_page_title = $page_title; |
|
572 | + } |
|
573 | + |
|
574 | + |
|
575 | + public function load_scripts_styles() |
|
576 | + { |
|
577 | + //style |
|
578 | + wp_register_style( |
|
579 | + 'espresso_reg', |
|
580 | + REG_ASSETS_URL . 'espresso_registrations_admin.css', |
|
581 | + array('ee-admin-css'), |
|
582 | + EVENT_ESPRESSO_VERSION |
|
583 | + ); |
|
584 | + wp_enqueue_style('espresso_reg'); |
|
585 | + //script |
|
586 | + wp_register_script( |
|
587 | + 'espresso_reg', |
|
588 | + REG_ASSETS_URL . 'espresso_registrations_admin.js', |
|
589 | + array('jquery-ui-datepicker', 'jquery-ui-draggable', 'ee_admin_js'), |
|
590 | + EVENT_ESPRESSO_VERSION, |
|
591 | + true |
|
592 | + ); |
|
593 | + wp_enqueue_script('espresso_reg'); |
|
594 | + } |
|
595 | + |
|
596 | + |
|
597 | + public function load_scripts_styles_edit_attendee() |
|
598 | + { |
|
599 | + //stuff to only show up on our attendee edit details page. |
|
600 | + $attendee_details_translations = array( |
|
601 | + 'att_publish_text' => sprintf( |
|
602 | + esc_html__('Created on: <b>%1$s</b>', 'event_espresso'), |
|
603 | + $this->_cpt_model_obj->get_datetime('ATT_created') |
|
604 | + ), |
|
605 | + ); |
|
606 | + wp_localize_script('espresso_reg', 'ATTENDEE_DETAILS', $attendee_details_translations); |
|
607 | + wp_enqueue_script('jquery-validate'); |
|
608 | + } |
|
609 | + |
|
610 | + |
|
611 | + public function load_scripts_styles_view_registration() |
|
612 | + { |
|
613 | + //styles |
|
614 | + wp_enqueue_style('espresso-ui-theme'); |
|
615 | + //scripts |
|
616 | + $this->_get_reg_custom_questions_form($this->_registration->ID()); |
|
617 | + $this->_reg_custom_questions_form->wp_enqueue_scripts(true); |
|
618 | + } |
|
619 | + |
|
620 | + |
|
621 | + public function load_scripts_styles_contact_list() |
|
622 | + { |
|
623 | + wp_deregister_style('espresso_reg'); |
|
624 | + wp_register_style( |
|
625 | + 'espresso_att', |
|
626 | + REG_ASSETS_URL . 'espresso_attendees_admin.css', |
|
627 | + array('ee-admin-css'), |
|
628 | + EVENT_ESPRESSO_VERSION |
|
629 | + ); |
|
630 | + wp_enqueue_style('espresso_att'); |
|
631 | + } |
|
632 | + |
|
633 | + |
|
634 | + public function load_scripts_styles_new_registration() |
|
635 | + { |
|
636 | + wp_register_script( |
|
637 | + 'ee-spco-for-admin', |
|
638 | + REG_ASSETS_URL . 'spco_for_admin.js', |
|
639 | + array('underscore', 'jquery'), |
|
640 | + EVENT_ESPRESSO_VERSION, |
|
641 | + true |
|
642 | + ); |
|
643 | + wp_enqueue_script('ee-spco-for-admin'); |
|
644 | + add_filter('FHEE__EED_Ticket_Selector__load_tckt_slctr_assets', '__return_true'); |
|
645 | + EE_Form_Section_Proper::wp_enqueue_scripts(); |
|
646 | + EED_Ticket_Selector::load_tckt_slctr_assets(); |
|
647 | + EE_Datepicker_Input::enqueue_styles_and_scripts(); |
|
648 | + } |
|
649 | + |
|
650 | + |
|
651 | + public function AHEE__EE_Admin_Page__route_admin_request_resend_registration() |
|
652 | + { |
|
653 | + add_filter('FHEE_load_EE_messages', '__return_true'); |
|
654 | + } |
|
655 | + |
|
656 | + |
|
657 | + public function AHEE__EE_Admin_Page__route_admin_request_approve_registration() |
|
658 | + { |
|
659 | + add_filter('FHEE_load_EE_messages', '__return_true'); |
|
660 | + } |
|
661 | + |
|
662 | + |
|
663 | + protected function _set_list_table_views_default() |
|
664 | + { |
|
665 | + //for notification related bulk actions we need to make sure only active messengers have an option. |
|
666 | + EED_Messages::set_autoloaders(); |
|
667 | + /** @type EE_Message_Resource_Manager $message_resource_manager */ |
|
668 | + $message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager'); |
|
669 | + $active_mts = $message_resource_manager->list_of_active_message_types(); |
|
670 | + //key= bulk_action_slug, value= message type. |
|
671 | + $match_array = array( |
|
672 | + 'approve_registration' => 'registration', |
|
673 | + 'decline_registration' => 'declined_registration', |
|
674 | + 'pending_registration' => 'pending_approval', |
|
675 | + 'no_approve_registration' => 'not_approved_registration', |
|
676 | + 'cancel_registration' => 'cancelled_registration', |
|
677 | + ); |
|
678 | + /** setup reg status bulk actions **/ |
|
679 | + $def_reg_status_actions['approve_registration'] = esc_html__('Approve Registrations', 'event_espresso'); |
|
680 | + if (in_array($match_array['approve_registration'], $active_mts) |
|
681 | + && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
682 | + ) { |
|
683 | + $def_reg_status_actions['approve_and_notify_registration'] = esc_html__( |
|
684 | + 'Approve and Notify Registrations', |
|
685 | + 'event_espresso' |
|
686 | + ); |
|
687 | + } |
|
688 | + $def_reg_status_actions['decline_registration'] = esc_html__('Decline Registrations', 'event_espresso'); |
|
689 | + if (in_array($match_array['decline_registration'], $active_mts) |
|
690 | + && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
691 | + ) { |
|
692 | + $def_reg_status_actions['decline_and_notify_registration'] = esc_html__( |
|
693 | + 'Decline and Notify Registrations', |
|
694 | + 'event_espresso' |
|
695 | + ); |
|
696 | + } |
|
697 | + $def_reg_status_actions['pending_registration'] = esc_html__( |
|
698 | + 'Set Registrations to Pending Payment', |
|
699 | + 'event_espresso' |
|
700 | + ); |
|
701 | + if (in_array($match_array['pending_registration'], $active_mts) |
|
702 | + && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
703 | + ) { |
|
704 | + $def_reg_status_actions['pending_and_notify_registration'] = esc_html__( |
|
705 | + 'Set Registrations to Pending Payment and Notify', |
|
706 | + 'event_espresso' |
|
707 | + ); |
|
708 | + } |
|
709 | + $def_reg_status_actions['no_approve_registration'] = esc_html__( |
|
710 | + 'Set Registrations to Not Approved', |
|
711 | + 'event_espresso' |
|
712 | + ); |
|
713 | + if (in_array($match_array['no_approve_registration'], $active_mts) |
|
714 | + && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
715 | + ) { |
|
716 | + $def_reg_status_actions['no_approve_and_notify_registration'] = esc_html__( |
|
717 | + 'Set Registrations to Not Approved and Notify', |
|
718 | + 'event_espresso' |
|
719 | + ); |
|
720 | + } |
|
721 | + $def_reg_status_actions['cancel_registration'] = esc_html__('Cancel Registrations', 'event_espresso'); |
|
722 | + if (in_array($match_array['cancel_registration'], $active_mts) |
|
723 | + && EE_Registry::instance()->CAP->current_user_can('ee_send_message', 'batch_send_messages') |
|
724 | + ) { |
|
725 | + $def_reg_status_actions['cancel_and_notify_registration'] = esc_html__( |
|
726 | + 'Cancel Registrations and Notify', |
|
727 | + 'event_espresso' |
|
728 | + ); |
|
729 | + } |
|
730 | + $this->_views = array( |
|
731 | + 'all' => array( |
|
732 | + 'slug' => 'all', |
|
733 | + 'label' => esc_html__('View All Registrations', 'event_espresso'), |
|
734 | + 'count' => 0, |
|
735 | + 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
736 | + 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
737 | + )), |
|
738 | + ), |
|
739 | + 'month' => array( |
|
740 | + 'slug' => 'month', |
|
741 | + 'label' => esc_html__('This Month', 'event_espresso'), |
|
742 | + 'count' => 0, |
|
743 | + 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
744 | + 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
745 | + )), |
|
746 | + ), |
|
747 | + 'today' => array( |
|
748 | + 'slug' => 'today', |
|
749 | + 'label' => sprintf( |
|
750 | + esc_html__('Today - %s', 'event_espresso'), |
|
751 | + date('M d, Y', current_time('timestamp')) |
|
752 | + ), |
|
753 | + 'count' => 0, |
|
754 | + 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
755 | + 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
756 | + )), |
|
757 | + ), |
|
758 | + ); |
|
759 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
760 | + 'ee_delete_registrations', |
|
761 | + 'espresso_registrations_delete_registration' |
|
762 | + )) { |
|
763 | + $this->_views['incomplete'] = array( |
|
764 | + 'slug' => 'incomplete', |
|
765 | + 'label' => esc_html__('Incomplete', 'event_espresso'), |
|
766 | + 'count' => 0, |
|
767 | + 'bulk_action' => array( |
|
768 | + 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
769 | + ), |
|
770 | + ); |
|
771 | + $this->_views['trash'] = array( |
|
772 | + 'slug' => 'trash', |
|
773 | + 'label' => esc_html__('Trash', 'event_espresso'), |
|
774 | + 'count' => 0, |
|
775 | + 'bulk_action' => array( |
|
776 | + 'restore_registrations' => esc_html__('Restore Registrations', 'event_espresso'), |
|
777 | + 'delete_registrations' => esc_html__('Delete Registrations Permanently', 'event_espresso'), |
|
778 | + ), |
|
779 | + ); |
|
780 | + } |
|
781 | + } |
|
782 | + |
|
783 | + |
|
784 | + protected function _set_list_table_views_contact_list() |
|
785 | + { |
|
786 | + $this->_views = array( |
|
787 | + 'in_use' => array( |
|
788 | + 'slug' => 'in_use', |
|
789 | + 'label' => esc_html__('In Use', 'event_espresso'), |
|
790 | + 'count' => 0, |
|
791 | + 'bulk_action' => array( |
|
792 | + 'trash_attendees' => esc_html__('Move to Trash', 'event_espresso'), |
|
793 | + ), |
|
794 | + ), |
|
795 | + ); |
|
796 | + if (EE_Registry::instance()->CAP->current_user_can('ee_delete_contacts', |
|
797 | + 'espresso_registrations_trash_attendees') |
|
798 | + ) { |
|
799 | + $this->_views['trash'] = array( |
|
800 | + 'slug' => 'trash', |
|
801 | + 'label' => esc_html__('Trash', 'event_espresso'), |
|
802 | + 'count' => 0, |
|
803 | + 'bulk_action' => array( |
|
804 | + 'restore_attendees' => esc_html__('Restore from Trash', 'event_espresso'), |
|
805 | + ), |
|
806 | + ); |
|
807 | + } |
|
808 | + } |
|
809 | + |
|
810 | + |
|
811 | + protected function _registration_legend_items() |
|
812 | + { |
|
813 | + $fc_items = array( |
|
814 | + 'star-icon' => array( |
|
815 | + 'class' => 'dashicons dashicons-star-filled lt-blue-icon ee-icon-size-8', |
|
816 | + 'desc' => esc_html__('This is the Primary Registrant', 'event_espresso'), |
|
817 | + ), |
|
818 | + 'view_details' => array( |
|
819 | + 'class' => 'dashicons dashicons-clipboard', |
|
820 | + 'desc' => esc_html__('View Registration Details', 'event_espresso'), |
|
821 | + ), |
|
822 | + 'edit_attendee' => array( |
|
823 | + 'class' => 'ee-icon ee-icon-user-edit ee-icon-size-16', |
|
824 | + 'desc' => esc_html__('Edit Contact Details', 'event_espresso'), |
|
825 | + ), |
|
826 | + 'view_transaction' => array( |
|
827 | + 'class' => 'dashicons dashicons-cart', |
|
828 | + 'desc' => esc_html__('View Transaction Details', 'event_espresso'), |
|
829 | + ), |
|
830 | + 'view_invoice' => array( |
|
831 | + 'class' => 'dashicons dashicons-media-spreadsheet', |
|
832 | + 'desc' => esc_html__('View Transaction Invoice', 'event_espresso'), |
|
833 | + ), |
|
834 | + ); |
|
835 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
836 | + 'ee_send_message', |
|
837 | + 'espresso_registrations_resend_registration' |
|
838 | + )) { |
|
839 | + $fc_items['resend_registration'] = array( |
|
840 | + 'class' => 'dashicons dashicons-email-alt', |
|
841 | + 'desc' => esc_html__('Resend Registration Details', 'event_espresso'), |
|
842 | + ); |
|
843 | + } else { |
|
844 | + $fc_items['blank'] = array('class' => 'blank', 'desc' => ''); |
|
845 | + } |
|
846 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
847 | + 'ee_read_global_messages', |
|
848 | + 'view_filtered_messages' |
|
849 | + )) { |
|
850 | + $related_for_icon = EEH_MSG_Template::get_message_action_icon('see_notifications_for'); |
|
851 | + if (isset($related_for_icon['css_class']) && isset($related_for_icon['label'])) { |
|
852 | + $fc_items['view_related_messages'] = array( |
|
853 | + 'class' => $related_for_icon['css_class'], |
|
854 | + 'desc' => $related_for_icon['label'], |
|
855 | + ); |
|
856 | + } |
|
857 | + } |
|
858 | + $sc_items = array( |
|
859 | + 'approved_status' => array( |
|
860 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved, |
|
861 | + 'desc' => EEH_Template::pretty_status( |
|
862 | + EEM_Registration::status_id_approved, |
|
863 | + false, |
|
864 | + 'sentence' |
|
865 | + ), |
|
866 | + ), |
|
867 | + 'pending_status' => array( |
|
868 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment, |
|
869 | + 'desc' => EEH_Template::pretty_status( |
|
870 | + EEM_Registration::status_id_pending_payment, |
|
871 | + false, |
|
872 | + 'sentence' |
|
873 | + ), |
|
874 | + ), |
|
875 | + 'wait_list' => array( |
|
876 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list, |
|
877 | + 'desc' => EEH_Template::pretty_status( |
|
878 | + EEM_Registration::status_id_wait_list, |
|
879 | + false, |
|
880 | + 'sentence' |
|
881 | + ), |
|
882 | + ), |
|
883 | + 'incomplete_status' => array( |
|
884 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_incomplete, |
|
885 | + 'desc' => EEH_Template::pretty_status( |
|
886 | + EEM_Registration::status_id_incomplete, |
|
887 | + false, |
|
888 | + 'sentence' |
|
889 | + ), |
|
890 | + ), |
|
891 | + 'not_approved' => array( |
|
892 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved, |
|
893 | + 'desc' => EEH_Template::pretty_status( |
|
894 | + EEM_Registration::status_id_not_approved, |
|
895 | + false, |
|
896 | + 'sentence' |
|
897 | + ), |
|
898 | + ), |
|
899 | + 'declined_status' => array( |
|
900 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined, |
|
901 | + 'desc' => EEH_Template::pretty_status( |
|
902 | + EEM_Registration::status_id_declined, |
|
903 | + false, |
|
904 | + 'sentence' |
|
905 | + ), |
|
906 | + ), |
|
907 | + 'cancelled_status' => array( |
|
908 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled, |
|
909 | + 'desc' => EEH_Template::pretty_status( |
|
910 | + EEM_Registration::status_id_cancelled, |
|
911 | + false, |
|
912 | + 'sentence' |
|
913 | + ), |
|
914 | + ), |
|
915 | + ); |
|
916 | + return array_merge($fc_items, $sc_items); |
|
917 | + } |
|
918 | + |
|
919 | + |
|
920 | + |
|
921 | + /*************************************** REGISTRATION OVERVIEW **************************************/ |
|
922 | + /** |
|
923 | + * @throws \EE_Error |
|
924 | + */ |
|
925 | + protected function _registrations_overview_list_table() |
|
926 | + { |
|
927 | + $this->_template_args['admin_page_header'] = ''; |
|
928 | + $EVT_ID = ! empty($this->_req_data['event_id']) |
|
929 | + ? absint($this->_req_data['event_id']) |
|
930 | + : 0; |
|
931 | + if ($EVT_ID) { |
|
932 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
933 | + 'ee_edit_registrations', |
|
934 | + 'espresso_registrations_new_registration', |
|
935 | + $EVT_ID |
|
936 | + )) { |
|
937 | + $this->_admin_page_title .= ' ' . $this->get_action_link_or_button( |
|
938 | + 'new_registration', |
|
939 | + 'add-registrant', |
|
940 | + array('event_id' => $EVT_ID), |
|
941 | + 'add-new-h2' |
|
942 | + ); |
|
943 | + } |
|
944 | + $event = EEM_Event::instance()->get_one_by_ID($EVT_ID); |
|
945 | + if ($event instanceof EE_Event) { |
|
946 | + $this->_template_args['admin_page_header'] = sprintf( |
|
947 | + esc_html__( |
|
948 | + '%s Viewing registrations for the event: %s%s', |
|
949 | + 'event_espresso' |
|
950 | + ), |
|
951 | + '<h3 style="line-height:1.5em;">', |
|
952 | + '<br /><a href="' |
|
953 | + . EE_Admin_Page::add_query_args_and_nonce( |
|
954 | + array( |
|
955 | + 'action' => 'edit', |
|
956 | + 'post' => $event->ID(), |
|
957 | + ), |
|
958 | + EVENTS_ADMIN_URL |
|
959 | + ) |
|
960 | + . '"> ' |
|
961 | + . $event->get('EVT_name') |
|
962 | + . ' </a> ', |
|
963 | + '</h3>' |
|
964 | + ); |
|
965 | + } |
|
966 | + $DTT_ID = ! empty($this->_req_data['datetime_id']) ? absint($this->_req_data['datetime_id']) : 0; |
|
967 | + $datetime = EEM_Datetime::instance()->get_one_by_ID($DTT_ID); |
|
968 | + if ($datetime instanceof EE_Datetime && $this->_template_args['admin_page_header'] !== '') { |
|
969 | + $this->_template_args['admin_page_header'] = substr( |
|
970 | + $this->_template_args['admin_page_header'], |
|
971 | + 0, |
|
972 | + -5 |
|
973 | + ); |
|
974 | + $this->_template_args['admin_page_header'] .= ' <span class="drk-grey-text">'; |
|
975 | + $this->_template_args['admin_page_header'] .= '<span class="dashicons dashicons-calendar"></span>'; |
|
976 | + $this->_template_args['admin_page_header'] .= $datetime->name(); |
|
977 | + $this->_template_args['admin_page_header'] .= ' ( ' . $datetime->start_date() . ' )'; |
|
978 | + $this->_template_args['admin_page_header'] .= '</span></h3>'; |
|
979 | + } |
|
980 | + } |
|
981 | + $this->_template_args['after_list_table'] = $this->_display_legend($this->_registration_legend_items()); |
|
982 | + $this->display_admin_list_table_page_with_no_sidebar(); |
|
983 | + } |
|
984 | + |
|
985 | + |
|
986 | + /** |
|
987 | + * This sets the _registration property for the registration details screen |
|
988 | + * |
|
989 | + * @access private |
|
990 | + * @return bool |
|
991 | + */ |
|
992 | + private function _set_registration_object() |
|
993 | + { |
|
994 | + //get out if we've already set the object |
|
995 | + if (is_object($this->_registration)) { |
|
996 | + return true; |
|
997 | + } |
|
998 | + $REG = EEM_Registration::instance(); |
|
999 | + $REG_ID = ( ! empty($this->_req_data['_REG_ID'])) ? absint($this->_req_data['_REG_ID']) : false; |
|
1000 | + if ($this->_registration = $REG->get_one_by_ID($REG_ID)) { |
|
1001 | + return true; |
|
1002 | + } else { |
|
1003 | + $error_msg = sprintf( |
|
1004 | + esc_html__( |
|
1005 | + 'An error occurred and the details for Registration ID #%s could not be retrieved.', |
|
1006 | + 'event_espresso' |
|
1007 | + ), |
|
1008 | + $REG_ID |
|
1009 | + ); |
|
1010 | + EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__); |
|
1011 | + $this->_registration = null; |
|
1012 | + return false; |
|
1013 | + } |
|
1014 | + } |
|
1015 | + |
|
1016 | + |
|
1017 | + /** |
|
1018 | + * Used to retrieve registrations for the list table. |
|
1019 | + * |
|
1020 | + * @param int $per_page |
|
1021 | + * @param bool $count |
|
1022 | + * @param bool $this_month |
|
1023 | + * @param bool $today |
|
1024 | + * @return EE_Registration[]|int |
|
1025 | + * @throws EE_Error |
|
1026 | + */ |
|
1027 | + public function get_registrations( |
|
1028 | + $per_page = 10, |
|
1029 | + $count = false, |
|
1030 | + $this_month = false, |
|
1031 | + $today = false |
|
1032 | + ) { |
|
1033 | + if ($this_month) { |
|
1034 | + $this->_req_data['status'] = 'month'; |
|
1035 | + } |
|
1036 | + if ($today) { |
|
1037 | + $this->_req_data['status'] = 'today'; |
|
1038 | + } |
|
1039 | + $query_params = $this->_get_registration_query_parameters($this->_req_data, $per_page, $count); |
|
1040 | + /** |
|
1041 | + * Override the default groupby added by EEM_Base so that sorts with multiple order bys work as expected |
|
1042 | + * @link https://events.codebasehq.com/projects/event-espresso/tickets/10093 |
|
1043 | + * @see EEM_Base::get_all() |
|
1044 | + */ |
|
1045 | + $query_params['group_by'] = ''; |
|
1046 | + |
|
1047 | + return $count |
|
1048 | + ? EEM_Registration::instance()->count($query_params) |
|
1049 | + /** @type EE_Registration[] */ |
|
1050 | + : EEM_Registration::instance()->get_all($query_params); |
|
1051 | + } |
|
1052 | + |
|
1053 | + |
|
1054 | + |
|
1055 | + /** |
|
1056 | + * Retrieves the query parameters to be used by the Registration model for getting registrations. |
|
1057 | + * Note: this listens to values on the request for some of the query parameters. |
|
1058 | + * |
|
1059 | + * @param array $request |
|
1060 | + * @param int $per_page |
|
1061 | + * @param bool $count |
|
1062 | + * @return array |
|
1063 | + */ |
|
1064 | + protected function _get_registration_query_parameters( |
|
1065 | + $request = array(), |
|
1066 | + $per_page = 10, |
|
1067 | + $count = false |
|
1068 | + ) { |
|
1069 | + |
|
1070 | + $query_params = array( |
|
1071 | + 0 => $this->_get_where_conditions_for_registrations_query( |
|
1072 | + $request |
|
1073 | + ), |
|
1074 | + 'caps' => EEM_Registration::caps_read_admin, |
|
1075 | + 'default_where_conditions' => 'this_model_only', |
|
1076 | + ); |
|
1077 | + if (! $count) { |
|
1078 | + $query_params = array_merge( |
|
1079 | + $query_params, |
|
1080 | + $this->_get_orderby_for_registrations_query(), |
|
1081 | + $this->_get_limit($per_page) |
|
1082 | + ); |
|
1083 | + } |
|
1084 | + |
|
1085 | + return $query_params; |
|
1086 | + } |
|
1087 | + |
|
1088 | + |
|
1089 | + /** |
|
1090 | + * This will add EVT_ID to the provided $where array for EE model query parameters. |
|
1091 | + * |
|
1092 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
1093 | + * @return array |
|
1094 | + */ |
|
1095 | + protected function _add_event_id_to_where_conditions(array $request) |
|
1096 | + { |
|
1097 | + $where = array(); |
|
1098 | + if (! empty($request['event_id'])) { |
|
1099 | + $where['EVT_ID'] = absint($request['event_id']); |
|
1100 | + } |
|
1101 | + return $where; |
|
1102 | + } |
|
1103 | + |
|
1104 | + |
|
1105 | + /** |
|
1106 | + * Adds category ID if it exists in the request to the where conditions for the registrations query. |
|
1107 | + * |
|
1108 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
1109 | + * @return array |
|
1110 | + */ |
|
1111 | + protected function _add_category_id_to_where_conditions(array $request) |
|
1112 | + { |
|
1113 | + $where = array(); |
|
1114 | + if (! empty($request['EVT_CAT']) && (int)$request['EVT_CAT'] !== -1) { |
|
1115 | + $where['Event.Term_Taxonomy.term_id'] = absint($request['EVT_CAT']); |
|
1116 | + } |
|
1117 | + return $where; |
|
1118 | + } |
|
1119 | + |
|
1120 | + |
|
1121 | + /** |
|
1122 | + * Adds the datetime ID if it exists in the request to the where conditions for the registrations query. |
|
1123 | + * |
|
1124 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
1125 | + * @return array |
|
1126 | + */ |
|
1127 | + protected function _add_datetime_id_to_where_conditions(array $request) |
|
1128 | + { |
|
1129 | + $where = array(); |
|
1130 | + if (! empty($request['datetime_id'])) { |
|
1131 | + $where['Ticket.Datetime.DTT_ID'] = absint($request['datetime_id']); |
|
1132 | + } |
|
1133 | + if (! empty($request['DTT_ID'])) { |
|
1134 | + $where['Ticket.Datetime.DTT_ID'] = absint($request['DTT_ID']); |
|
1135 | + } |
|
1136 | + return $where; |
|
1137 | + } |
|
1138 | + |
|
1139 | + |
|
1140 | + /** |
|
1141 | + * Adds the correct registration status to the where conditions for the registrations query. |
|
1142 | + * |
|
1143 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
1144 | + * @return array |
|
1145 | + */ |
|
1146 | + protected function _add_registration_status_to_where_conditions(array $request) |
|
1147 | + { |
|
1148 | + $where = array(); |
|
1149 | + $view = EEH_Array::is_set($request, 'status', ''); |
|
1150 | + $registration_status = ! empty($request['_reg_status']) |
|
1151 | + ? sanitize_text_field($request['_reg_status']) |
|
1152 | + : ''; |
|
1153 | + |
|
1154 | + /* |
|
1155 | 1155 | * If filtering by registration status, then we show registrations matching that status. |
1156 | 1156 | * If not filtering by specified status, then we show all registrations excluding incomplete registrations |
1157 | 1157 | * UNLESS viewing trashed registrations. |
1158 | 1158 | */ |
1159 | - if (! empty($registration_status)) { |
|
1160 | - $where['STS_ID'] = $registration_status; |
|
1161 | - } else { |
|
1162 | - //make sure we exclude incomplete registrations, but only if not trashed. |
|
1163 | - if ($view === 'trash') { |
|
1164 | - $where['REG_deleted'] = true; |
|
1165 | - } elseif ($view === 'incomplete') { |
|
1166 | - $where['STS_ID'] = EEM_Registration::status_id_incomplete; |
|
1167 | - } else { |
|
1168 | - $where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete); |
|
1169 | - } |
|
1170 | - } |
|
1171 | - return $where; |
|
1172 | - } |
|
1173 | - |
|
1174 | - |
|
1175 | - /** |
|
1176 | - * Adds any provided date restraints to the where conditions for the registrations query. |
|
1177 | - * |
|
1178 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
1179 | - * @return array |
|
1180 | - * @throws EE_Error |
|
1181 | - */ |
|
1182 | - protected function _add_date_to_where_conditions(array $request) |
|
1183 | - { |
|
1184 | - $where = array(); |
|
1185 | - $view = EEH_Array::is_set($request, 'status', ''); |
|
1186 | - $month_range = ! empty($request['month_range']) |
|
1187 | - ? sanitize_text_field($request['month_range']) |
|
1188 | - : ''; |
|
1189 | - $retrieve_for_today = $view === 'today'; |
|
1190 | - $retrieve_for_this_month = $view === 'month'; |
|
1191 | - |
|
1192 | - if ($retrieve_for_today) { |
|
1193 | - $now = date('Y-m-d', current_time('timestamp')); |
|
1194 | - $where['REG_date'] = array( |
|
1195 | - 'BETWEEN', |
|
1196 | - array( |
|
1197 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
1198 | - 'REG_date', |
|
1199 | - $now . ' 00:00:00', |
|
1200 | - 'Y-m-d H:i:s' |
|
1201 | - ), |
|
1202 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
1203 | - 'REG_date', |
|
1204 | - $now . ' 23:59:59', |
|
1205 | - 'Y-m-d H:i:s' |
|
1206 | - ), |
|
1207 | - ), |
|
1208 | - ); |
|
1209 | - } elseif ($retrieve_for_this_month) { |
|
1210 | - $current_year_and_month = date('Y-m', current_time('timestamp')); |
|
1211 | - $days_this_month = date('t', current_time('timestamp')); |
|
1212 | - $where['REG_date'] = array( |
|
1213 | - 'BETWEEN', |
|
1214 | - array( |
|
1215 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
1216 | - 'REG_date', |
|
1217 | - $current_year_and_month . '-01 00:00:00', |
|
1218 | - 'Y-m-d H:i:s' |
|
1219 | - ), |
|
1220 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
1221 | - 'REG_date', |
|
1222 | - $current_year_and_month . '-' . $days_this_month . ' 23:59:59', |
|
1223 | - 'Y-m-d H:i:s' |
|
1224 | - ), |
|
1225 | - ), |
|
1226 | - ); |
|
1227 | - } elseif ($month_range) { |
|
1228 | - $pieces = explode(' ', $month_range, 3); |
|
1229 | - $month_requested = ! empty($pieces[0]) |
|
1230 | - ? date('m', \EEH_DTT_Helper::first_of_month_timestamp($pieces[0])) |
|
1231 | - : ''; |
|
1232 | - $year_requested = ! empty($pieces[1]) |
|
1233 | - ? $pieces[1] |
|
1234 | - : ''; |
|
1235 | - //if there is not a month or year then we can't go further |
|
1236 | - if ($month_requested && $year_requested) { |
|
1237 | - $days_in_month = date('t', strtotime($year_requested . '-' . $month_requested . '-' . '01')); |
|
1238 | - $where['REG_date'] = array( |
|
1239 | - 'BETWEEN', |
|
1240 | - array( |
|
1241 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
1242 | - 'REG_date', |
|
1243 | - $year_requested . '-' . $month_requested . '-01 00:00:00', |
|
1244 | - 'Y-m-d H:i:s' |
|
1245 | - ), |
|
1246 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
1247 | - 'REG_date', |
|
1248 | - $year_requested . '-' . $month_requested . '-' . $days_in_month . ' 23:59:59', |
|
1249 | - 'Y-m-d H:i:s' |
|
1250 | - ), |
|
1251 | - ), |
|
1252 | - ); |
|
1253 | - } |
|
1254 | - } |
|
1255 | - return $where; |
|
1256 | - } |
|
1257 | - |
|
1258 | - |
|
1259 | - /** |
|
1260 | - * Adds any provided search restraints to the where conditions for the registrations query |
|
1261 | - * |
|
1262 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
1263 | - * @return array |
|
1264 | - */ |
|
1265 | - protected function _add_search_to_where_conditions(array $request) |
|
1266 | - { |
|
1267 | - $where = array(); |
|
1268 | - if (! empty($request['s'])) { |
|
1269 | - $search_string = '%' . sanitize_text_field($request['s']) . '%'; |
|
1270 | - $where['OR*search_conditions'] = array( |
|
1271 | - 'Event.EVT_name' => array('LIKE', $search_string), |
|
1272 | - 'Event.EVT_desc' => array('LIKE', $search_string), |
|
1273 | - 'Event.EVT_short_desc' => array('LIKE', $search_string), |
|
1274 | - 'Attendee.ATT_full_name' => array('LIKE', $search_string), |
|
1275 | - 'Attendee.ATT_fname' => array('LIKE', $search_string), |
|
1276 | - 'Attendee.ATT_lname' => array('LIKE', $search_string), |
|
1277 | - 'Attendee.ATT_short_bio' => array('LIKE', $search_string), |
|
1278 | - 'Attendee.ATT_email' => array('LIKE', $search_string), |
|
1279 | - 'Attendee.ATT_address' => array('LIKE', $search_string), |
|
1280 | - 'Attendee.ATT_address2' => array('LIKE', $search_string), |
|
1281 | - 'Attendee.ATT_city' => array('LIKE', $search_string), |
|
1282 | - 'REG_final_price' => array('LIKE', $search_string), |
|
1283 | - 'REG_code' => array('LIKE', $search_string), |
|
1284 | - 'REG_count' => array('LIKE', $search_string), |
|
1285 | - 'REG_group_size' => array('LIKE', $search_string), |
|
1286 | - 'Ticket.TKT_name' => array('LIKE', $search_string), |
|
1287 | - 'Ticket.TKT_description' => array('LIKE', $search_string), |
|
1288 | - 'Transaction.Payment.PAY_txn_id_chq_nmbr' => array('LIKE', $search_string), |
|
1289 | - ); |
|
1290 | - } |
|
1291 | - return $where; |
|
1292 | - } |
|
1293 | - |
|
1294 | - |
|
1295 | - /** |
|
1296 | - * Sets up the where conditions for the registrations query. |
|
1297 | - * |
|
1298 | - * @param array $request |
|
1299 | - * @return array |
|
1300 | - * @throws EE_Error |
|
1301 | - */ |
|
1302 | - protected function _get_where_conditions_for_registrations_query($request) |
|
1303 | - { |
|
1304 | - return apply_filters( |
|
1305 | - 'FHEE__Registrations_Admin_Page___get_where_conditions_for_registrations_query', |
|
1306 | - array_merge( |
|
1307 | - $this->_add_event_id_to_where_conditions($request), |
|
1308 | - $this->_add_category_id_to_where_conditions($request), |
|
1309 | - $this->_add_datetime_id_to_where_conditions($request), |
|
1310 | - $this->_add_registration_status_to_where_conditions($request), |
|
1311 | - $this->_add_date_to_where_conditions($request), |
|
1312 | - $this->_add_search_to_where_conditions($request) |
|
1313 | - ), |
|
1314 | - $request |
|
1315 | - ); |
|
1316 | - } |
|
1317 | - |
|
1318 | - |
|
1319 | - /** |
|
1320 | - * Sets up the orderby for the registrations query. |
|
1321 | - * |
|
1322 | - * @return array |
|
1323 | - */ |
|
1324 | - protected function _get_orderby_for_registrations_query() |
|
1325 | - { |
|
1326 | - $orderby_field = ! empty($this->_req_data['orderby']) |
|
1327 | - ? sanitize_text_field($this->_req_data['orderby']) |
|
1328 | - : ''; |
|
1329 | - switch ($orderby_field) { |
|
1330 | - case '_REG_ID': |
|
1331 | - $orderby_field = 'REG_ID'; |
|
1332 | - break; |
|
1333 | - case '_Reg_status': |
|
1334 | - $orderby_field = 'STS_ID'; |
|
1335 | - break; |
|
1336 | - case 'ATT_fname': |
|
1337 | - $orderby_field = array('Attendee.ATT_fname', 'Attendee.ATT_lname'); |
|
1338 | - break; |
|
1339 | - case 'ATT_lname': |
|
1340 | - $orderby_field = array('Attendee.ATT_lname', 'Attendee.ATT_fname'); |
|
1341 | - break; |
|
1342 | - case 'event_name': |
|
1343 | - $orderby_field = 'Event.EVT_name'; |
|
1344 | - break; |
|
1345 | - case 'DTT_EVT_start': |
|
1346 | - $orderby_field = 'Event.Datetime.DTT_EVT_start'; |
|
1347 | - break; |
|
1348 | - default: //'REG_date' |
|
1349 | - $orderby_field = 'REG_date'; |
|
1350 | - } |
|
1351 | - |
|
1352 | - //order |
|
1353 | - $order = ! empty($this->_req_data['order']) |
|
1354 | - ? sanitize_text_field($this->_req_data['order']) |
|
1355 | - : 'DESC'; |
|
1356 | - |
|
1357 | - //mutate orderby_field |
|
1358 | - $orderby_field = array_combine( |
|
1359 | - (array) $orderby_field, |
|
1360 | - array_fill(0, count($orderby_field), $order) |
|
1361 | - ); |
|
1362 | - return array('order_by' => $orderby_field); |
|
1363 | - } |
|
1364 | - |
|
1365 | - |
|
1366 | - /** |
|
1367 | - * Sets up the limit for the registrations query. |
|
1368 | - * |
|
1369 | - * @param $per_page |
|
1370 | - * @return array |
|
1371 | - */ |
|
1372 | - protected function _get_limit($per_page) |
|
1373 | - { |
|
1374 | - $current_page = ! empty($this->_req_data['paged']) |
|
1375 | - ? absint($this->_req_data['paged']) |
|
1376 | - : 1; |
|
1377 | - $per_page = ! empty($this->_req_data['perpage']) |
|
1378 | - ? $this->_req_data['perpage'] |
|
1379 | - : $per_page; |
|
1380 | - |
|
1381 | - //-1 means return all results so get out if that's set. |
|
1382 | - if ((int)$per_page === -1) { |
|
1383 | - return array(); |
|
1384 | - } |
|
1385 | - $per_page = absint($per_page); |
|
1386 | - $offset = ($current_page - 1) * $per_page; |
|
1387 | - return array('limit' => array($offset, $per_page)); |
|
1388 | - } |
|
1389 | - |
|
1390 | - |
|
1391 | - public function get_registration_status_array() |
|
1392 | - { |
|
1393 | - return self::$_reg_status; |
|
1394 | - } |
|
1395 | - |
|
1396 | - |
|
1397 | - |
|
1398 | - |
|
1399 | - /*************************************** REGISTRATION DETAILS ***************************************/ |
|
1400 | - /** |
|
1401 | - * generates HTML for the View Registration Details Admin page |
|
1402 | - * |
|
1403 | - * @access protected |
|
1404 | - * @return void |
|
1405 | - * @throws DomainException |
|
1406 | - * @throws EE_Error |
|
1407 | - * @throws \EventEspresso\core\exceptions\EntityNotFoundException |
|
1408 | - */ |
|
1409 | - protected function _registration_details() |
|
1410 | - { |
|
1411 | - $this->_template_args = array(); |
|
1412 | - $this->_set_registration_object(); |
|
1413 | - if (is_object($this->_registration)) { |
|
1414 | - $transaction = $this->_registration->transaction() |
|
1415 | - ? $this->_registration->transaction() |
|
1416 | - : EE_Transaction::new_instance(); |
|
1417 | - $this->_session = $transaction->session_data(); |
|
1418 | - $event_id = $this->_registration->event_ID(); |
|
1419 | - $this->_template_args['reg_nmbr']['value'] = $this->_registration->ID(); |
|
1420 | - $this->_template_args['reg_nmbr']['label'] = esc_html__('Registration Number', 'event_espresso'); |
|
1421 | - $this->_template_args['reg_datetime']['value'] = $this->_registration->get_i18n_datetime('REG_date'); |
|
1422 | - $this->_template_args['reg_datetime']['label'] = esc_html__('Date', 'event_espresso'); |
|
1423 | - $this->_template_args['grand_total'] = $transaction->total(); |
|
1424 | - $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
1425 | - // link back to overview |
|
1426 | - $this->_template_args['reg_overview_url'] = REG_ADMIN_URL; |
|
1427 | - $this->_template_args['registration'] = $this->_registration; |
|
1428 | - $this->_template_args['filtered_registrations_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1429 | - array( |
|
1430 | - 'action' => 'default', |
|
1431 | - 'event_id' => $event_id, |
|
1432 | - ), |
|
1433 | - REG_ADMIN_URL |
|
1434 | - ); |
|
1435 | - $this->_template_args['filtered_transactions_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1436 | - array( |
|
1437 | - 'action' => 'default', |
|
1438 | - 'EVT_ID' => $event_id, |
|
1439 | - 'page' => 'espresso_transactions', |
|
1440 | - ), |
|
1441 | - admin_url('admin.php') |
|
1442 | - ); |
|
1443 | - $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1444 | - array( |
|
1445 | - 'page' => 'espresso_events', |
|
1446 | - 'action' => 'edit', |
|
1447 | - 'post' => $event_id, |
|
1448 | - ), |
|
1449 | - admin_url('admin.php') |
|
1450 | - ); |
|
1451 | - //next and previous links |
|
1452 | - $next_reg = $this->_registration->next( |
|
1453 | - null, |
|
1454 | - array(), |
|
1455 | - 'REG_ID' |
|
1456 | - ); |
|
1457 | - $this->_template_args['next_registration'] = $next_reg |
|
1458 | - ? $this->_next_link( |
|
1459 | - EE_Admin_Page::add_query_args_and_nonce( |
|
1460 | - array( |
|
1461 | - 'action' => 'view_registration', |
|
1462 | - '_REG_ID' => $next_reg['REG_ID'], |
|
1463 | - ), |
|
1464 | - REG_ADMIN_URL |
|
1465 | - ), |
|
1466 | - 'dashicons dashicons-arrow-right ee-icon-size-22' |
|
1467 | - ) |
|
1468 | - : ''; |
|
1469 | - $previous_reg = $this->_registration->previous( |
|
1470 | - null, |
|
1471 | - array(), |
|
1472 | - 'REG_ID' |
|
1473 | - ); |
|
1474 | - $this->_template_args['previous_registration'] = $previous_reg |
|
1475 | - ? $this->_previous_link( |
|
1476 | - EE_Admin_Page::add_query_args_and_nonce( |
|
1477 | - array( |
|
1478 | - 'action' => 'view_registration', |
|
1479 | - '_REG_ID' => $previous_reg['REG_ID'], |
|
1480 | - ), |
|
1481 | - REG_ADMIN_URL |
|
1482 | - ), |
|
1483 | - 'dashicons dashicons-arrow-left ee-icon-size-22' |
|
1484 | - ) |
|
1485 | - : ''; |
|
1486 | - // grab header |
|
1487 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_header.template.php'; |
|
1488 | - $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
1489 | - $this->_template_args['admin_page_header'] = EEH_Template::display_template( |
|
1490 | - $template_path, |
|
1491 | - $this->_template_args, |
|
1492 | - true |
|
1493 | - ); |
|
1494 | - } else { |
|
1495 | - $this->_template_args['admin_page_header'] = $this->display_espresso_notices(); |
|
1496 | - } |
|
1497 | - // the details template wrapper |
|
1498 | - $this->display_admin_page_with_sidebar(); |
|
1499 | - } |
|
1500 | - |
|
1501 | - |
|
1502 | - protected function _registration_details_metaboxes() |
|
1503 | - { |
|
1504 | - do_action('AHEE__Registrations_Admin_Page___registration_details_metabox__start', $this); |
|
1505 | - $this->_set_registration_object(); |
|
1506 | - $attendee = $this->_registration instanceof EE_Registration ? $this->_registration->attendee() : null; |
|
1507 | - add_meta_box('edit-reg-status-mbox', esc_html__('Registration Status', 'event_espresso'), |
|
1508 | - array($this, 'set_reg_status_buttons_metabox'), $this->wp_page_slug, 'normal', 'high'); |
|
1509 | - add_meta_box('edit-reg-details-mbox', esc_html__('Registration Details', 'event_espresso'), |
|
1510 | - array($this, '_reg_details_meta_box'), $this->wp_page_slug, 'normal', 'high'); |
|
1511 | - if ($attendee instanceof EE_Attendee |
|
1512 | - && EE_Registry::instance()->CAP->current_user_can( |
|
1513 | - 'ee_edit_registration', |
|
1514 | - 'edit-reg-questions-mbox' |
|
1515 | - ) |
|
1516 | - ) { |
|
1517 | - add_meta_box( |
|
1518 | - 'edit-reg-questions-mbox', |
|
1519 | - esc_html__('Registration Form Answers', 'event_espresso'), |
|
1520 | - array($this, '_reg_questions_meta_box'), |
|
1521 | - $this->wp_page_slug, |
|
1522 | - 'normal', |
|
1523 | - 'high' |
|
1524 | - ); |
|
1525 | - } |
|
1526 | - add_meta_box( |
|
1527 | - 'edit-reg-registrant-mbox', |
|
1528 | - esc_html__('Contact Details', 'event_espresso'), |
|
1529 | - array($this, '_reg_registrant_side_meta_box'), |
|
1530 | - $this->wp_page_slug, |
|
1531 | - 'side', |
|
1532 | - 'high' |
|
1533 | - ); |
|
1534 | - if ($this->_registration->group_size() > 1) { |
|
1535 | - add_meta_box( |
|
1536 | - 'edit-reg-attendees-mbox', |
|
1537 | - esc_html__('Other Registrations in this Transaction', 'event_espresso'), |
|
1538 | - array($this, '_reg_attendees_meta_box'), |
|
1539 | - $this->wp_page_slug, |
|
1540 | - 'normal', |
|
1541 | - 'high' |
|
1542 | - ); |
|
1543 | - } |
|
1544 | - } |
|
1545 | - |
|
1546 | - |
|
1547 | - /** |
|
1548 | - * set_reg_status_buttons_metabox |
|
1549 | - * |
|
1550 | - * @access protected |
|
1551 | - * @return string |
|
1552 | - * @throws \EE_Error |
|
1553 | - */ |
|
1554 | - public function set_reg_status_buttons_metabox() |
|
1555 | - { |
|
1556 | - $this->_set_registration_object(); |
|
1557 | - $change_reg_status_form = $this->_generate_reg_status_change_form(); |
|
1558 | - echo $change_reg_status_form->form_open( |
|
1559 | - self::add_query_args_and_nonce( |
|
1560 | - array( |
|
1561 | - 'action' => 'change_reg_status', |
|
1562 | - ), |
|
1563 | - REG_ADMIN_URL |
|
1564 | - ) |
|
1565 | - ); |
|
1566 | - echo $change_reg_status_form->get_html(); |
|
1567 | - echo $change_reg_status_form->form_close(); |
|
1568 | - } |
|
1569 | - |
|
1570 | - |
|
1571 | - /** |
|
1572 | - * @return EE_Form_Section_Proper |
|
1573 | - * @throws EE_Error |
|
1574 | - */ |
|
1575 | - protected function _generate_reg_status_change_form() |
|
1576 | - { |
|
1577 | - return new EE_Form_Section_Proper(array( |
|
1578 | - 'name' => 'reg_status_change_form', |
|
1579 | - 'html_id' => 'reg-status-change-form', |
|
1580 | - 'layout_strategy' => new EE_Admin_Two_Column_Layout(), |
|
1581 | - 'subsections' => array( |
|
1582 | - 'return' => new EE_Hidden_Input(array( |
|
1583 | - 'name' => 'return', |
|
1584 | - 'default' => 'view_registration', |
|
1585 | - )), |
|
1586 | - 'REG_ID' => new EE_Hidden_Input(array( |
|
1587 | - 'name' => 'REG_ID', |
|
1588 | - 'default' => $this->_registration->ID(), |
|
1589 | - )), |
|
1590 | - 'current_status' => new EE_Form_Section_HTML( |
|
1591 | - EEH_HTML::tr( |
|
1592 | - EEH_HTML::th( |
|
1593 | - EEH_HTML::label( |
|
1594 | - EEH_HTML::strong(esc_html__('Current Registration Status', 'event_espresso') |
|
1595 | - ) |
|
1596 | - ) |
|
1597 | - ) |
|
1598 | - . EEH_HTML::td( |
|
1599 | - EEH_HTML::strong( |
|
1600 | - $this->_registration->pretty_status(), |
|
1601 | - '', |
|
1602 | - 'status-' . $this->_registration->status_ID(), |
|
1603 | - 'line-height: 1em; font-size: 1.5em; font-weight: bold;' |
|
1604 | - ) |
|
1605 | - ) |
|
1606 | - ) |
|
1607 | - ), |
|
1608 | - 'reg_status' => new EE_Select_Input( |
|
1609 | - $this->_get_reg_statuses(), |
|
1610 | - array( |
|
1611 | - 'html_label_text' => esc_html__('Change Registration Status to', 'event_espresso'), |
|
1612 | - 'default' => $this->_registration->status_ID(), |
|
1613 | - ) |
|
1614 | - ), |
|
1615 | - 'send_notifications' => new EE_Yes_No_Input( |
|
1616 | - array( |
|
1617 | - 'html_label_text' => esc_html__('Send Related Messages', 'event_espresso'), |
|
1618 | - 'default' => false, |
|
1619 | - 'html_help_text' => esc_html__( |
|
1620 | - 'If set to "Yes", then the related messages will be sent to the registrant.', |
|
1621 | - 'event_espresso' |
|
1622 | - ), |
|
1623 | - ) |
|
1624 | - ), |
|
1625 | - 'submit' => new EE_Submit_Input( |
|
1626 | - array( |
|
1627 | - 'html_class' => 'button-primary', |
|
1628 | - 'html_label_text' => ' ', |
|
1629 | - 'default' => esc_html__('Update Registration Status', 'event_espresso'), |
|
1630 | - ) |
|
1631 | - ), |
|
1632 | - ), |
|
1633 | - )); |
|
1634 | - } |
|
1635 | - |
|
1636 | - |
|
1637 | - /** |
|
1638 | - * Returns an array of all the buttons for the various statuses and switch status actions |
|
1639 | - * |
|
1640 | - * @return array |
|
1641 | - * @throws EE_Error |
|
1642 | - * @throws \EventEspresso\core\exceptions\EntityNotFoundException |
|
1643 | - */ |
|
1644 | - protected function _get_reg_statuses() |
|
1645 | - { |
|
1646 | - $reg_status_array = EEM_Registration::instance()->reg_status_array(); |
|
1647 | - unset ($reg_status_array[EEM_Registration::status_id_incomplete]); |
|
1648 | - // get current reg status |
|
1649 | - $current_status = $this->_registration->status_ID(); |
|
1650 | - // is registration for free event? This will determine whether to display the pending payment option |
|
1651 | - if ($current_status != EEM_Registration::status_id_pending_payment |
|
1652 | - && $this->_registration->transaction() |
|
1653 | - ->is_free() |
|
1654 | - ) { |
|
1655 | - unset($reg_status_array[EEM_Registration::status_id_pending_payment]); |
|
1656 | - } |
|
1657 | - return EEM_Status::instance()->localized_status($reg_status_array, false, 'sentence'); |
|
1658 | - } |
|
1659 | - |
|
1660 | - |
|
1661 | - /** |
|
1662 | - * This method is used when using _REG_ID from request which may or may not be an array of reg_ids. |
|
1663 | - * |
|
1664 | - * @param bool $status REG status given for changing registrations to. |
|
1665 | - * @param bool $notify Whether to send messages notifications or not. |
|
1666 | - * @return array (array with reg_id(s) updated and whether update was successful. |
|
1667 | - */ |
|
1668 | - protected function _set_registration_status_from_request($status = false, $notify = false) |
|
1669 | - { |
|
1670 | - if (isset($this->_req_data['reg_status_change_form'])) { |
|
1671 | - $REG_IDs = isset($this->_req_data['reg_status_change_form']['REG_ID']) |
|
1672 | - ? (array)$this->_req_data['reg_status_change_form']['REG_ID'] : array(); |
|
1673 | - } else { |
|
1674 | - $REG_IDs = isset($this->_req_data['_REG_ID']) ? (array)$this->_req_data['_REG_ID'] : array(); |
|
1675 | - } |
|
1676 | - $success = $this->_set_registration_status($REG_IDs, $status); |
|
1677 | - //notify? |
|
1678 | - if ($success |
|
1679 | - && $notify |
|
1680 | - && EE_Registry::instance()->CAP->current_user_can( |
|
1681 | - 'ee_send_message', |
|
1682 | - 'espresso_registrations_resend_registration' |
|
1683 | - ) |
|
1684 | - ) { |
|
1685 | - $this->_process_resend_registration(); |
|
1686 | - } |
|
1687 | - return $success; |
|
1688 | - } |
|
1689 | - |
|
1690 | - |
|
1691 | - /** |
|
1692 | - * Set the registration status for the given reg_id (which may or may not be an array, it gets typecast to an |
|
1693 | - * array). Note, this method does NOT take care of possible notifications. That is required by calling code. |
|
1694 | - * |
|
1695 | - * @param array $REG_IDs |
|
1696 | - * @param bool $status |
|
1697 | - * @return array (an array with 'success' key representing whether status change was successful, and 'REG_ID' as |
|
1698 | - * the array of updated registrations). |
|
1699 | - * @throws EE_Error |
|
1700 | - * @throws RuntimeException |
|
1701 | - */ |
|
1702 | - protected function _set_registration_status($REG_IDs = array(), $status = false) |
|
1703 | - { |
|
1704 | - $success = false; |
|
1705 | - // typecast $REG_IDs |
|
1706 | - $REG_IDs = (array)$REG_IDs; |
|
1707 | - if ( ! empty($REG_IDs)) { |
|
1708 | - $success = true; |
|
1709 | - // set default status if none is passed |
|
1710 | - $status = $status ? $status : EEM_Registration::status_id_pending_payment; |
|
1711 | - // sanitize $REG_IDs |
|
1712 | - $REG_IDs = array_filter($REG_IDs, 'absint'); |
|
1713 | - //loop through REG_ID's and change status |
|
1714 | - foreach ($REG_IDs as $REG_ID) { |
|
1715 | - $registration = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
|
1716 | - if ($registration instanceof EE_Registration) { |
|
1717 | - $registration->set_status($status); |
|
1718 | - $result = $registration->save(); |
|
1719 | - // verifying explicit fails because update *may* just return 0 for 0 rows affected |
|
1720 | - $success = $result !== false ? $success : false; |
|
1721 | - } |
|
1722 | - } |
|
1723 | - } |
|
1724 | - //reset _req_data['_REG_ID'] for any potential future messages notifications |
|
1725 | - $this->_req_data['_REG_ID'] = $REG_IDs; |
|
1726 | - //return $success and processed registrations |
|
1727 | - return array('REG_ID' => $REG_IDs, 'success' => $success); |
|
1728 | - } |
|
1729 | - |
|
1730 | - |
|
1731 | - /** |
|
1732 | - * Common logic for setting up success message and redirecting to appropriate route |
|
1733 | - * |
|
1734 | - * @param string $STS_ID status id for the registration changed to |
|
1735 | - * @param bool $notify indicates whether the _set_registration_status_from_request does notifications or not. |
|
1736 | - * @return void |
|
1737 | - */ |
|
1738 | - protected function _reg_status_change_return($STS_ID, $notify = false) |
|
1739 | - { |
|
1740 | - $result = ! empty($STS_ID) ? $this->_set_registration_status_from_request($STS_ID, $notify) |
|
1741 | - : array('success' => false); |
|
1742 | - $success = isset($result['success']) && $result['success']; |
|
1743 | - //setup success message |
|
1744 | - if ($success) { |
|
1745 | - if (is_array($result['REG_ID']) && count($result['REG_ID']) === 1) { |
|
1746 | - $msg = sprintf(esc_html__('Registration status has been set to %s', 'event_espresso'), |
|
1747 | - EEH_Template::pretty_status($STS_ID, false, 'lower')); |
|
1748 | - } else { |
|
1749 | - $msg = sprintf(esc_html__('Registrations have been set to %s.', 'event_espresso'), |
|
1750 | - EEH_Template::pretty_status($STS_ID, false, 'lower')); |
|
1751 | - } |
|
1752 | - EE_Error::add_success($msg); |
|
1753 | - } else { |
|
1754 | - EE_Error::add_error( |
|
1755 | - esc_html__( |
|
1756 | - 'Something went wrong, and the status was not changed', |
|
1757 | - 'event_espresso' |
|
1758 | - ), __FILE__, __LINE__, __FUNCTION__ |
|
1759 | - ); |
|
1760 | - } |
|
1761 | - if (isset($this->_req_data['return']) && $this->_req_data['return'] == 'view_registration') { |
|
1762 | - $route = array('action' => 'view_registration', '_REG_ID' => reset($result['REG_ID'])); |
|
1763 | - } else { |
|
1764 | - $route = array('action' => 'default'); |
|
1765 | - } |
|
1766 | - //unset nonces |
|
1767 | - foreach ($this->_req_data as $ref => $value) { |
|
1768 | - if (strpos($ref, 'nonce') !== false) { |
|
1769 | - unset($this->_req_data[$ref]); |
|
1770 | - continue; |
|
1771 | - } |
|
1772 | - $value = is_array($value) ? array_map('urlencode', $value) : urlencode($value); |
|
1773 | - $this->_req_data[$ref] = $value; |
|
1774 | - } |
|
1775 | - //merge request vars so that the reloaded list table contains any existing filter query params |
|
1776 | - $route = array_merge($this->_req_data, $route); |
|
1777 | - $this->_redirect_after_action($success, '', '', $route, true); |
|
1778 | - } |
|
1779 | - |
|
1780 | - |
|
1781 | - /** |
|
1782 | - * incoming reg status change from reg details page. |
|
1783 | - * |
|
1784 | - * @return void |
|
1785 | - */ |
|
1786 | - protected function _change_reg_status() |
|
1787 | - { |
|
1788 | - $this->_req_data['return'] = 'view_registration'; |
|
1789 | - //set notify based on whether the send notifications toggle is set or not |
|
1790 | - $notify = ! empty($this->_req_data['reg_status_change_form']['send_notifications']); |
|
1791 | - //$notify = ! empty( $this->_req_data['txn_reg_status_change']['send_notifications'] ); |
|
1792 | - $this->_req_data['reg_status_change_form']['reg_status'] = isset($this->_req_data['reg_status_change_form']['reg_status']) |
|
1793 | - ? $this->_req_data['reg_status_change_form']['reg_status'] : ''; |
|
1794 | - switch ($this->_req_data['reg_status_change_form']['reg_status']) { |
|
1795 | - case EEM_Registration::status_id_approved : |
|
1796 | - case EEH_Template::pretty_status(EEM_Registration::status_id_approved, false, 'sentence') : |
|
1797 | - $this->approve_registration($notify); |
|
1798 | - break; |
|
1799 | - case EEM_Registration::status_id_pending_payment : |
|
1800 | - case EEH_Template::pretty_status(EEM_Registration::status_id_pending_payment, false, 'sentence') : |
|
1801 | - $this->pending_registration($notify); |
|
1802 | - break; |
|
1803 | - case EEM_Registration::status_id_not_approved : |
|
1804 | - case EEH_Template::pretty_status(EEM_Registration::status_id_not_approved, false, 'sentence') : |
|
1805 | - $this->not_approve_registration($notify); |
|
1806 | - break; |
|
1807 | - case EEM_Registration::status_id_declined : |
|
1808 | - case EEH_Template::pretty_status(EEM_Registration::status_id_declined, false, 'sentence') : |
|
1809 | - $this->decline_registration($notify); |
|
1810 | - break; |
|
1811 | - case EEM_Registration::status_id_cancelled : |
|
1812 | - case EEH_Template::pretty_status(EEM_Registration::status_id_cancelled, false, 'sentence') : |
|
1813 | - $this->cancel_registration($notify); |
|
1814 | - break; |
|
1815 | - case EEM_Registration::status_id_wait_list : |
|
1816 | - case EEH_Template::pretty_status(EEM_Registration::status_id_wait_list, false, 'sentence') : |
|
1817 | - $this->waitlist_registration($notify); |
|
1818 | - break; |
|
1819 | - case EEM_Registration::status_id_incomplete : |
|
1820 | - default : |
|
1821 | - $result['success'] = false; |
|
1822 | - unset($this->_req_data['return']); |
|
1823 | - $this->_reg_status_change_return('', false); |
|
1824 | - break; |
|
1825 | - } |
|
1826 | - } |
|
1827 | - |
|
1828 | - |
|
1829 | - /** |
|
1830 | - * approve_registration |
|
1831 | - * |
|
1832 | - * @access protected |
|
1833 | - * @param bool $notify whether or not to notify the registrant about their approval. |
|
1834 | - * @return void |
|
1835 | - */ |
|
1836 | - protected function approve_registration($notify = false) |
|
1837 | - { |
|
1838 | - $this->_reg_status_change_return(EEM_Registration::status_id_approved, $notify); |
|
1839 | - } |
|
1840 | - |
|
1841 | - |
|
1842 | - /** |
|
1843 | - * decline_registration |
|
1844 | - * |
|
1845 | - * @access protected |
|
1846 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
1847 | - * @return void |
|
1848 | - */ |
|
1849 | - protected function decline_registration($notify = false) |
|
1850 | - { |
|
1851 | - $this->_reg_status_change_return(EEM_Registration::status_id_declined, $notify); |
|
1852 | - } |
|
1853 | - |
|
1854 | - |
|
1855 | - /** |
|
1856 | - * cancel_registration |
|
1857 | - * |
|
1858 | - * @access protected |
|
1859 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
1860 | - * @return void |
|
1861 | - */ |
|
1862 | - protected function cancel_registration($notify = false) |
|
1863 | - { |
|
1864 | - $this->_reg_status_change_return(EEM_Registration::status_id_cancelled, $notify); |
|
1865 | - } |
|
1866 | - |
|
1867 | - |
|
1868 | - /** |
|
1869 | - * not_approve_registration |
|
1870 | - * |
|
1871 | - * @access protected |
|
1872 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
1873 | - * @return void |
|
1874 | - */ |
|
1875 | - protected function not_approve_registration($notify = false) |
|
1876 | - { |
|
1877 | - $this->_reg_status_change_return(EEM_Registration::status_id_not_approved, $notify); |
|
1878 | - } |
|
1879 | - |
|
1880 | - |
|
1881 | - /** |
|
1882 | - * decline_registration |
|
1883 | - * |
|
1884 | - * @access protected |
|
1885 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
1886 | - * @return void |
|
1887 | - */ |
|
1888 | - protected function pending_registration($notify = false) |
|
1889 | - { |
|
1890 | - $this->_reg_status_change_return(EEM_Registration::status_id_pending_payment, $notify); |
|
1891 | - } |
|
1892 | - |
|
1893 | - |
|
1894 | - /** |
|
1895 | - * waitlist_registration |
|
1896 | - * |
|
1897 | - * @access protected |
|
1898 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
1899 | - * @return void |
|
1900 | - */ |
|
1901 | - protected function waitlist_registration($notify = false) |
|
1902 | - { |
|
1903 | - $this->_reg_status_change_return(EEM_Registration::status_id_wait_list, $notify); |
|
1904 | - } |
|
1905 | - |
|
1906 | - |
|
1907 | - /** |
|
1908 | - * generates HTML for the Registration main meta box |
|
1909 | - * |
|
1910 | - * @access public |
|
1911 | - * @return void |
|
1912 | - * @throws DomainException |
|
1913 | - * @throws EE_Error |
|
1914 | - * @throws \EventEspresso\core\exceptions\EntityNotFoundException |
|
1915 | - */ |
|
1916 | - public function _reg_details_meta_box() |
|
1917 | - { |
|
1918 | - EEH_Autoloader::register_line_item_display_autoloaders(); |
|
1919 | - EEH_Autoloader::register_line_item_filter_autoloaders(); |
|
1920 | - EE_Registry::instance()->load_helper('Line_Item'); |
|
1921 | - $transaction = $this->_registration->transaction() ? $this->_registration->transaction() |
|
1922 | - : EE_Transaction::new_instance(); |
|
1923 | - $this->_session = $transaction->session_data(); |
|
1924 | - $filters = new EE_Line_Item_Filter_Collection(); |
|
1925 | - //$filters->add( new EE_Non_Zero_Line_Item_Filter() ); |
|
1926 | - $filters->add(new EE_Single_Registration_Line_Item_Filter($this->_registration)); |
|
1927 | - $line_item_filter_processor = new EE_Line_Item_Filter_Processor($filters, |
|
1928 | - $transaction->total_line_item()); |
|
1929 | - $filtered_line_item_tree = $line_item_filter_processor->process(); |
|
1930 | - $line_item_display = new EE_Line_Item_Display('reg_admin_table', |
|
1931 | - 'EE_Admin_Table_Registration_Line_Item_Display_Strategy'); |
|
1932 | - $this->_template_args['line_item_table'] = $line_item_display->display_line_item( |
|
1933 | - $filtered_line_item_tree, |
|
1934 | - array('EE_Registration' => $this->_registration) |
|
1935 | - ); |
|
1936 | - $attendee = $this->_registration->attendee(); |
|
1937 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
1938 | - 'ee_read_transaction', |
|
1939 | - 'espresso_transactions_view_transaction' |
|
1940 | - )) { |
|
1941 | - $this->_template_args['view_transaction_button'] = EEH_Template::get_button_or_link( |
|
1942 | - EE_Admin_Page::add_query_args_and_nonce( |
|
1943 | - array( |
|
1944 | - 'action' => 'view_transaction', |
|
1945 | - 'TXN_ID' => $transaction->ID(), |
|
1946 | - ), |
|
1947 | - TXN_ADMIN_URL |
|
1948 | - ), |
|
1949 | - esc_html__(' View Transaction', 'event_espresso'), |
|
1950 | - 'button secondary-button right', |
|
1951 | - 'dashicons dashicons-cart' |
|
1952 | - ); |
|
1953 | - } else { |
|
1954 | - $this->_template_args['view_transaction_button'] = ''; |
|
1955 | - } |
|
1956 | - if ($attendee instanceof EE_Attendee |
|
1957 | - && EE_Registry::instance()->CAP->current_user_can( |
|
1958 | - 'ee_send_message', |
|
1959 | - 'espresso_registrations_resend_registration' |
|
1960 | - ) |
|
1961 | - ) { |
|
1962 | - $this->_template_args['resend_registration_button'] = EEH_Template::get_button_or_link( |
|
1963 | - EE_Admin_Page::add_query_args_and_nonce( |
|
1964 | - array( |
|
1965 | - 'action' => 'resend_registration', |
|
1966 | - '_REG_ID' => $this->_registration->ID(), |
|
1967 | - 'redirect_to' => 'view_registration', |
|
1968 | - ), |
|
1969 | - REG_ADMIN_URL |
|
1970 | - ), |
|
1971 | - esc_html__(' Resend Registration', 'event_espresso'), |
|
1972 | - 'button secondary-button right', |
|
1973 | - 'dashicons dashicons-email-alt' |
|
1974 | - ); |
|
1975 | - } else { |
|
1976 | - $this->_template_args['resend_registration_button'] = ''; |
|
1977 | - } |
|
1978 | - $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
1979 | - $payment = $transaction->get_first_related('Payment'); |
|
1980 | - $payment = ! $payment instanceof EE_Payment |
|
1981 | - ? EE_Payment::new_instance() |
|
1982 | - : $payment; |
|
1983 | - $payment_method = $payment->get_first_related('Payment_Method'); |
|
1984 | - $payment_method = ! $payment_method instanceof EE_Payment_Method |
|
1985 | - ? EE_Payment_Method::new_instance() |
|
1986 | - : $payment_method; |
|
1987 | - $reg_details = array( |
|
1988 | - 'payment_method' => $payment_method->name(), |
|
1989 | - 'response_msg' => $payment->gateway_response(), |
|
1990 | - 'registration_id' => $this->_registration->get('REG_code'), |
|
1991 | - 'registration_session' => $this->_registration->session_ID(), |
|
1992 | - 'ip_address' => isset($this->_session['ip_address']) ? $this->_session['ip_address'] : '', |
|
1993 | - 'user_agent' => isset($this->_session['user_agent']) ? $this->_session['user_agent'] : '', |
|
1994 | - ); |
|
1995 | - if (isset($reg_details['registration_id'])) { |
|
1996 | - $this->_template_args['reg_details']['registration_id']['value'] = $reg_details['registration_id']; |
|
1997 | - $this->_template_args['reg_details']['registration_id']['label'] = esc_html__( |
|
1998 | - 'Registration ID', |
|
1999 | - 'event_espresso' |
|
2000 | - ); |
|
2001 | - $this->_template_args['reg_details']['registration_id']['class'] = 'regular-text'; |
|
2002 | - } |
|
2003 | - if (isset($reg_details['payment_method'])) { |
|
2004 | - $this->_template_args['reg_details']['payment_method']['value'] = $reg_details['payment_method']; |
|
2005 | - $this->_template_args['reg_details']['payment_method']['label'] = esc_html__( |
|
2006 | - 'Most Recent Payment Method', |
|
2007 | - 'event_espresso' |
|
2008 | - ); |
|
2009 | - $this->_template_args['reg_details']['payment_method']['class'] = 'regular-text'; |
|
2010 | - $this->_template_args['reg_details']['response_msg']['value'] = $reg_details['response_msg']; |
|
2011 | - $this->_template_args['reg_details']['response_msg']['label'] = esc_html__( |
|
2012 | - 'Payment method response', |
|
2013 | - 'event_espresso' |
|
2014 | - ); |
|
2015 | - $this->_template_args['reg_details']['response_msg']['class'] = 'regular-text'; |
|
2016 | - } |
|
2017 | - $this->_template_args['reg_details']['registration_session']['value'] = $reg_details['registration_session']; |
|
2018 | - $this->_template_args['reg_details']['registration_session']['label'] = esc_html__( |
|
2019 | - 'Registration Session', |
|
2020 | - 'event_espresso' |
|
2021 | - ); |
|
2022 | - $this->_template_args['reg_details']['registration_session']['class'] = 'regular-text'; |
|
2023 | - $this->_template_args['reg_details']['ip_address']['value'] = $reg_details['ip_address']; |
|
2024 | - $this->_template_args['reg_details']['ip_address']['label'] = esc_html__( |
|
2025 | - 'Registration placed from IP', |
|
2026 | - 'event_espresso' |
|
2027 | - ); |
|
2028 | - $this->_template_args['reg_details']['ip_address']['class'] = 'regular-text'; |
|
2029 | - $this->_template_args['reg_details']['user_agent']['value'] = $reg_details['user_agent']; |
|
2030 | - $this->_template_args['reg_details']['user_agent']['label'] = esc_html__('Registrant User Agent', |
|
2031 | - 'event_espresso'); |
|
2032 | - $this->_template_args['reg_details']['user_agent']['class'] = 'large-text'; |
|
2033 | - $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
2034 | - array( |
|
2035 | - 'action' => 'default', |
|
2036 | - 'event_id' => $this->_registration->event_ID(), |
|
2037 | - ), |
|
2038 | - REG_ADMIN_URL |
|
2039 | - ); |
|
2040 | - $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
2041 | - $this->_template_args['event_id'] = $this->_registration->event_ID(); |
|
2042 | - $template_path = |
|
2043 | - REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_details.template.php'; |
|
2044 | - echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
2045 | - } |
|
2046 | - |
|
2047 | - |
|
2048 | - /** |
|
2049 | - * generates HTML for the Registration Questions meta box. |
|
2050 | - * If pre-4.8.32.rc.000 hooks are used, uses old methods (with its filters), |
|
2051 | - * otherwise uses new forms system |
|
2052 | - * |
|
2053 | - * @access public |
|
2054 | - * @return void |
|
2055 | - * @throws DomainException |
|
2056 | - * @throws EE_Error |
|
2057 | - */ |
|
2058 | - public function _reg_questions_meta_box() |
|
2059 | - { |
|
2060 | - //allow someone to override this method entirely |
|
2061 | - if (apply_filters('FHEE__Registrations_Admin_Page___reg_questions_meta_box__do_default', true, $this, |
|
2062 | - $this->_registration)) { |
|
2063 | - $form = $this->_get_reg_custom_questions_form( |
|
2064 | - $this->_registration->ID() |
|
2065 | - ); |
|
2066 | - $this->_template_args['att_questions'] = count($form->subforms()) > 0 |
|
2067 | - ? $form->get_html_and_js() |
|
2068 | - : ''; |
|
2069 | - $this->_template_args['reg_questions_form_action'] = 'edit_registration'; |
|
2070 | - $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
2071 | - $template_path = |
|
2072 | - REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_questions.template.php'; |
|
2073 | - echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
2074 | - } |
|
2075 | - } |
|
2076 | - |
|
2077 | - |
|
2078 | - /** |
|
2079 | - * form_before_question_group |
|
2080 | - * |
|
2081 | - * @deprecated as of 4.8.32.rc.000 |
|
2082 | - * @access public |
|
2083 | - * @param string $output |
|
2084 | - * @return string |
|
2085 | - */ |
|
2086 | - public function form_before_question_group($output) |
|
2087 | - { |
|
2088 | - EE_Error::doing_it_wrong( |
|
2089 | - __CLASS__ . '::' . __FUNCTION__, |
|
2090 | - esc_html__( |
|
2091 | - 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
|
2092 | - 'event_espresso' |
|
2093 | - ), |
|
2094 | - '4.8.32.rc.000' |
|
2095 | - ); |
|
2096 | - return ' |
|
1159 | + if (! empty($registration_status)) { |
|
1160 | + $where['STS_ID'] = $registration_status; |
|
1161 | + } else { |
|
1162 | + //make sure we exclude incomplete registrations, but only if not trashed. |
|
1163 | + if ($view === 'trash') { |
|
1164 | + $where['REG_deleted'] = true; |
|
1165 | + } elseif ($view === 'incomplete') { |
|
1166 | + $where['STS_ID'] = EEM_Registration::status_id_incomplete; |
|
1167 | + } else { |
|
1168 | + $where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete); |
|
1169 | + } |
|
1170 | + } |
|
1171 | + return $where; |
|
1172 | + } |
|
1173 | + |
|
1174 | + |
|
1175 | + /** |
|
1176 | + * Adds any provided date restraints to the where conditions for the registrations query. |
|
1177 | + * |
|
1178 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
1179 | + * @return array |
|
1180 | + * @throws EE_Error |
|
1181 | + */ |
|
1182 | + protected function _add_date_to_where_conditions(array $request) |
|
1183 | + { |
|
1184 | + $where = array(); |
|
1185 | + $view = EEH_Array::is_set($request, 'status', ''); |
|
1186 | + $month_range = ! empty($request['month_range']) |
|
1187 | + ? sanitize_text_field($request['month_range']) |
|
1188 | + : ''; |
|
1189 | + $retrieve_for_today = $view === 'today'; |
|
1190 | + $retrieve_for_this_month = $view === 'month'; |
|
1191 | + |
|
1192 | + if ($retrieve_for_today) { |
|
1193 | + $now = date('Y-m-d', current_time('timestamp')); |
|
1194 | + $where['REG_date'] = array( |
|
1195 | + 'BETWEEN', |
|
1196 | + array( |
|
1197 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
1198 | + 'REG_date', |
|
1199 | + $now . ' 00:00:00', |
|
1200 | + 'Y-m-d H:i:s' |
|
1201 | + ), |
|
1202 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
1203 | + 'REG_date', |
|
1204 | + $now . ' 23:59:59', |
|
1205 | + 'Y-m-d H:i:s' |
|
1206 | + ), |
|
1207 | + ), |
|
1208 | + ); |
|
1209 | + } elseif ($retrieve_for_this_month) { |
|
1210 | + $current_year_and_month = date('Y-m', current_time('timestamp')); |
|
1211 | + $days_this_month = date('t', current_time('timestamp')); |
|
1212 | + $where['REG_date'] = array( |
|
1213 | + 'BETWEEN', |
|
1214 | + array( |
|
1215 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
1216 | + 'REG_date', |
|
1217 | + $current_year_and_month . '-01 00:00:00', |
|
1218 | + 'Y-m-d H:i:s' |
|
1219 | + ), |
|
1220 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
1221 | + 'REG_date', |
|
1222 | + $current_year_and_month . '-' . $days_this_month . ' 23:59:59', |
|
1223 | + 'Y-m-d H:i:s' |
|
1224 | + ), |
|
1225 | + ), |
|
1226 | + ); |
|
1227 | + } elseif ($month_range) { |
|
1228 | + $pieces = explode(' ', $month_range, 3); |
|
1229 | + $month_requested = ! empty($pieces[0]) |
|
1230 | + ? date('m', \EEH_DTT_Helper::first_of_month_timestamp($pieces[0])) |
|
1231 | + : ''; |
|
1232 | + $year_requested = ! empty($pieces[1]) |
|
1233 | + ? $pieces[1] |
|
1234 | + : ''; |
|
1235 | + //if there is not a month or year then we can't go further |
|
1236 | + if ($month_requested && $year_requested) { |
|
1237 | + $days_in_month = date('t', strtotime($year_requested . '-' . $month_requested . '-' . '01')); |
|
1238 | + $where['REG_date'] = array( |
|
1239 | + 'BETWEEN', |
|
1240 | + array( |
|
1241 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
1242 | + 'REG_date', |
|
1243 | + $year_requested . '-' . $month_requested . '-01 00:00:00', |
|
1244 | + 'Y-m-d H:i:s' |
|
1245 | + ), |
|
1246 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
1247 | + 'REG_date', |
|
1248 | + $year_requested . '-' . $month_requested . '-' . $days_in_month . ' 23:59:59', |
|
1249 | + 'Y-m-d H:i:s' |
|
1250 | + ), |
|
1251 | + ), |
|
1252 | + ); |
|
1253 | + } |
|
1254 | + } |
|
1255 | + return $where; |
|
1256 | + } |
|
1257 | + |
|
1258 | + |
|
1259 | + /** |
|
1260 | + * Adds any provided search restraints to the where conditions for the registrations query |
|
1261 | + * |
|
1262 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
1263 | + * @return array |
|
1264 | + */ |
|
1265 | + protected function _add_search_to_where_conditions(array $request) |
|
1266 | + { |
|
1267 | + $where = array(); |
|
1268 | + if (! empty($request['s'])) { |
|
1269 | + $search_string = '%' . sanitize_text_field($request['s']) . '%'; |
|
1270 | + $where['OR*search_conditions'] = array( |
|
1271 | + 'Event.EVT_name' => array('LIKE', $search_string), |
|
1272 | + 'Event.EVT_desc' => array('LIKE', $search_string), |
|
1273 | + 'Event.EVT_short_desc' => array('LIKE', $search_string), |
|
1274 | + 'Attendee.ATT_full_name' => array('LIKE', $search_string), |
|
1275 | + 'Attendee.ATT_fname' => array('LIKE', $search_string), |
|
1276 | + 'Attendee.ATT_lname' => array('LIKE', $search_string), |
|
1277 | + 'Attendee.ATT_short_bio' => array('LIKE', $search_string), |
|
1278 | + 'Attendee.ATT_email' => array('LIKE', $search_string), |
|
1279 | + 'Attendee.ATT_address' => array('LIKE', $search_string), |
|
1280 | + 'Attendee.ATT_address2' => array('LIKE', $search_string), |
|
1281 | + 'Attendee.ATT_city' => array('LIKE', $search_string), |
|
1282 | + 'REG_final_price' => array('LIKE', $search_string), |
|
1283 | + 'REG_code' => array('LIKE', $search_string), |
|
1284 | + 'REG_count' => array('LIKE', $search_string), |
|
1285 | + 'REG_group_size' => array('LIKE', $search_string), |
|
1286 | + 'Ticket.TKT_name' => array('LIKE', $search_string), |
|
1287 | + 'Ticket.TKT_description' => array('LIKE', $search_string), |
|
1288 | + 'Transaction.Payment.PAY_txn_id_chq_nmbr' => array('LIKE', $search_string), |
|
1289 | + ); |
|
1290 | + } |
|
1291 | + return $where; |
|
1292 | + } |
|
1293 | + |
|
1294 | + |
|
1295 | + /** |
|
1296 | + * Sets up the where conditions for the registrations query. |
|
1297 | + * |
|
1298 | + * @param array $request |
|
1299 | + * @return array |
|
1300 | + * @throws EE_Error |
|
1301 | + */ |
|
1302 | + protected function _get_where_conditions_for_registrations_query($request) |
|
1303 | + { |
|
1304 | + return apply_filters( |
|
1305 | + 'FHEE__Registrations_Admin_Page___get_where_conditions_for_registrations_query', |
|
1306 | + array_merge( |
|
1307 | + $this->_add_event_id_to_where_conditions($request), |
|
1308 | + $this->_add_category_id_to_where_conditions($request), |
|
1309 | + $this->_add_datetime_id_to_where_conditions($request), |
|
1310 | + $this->_add_registration_status_to_where_conditions($request), |
|
1311 | + $this->_add_date_to_where_conditions($request), |
|
1312 | + $this->_add_search_to_where_conditions($request) |
|
1313 | + ), |
|
1314 | + $request |
|
1315 | + ); |
|
1316 | + } |
|
1317 | + |
|
1318 | + |
|
1319 | + /** |
|
1320 | + * Sets up the orderby for the registrations query. |
|
1321 | + * |
|
1322 | + * @return array |
|
1323 | + */ |
|
1324 | + protected function _get_orderby_for_registrations_query() |
|
1325 | + { |
|
1326 | + $orderby_field = ! empty($this->_req_data['orderby']) |
|
1327 | + ? sanitize_text_field($this->_req_data['orderby']) |
|
1328 | + : ''; |
|
1329 | + switch ($orderby_field) { |
|
1330 | + case '_REG_ID': |
|
1331 | + $orderby_field = 'REG_ID'; |
|
1332 | + break; |
|
1333 | + case '_Reg_status': |
|
1334 | + $orderby_field = 'STS_ID'; |
|
1335 | + break; |
|
1336 | + case 'ATT_fname': |
|
1337 | + $orderby_field = array('Attendee.ATT_fname', 'Attendee.ATT_lname'); |
|
1338 | + break; |
|
1339 | + case 'ATT_lname': |
|
1340 | + $orderby_field = array('Attendee.ATT_lname', 'Attendee.ATT_fname'); |
|
1341 | + break; |
|
1342 | + case 'event_name': |
|
1343 | + $orderby_field = 'Event.EVT_name'; |
|
1344 | + break; |
|
1345 | + case 'DTT_EVT_start': |
|
1346 | + $orderby_field = 'Event.Datetime.DTT_EVT_start'; |
|
1347 | + break; |
|
1348 | + default: //'REG_date' |
|
1349 | + $orderby_field = 'REG_date'; |
|
1350 | + } |
|
1351 | + |
|
1352 | + //order |
|
1353 | + $order = ! empty($this->_req_data['order']) |
|
1354 | + ? sanitize_text_field($this->_req_data['order']) |
|
1355 | + : 'DESC'; |
|
1356 | + |
|
1357 | + //mutate orderby_field |
|
1358 | + $orderby_field = array_combine( |
|
1359 | + (array) $orderby_field, |
|
1360 | + array_fill(0, count($orderby_field), $order) |
|
1361 | + ); |
|
1362 | + return array('order_by' => $orderby_field); |
|
1363 | + } |
|
1364 | + |
|
1365 | + |
|
1366 | + /** |
|
1367 | + * Sets up the limit for the registrations query. |
|
1368 | + * |
|
1369 | + * @param $per_page |
|
1370 | + * @return array |
|
1371 | + */ |
|
1372 | + protected function _get_limit($per_page) |
|
1373 | + { |
|
1374 | + $current_page = ! empty($this->_req_data['paged']) |
|
1375 | + ? absint($this->_req_data['paged']) |
|
1376 | + : 1; |
|
1377 | + $per_page = ! empty($this->_req_data['perpage']) |
|
1378 | + ? $this->_req_data['perpage'] |
|
1379 | + : $per_page; |
|
1380 | + |
|
1381 | + //-1 means return all results so get out if that's set. |
|
1382 | + if ((int)$per_page === -1) { |
|
1383 | + return array(); |
|
1384 | + } |
|
1385 | + $per_page = absint($per_page); |
|
1386 | + $offset = ($current_page - 1) * $per_page; |
|
1387 | + return array('limit' => array($offset, $per_page)); |
|
1388 | + } |
|
1389 | + |
|
1390 | + |
|
1391 | + public function get_registration_status_array() |
|
1392 | + { |
|
1393 | + return self::$_reg_status; |
|
1394 | + } |
|
1395 | + |
|
1396 | + |
|
1397 | + |
|
1398 | + |
|
1399 | + /*************************************** REGISTRATION DETAILS ***************************************/ |
|
1400 | + /** |
|
1401 | + * generates HTML for the View Registration Details Admin page |
|
1402 | + * |
|
1403 | + * @access protected |
|
1404 | + * @return void |
|
1405 | + * @throws DomainException |
|
1406 | + * @throws EE_Error |
|
1407 | + * @throws \EventEspresso\core\exceptions\EntityNotFoundException |
|
1408 | + */ |
|
1409 | + protected function _registration_details() |
|
1410 | + { |
|
1411 | + $this->_template_args = array(); |
|
1412 | + $this->_set_registration_object(); |
|
1413 | + if (is_object($this->_registration)) { |
|
1414 | + $transaction = $this->_registration->transaction() |
|
1415 | + ? $this->_registration->transaction() |
|
1416 | + : EE_Transaction::new_instance(); |
|
1417 | + $this->_session = $transaction->session_data(); |
|
1418 | + $event_id = $this->_registration->event_ID(); |
|
1419 | + $this->_template_args['reg_nmbr']['value'] = $this->_registration->ID(); |
|
1420 | + $this->_template_args['reg_nmbr']['label'] = esc_html__('Registration Number', 'event_espresso'); |
|
1421 | + $this->_template_args['reg_datetime']['value'] = $this->_registration->get_i18n_datetime('REG_date'); |
|
1422 | + $this->_template_args['reg_datetime']['label'] = esc_html__('Date', 'event_espresso'); |
|
1423 | + $this->_template_args['grand_total'] = $transaction->total(); |
|
1424 | + $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
1425 | + // link back to overview |
|
1426 | + $this->_template_args['reg_overview_url'] = REG_ADMIN_URL; |
|
1427 | + $this->_template_args['registration'] = $this->_registration; |
|
1428 | + $this->_template_args['filtered_registrations_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1429 | + array( |
|
1430 | + 'action' => 'default', |
|
1431 | + 'event_id' => $event_id, |
|
1432 | + ), |
|
1433 | + REG_ADMIN_URL |
|
1434 | + ); |
|
1435 | + $this->_template_args['filtered_transactions_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1436 | + array( |
|
1437 | + 'action' => 'default', |
|
1438 | + 'EVT_ID' => $event_id, |
|
1439 | + 'page' => 'espresso_transactions', |
|
1440 | + ), |
|
1441 | + admin_url('admin.php') |
|
1442 | + ); |
|
1443 | + $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
1444 | + array( |
|
1445 | + 'page' => 'espresso_events', |
|
1446 | + 'action' => 'edit', |
|
1447 | + 'post' => $event_id, |
|
1448 | + ), |
|
1449 | + admin_url('admin.php') |
|
1450 | + ); |
|
1451 | + //next and previous links |
|
1452 | + $next_reg = $this->_registration->next( |
|
1453 | + null, |
|
1454 | + array(), |
|
1455 | + 'REG_ID' |
|
1456 | + ); |
|
1457 | + $this->_template_args['next_registration'] = $next_reg |
|
1458 | + ? $this->_next_link( |
|
1459 | + EE_Admin_Page::add_query_args_and_nonce( |
|
1460 | + array( |
|
1461 | + 'action' => 'view_registration', |
|
1462 | + '_REG_ID' => $next_reg['REG_ID'], |
|
1463 | + ), |
|
1464 | + REG_ADMIN_URL |
|
1465 | + ), |
|
1466 | + 'dashicons dashicons-arrow-right ee-icon-size-22' |
|
1467 | + ) |
|
1468 | + : ''; |
|
1469 | + $previous_reg = $this->_registration->previous( |
|
1470 | + null, |
|
1471 | + array(), |
|
1472 | + 'REG_ID' |
|
1473 | + ); |
|
1474 | + $this->_template_args['previous_registration'] = $previous_reg |
|
1475 | + ? $this->_previous_link( |
|
1476 | + EE_Admin_Page::add_query_args_and_nonce( |
|
1477 | + array( |
|
1478 | + 'action' => 'view_registration', |
|
1479 | + '_REG_ID' => $previous_reg['REG_ID'], |
|
1480 | + ), |
|
1481 | + REG_ADMIN_URL |
|
1482 | + ), |
|
1483 | + 'dashicons dashicons-arrow-left ee-icon-size-22' |
|
1484 | + ) |
|
1485 | + : ''; |
|
1486 | + // grab header |
|
1487 | + $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_header.template.php'; |
|
1488 | + $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
1489 | + $this->_template_args['admin_page_header'] = EEH_Template::display_template( |
|
1490 | + $template_path, |
|
1491 | + $this->_template_args, |
|
1492 | + true |
|
1493 | + ); |
|
1494 | + } else { |
|
1495 | + $this->_template_args['admin_page_header'] = $this->display_espresso_notices(); |
|
1496 | + } |
|
1497 | + // the details template wrapper |
|
1498 | + $this->display_admin_page_with_sidebar(); |
|
1499 | + } |
|
1500 | + |
|
1501 | + |
|
1502 | + protected function _registration_details_metaboxes() |
|
1503 | + { |
|
1504 | + do_action('AHEE__Registrations_Admin_Page___registration_details_metabox__start', $this); |
|
1505 | + $this->_set_registration_object(); |
|
1506 | + $attendee = $this->_registration instanceof EE_Registration ? $this->_registration->attendee() : null; |
|
1507 | + add_meta_box('edit-reg-status-mbox', esc_html__('Registration Status', 'event_espresso'), |
|
1508 | + array($this, 'set_reg_status_buttons_metabox'), $this->wp_page_slug, 'normal', 'high'); |
|
1509 | + add_meta_box('edit-reg-details-mbox', esc_html__('Registration Details', 'event_espresso'), |
|
1510 | + array($this, '_reg_details_meta_box'), $this->wp_page_slug, 'normal', 'high'); |
|
1511 | + if ($attendee instanceof EE_Attendee |
|
1512 | + && EE_Registry::instance()->CAP->current_user_can( |
|
1513 | + 'ee_edit_registration', |
|
1514 | + 'edit-reg-questions-mbox' |
|
1515 | + ) |
|
1516 | + ) { |
|
1517 | + add_meta_box( |
|
1518 | + 'edit-reg-questions-mbox', |
|
1519 | + esc_html__('Registration Form Answers', 'event_espresso'), |
|
1520 | + array($this, '_reg_questions_meta_box'), |
|
1521 | + $this->wp_page_slug, |
|
1522 | + 'normal', |
|
1523 | + 'high' |
|
1524 | + ); |
|
1525 | + } |
|
1526 | + add_meta_box( |
|
1527 | + 'edit-reg-registrant-mbox', |
|
1528 | + esc_html__('Contact Details', 'event_espresso'), |
|
1529 | + array($this, '_reg_registrant_side_meta_box'), |
|
1530 | + $this->wp_page_slug, |
|
1531 | + 'side', |
|
1532 | + 'high' |
|
1533 | + ); |
|
1534 | + if ($this->_registration->group_size() > 1) { |
|
1535 | + add_meta_box( |
|
1536 | + 'edit-reg-attendees-mbox', |
|
1537 | + esc_html__('Other Registrations in this Transaction', 'event_espresso'), |
|
1538 | + array($this, '_reg_attendees_meta_box'), |
|
1539 | + $this->wp_page_slug, |
|
1540 | + 'normal', |
|
1541 | + 'high' |
|
1542 | + ); |
|
1543 | + } |
|
1544 | + } |
|
1545 | + |
|
1546 | + |
|
1547 | + /** |
|
1548 | + * set_reg_status_buttons_metabox |
|
1549 | + * |
|
1550 | + * @access protected |
|
1551 | + * @return string |
|
1552 | + * @throws \EE_Error |
|
1553 | + */ |
|
1554 | + public function set_reg_status_buttons_metabox() |
|
1555 | + { |
|
1556 | + $this->_set_registration_object(); |
|
1557 | + $change_reg_status_form = $this->_generate_reg_status_change_form(); |
|
1558 | + echo $change_reg_status_form->form_open( |
|
1559 | + self::add_query_args_and_nonce( |
|
1560 | + array( |
|
1561 | + 'action' => 'change_reg_status', |
|
1562 | + ), |
|
1563 | + REG_ADMIN_URL |
|
1564 | + ) |
|
1565 | + ); |
|
1566 | + echo $change_reg_status_form->get_html(); |
|
1567 | + echo $change_reg_status_form->form_close(); |
|
1568 | + } |
|
1569 | + |
|
1570 | + |
|
1571 | + /** |
|
1572 | + * @return EE_Form_Section_Proper |
|
1573 | + * @throws EE_Error |
|
1574 | + */ |
|
1575 | + protected function _generate_reg_status_change_form() |
|
1576 | + { |
|
1577 | + return new EE_Form_Section_Proper(array( |
|
1578 | + 'name' => 'reg_status_change_form', |
|
1579 | + 'html_id' => 'reg-status-change-form', |
|
1580 | + 'layout_strategy' => new EE_Admin_Two_Column_Layout(), |
|
1581 | + 'subsections' => array( |
|
1582 | + 'return' => new EE_Hidden_Input(array( |
|
1583 | + 'name' => 'return', |
|
1584 | + 'default' => 'view_registration', |
|
1585 | + )), |
|
1586 | + 'REG_ID' => new EE_Hidden_Input(array( |
|
1587 | + 'name' => 'REG_ID', |
|
1588 | + 'default' => $this->_registration->ID(), |
|
1589 | + )), |
|
1590 | + 'current_status' => new EE_Form_Section_HTML( |
|
1591 | + EEH_HTML::tr( |
|
1592 | + EEH_HTML::th( |
|
1593 | + EEH_HTML::label( |
|
1594 | + EEH_HTML::strong(esc_html__('Current Registration Status', 'event_espresso') |
|
1595 | + ) |
|
1596 | + ) |
|
1597 | + ) |
|
1598 | + . EEH_HTML::td( |
|
1599 | + EEH_HTML::strong( |
|
1600 | + $this->_registration->pretty_status(), |
|
1601 | + '', |
|
1602 | + 'status-' . $this->_registration->status_ID(), |
|
1603 | + 'line-height: 1em; font-size: 1.5em; font-weight: bold;' |
|
1604 | + ) |
|
1605 | + ) |
|
1606 | + ) |
|
1607 | + ), |
|
1608 | + 'reg_status' => new EE_Select_Input( |
|
1609 | + $this->_get_reg_statuses(), |
|
1610 | + array( |
|
1611 | + 'html_label_text' => esc_html__('Change Registration Status to', 'event_espresso'), |
|
1612 | + 'default' => $this->_registration->status_ID(), |
|
1613 | + ) |
|
1614 | + ), |
|
1615 | + 'send_notifications' => new EE_Yes_No_Input( |
|
1616 | + array( |
|
1617 | + 'html_label_text' => esc_html__('Send Related Messages', 'event_espresso'), |
|
1618 | + 'default' => false, |
|
1619 | + 'html_help_text' => esc_html__( |
|
1620 | + 'If set to "Yes", then the related messages will be sent to the registrant.', |
|
1621 | + 'event_espresso' |
|
1622 | + ), |
|
1623 | + ) |
|
1624 | + ), |
|
1625 | + 'submit' => new EE_Submit_Input( |
|
1626 | + array( |
|
1627 | + 'html_class' => 'button-primary', |
|
1628 | + 'html_label_text' => ' ', |
|
1629 | + 'default' => esc_html__('Update Registration Status', 'event_espresso'), |
|
1630 | + ) |
|
1631 | + ), |
|
1632 | + ), |
|
1633 | + )); |
|
1634 | + } |
|
1635 | + |
|
1636 | + |
|
1637 | + /** |
|
1638 | + * Returns an array of all the buttons for the various statuses and switch status actions |
|
1639 | + * |
|
1640 | + * @return array |
|
1641 | + * @throws EE_Error |
|
1642 | + * @throws \EventEspresso\core\exceptions\EntityNotFoundException |
|
1643 | + */ |
|
1644 | + protected function _get_reg_statuses() |
|
1645 | + { |
|
1646 | + $reg_status_array = EEM_Registration::instance()->reg_status_array(); |
|
1647 | + unset ($reg_status_array[EEM_Registration::status_id_incomplete]); |
|
1648 | + // get current reg status |
|
1649 | + $current_status = $this->_registration->status_ID(); |
|
1650 | + // is registration for free event? This will determine whether to display the pending payment option |
|
1651 | + if ($current_status != EEM_Registration::status_id_pending_payment |
|
1652 | + && $this->_registration->transaction() |
|
1653 | + ->is_free() |
|
1654 | + ) { |
|
1655 | + unset($reg_status_array[EEM_Registration::status_id_pending_payment]); |
|
1656 | + } |
|
1657 | + return EEM_Status::instance()->localized_status($reg_status_array, false, 'sentence'); |
|
1658 | + } |
|
1659 | + |
|
1660 | + |
|
1661 | + /** |
|
1662 | + * This method is used when using _REG_ID from request which may or may not be an array of reg_ids. |
|
1663 | + * |
|
1664 | + * @param bool $status REG status given for changing registrations to. |
|
1665 | + * @param bool $notify Whether to send messages notifications or not. |
|
1666 | + * @return array (array with reg_id(s) updated and whether update was successful. |
|
1667 | + */ |
|
1668 | + protected function _set_registration_status_from_request($status = false, $notify = false) |
|
1669 | + { |
|
1670 | + if (isset($this->_req_data['reg_status_change_form'])) { |
|
1671 | + $REG_IDs = isset($this->_req_data['reg_status_change_form']['REG_ID']) |
|
1672 | + ? (array)$this->_req_data['reg_status_change_form']['REG_ID'] : array(); |
|
1673 | + } else { |
|
1674 | + $REG_IDs = isset($this->_req_data['_REG_ID']) ? (array)$this->_req_data['_REG_ID'] : array(); |
|
1675 | + } |
|
1676 | + $success = $this->_set_registration_status($REG_IDs, $status); |
|
1677 | + //notify? |
|
1678 | + if ($success |
|
1679 | + && $notify |
|
1680 | + && EE_Registry::instance()->CAP->current_user_can( |
|
1681 | + 'ee_send_message', |
|
1682 | + 'espresso_registrations_resend_registration' |
|
1683 | + ) |
|
1684 | + ) { |
|
1685 | + $this->_process_resend_registration(); |
|
1686 | + } |
|
1687 | + return $success; |
|
1688 | + } |
|
1689 | + |
|
1690 | + |
|
1691 | + /** |
|
1692 | + * Set the registration status for the given reg_id (which may or may not be an array, it gets typecast to an |
|
1693 | + * array). Note, this method does NOT take care of possible notifications. That is required by calling code. |
|
1694 | + * |
|
1695 | + * @param array $REG_IDs |
|
1696 | + * @param bool $status |
|
1697 | + * @return array (an array with 'success' key representing whether status change was successful, and 'REG_ID' as |
|
1698 | + * the array of updated registrations). |
|
1699 | + * @throws EE_Error |
|
1700 | + * @throws RuntimeException |
|
1701 | + */ |
|
1702 | + protected function _set_registration_status($REG_IDs = array(), $status = false) |
|
1703 | + { |
|
1704 | + $success = false; |
|
1705 | + // typecast $REG_IDs |
|
1706 | + $REG_IDs = (array)$REG_IDs; |
|
1707 | + if ( ! empty($REG_IDs)) { |
|
1708 | + $success = true; |
|
1709 | + // set default status if none is passed |
|
1710 | + $status = $status ? $status : EEM_Registration::status_id_pending_payment; |
|
1711 | + // sanitize $REG_IDs |
|
1712 | + $REG_IDs = array_filter($REG_IDs, 'absint'); |
|
1713 | + //loop through REG_ID's and change status |
|
1714 | + foreach ($REG_IDs as $REG_ID) { |
|
1715 | + $registration = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
|
1716 | + if ($registration instanceof EE_Registration) { |
|
1717 | + $registration->set_status($status); |
|
1718 | + $result = $registration->save(); |
|
1719 | + // verifying explicit fails because update *may* just return 0 for 0 rows affected |
|
1720 | + $success = $result !== false ? $success : false; |
|
1721 | + } |
|
1722 | + } |
|
1723 | + } |
|
1724 | + //reset _req_data['_REG_ID'] for any potential future messages notifications |
|
1725 | + $this->_req_data['_REG_ID'] = $REG_IDs; |
|
1726 | + //return $success and processed registrations |
|
1727 | + return array('REG_ID' => $REG_IDs, 'success' => $success); |
|
1728 | + } |
|
1729 | + |
|
1730 | + |
|
1731 | + /** |
|
1732 | + * Common logic for setting up success message and redirecting to appropriate route |
|
1733 | + * |
|
1734 | + * @param string $STS_ID status id for the registration changed to |
|
1735 | + * @param bool $notify indicates whether the _set_registration_status_from_request does notifications or not. |
|
1736 | + * @return void |
|
1737 | + */ |
|
1738 | + protected function _reg_status_change_return($STS_ID, $notify = false) |
|
1739 | + { |
|
1740 | + $result = ! empty($STS_ID) ? $this->_set_registration_status_from_request($STS_ID, $notify) |
|
1741 | + : array('success' => false); |
|
1742 | + $success = isset($result['success']) && $result['success']; |
|
1743 | + //setup success message |
|
1744 | + if ($success) { |
|
1745 | + if (is_array($result['REG_ID']) && count($result['REG_ID']) === 1) { |
|
1746 | + $msg = sprintf(esc_html__('Registration status has been set to %s', 'event_espresso'), |
|
1747 | + EEH_Template::pretty_status($STS_ID, false, 'lower')); |
|
1748 | + } else { |
|
1749 | + $msg = sprintf(esc_html__('Registrations have been set to %s.', 'event_espresso'), |
|
1750 | + EEH_Template::pretty_status($STS_ID, false, 'lower')); |
|
1751 | + } |
|
1752 | + EE_Error::add_success($msg); |
|
1753 | + } else { |
|
1754 | + EE_Error::add_error( |
|
1755 | + esc_html__( |
|
1756 | + 'Something went wrong, and the status was not changed', |
|
1757 | + 'event_espresso' |
|
1758 | + ), __FILE__, __LINE__, __FUNCTION__ |
|
1759 | + ); |
|
1760 | + } |
|
1761 | + if (isset($this->_req_data['return']) && $this->_req_data['return'] == 'view_registration') { |
|
1762 | + $route = array('action' => 'view_registration', '_REG_ID' => reset($result['REG_ID'])); |
|
1763 | + } else { |
|
1764 | + $route = array('action' => 'default'); |
|
1765 | + } |
|
1766 | + //unset nonces |
|
1767 | + foreach ($this->_req_data as $ref => $value) { |
|
1768 | + if (strpos($ref, 'nonce') !== false) { |
|
1769 | + unset($this->_req_data[$ref]); |
|
1770 | + continue; |
|
1771 | + } |
|
1772 | + $value = is_array($value) ? array_map('urlencode', $value) : urlencode($value); |
|
1773 | + $this->_req_data[$ref] = $value; |
|
1774 | + } |
|
1775 | + //merge request vars so that the reloaded list table contains any existing filter query params |
|
1776 | + $route = array_merge($this->_req_data, $route); |
|
1777 | + $this->_redirect_after_action($success, '', '', $route, true); |
|
1778 | + } |
|
1779 | + |
|
1780 | + |
|
1781 | + /** |
|
1782 | + * incoming reg status change from reg details page. |
|
1783 | + * |
|
1784 | + * @return void |
|
1785 | + */ |
|
1786 | + protected function _change_reg_status() |
|
1787 | + { |
|
1788 | + $this->_req_data['return'] = 'view_registration'; |
|
1789 | + //set notify based on whether the send notifications toggle is set or not |
|
1790 | + $notify = ! empty($this->_req_data['reg_status_change_form']['send_notifications']); |
|
1791 | + //$notify = ! empty( $this->_req_data['txn_reg_status_change']['send_notifications'] ); |
|
1792 | + $this->_req_data['reg_status_change_form']['reg_status'] = isset($this->_req_data['reg_status_change_form']['reg_status']) |
|
1793 | + ? $this->_req_data['reg_status_change_form']['reg_status'] : ''; |
|
1794 | + switch ($this->_req_data['reg_status_change_form']['reg_status']) { |
|
1795 | + case EEM_Registration::status_id_approved : |
|
1796 | + case EEH_Template::pretty_status(EEM_Registration::status_id_approved, false, 'sentence') : |
|
1797 | + $this->approve_registration($notify); |
|
1798 | + break; |
|
1799 | + case EEM_Registration::status_id_pending_payment : |
|
1800 | + case EEH_Template::pretty_status(EEM_Registration::status_id_pending_payment, false, 'sentence') : |
|
1801 | + $this->pending_registration($notify); |
|
1802 | + break; |
|
1803 | + case EEM_Registration::status_id_not_approved : |
|
1804 | + case EEH_Template::pretty_status(EEM_Registration::status_id_not_approved, false, 'sentence') : |
|
1805 | + $this->not_approve_registration($notify); |
|
1806 | + break; |
|
1807 | + case EEM_Registration::status_id_declined : |
|
1808 | + case EEH_Template::pretty_status(EEM_Registration::status_id_declined, false, 'sentence') : |
|
1809 | + $this->decline_registration($notify); |
|
1810 | + break; |
|
1811 | + case EEM_Registration::status_id_cancelled : |
|
1812 | + case EEH_Template::pretty_status(EEM_Registration::status_id_cancelled, false, 'sentence') : |
|
1813 | + $this->cancel_registration($notify); |
|
1814 | + break; |
|
1815 | + case EEM_Registration::status_id_wait_list : |
|
1816 | + case EEH_Template::pretty_status(EEM_Registration::status_id_wait_list, false, 'sentence') : |
|
1817 | + $this->waitlist_registration($notify); |
|
1818 | + break; |
|
1819 | + case EEM_Registration::status_id_incomplete : |
|
1820 | + default : |
|
1821 | + $result['success'] = false; |
|
1822 | + unset($this->_req_data['return']); |
|
1823 | + $this->_reg_status_change_return('', false); |
|
1824 | + break; |
|
1825 | + } |
|
1826 | + } |
|
1827 | + |
|
1828 | + |
|
1829 | + /** |
|
1830 | + * approve_registration |
|
1831 | + * |
|
1832 | + * @access protected |
|
1833 | + * @param bool $notify whether or not to notify the registrant about their approval. |
|
1834 | + * @return void |
|
1835 | + */ |
|
1836 | + protected function approve_registration($notify = false) |
|
1837 | + { |
|
1838 | + $this->_reg_status_change_return(EEM_Registration::status_id_approved, $notify); |
|
1839 | + } |
|
1840 | + |
|
1841 | + |
|
1842 | + /** |
|
1843 | + * decline_registration |
|
1844 | + * |
|
1845 | + * @access protected |
|
1846 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
1847 | + * @return void |
|
1848 | + */ |
|
1849 | + protected function decline_registration($notify = false) |
|
1850 | + { |
|
1851 | + $this->_reg_status_change_return(EEM_Registration::status_id_declined, $notify); |
|
1852 | + } |
|
1853 | + |
|
1854 | + |
|
1855 | + /** |
|
1856 | + * cancel_registration |
|
1857 | + * |
|
1858 | + * @access protected |
|
1859 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
1860 | + * @return void |
|
1861 | + */ |
|
1862 | + protected function cancel_registration($notify = false) |
|
1863 | + { |
|
1864 | + $this->_reg_status_change_return(EEM_Registration::status_id_cancelled, $notify); |
|
1865 | + } |
|
1866 | + |
|
1867 | + |
|
1868 | + /** |
|
1869 | + * not_approve_registration |
|
1870 | + * |
|
1871 | + * @access protected |
|
1872 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
1873 | + * @return void |
|
1874 | + */ |
|
1875 | + protected function not_approve_registration($notify = false) |
|
1876 | + { |
|
1877 | + $this->_reg_status_change_return(EEM_Registration::status_id_not_approved, $notify); |
|
1878 | + } |
|
1879 | + |
|
1880 | + |
|
1881 | + /** |
|
1882 | + * decline_registration |
|
1883 | + * |
|
1884 | + * @access protected |
|
1885 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
1886 | + * @return void |
|
1887 | + */ |
|
1888 | + protected function pending_registration($notify = false) |
|
1889 | + { |
|
1890 | + $this->_reg_status_change_return(EEM_Registration::status_id_pending_payment, $notify); |
|
1891 | + } |
|
1892 | + |
|
1893 | + |
|
1894 | + /** |
|
1895 | + * waitlist_registration |
|
1896 | + * |
|
1897 | + * @access protected |
|
1898 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
1899 | + * @return void |
|
1900 | + */ |
|
1901 | + protected function waitlist_registration($notify = false) |
|
1902 | + { |
|
1903 | + $this->_reg_status_change_return(EEM_Registration::status_id_wait_list, $notify); |
|
1904 | + } |
|
1905 | + |
|
1906 | + |
|
1907 | + /** |
|
1908 | + * generates HTML for the Registration main meta box |
|
1909 | + * |
|
1910 | + * @access public |
|
1911 | + * @return void |
|
1912 | + * @throws DomainException |
|
1913 | + * @throws EE_Error |
|
1914 | + * @throws \EventEspresso\core\exceptions\EntityNotFoundException |
|
1915 | + */ |
|
1916 | + public function _reg_details_meta_box() |
|
1917 | + { |
|
1918 | + EEH_Autoloader::register_line_item_display_autoloaders(); |
|
1919 | + EEH_Autoloader::register_line_item_filter_autoloaders(); |
|
1920 | + EE_Registry::instance()->load_helper('Line_Item'); |
|
1921 | + $transaction = $this->_registration->transaction() ? $this->_registration->transaction() |
|
1922 | + : EE_Transaction::new_instance(); |
|
1923 | + $this->_session = $transaction->session_data(); |
|
1924 | + $filters = new EE_Line_Item_Filter_Collection(); |
|
1925 | + //$filters->add( new EE_Non_Zero_Line_Item_Filter() ); |
|
1926 | + $filters->add(new EE_Single_Registration_Line_Item_Filter($this->_registration)); |
|
1927 | + $line_item_filter_processor = new EE_Line_Item_Filter_Processor($filters, |
|
1928 | + $transaction->total_line_item()); |
|
1929 | + $filtered_line_item_tree = $line_item_filter_processor->process(); |
|
1930 | + $line_item_display = new EE_Line_Item_Display('reg_admin_table', |
|
1931 | + 'EE_Admin_Table_Registration_Line_Item_Display_Strategy'); |
|
1932 | + $this->_template_args['line_item_table'] = $line_item_display->display_line_item( |
|
1933 | + $filtered_line_item_tree, |
|
1934 | + array('EE_Registration' => $this->_registration) |
|
1935 | + ); |
|
1936 | + $attendee = $this->_registration->attendee(); |
|
1937 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
1938 | + 'ee_read_transaction', |
|
1939 | + 'espresso_transactions_view_transaction' |
|
1940 | + )) { |
|
1941 | + $this->_template_args['view_transaction_button'] = EEH_Template::get_button_or_link( |
|
1942 | + EE_Admin_Page::add_query_args_and_nonce( |
|
1943 | + array( |
|
1944 | + 'action' => 'view_transaction', |
|
1945 | + 'TXN_ID' => $transaction->ID(), |
|
1946 | + ), |
|
1947 | + TXN_ADMIN_URL |
|
1948 | + ), |
|
1949 | + esc_html__(' View Transaction', 'event_espresso'), |
|
1950 | + 'button secondary-button right', |
|
1951 | + 'dashicons dashicons-cart' |
|
1952 | + ); |
|
1953 | + } else { |
|
1954 | + $this->_template_args['view_transaction_button'] = ''; |
|
1955 | + } |
|
1956 | + if ($attendee instanceof EE_Attendee |
|
1957 | + && EE_Registry::instance()->CAP->current_user_can( |
|
1958 | + 'ee_send_message', |
|
1959 | + 'espresso_registrations_resend_registration' |
|
1960 | + ) |
|
1961 | + ) { |
|
1962 | + $this->_template_args['resend_registration_button'] = EEH_Template::get_button_or_link( |
|
1963 | + EE_Admin_Page::add_query_args_and_nonce( |
|
1964 | + array( |
|
1965 | + 'action' => 'resend_registration', |
|
1966 | + '_REG_ID' => $this->_registration->ID(), |
|
1967 | + 'redirect_to' => 'view_registration', |
|
1968 | + ), |
|
1969 | + REG_ADMIN_URL |
|
1970 | + ), |
|
1971 | + esc_html__(' Resend Registration', 'event_espresso'), |
|
1972 | + 'button secondary-button right', |
|
1973 | + 'dashicons dashicons-email-alt' |
|
1974 | + ); |
|
1975 | + } else { |
|
1976 | + $this->_template_args['resend_registration_button'] = ''; |
|
1977 | + } |
|
1978 | + $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
1979 | + $payment = $transaction->get_first_related('Payment'); |
|
1980 | + $payment = ! $payment instanceof EE_Payment |
|
1981 | + ? EE_Payment::new_instance() |
|
1982 | + : $payment; |
|
1983 | + $payment_method = $payment->get_first_related('Payment_Method'); |
|
1984 | + $payment_method = ! $payment_method instanceof EE_Payment_Method |
|
1985 | + ? EE_Payment_Method::new_instance() |
|
1986 | + : $payment_method; |
|
1987 | + $reg_details = array( |
|
1988 | + 'payment_method' => $payment_method->name(), |
|
1989 | + 'response_msg' => $payment->gateway_response(), |
|
1990 | + 'registration_id' => $this->_registration->get('REG_code'), |
|
1991 | + 'registration_session' => $this->_registration->session_ID(), |
|
1992 | + 'ip_address' => isset($this->_session['ip_address']) ? $this->_session['ip_address'] : '', |
|
1993 | + 'user_agent' => isset($this->_session['user_agent']) ? $this->_session['user_agent'] : '', |
|
1994 | + ); |
|
1995 | + if (isset($reg_details['registration_id'])) { |
|
1996 | + $this->_template_args['reg_details']['registration_id']['value'] = $reg_details['registration_id']; |
|
1997 | + $this->_template_args['reg_details']['registration_id']['label'] = esc_html__( |
|
1998 | + 'Registration ID', |
|
1999 | + 'event_espresso' |
|
2000 | + ); |
|
2001 | + $this->_template_args['reg_details']['registration_id']['class'] = 'regular-text'; |
|
2002 | + } |
|
2003 | + if (isset($reg_details['payment_method'])) { |
|
2004 | + $this->_template_args['reg_details']['payment_method']['value'] = $reg_details['payment_method']; |
|
2005 | + $this->_template_args['reg_details']['payment_method']['label'] = esc_html__( |
|
2006 | + 'Most Recent Payment Method', |
|
2007 | + 'event_espresso' |
|
2008 | + ); |
|
2009 | + $this->_template_args['reg_details']['payment_method']['class'] = 'regular-text'; |
|
2010 | + $this->_template_args['reg_details']['response_msg']['value'] = $reg_details['response_msg']; |
|
2011 | + $this->_template_args['reg_details']['response_msg']['label'] = esc_html__( |
|
2012 | + 'Payment method response', |
|
2013 | + 'event_espresso' |
|
2014 | + ); |
|
2015 | + $this->_template_args['reg_details']['response_msg']['class'] = 'regular-text'; |
|
2016 | + } |
|
2017 | + $this->_template_args['reg_details']['registration_session']['value'] = $reg_details['registration_session']; |
|
2018 | + $this->_template_args['reg_details']['registration_session']['label'] = esc_html__( |
|
2019 | + 'Registration Session', |
|
2020 | + 'event_espresso' |
|
2021 | + ); |
|
2022 | + $this->_template_args['reg_details']['registration_session']['class'] = 'regular-text'; |
|
2023 | + $this->_template_args['reg_details']['ip_address']['value'] = $reg_details['ip_address']; |
|
2024 | + $this->_template_args['reg_details']['ip_address']['label'] = esc_html__( |
|
2025 | + 'Registration placed from IP', |
|
2026 | + 'event_espresso' |
|
2027 | + ); |
|
2028 | + $this->_template_args['reg_details']['ip_address']['class'] = 'regular-text'; |
|
2029 | + $this->_template_args['reg_details']['user_agent']['value'] = $reg_details['user_agent']; |
|
2030 | + $this->_template_args['reg_details']['user_agent']['label'] = esc_html__('Registrant User Agent', |
|
2031 | + 'event_espresso'); |
|
2032 | + $this->_template_args['reg_details']['user_agent']['class'] = 'large-text'; |
|
2033 | + $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
2034 | + array( |
|
2035 | + 'action' => 'default', |
|
2036 | + 'event_id' => $this->_registration->event_ID(), |
|
2037 | + ), |
|
2038 | + REG_ADMIN_URL |
|
2039 | + ); |
|
2040 | + $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
2041 | + $this->_template_args['event_id'] = $this->_registration->event_ID(); |
|
2042 | + $template_path = |
|
2043 | + REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_details.template.php'; |
|
2044 | + echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
2045 | + } |
|
2046 | + |
|
2047 | + |
|
2048 | + /** |
|
2049 | + * generates HTML for the Registration Questions meta box. |
|
2050 | + * If pre-4.8.32.rc.000 hooks are used, uses old methods (with its filters), |
|
2051 | + * otherwise uses new forms system |
|
2052 | + * |
|
2053 | + * @access public |
|
2054 | + * @return void |
|
2055 | + * @throws DomainException |
|
2056 | + * @throws EE_Error |
|
2057 | + */ |
|
2058 | + public function _reg_questions_meta_box() |
|
2059 | + { |
|
2060 | + //allow someone to override this method entirely |
|
2061 | + if (apply_filters('FHEE__Registrations_Admin_Page___reg_questions_meta_box__do_default', true, $this, |
|
2062 | + $this->_registration)) { |
|
2063 | + $form = $this->_get_reg_custom_questions_form( |
|
2064 | + $this->_registration->ID() |
|
2065 | + ); |
|
2066 | + $this->_template_args['att_questions'] = count($form->subforms()) > 0 |
|
2067 | + ? $form->get_html_and_js() |
|
2068 | + : ''; |
|
2069 | + $this->_template_args['reg_questions_form_action'] = 'edit_registration'; |
|
2070 | + $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
2071 | + $template_path = |
|
2072 | + REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_questions.template.php'; |
|
2073 | + echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
2074 | + } |
|
2075 | + } |
|
2076 | + |
|
2077 | + |
|
2078 | + /** |
|
2079 | + * form_before_question_group |
|
2080 | + * |
|
2081 | + * @deprecated as of 4.8.32.rc.000 |
|
2082 | + * @access public |
|
2083 | + * @param string $output |
|
2084 | + * @return string |
|
2085 | + */ |
|
2086 | + public function form_before_question_group($output) |
|
2087 | + { |
|
2088 | + EE_Error::doing_it_wrong( |
|
2089 | + __CLASS__ . '::' . __FUNCTION__, |
|
2090 | + esc_html__( |
|
2091 | + 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
|
2092 | + 'event_espresso' |
|
2093 | + ), |
|
2094 | + '4.8.32.rc.000' |
|
2095 | + ); |
|
2096 | + return ' |
|
2097 | 2097 | <table class="form-table ee-width-100"> |
2098 | 2098 | <tbody> |
2099 | 2099 | '; |
2100 | - } |
|
2101 | - |
|
2102 | - |
|
2103 | - /** |
|
2104 | - * form_after_question_group |
|
2105 | - * |
|
2106 | - * @deprecated as of 4.8.32.rc.000 |
|
2107 | - * @access public |
|
2108 | - * @param string $output |
|
2109 | - * @return string |
|
2110 | - */ |
|
2111 | - public function form_after_question_group($output) |
|
2112 | - { |
|
2113 | - EE_Error::doing_it_wrong( |
|
2114 | - __CLASS__ . '::' . __FUNCTION__, |
|
2115 | - esc_html__( |
|
2116 | - 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
|
2117 | - 'event_espresso' |
|
2118 | - ), |
|
2119 | - '4.8.32.rc.000' |
|
2120 | - ); |
|
2121 | - return ' |
|
2100 | + } |
|
2101 | + |
|
2102 | + |
|
2103 | + /** |
|
2104 | + * form_after_question_group |
|
2105 | + * |
|
2106 | + * @deprecated as of 4.8.32.rc.000 |
|
2107 | + * @access public |
|
2108 | + * @param string $output |
|
2109 | + * @return string |
|
2110 | + */ |
|
2111 | + public function form_after_question_group($output) |
|
2112 | + { |
|
2113 | + EE_Error::doing_it_wrong( |
|
2114 | + __CLASS__ . '::' . __FUNCTION__, |
|
2115 | + esc_html__( |
|
2116 | + 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
|
2117 | + 'event_espresso' |
|
2118 | + ), |
|
2119 | + '4.8.32.rc.000' |
|
2120 | + ); |
|
2121 | + return ' |
|
2122 | 2122 | <tr class="hide-if-no-js"> |
2123 | 2123 | <th> </th> |
2124 | 2124 | <td class="reg-admin-edit-attendee-question-td"> |
2125 | 2125 | <a class="reg-admin-edit-attendee-question-lnk" href="#" title="' |
2126 | - . esc_attr__('click to edit question', 'event_espresso') |
|
2127 | - . '"> |
|
2126 | + . esc_attr__('click to edit question', 'event_espresso') |
|
2127 | + . '"> |
|
2128 | 2128 | <span class="reg-admin-edit-question-group-spn lt-grey-txt">' |
2129 | - . esc_html__('edit the above question group', 'event_espresso') |
|
2130 | - . '</span> |
|
2129 | + . esc_html__('edit the above question group', 'event_espresso') |
|
2130 | + . '</span> |
|
2131 | 2131 | <div class="dashicons dashicons-edit"></div> |
2132 | 2132 | </a> |
2133 | 2133 | </td> |
@@ -2135,558 +2135,558 @@ discard block |
||
2135 | 2135 | </tbody> |
2136 | 2136 | </table> |
2137 | 2137 | '; |
2138 | - } |
|
2139 | - |
|
2140 | - |
|
2141 | - /** |
|
2142 | - * form_form_field_label_wrap |
|
2143 | - * |
|
2144 | - * @deprecated as of 4.8.32.rc.000 |
|
2145 | - * @access public |
|
2146 | - * @param string $label |
|
2147 | - * @return string |
|
2148 | - */ |
|
2149 | - public function form_form_field_label_wrap($label) |
|
2150 | - { |
|
2151 | - EE_Error::doing_it_wrong( |
|
2152 | - __CLASS__ . '::' . __FUNCTION__, |
|
2153 | - esc_html__( |
|
2154 | - 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
|
2155 | - 'event_espresso' |
|
2156 | - ), |
|
2157 | - '4.8.32.rc.000' |
|
2158 | - ); |
|
2159 | - return ' |
|
2138 | + } |
|
2139 | + |
|
2140 | + |
|
2141 | + /** |
|
2142 | + * form_form_field_label_wrap |
|
2143 | + * |
|
2144 | + * @deprecated as of 4.8.32.rc.000 |
|
2145 | + * @access public |
|
2146 | + * @param string $label |
|
2147 | + * @return string |
|
2148 | + */ |
|
2149 | + public function form_form_field_label_wrap($label) |
|
2150 | + { |
|
2151 | + EE_Error::doing_it_wrong( |
|
2152 | + __CLASS__ . '::' . __FUNCTION__, |
|
2153 | + esc_html__( |
|
2154 | + 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
|
2155 | + 'event_espresso' |
|
2156 | + ), |
|
2157 | + '4.8.32.rc.000' |
|
2158 | + ); |
|
2159 | + return ' |
|
2160 | 2160 | <tr> |
2161 | 2161 | <th> |
2162 | 2162 | ' . $label . ' |
2163 | 2163 | </th>'; |
2164 | - } |
|
2165 | - |
|
2166 | - |
|
2167 | - /** |
|
2168 | - * form_form_field_input__wrap |
|
2169 | - * |
|
2170 | - * @deprecated as of 4.8.32.rc.000 |
|
2171 | - * @access public |
|
2172 | - * @param string $input |
|
2173 | - * @return string |
|
2174 | - */ |
|
2175 | - public function form_form_field_input__wrap($input) |
|
2176 | - { |
|
2177 | - EE_Error::doing_it_wrong( |
|
2178 | - __CLASS__ . '::' . __FUNCTION__, |
|
2179 | - esc_html__( |
|
2180 | - 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
|
2181 | - 'event_espresso' |
|
2182 | - ), |
|
2183 | - '4.8.32.rc.000' |
|
2184 | - ); |
|
2185 | - return ' |
|
2164 | + } |
|
2165 | + |
|
2166 | + |
|
2167 | + /** |
|
2168 | + * form_form_field_input__wrap |
|
2169 | + * |
|
2170 | + * @deprecated as of 4.8.32.rc.000 |
|
2171 | + * @access public |
|
2172 | + * @param string $input |
|
2173 | + * @return string |
|
2174 | + */ |
|
2175 | + public function form_form_field_input__wrap($input) |
|
2176 | + { |
|
2177 | + EE_Error::doing_it_wrong( |
|
2178 | + __CLASS__ . '::' . __FUNCTION__, |
|
2179 | + esc_html__( |
|
2180 | + 'This method would have been protected but was used on a filter callback so needed to be public. Please discontinue usage as it will be removed soon.', |
|
2181 | + 'event_espresso' |
|
2182 | + ), |
|
2183 | + '4.8.32.rc.000' |
|
2184 | + ); |
|
2185 | + return ' |
|
2186 | 2186 | <td class="reg-admin-attendee-questions-input-td disabled-input"> |
2187 | 2187 | ' . $input . ' |
2188 | 2188 | </td> |
2189 | 2189 | </tr>'; |
2190 | - } |
|
2191 | - |
|
2192 | - |
|
2193 | - /** |
|
2194 | - * Updates the registration's custom questions according to the form info, if the form is submitted. |
|
2195 | - * If it's not a post, the "view_registrations" route will be called next on the SAME request |
|
2196 | - * to display the page |
|
2197 | - * |
|
2198 | - * @access protected |
|
2199 | - * @return void |
|
2200 | - * @throws EE_Error |
|
2201 | - */ |
|
2202 | - protected function _update_attendee_registration_form() |
|
2203 | - { |
|
2204 | - do_action('AHEE__Registrations_Admin_Page___update_attendee_registration_form__start', $this); |
|
2205 | - if ($_SERVER['REQUEST_METHOD'] == 'POST') { |
|
2206 | - $REG_ID = isset($this->_req_data['_REG_ID']) ? absint($this->_req_data['_REG_ID']) : false; |
|
2207 | - $success = $this->_save_reg_custom_questions_form($REG_ID); |
|
2208 | - if ($success) { |
|
2209 | - $what = esc_html__('Registration Form', 'event_espresso'); |
|
2210 | - $route = $REG_ID ? array('action' => 'view_registration', '_REG_ID' => $REG_ID) |
|
2211 | - : array('action' => 'default'); |
|
2212 | - $this->_redirect_after_action($success, $what, esc_html__('updated', 'event_espresso'), $route); |
|
2213 | - } |
|
2214 | - } |
|
2215 | - } |
|
2216 | - |
|
2217 | - |
|
2218 | - /** |
|
2219 | - * Gets the form for saving registrations custom questions (if done |
|
2220 | - * previously retrieves the cached form object, which may have validation errors in it) |
|
2221 | - * |
|
2222 | - * @param int $REG_ID |
|
2223 | - * @return EE_Registration_Custom_Questions_Form |
|
2224 | - * @throws EE_Error |
|
2225 | - */ |
|
2226 | - protected function _get_reg_custom_questions_form($REG_ID) |
|
2227 | - { |
|
2228 | - if ( ! $this->_reg_custom_questions_form) { |
|
2229 | - require_once(REG_ADMIN . 'form_sections' . DS . 'EE_Registration_Custom_Questions_Form.form.php'); |
|
2230 | - $this->_reg_custom_questions_form = new EE_Registration_Custom_Questions_Form( |
|
2231 | - EEM_Registration::instance()->get_one_by_ID($REG_ID) |
|
2232 | - ); |
|
2233 | - $this->_reg_custom_questions_form->_construct_finalize(null, null); |
|
2234 | - } |
|
2235 | - return $this->_reg_custom_questions_form; |
|
2236 | - } |
|
2237 | - |
|
2238 | - |
|
2239 | - /** |
|
2240 | - * Saves |
|
2241 | - * |
|
2242 | - * @access private |
|
2243 | - * @param bool $REG_ID |
|
2244 | - * @return bool |
|
2245 | - * @throws EE_Error |
|
2246 | - */ |
|
2247 | - private function _save_reg_custom_questions_form($REG_ID = false) |
|
2248 | - { |
|
2249 | - if ( ! $REG_ID) { |
|
2250 | - EE_Error::add_error( |
|
2251 | - esc_html__( |
|
2252 | - 'An error occurred. No registration ID was received.', 'event_espresso'), |
|
2253 | - __FILE__, __FUNCTION__, __LINE__ |
|
2254 | - ); |
|
2255 | - } |
|
2256 | - $form = $this->_get_reg_custom_questions_form($REG_ID); |
|
2257 | - $form->receive_form_submission($this->_req_data); |
|
2258 | - $success = false; |
|
2259 | - if ($form->is_valid()) { |
|
2260 | - foreach ($form->subforms() as $question_group_id => $question_group_form) { |
|
2261 | - foreach ($question_group_form->inputs() as $question_id => $input) { |
|
2262 | - $where_conditions = array( |
|
2263 | - 'QST_ID' => $question_id, |
|
2264 | - 'REG_ID' => $REG_ID, |
|
2265 | - ); |
|
2266 | - $possibly_new_values = array( |
|
2267 | - 'ANS_value' => $input->normalized_value(), |
|
2268 | - ); |
|
2269 | - $answer = EEM_Answer::instance()->get_one(array($where_conditions)); |
|
2270 | - if ($answer instanceof EE_Answer) { |
|
2271 | - $success = $answer->save($possibly_new_values); |
|
2272 | - } else { |
|
2273 | - //insert it then |
|
2274 | - $cols_n_vals = array_merge($where_conditions, $possibly_new_values); |
|
2275 | - $answer = EE_Answer::new_instance($cols_n_vals); |
|
2276 | - $success = $answer->save(); |
|
2277 | - } |
|
2278 | - } |
|
2279 | - } |
|
2280 | - } else { |
|
2281 | - EE_Error::add_error($form->get_validation_error_string(), __FILE__, __FUNCTION__, __LINE__); |
|
2282 | - } |
|
2283 | - return $success; |
|
2284 | - } |
|
2285 | - |
|
2286 | - |
|
2287 | - /** |
|
2288 | - * generates HTML for the Registration main meta box |
|
2289 | - * |
|
2290 | - * @access public |
|
2291 | - * @return void |
|
2292 | - * @throws DomainException |
|
2293 | - * @throws EE_Error |
|
2294 | - */ |
|
2295 | - public function _reg_attendees_meta_box() |
|
2296 | - { |
|
2297 | - $REG = EEM_Registration::instance(); |
|
2298 | - //get all other registrations on this transaction, and cache |
|
2299 | - //the attendees for them so we don't have to run another query using force_join |
|
2300 | - $registrations = $REG->get_all(array( |
|
2301 | - array( |
|
2302 | - 'TXN_ID' => $this->_registration->transaction_ID(), |
|
2303 | - 'REG_ID' => array('!=', $this->_registration->ID()), |
|
2304 | - ), |
|
2305 | - 'force_join' => array('Attendee'), |
|
2306 | - )); |
|
2307 | - $this->_template_args['attendees'] = array(); |
|
2308 | - $this->_template_args['attendee_notice'] = ''; |
|
2309 | - if (empty($registrations) |
|
2310 | - || (is_array($registrations) |
|
2311 | - && ! EEH_Array::get_one_item_from_array($registrations)) |
|
2312 | - ) { |
|
2313 | - EE_Error::add_error( |
|
2314 | - esc_html__( |
|
2315 | - 'There are no records attached to this registration. Something may have gone wrong with the registration', |
|
2316 | - 'event_espresso' |
|
2317 | - ), __FILE__, __FUNCTION__, __LINE__ |
|
2318 | - ); |
|
2319 | - $this->_template_args['attendee_notice'] = EE_Error::get_notices(); |
|
2320 | - } else { |
|
2321 | - $att_nmbr = 1; |
|
2322 | - foreach ($registrations as $registration) { |
|
2323 | - /* @var $registration EE_Registration */ |
|
2324 | - $attendee = $registration->attendee() |
|
2325 | - ? $registration->attendee() |
|
2326 | - : EEM_Attendee::instance() |
|
2327 | - ->create_default_object(); |
|
2328 | - $this->_template_args['attendees'][$att_nmbr]['STS_ID'] = $registration->status_ID(); |
|
2329 | - $this->_template_args['attendees'][$att_nmbr]['fname'] = $attendee->fname(); |
|
2330 | - $this->_template_args['attendees'][$att_nmbr]['lname'] = $attendee->lname(); |
|
2331 | - $this->_template_args['attendees'][$att_nmbr]['email'] = $attendee->email(); |
|
2332 | - $this->_template_args['attendees'][$att_nmbr]['final_price'] = $registration->final_price(); |
|
2333 | - $this->_template_args['attendees'][$att_nmbr]['address'] = implode( |
|
2334 | - ', ', |
|
2335 | - $attendee->full_address_as_array() |
|
2336 | - ); |
|
2337 | - $this->_template_args['attendees'][$att_nmbr]['att_link'] = self::add_query_args_and_nonce( |
|
2338 | - array( |
|
2339 | - 'action' => 'edit_attendee', |
|
2340 | - 'post' => $attendee->ID(), |
|
2341 | - ), |
|
2342 | - REG_ADMIN_URL |
|
2343 | - ); |
|
2344 | - $this->_template_args['attendees'][$att_nmbr]['event_name'] = $registration->event_obj()->name(); |
|
2345 | - $att_nmbr++; |
|
2346 | - } |
|
2347 | - $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
2348 | - } |
|
2349 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_attendees.template.php'; |
|
2350 | - echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
2351 | - } |
|
2352 | - |
|
2353 | - |
|
2354 | - /** |
|
2355 | - * generates HTML for the Edit Registration side meta box |
|
2356 | - * |
|
2357 | - * @access public |
|
2358 | - * @return void |
|
2359 | - * @throws DomainException |
|
2360 | - * @throws EE_Error |
|
2361 | - */ |
|
2362 | - public function _reg_registrant_side_meta_box() |
|
2363 | - { |
|
2364 | - /*@var $attendee EE_Attendee */ |
|
2365 | - $att_check = $this->_registration->attendee(); |
|
2366 | - $attendee = $att_check instanceof EE_Attendee ? $att_check : EEM_Attendee::instance()->create_default_object(); |
|
2367 | - //now let's determine if this is not the primary registration. If it isn't then we set the |
|
2368 | - //primary_registration object for reference BUT ONLY if the Attendee object loaded is not the same as the |
|
2369 | - //primary registration object (that way we know if we need to show create button or not) |
|
2370 | - if ( ! $this->_registration->is_primary_registrant()) { |
|
2371 | - $primary_registration = $this->_registration->get_primary_registration(); |
|
2372 | - $primary_attendee = $primary_registration instanceof EE_Registration ? $primary_registration->attendee() |
|
2373 | - : null; |
|
2374 | - if ( ! $primary_attendee instanceof EE_Attendee || $attendee->ID() !== $primary_attendee->ID()) { |
|
2375 | - //in here? This means the displayed registration is not the primary registrant but ALREADY HAS its own |
|
2376 | - //custom attendee object so let's not worry about the primary reg. |
|
2377 | - $primary_registration = null; |
|
2378 | - } |
|
2379 | - } else { |
|
2380 | - $primary_registration = null; |
|
2381 | - } |
|
2382 | - $this->_template_args['ATT_ID'] = $attendee->ID(); |
|
2383 | - $this->_template_args['fname'] = $attendee->fname(); |
|
2384 | - $this->_template_args['lname'] = $attendee->lname(); |
|
2385 | - $this->_template_args['email'] = $attendee->email(); |
|
2386 | - $this->_template_args['phone'] = $attendee->phone(); |
|
2387 | - $this->_template_args['formatted_address'] = EEH_Address::format($attendee); |
|
2388 | - //edit link |
|
2389 | - $this->_template_args['att_edit_link'] = EE_Admin_Page::add_query_args_and_nonce(array( |
|
2390 | - 'action' => 'edit_attendee', |
|
2391 | - 'post' => $attendee->ID(), |
|
2392 | - ), REG_ADMIN_URL); |
|
2393 | - $this->_template_args['att_edit_label'] = esc_html__('View/Edit Contact', 'event_espresso'); |
|
2394 | - //create link |
|
2395 | - $this->_template_args['create_link'] = $primary_registration instanceof EE_Registration |
|
2396 | - ? EE_Admin_Page::add_query_args_and_nonce(array( |
|
2397 | - 'action' => 'duplicate_attendee', |
|
2398 | - '_REG_ID' => $this->_registration->ID(), |
|
2399 | - ), REG_ADMIN_URL) : ''; |
|
2400 | - $this->_template_args['create_label'] = esc_html__('Create Contact', 'event_espresso'); |
|
2401 | - $this->_template_args['att_check'] = $att_check; |
|
2402 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_side_meta_box_registrant.template.php'; |
|
2403 | - echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
2404 | - } |
|
2405 | - |
|
2406 | - |
|
2407 | - /** |
|
2408 | - * trash or restore registrations |
|
2409 | - * |
|
2410 | - * @param boolean $trash whether to archive or restore |
|
2411 | - * @return void |
|
2412 | - * @throws EE_Error |
|
2413 | - * @throws RuntimeException |
|
2414 | - * @access protected |
|
2415 | - */ |
|
2416 | - protected function _trash_or_restore_registrations($trash = true) |
|
2417 | - { |
|
2418 | - //if empty _REG_ID then get out because there's nothing to do |
|
2419 | - if (empty($this->_req_data['_REG_ID'])) { |
|
2420 | - EE_Error::add_error( |
|
2421 | - sprintf( |
|
2422 | - esc_html__( |
|
2423 | - 'In order to %1$s registrations you must select which ones you wish to %1$s by clicking the checkboxes.', |
|
2424 | - 'event_espresso' |
|
2425 | - ), |
|
2426 | - $trash ? 'trash' : 'restore' |
|
2427 | - ), |
|
2428 | - __FILE__, __LINE__, __FUNCTION__ |
|
2429 | - ); |
|
2430 | - $this->_redirect_after_action(false, '', '', array(), true); |
|
2431 | - } |
|
2432 | - $success = 0; |
|
2433 | - $overwrite_msgs = false; |
|
2434 | - //Checkboxes |
|
2435 | - if ( ! is_array($this->_req_data['_REG_ID'])) { |
|
2436 | - $this->_req_data['_REG_ID'] = array($this->_req_data['_REG_ID']); |
|
2437 | - } |
|
2438 | - $reg_count = count($this->_req_data['_REG_ID']); |
|
2439 | - // cycle thru checkboxes |
|
2440 | - foreach ($this->_req_data['_REG_ID'] as $REG_ID) { |
|
2441 | - /** @var EE_Registration $REG */ |
|
2442 | - $REG = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
|
2443 | - $payments = $REG->registration_payments(); |
|
2444 | - if (! empty($payments)) { |
|
2445 | - $name = $REG->attendee() instanceof EE_Attendee |
|
2446 | - ? $REG->attendee()->full_name() |
|
2447 | - : esc_html__('Unknown Attendee', 'event_espresso'); |
|
2448 | - $overwrite_msgs = true; |
|
2449 | - EE_Error::add_error( |
|
2450 | - sprintf( |
|
2451 | - esc_html__( |
|
2452 | - 'The registration for %s could not be trashed because it has payments attached to the related transaction. If you wish to trash this registration you must first delete the payments on the related transaction.', |
|
2453 | - 'event_espresso' |
|
2454 | - ), |
|
2455 | - $name |
|
2456 | - ), |
|
2457 | - __FILE__, __FUNCTION__, __LINE__ |
|
2458 | - ); |
|
2459 | - //can't trash this registration because it has payments. |
|
2460 | - continue; |
|
2461 | - } |
|
2462 | - $updated = $trash ? $REG->delete() : $REG->restore(); |
|
2463 | - if ($updated) { |
|
2464 | - $success++; |
|
2465 | - } |
|
2466 | - } |
|
2467 | - $this->_redirect_after_action( |
|
2468 | - $success === $reg_count, // were ALL registrations affected? |
|
2469 | - $success > 1 |
|
2470 | - ? esc_html__('Registrations', 'event_espresso') |
|
2471 | - : esc_html__('Registration', 'event_espresso'), |
|
2472 | - $trash |
|
2473 | - ? esc_html__('moved to the trash', 'event_espresso') |
|
2474 | - : esc_html__('restored', 'event_espresso'), |
|
2475 | - array('action' => 'default'), |
|
2476 | - $overwrite_msgs |
|
2477 | - ); |
|
2478 | - } |
|
2479 | - |
|
2480 | - |
|
2481 | - /** |
|
2482 | - * This is used to permanently delete registrations. Note, this will handle not only deleting permanently the |
|
2483 | - * registration but also. |
|
2484 | - * 1. Removing relations to EE_Attendee |
|
2485 | - * 2. Deleting permanently the related transaction, but ONLY if all related registrations to the transaction are |
|
2486 | - * ALSO trashed. |
|
2487 | - * 3. Deleting permanently any related Line items but only if the above conditions are met. |
|
2488 | - * 4. Removing relationships between all tickets and the related registrations |
|
2489 | - * 5. Deleting permanently any related Answers (and the answers for other related registrations that were deleted.) |
|
2490 | - * 6. Deleting permanently any related Checkins. |
|
2491 | - * |
|
2492 | - * @return void |
|
2493 | - * @throws EE_Error |
|
2494 | - */ |
|
2495 | - protected function _delete_registrations() |
|
2496 | - { |
|
2497 | - $REG_MDL = EEM_Registration::instance(); |
|
2498 | - $success = 1; |
|
2499 | - //Checkboxes |
|
2500 | - if ( ! empty($this->_req_data['_REG_ID']) && is_array($this->_req_data['_REG_ID'])) { |
|
2501 | - // if array has more than one element than success message should be plural |
|
2502 | - $success = count($this->_req_data['_REG_ID']) > 1 ? 2 : 1; |
|
2503 | - // cycle thru checkboxes |
|
2504 | - while (list($ind, $REG_ID) = each($this->_req_data['_REG_ID'])) { |
|
2505 | - $REG = $REG_MDL->get_one_by_ID($REG_ID); |
|
2506 | - if ( ! $REG instanceof EE_Registration) { |
|
2507 | - continue; |
|
2508 | - } |
|
2509 | - $deleted = $this->_delete_registration($REG); |
|
2510 | - if ( ! $deleted) { |
|
2511 | - $success = 0; |
|
2512 | - } |
|
2513 | - } |
|
2514 | - } else { |
|
2515 | - // grab single id and delete |
|
2516 | - $REG_ID = $this->_req_data['_REG_ID']; |
|
2517 | - $REG = $REG_MDL->get_one_by_ID($REG_ID); |
|
2518 | - $deleted = $this->_delete_registration($REG); |
|
2519 | - if ( ! $deleted) { |
|
2520 | - $success = 0; |
|
2521 | - } |
|
2522 | - } |
|
2523 | - $what = $success > 1 |
|
2524 | - ? esc_html__('Registrations', 'event_espresso') |
|
2525 | - : esc_html__('Registration', 'event_espresso'); |
|
2526 | - $action_desc = esc_html__('permanently deleted.', 'event_espresso'); |
|
2527 | - $this->_redirect_after_action( |
|
2528 | - $success, |
|
2529 | - $what, |
|
2530 | - $action_desc, |
|
2531 | - array('action' => 'default'), |
|
2532 | - true |
|
2533 | - ); |
|
2534 | - } |
|
2535 | - |
|
2536 | - |
|
2537 | - /** |
|
2538 | - * handles the permanent deletion of a registration. See comments with _delete_registrations() for details on what |
|
2539 | - * models get affected. |
|
2540 | - * |
|
2541 | - * @param EE_Registration $REG registration to be deleted permenantly |
|
2542 | - * @return bool true = successful deletion, false = fail. |
|
2543 | - * @throws EE_Error |
|
2544 | - */ |
|
2545 | - protected function _delete_registration(EE_Registration $REG) |
|
2546 | - { |
|
2547 | - //first we start with the transaction... ultimately, we WILL not delete permanently if there are any related |
|
2548 | - //registrations on the transaction that are NOT trashed. |
|
2549 | - $TXN = $REG->get_first_related('Transaction'); |
|
2550 | - $REGS = $TXN->get_many_related('Registration'); |
|
2551 | - $all_trashed = true; |
|
2552 | - foreach ($REGS as $registration) { |
|
2553 | - if ( ! $registration->get('REG_deleted')) { |
|
2554 | - $all_trashed = false; |
|
2555 | - } |
|
2556 | - } |
|
2557 | - if ( ! $all_trashed) { |
|
2558 | - EE_Error::add_error( |
|
2559 | - esc_html__( |
|
2560 | - 'Unable to permanently delete this registration. Before this registration can be permanently deleted, all registrations made in the same transaction must be trashed as well. These registrations will be permanently deleted in the same action.', |
|
2561 | - 'event_espresso' |
|
2562 | - ), |
|
2563 | - __FILE__, __FUNCTION__, __LINE__ |
|
2564 | - ); |
|
2565 | - return false; |
|
2566 | - } |
|
2567 | - //k made it here so that means we can delete all the related transactions and their answers (but let's do them |
|
2568 | - //separately from THIS one). |
|
2569 | - foreach ($REGS as $registration) { |
|
2570 | - //delete related answers |
|
2571 | - $registration->delete_related_permanently('Answer'); |
|
2572 | - //remove relationship to EE_Attendee (but we ALWAYS leave the contact record intact) |
|
2573 | - $attendee = $registration->get_first_related('Attendee'); |
|
2574 | - if ($attendee instanceof EE_Attendee) { |
|
2575 | - $registration->_remove_relation_to($attendee, 'Attendee'); |
|
2576 | - } |
|
2577 | - //now remove relationships to tickets on this registration. |
|
2578 | - $registration->_remove_relations('Ticket'); |
|
2579 | - //now delete permanently the checkins related to this registration. |
|
2580 | - $registration->delete_related_permanently('Checkin'); |
|
2581 | - if ($registration->ID() === $REG->ID()) { |
|
2582 | - continue; |
|
2583 | - } //we don't want to delete permanently the existing registration just yet. |
|
2584 | - //remove relation to transaction for these registrations if NOT the existing registrations |
|
2585 | - $registration->_remove_relations('Transaction'); |
|
2586 | - //delete permanently any related messages. |
|
2587 | - $registration->delete_related_permanently('Message'); |
|
2588 | - //now delete this registration permanently |
|
2589 | - $registration->delete_permanently(); |
|
2590 | - } |
|
2591 | - //now all related registrations on the transaction are handled. So let's just handle this registration itself |
|
2592 | - // (the transaction and line items should be all that's left). |
|
2593 | - // delete the line items related to the transaction for this registration. |
|
2594 | - $TXN->delete_related_permanently('Line_Item'); |
|
2595 | - //we need to remove all the relationships on the transaction |
|
2596 | - $TXN->delete_related_permanently('Payment'); |
|
2597 | - $TXN->delete_related_permanently('Extra_Meta'); |
|
2598 | - $TXN->delete_related_permanently('Message'); |
|
2599 | - //now we can delete this REG permanently (and the transaction of course) |
|
2600 | - $REG->delete_related_permanently('Transaction'); |
|
2601 | - return $REG->delete_permanently(); |
|
2602 | - } |
|
2603 | - |
|
2604 | - |
|
2605 | - /** |
|
2606 | - * generates HTML for the Register New Attendee Admin page |
|
2607 | - * |
|
2608 | - * @access private |
|
2609 | - * @throws DomainException |
|
2610 | - * @throws EE_Error |
|
2611 | - */ |
|
2612 | - public function new_registration() |
|
2613 | - { |
|
2614 | - if ( ! $this->_set_reg_event()) { |
|
2615 | - throw new EE_Error( |
|
2616 | - esc_html__( |
|
2617 | - 'Unable to continue with registering because there is no Event ID in the request', |
|
2618 | - 'event_espresso' |
|
2619 | - ) |
|
2620 | - ); |
|
2621 | - } |
|
2622 | - EE_Registry::instance()->REQ->set_espresso_page(true); |
|
2623 | - // gotta start with a clean slate if we're not coming here via ajax |
|
2624 | - if ( ! defined('DOING_AJAX') |
|
2625 | - && ( ! isset($this->_req_data['processing_registration']) || isset($this->_req_data['step_error'])) |
|
2626 | - ) { |
|
2627 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
2628 | - } |
|
2629 | - $this->_template_args['event_name'] = ''; |
|
2630 | - // event name |
|
2631 | - if ($this->_reg_event) { |
|
2632 | - $this->_template_args['event_name'] = $this->_reg_event->name(); |
|
2633 | - $edit_event_url = self::add_query_args_and_nonce(array( |
|
2634 | - 'action' => 'edit', |
|
2635 | - 'post' => $this->_reg_event->ID(), |
|
2636 | - ), EVENTS_ADMIN_URL); |
|
2637 | - $edit_event_lnk = '<a href="' |
|
2638 | - . $edit_event_url |
|
2639 | - . '" title="' |
|
2640 | - . esc_attr__('Edit ', 'event_espresso') |
|
2641 | - . $this->_reg_event->name() |
|
2642 | - . '">' |
|
2643 | - . esc_html__('Edit Event', 'event_espresso') |
|
2644 | - . '</a>'; |
|
2645 | - $this->_template_args['event_name'] .= ' <span class="admin-page-header-edit-lnk not-bold">' |
|
2646 | - . $edit_event_lnk |
|
2647 | - . '</span>'; |
|
2648 | - } |
|
2649 | - $this->_template_args['step_content'] = $this->_get_registration_step_content(); |
|
2650 | - if (defined('DOING_AJAX')) { |
|
2651 | - $this->_return_json(); |
|
2652 | - } |
|
2653 | - // grab header |
|
2654 | - $template_path = |
|
2655 | - REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee.template.php'; |
|
2656 | - $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
|
2657 | - $this->_template_args, true); |
|
2658 | - //$this->_set_publish_post_box_vars( NULL, FALSE, FALSE, NULL, FALSE ); |
|
2659 | - // the details template wrapper |
|
2660 | - $this->display_admin_page_with_sidebar(); |
|
2661 | - } |
|
2662 | - |
|
2663 | - |
|
2664 | - /** |
|
2665 | - * This returns the content for a registration step |
|
2666 | - * |
|
2667 | - * @access protected |
|
2668 | - * @return string html |
|
2669 | - * @throws DomainException |
|
2670 | - * @throws EE_Error |
|
2671 | - */ |
|
2672 | - protected function _get_registration_step_content() |
|
2673 | - { |
|
2674 | - if (isset($_COOKIE['ee_registration_added']) && $_COOKIE['ee_registration_added']) { |
|
2675 | - $warning_msg = sprintf( |
|
2676 | - esc_html__( |
|
2677 | - '%2$sWARNING!!!%3$s%1$sPlease do not use the back button to return to this page for the purpose of adding another registration.%1$sThis can result in lost and/or corrupted data.%1$sIf you wish to add another registration, then please click the%1$s%7$s"Add Another New Registration to Event"%8$s button%1$son the Transaction details page, after you are redirected.%1$s%1$s%4$s redirecting in %5$s seconds %6$s', |
|
2678 | - 'event_espresso' |
|
2679 | - ), |
|
2680 | - '<br />', |
|
2681 | - '<h3 class="important-notice">', |
|
2682 | - '</h3>', |
|
2683 | - '<div class="float-right">', |
|
2684 | - '<span id="redirect_timer" class="important-notice">30</span>', |
|
2685 | - '</div>', |
|
2686 | - '<b>', |
|
2687 | - '</b>' |
|
2688 | - ); |
|
2689 | - return ' |
|
2190 | + } |
|
2191 | + |
|
2192 | + |
|
2193 | + /** |
|
2194 | + * Updates the registration's custom questions according to the form info, if the form is submitted. |
|
2195 | + * If it's not a post, the "view_registrations" route will be called next on the SAME request |
|
2196 | + * to display the page |
|
2197 | + * |
|
2198 | + * @access protected |
|
2199 | + * @return void |
|
2200 | + * @throws EE_Error |
|
2201 | + */ |
|
2202 | + protected function _update_attendee_registration_form() |
|
2203 | + { |
|
2204 | + do_action('AHEE__Registrations_Admin_Page___update_attendee_registration_form__start', $this); |
|
2205 | + if ($_SERVER['REQUEST_METHOD'] == 'POST') { |
|
2206 | + $REG_ID = isset($this->_req_data['_REG_ID']) ? absint($this->_req_data['_REG_ID']) : false; |
|
2207 | + $success = $this->_save_reg_custom_questions_form($REG_ID); |
|
2208 | + if ($success) { |
|
2209 | + $what = esc_html__('Registration Form', 'event_espresso'); |
|
2210 | + $route = $REG_ID ? array('action' => 'view_registration', '_REG_ID' => $REG_ID) |
|
2211 | + : array('action' => 'default'); |
|
2212 | + $this->_redirect_after_action($success, $what, esc_html__('updated', 'event_espresso'), $route); |
|
2213 | + } |
|
2214 | + } |
|
2215 | + } |
|
2216 | + |
|
2217 | + |
|
2218 | + /** |
|
2219 | + * Gets the form for saving registrations custom questions (if done |
|
2220 | + * previously retrieves the cached form object, which may have validation errors in it) |
|
2221 | + * |
|
2222 | + * @param int $REG_ID |
|
2223 | + * @return EE_Registration_Custom_Questions_Form |
|
2224 | + * @throws EE_Error |
|
2225 | + */ |
|
2226 | + protected function _get_reg_custom_questions_form($REG_ID) |
|
2227 | + { |
|
2228 | + if ( ! $this->_reg_custom_questions_form) { |
|
2229 | + require_once(REG_ADMIN . 'form_sections' . DS . 'EE_Registration_Custom_Questions_Form.form.php'); |
|
2230 | + $this->_reg_custom_questions_form = new EE_Registration_Custom_Questions_Form( |
|
2231 | + EEM_Registration::instance()->get_one_by_ID($REG_ID) |
|
2232 | + ); |
|
2233 | + $this->_reg_custom_questions_form->_construct_finalize(null, null); |
|
2234 | + } |
|
2235 | + return $this->_reg_custom_questions_form; |
|
2236 | + } |
|
2237 | + |
|
2238 | + |
|
2239 | + /** |
|
2240 | + * Saves |
|
2241 | + * |
|
2242 | + * @access private |
|
2243 | + * @param bool $REG_ID |
|
2244 | + * @return bool |
|
2245 | + * @throws EE_Error |
|
2246 | + */ |
|
2247 | + private function _save_reg_custom_questions_form($REG_ID = false) |
|
2248 | + { |
|
2249 | + if ( ! $REG_ID) { |
|
2250 | + EE_Error::add_error( |
|
2251 | + esc_html__( |
|
2252 | + 'An error occurred. No registration ID was received.', 'event_espresso'), |
|
2253 | + __FILE__, __FUNCTION__, __LINE__ |
|
2254 | + ); |
|
2255 | + } |
|
2256 | + $form = $this->_get_reg_custom_questions_form($REG_ID); |
|
2257 | + $form->receive_form_submission($this->_req_data); |
|
2258 | + $success = false; |
|
2259 | + if ($form->is_valid()) { |
|
2260 | + foreach ($form->subforms() as $question_group_id => $question_group_form) { |
|
2261 | + foreach ($question_group_form->inputs() as $question_id => $input) { |
|
2262 | + $where_conditions = array( |
|
2263 | + 'QST_ID' => $question_id, |
|
2264 | + 'REG_ID' => $REG_ID, |
|
2265 | + ); |
|
2266 | + $possibly_new_values = array( |
|
2267 | + 'ANS_value' => $input->normalized_value(), |
|
2268 | + ); |
|
2269 | + $answer = EEM_Answer::instance()->get_one(array($where_conditions)); |
|
2270 | + if ($answer instanceof EE_Answer) { |
|
2271 | + $success = $answer->save($possibly_new_values); |
|
2272 | + } else { |
|
2273 | + //insert it then |
|
2274 | + $cols_n_vals = array_merge($where_conditions, $possibly_new_values); |
|
2275 | + $answer = EE_Answer::new_instance($cols_n_vals); |
|
2276 | + $success = $answer->save(); |
|
2277 | + } |
|
2278 | + } |
|
2279 | + } |
|
2280 | + } else { |
|
2281 | + EE_Error::add_error($form->get_validation_error_string(), __FILE__, __FUNCTION__, __LINE__); |
|
2282 | + } |
|
2283 | + return $success; |
|
2284 | + } |
|
2285 | + |
|
2286 | + |
|
2287 | + /** |
|
2288 | + * generates HTML for the Registration main meta box |
|
2289 | + * |
|
2290 | + * @access public |
|
2291 | + * @return void |
|
2292 | + * @throws DomainException |
|
2293 | + * @throws EE_Error |
|
2294 | + */ |
|
2295 | + public function _reg_attendees_meta_box() |
|
2296 | + { |
|
2297 | + $REG = EEM_Registration::instance(); |
|
2298 | + //get all other registrations on this transaction, and cache |
|
2299 | + //the attendees for them so we don't have to run another query using force_join |
|
2300 | + $registrations = $REG->get_all(array( |
|
2301 | + array( |
|
2302 | + 'TXN_ID' => $this->_registration->transaction_ID(), |
|
2303 | + 'REG_ID' => array('!=', $this->_registration->ID()), |
|
2304 | + ), |
|
2305 | + 'force_join' => array('Attendee'), |
|
2306 | + )); |
|
2307 | + $this->_template_args['attendees'] = array(); |
|
2308 | + $this->_template_args['attendee_notice'] = ''; |
|
2309 | + if (empty($registrations) |
|
2310 | + || (is_array($registrations) |
|
2311 | + && ! EEH_Array::get_one_item_from_array($registrations)) |
|
2312 | + ) { |
|
2313 | + EE_Error::add_error( |
|
2314 | + esc_html__( |
|
2315 | + 'There are no records attached to this registration. Something may have gone wrong with the registration', |
|
2316 | + 'event_espresso' |
|
2317 | + ), __FILE__, __FUNCTION__, __LINE__ |
|
2318 | + ); |
|
2319 | + $this->_template_args['attendee_notice'] = EE_Error::get_notices(); |
|
2320 | + } else { |
|
2321 | + $att_nmbr = 1; |
|
2322 | + foreach ($registrations as $registration) { |
|
2323 | + /* @var $registration EE_Registration */ |
|
2324 | + $attendee = $registration->attendee() |
|
2325 | + ? $registration->attendee() |
|
2326 | + : EEM_Attendee::instance() |
|
2327 | + ->create_default_object(); |
|
2328 | + $this->_template_args['attendees'][$att_nmbr]['STS_ID'] = $registration->status_ID(); |
|
2329 | + $this->_template_args['attendees'][$att_nmbr]['fname'] = $attendee->fname(); |
|
2330 | + $this->_template_args['attendees'][$att_nmbr]['lname'] = $attendee->lname(); |
|
2331 | + $this->_template_args['attendees'][$att_nmbr]['email'] = $attendee->email(); |
|
2332 | + $this->_template_args['attendees'][$att_nmbr]['final_price'] = $registration->final_price(); |
|
2333 | + $this->_template_args['attendees'][$att_nmbr]['address'] = implode( |
|
2334 | + ', ', |
|
2335 | + $attendee->full_address_as_array() |
|
2336 | + ); |
|
2337 | + $this->_template_args['attendees'][$att_nmbr]['att_link'] = self::add_query_args_and_nonce( |
|
2338 | + array( |
|
2339 | + 'action' => 'edit_attendee', |
|
2340 | + 'post' => $attendee->ID(), |
|
2341 | + ), |
|
2342 | + REG_ADMIN_URL |
|
2343 | + ); |
|
2344 | + $this->_template_args['attendees'][$att_nmbr]['event_name'] = $registration->event_obj()->name(); |
|
2345 | + $att_nmbr++; |
|
2346 | + } |
|
2347 | + $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
2348 | + } |
|
2349 | + $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_attendees.template.php'; |
|
2350 | + echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
2351 | + } |
|
2352 | + |
|
2353 | + |
|
2354 | + /** |
|
2355 | + * generates HTML for the Edit Registration side meta box |
|
2356 | + * |
|
2357 | + * @access public |
|
2358 | + * @return void |
|
2359 | + * @throws DomainException |
|
2360 | + * @throws EE_Error |
|
2361 | + */ |
|
2362 | + public function _reg_registrant_side_meta_box() |
|
2363 | + { |
|
2364 | + /*@var $attendee EE_Attendee */ |
|
2365 | + $att_check = $this->_registration->attendee(); |
|
2366 | + $attendee = $att_check instanceof EE_Attendee ? $att_check : EEM_Attendee::instance()->create_default_object(); |
|
2367 | + //now let's determine if this is not the primary registration. If it isn't then we set the |
|
2368 | + //primary_registration object for reference BUT ONLY if the Attendee object loaded is not the same as the |
|
2369 | + //primary registration object (that way we know if we need to show create button or not) |
|
2370 | + if ( ! $this->_registration->is_primary_registrant()) { |
|
2371 | + $primary_registration = $this->_registration->get_primary_registration(); |
|
2372 | + $primary_attendee = $primary_registration instanceof EE_Registration ? $primary_registration->attendee() |
|
2373 | + : null; |
|
2374 | + if ( ! $primary_attendee instanceof EE_Attendee || $attendee->ID() !== $primary_attendee->ID()) { |
|
2375 | + //in here? This means the displayed registration is not the primary registrant but ALREADY HAS its own |
|
2376 | + //custom attendee object so let's not worry about the primary reg. |
|
2377 | + $primary_registration = null; |
|
2378 | + } |
|
2379 | + } else { |
|
2380 | + $primary_registration = null; |
|
2381 | + } |
|
2382 | + $this->_template_args['ATT_ID'] = $attendee->ID(); |
|
2383 | + $this->_template_args['fname'] = $attendee->fname(); |
|
2384 | + $this->_template_args['lname'] = $attendee->lname(); |
|
2385 | + $this->_template_args['email'] = $attendee->email(); |
|
2386 | + $this->_template_args['phone'] = $attendee->phone(); |
|
2387 | + $this->_template_args['formatted_address'] = EEH_Address::format($attendee); |
|
2388 | + //edit link |
|
2389 | + $this->_template_args['att_edit_link'] = EE_Admin_Page::add_query_args_and_nonce(array( |
|
2390 | + 'action' => 'edit_attendee', |
|
2391 | + 'post' => $attendee->ID(), |
|
2392 | + ), REG_ADMIN_URL); |
|
2393 | + $this->_template_args['att_edit_label'] = esc_html__('View/Edit Contact', 'event_espresso'); |
|
2394 | + //create link |
|
2395 | + $this->_template_args['create_link'] = $primary_registration instanceof EE_Registration |
|
2396 | + ? EE_Admin_Page::add_query_args_and_nonce(array( |
|
2397 | + 'action' => 'duplicate_attendee', |
|
2398 | + '_REG_ID' => $this->_registration->ID(), |
|
2399 | + ), REG_ADMIN_URL) : ''; |
|
2400 | + $this->_template_args['create_label'] = esc_html__('Create Contact', 'event_espresso'); |
|
2401 | + $this->_template_args['att_check'] = $att_check; |
|
2402 | + $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_side_meta_box_registrant.template.php'; |
|
2403 | + echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
2404 | + } |
|
2405 | + |
|
2406 | + |
|
2407 | + /** |
|
2408 | + * trash or restore registrations |
|
2409 | + * |
|
2410 | + * @param boolean $trash whether to archive or restore |
|
2411 | + * @return void |
|
2412 | + * @throws EE_Error |
|
2413 | + * @throws RuntimeException |
|
2414 | + * @access protected |
|
2415 | + */ |
|
2416 | + protected function _trash_or_restore_registrations($trash = true) |
|
2417 | + { |
|
2418 | + //if empty _REG_ID then get out because there's nothing to do |
|
2419 | + if (empty($this->_req_data['_REG_ID'])) { |
|
2420 | + EE_Error::add_error( |
|
2421 | + sprintf( |
|
2422 | + esc_html__( |
|
2423 | + 'In order to %1$s registrations you must select which ones you wish to %1$s by clicking the checkboxes.', |
|
2424 | + 'event_espresso' |
|
2425 | + ), |
|
2426 | + $trash ? 'trash' : 'restore' |
|
2427 | + ), |
|
2428 | + __FILE__, __LINE__, __FUNCTION__ |
|
2429 | + ); |
|
2430 | + $this->_redirect_after_action(false, '', '', array(), true); |
|
2431 | + } |
|
2432 | + $success = 0; |
|
2433 | + $overwrite_msgs = false; |
|
2434 | + //Checkboxes |
|
2435 | + if ( ! is_array($this->_req_data['_REG_ID'])) { |
|
2436 | + $this->_req_data['_REG_ID'] = array($this->_req_data['_REG_ID']); |
|
2437 | + } |
|
2438 | + $reg_count = count($this->_req_data['_REG_ID']); |
|
2439 | + // cycle thru checkboxes |
|
2440 | + foreach ($this->_req_data['_REG_ID'] as $REG_ID) { |
|
2441 | + /** @var EE_Registration $REG */ |
|
2442 | + $REG = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
|
2443 | + $payments = $REG->registration_payments(); |
|
2444 | + if (! empty($payments)) { |
|
2445 | + $name = $REG->attendee() instanceof EE_Attendee |
|
2446 | + ? $REG->attendee()->full_name() |
|
2447 | + : esc_html__('Unknown Attendee', 'event_espresso'); |
|
2448 | + $overwrite_msgs = true; |
|
2449 | + EE_Error::add_error( |
|
2450 | + sprintf( |
|
2451 | + esc_html__( |
|
2452 | + 'The registration for %s could not be trashed because it has payments attached to the related transaction. If you wish to trash this registration you must first delete the payments on the related transaction.', |
|
2453 | + 'event_espresso' |
|
2454 | + ), |
|
2455 | + $name |
|
2456 | + ), |
|
2457 | + __FILE__, __FUNCTION__, __LINE__ |
|
2458 | + ); |
|
2459 | + //can't trash this registration because it has payments. |
|
2460 | + continue; |
|
2461 | + } |
|
2462 | + $updated = $trash ? $REG->delete() : $REG->restore(); |
|
2463 | + if ($updated) { |
|
2464 | + $success++; |
|
2465 | + } |
|
2466 | + } |
|
2467 | + $this->_redirect_after_action( |
|
2468 | + $success === $reg_count, // were ALL registrations affected? |
|
2469 | + $success > 1 |
|
2470 | + ? esc_html__('Registrations', 'event_espresso') |
|
2471 | + : esc_html__('Registration', 'event_espresso'), |
|
2472 | + $trash |
|
2473 | + ? esc_html__('moved to the trash', 'event_espresso') |
|
2474 | + : esc_html__('restored', 'event_espresso'), |
|
2475 | + array('action' => 'default'), |
|
2476 | + $overwrite_msgs |
|
2477 | + ); |
|
2478 | + } |
|
2479 | + |
|
2480 | + |
|
2481 | + /** |
|
2482 | + * This is used to permanently delete registrations. Note, this will handle not only deleting permanently the |
|
2483 | + * registration but also. |
|
2484 | + * 1. Removing relations to EE_Attendee |
|
2485 | + * 2. Deleting permanently the related transaction, but ONLY if all related registrations to the transaction are |
|
2486 | + * ALSO trashed. |
|
2487 | + * 3. Deleting permanently any related Line items but only if the above conditions are met. |
|
2488 | + * 4. Removing relationships between all tickets and the related registrations |
|
2489 | + * 5. Deleting permanently any related Answers (and the answers for other related registrations that were deleted.) |
|
2490 | + * 6. Deleting permanently any related Checkins. |
|
2491 | + * |
|
2492 | + * @return void |
|
2493 | + * @throws EE_Error |
|
2494 | + */ |
|
2495 | + protected function _delete_registrations() |
|
2496 | + { |
|
2497 | + $REG_MDL = EEM_Registration::instance(); |
|
2498 | + $success = 1; |
|
2499 | + //Checkboxes |
|
2500 | + if ( ! empty($this->_req_data['_REG_ID']) && is_array($this->_req_data['_REG_ID'])) { |
|
2501 | + // if array has more than one element than success message should be plural |
|
2502 | + $success = count($this->_req_data['_REG_ID']) > 1 ? 2 : 1; |
|
2503 | + // cycle thru checkboxes |
|
2504 | + while (list($ind, $REG_ID) = each($this->_req_data['_REG_ID'])) { |
|
2505 | + $REG = $REG_MDL->get_one_by_ID($REG_ID); |
|
2506 | + if ( ! $REG instanceof EE_Registration) { |
|
2507 | + continue; |
|
2508 | + } |
|
2509 | + $deleted = $this->_delete_registration($REG); |
|
2510 | + if ( ! $deleted) { |
|
2511 | + $success = 0; |
|
2512 | + } |
|
2513 | + } |
|
2514 | + } else { |
|
2515 | + // grab single id and delete |
|
2516 | + $REG_ID = $this->_req_data['_REG_ID']; |
|
2517 | + $REG = $REG_MDL->get_one_by_ID($REG_ID); |
|
2518 | + $deleted = $this->_delete_registration($REG); |
|
2519 | + if ( ! $deleted) { |
|
2520 | + $success = 0; |
|
2521 | + } |
|
2522 | + } |
|
2523 | + $what = $success > 1 |
|
2524 | + ? esc_html__('Registrations', 'event_espresso') |
|
2525 | + : esc_html__('Registration', 'event_espresso'); |
|
2526 | + $action_desc = esc_html__('permanently deleted.', 'event_espresso'); |
|
2527 | + $this->_redirect_after_action( |
|
2528 | + $success, |
|
2529 | + $what, |
|
2530 | + $action_desc, |
|
2531 | + array('action' => 'default'), |
|
2532 | + true |
|
2533 | + ); |
|
2534 | + } |
|
2535 | + |
|
2536 | + |
|
2537 | + /** |
|
2538 | + * handles the permanent deletion of a registration. See comments with _delete_registrations() for details on what |
|
2539 | + * models get affected. |
|
2540 | + * |
|
2541 | + * @param EE_Registration $REG registration to be deleted permenantly |
|
2542 | + * @return bool true = successful deletion, false = fail. |
|
2543 | + * @throws EE_Error |
|
2544 | + */ |
|
2545 | + protected function _delete_registration(EE_Registration $REG) |
|
2546 | + { |
|
2547 | + //first we start with the transaction... ultimately, we WILL not delete permanently if there are any related |
|
2548 | + //registrations on the transaction that are NOT trashed. |
|
2549 | + $TXN = $REG->get_first_related('Transaction'); |
|
2550 | + $REGS = $TXN->get_many_related('Registration'); |
|
2551 | + $all_trashed = true; |
|
2552 | + foreach ($REGS as $registration) { |
|
2553 | + if ( ! $registration->get('REG_deleted')) { |
|
2554 | + $all_trashed = false; |
|
2555 | + } |
|
2556 | + } |
|
2557 | + if ( ! $all_trashed) { |
|
2558 | + EE_Error::add_error( |
|
2559 | + esc_html__( |
|
2560 | + 'Unable to permanently delete this registration. Before this registration can be permanently deleted, all registrations made in the same transaction must be trashed as well. These registrations will be permanently deleted in the same action.', |
|
2561 | + 'event_espresso' |
|
2562 | + ), |
|
2563 | + __FILE__, __FUNCTION__, __LINE__ |
|
2564 | + ); |
|
2565 | + return false; |
|
2566 | + } |
|
2567 | + //k made it here so that means we can delete all the related transactions and their answers (but let's do them |
|
2568 | + //separately from THIS one). |
|
2569 | + foreach ($REGS as $registration) { |
|
2570 | + //delete related answers |
|
2571 | + $registration->delete_related_permanently('Answer'); |
|
2572 | + //remove relationship to EE_Attendee (but we ALWAYS leave the contact record intact) |
|
2573 | + $attendee = $registration->get_first_related('Attendee'); |
|
2574 | + if ($attendee instanceof EE_Attendee) { |
|
2575 | + $registration->_remove_relation_to($attendee, 'Attendee'); |
|
2576 | + } |
|
2577 | + //now remove relationships to tickets on this registration. |
|
2578 | + $registration->_remove_relations('Ticket'); |
|
2579 | + //now delete permanently the checkins related to this registration. |
|
2580 | + $registration->delete_related_permanently('Checkin'); |
|
2581 | + if ($registration->ID() === $REG->ID()) { |
|
2582 | + continue; |
|
2583 | + } //we don't want to delete permanently the existing registration just yet. |
|
2584 | + //remove relation to transaction for these registrations if NOT the existing registrations |
|
2585 | + $registration->_remove_relations('Transaction'); |
|
2586 | + //delete permanently any related messages. |
|
2587 | + $registration->delete_related_permanently('Message'); |
|
2588 | + //now delete this registration permanently |
|
2589 | + $registration->delete_permanently(); |
|
2590 | + } |
|
2591 | + //now all related registrations on the transaction are handled. So let's just handle this registration itself |
|
2592 | + // (the transaction and line items should be all that's left). |
|
2593 | + // delete the line items related to the transaction for this registration. |
|
2594 | + $TXN->delete_related_permanently('Line_Item'); |
|
2595 | + //we need to remove all the relationships on the transaction |
|
2596 | + $TXN->delete_related_permanently('Payment'); |
|
2597 | + $TXN->delete_related_permanently('Extra_Meta'); |
|
2598 | + $TXN->delete_related_permanently('Message'); |
|
2599 | + //now we can delete this REG permanently (and the transaction of course) |
|
2600 | + $REG->delete_related_permanently('Transaction'); |
|
2601 | + return $REG->delete_permanently(); |
|
2602 | + } |
|
2603 | + |
|
2604 | + |
|
2605 | + /** |
|
2606 | + * generates HTML for the Register New Attendee Admin page |
|
2607 | + * |
|
2608 | + * @access private |
|
2609 | + * @throws DomainException |
|
2610 | + * @throws EE_Error |
|
2611 | + */ |
|
2612 | + public function new_registration() |
|
2613 | + { |
|
2614 | + if ( ! $this->_set_reg_event()) { |
|
2615 | + throw new EE_Error( |
|
2616 | + esc_html__( |
|
2617 | + 'Unable to continue with registering because there is no Event ID in the request', |
|
2618 | + 'event_espresso' |
|
2619 | + ) |
|
2620 | + ); |
|
2621 | + } |
|
2622 | + EE_Registry::instance()->REQ->set_espresso_page(true); |
|
2623 | + // gotta start with a clean slate if we're not coming here via ajax |
|
2624 | + if ( ! defined('DOING_AJAX') |
|
2625 | + && ( ! isset($this->_req_data['processing_registration']) || isset($this->_req_data['step_error'])) |
|
2626 | + ) { |
|
2627 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
2628 | + } |
|
2629 | + $this->_template_args['event_name'] = ''; |
|
2630 | + // event name |
|
2631 | + if ($this->_reg_event) { |
|
2632 | + $this->_template_args['event_name'] = $this->_reg_event->name(); |
|
2633 | + $edit_event_url = self::add_query_args_and_nonce(array( |
|
2634 | + 'action' => 'edit', |
|
2635 | + 'post' => $this->_reg_event->ID(), |
|
2636 | + ), EVENTS_ADMIN_URL); |
|
2637 | + $edit_event_lnk = '<a href="' |
|
2638 | + . $edit_event_url |
|
2639 | + . '" title="' |
|
2640 | + . esc_attr__('Edit ', 'event_espresso') |
|
2641 | + . $this->_reg_event->name() |
|
2642 | + . '">' |
|
2643 | + . esc_html__('Edit Event', 'event_espresso') |
|
2644 | + . '</a>'; |
|
2645 | + $this->_template_args['event_name'] .= ' <span class="admin-page-header-edit-lnk not-bold">' |
|
2646 | + . $edit_event_lnk |
|
2647 | + . '</span>'; |
|
2648 | + } |
|
2649 | + $this->_template_args['step_content'] = $this->_get_registration_step_content(); |
|
2650 | + if (defined('DOING_AJAX')) { |
|
2651 | + $this->_return_json(); |
|
2652 | + } |
|
2653 | + // grab header |
|
2654 | + $template_path = |
|
2655 | + REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee.template.php'; |
|
2656 | + $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
|
2657 | + $this->_template_args, true); |
|
2658 | + //$this->_set_publish_post_box_vars( NULL, FALSE, FALSE, NULL, FALSE ); |
|
2659 | + // the details template wrapper |
|
2660 | + $this->display_admin_page_with_sidebar(); |
|
2661 | + } |
|
2662 | + |
|
2663 | + |
|
2664 | + /** |
|
2665 | + * This returns the content for a registration step |
|
2666 | + * |
|
2667 | + * @access protected |
|
2668 | + * @return string html |
|
2669 | + * @throws DomainException |
|
2670 | + * @throws EE_Error |
|
2671 | + */ |
|
2672 | + protected function _get_registration_step_content() |
|
2673 | + { |
|
2674 | + if (isset($_COOKIE['ee_registration_added']) && $_COOKIE['ee_registration_added']) { |
|
2675 | + $warning_msg = sprintf( |
|
2676 | + esc_html__( |
|
2677 | + '%2$sWARNING!!!%3$s%1$sPlease do not use the back button to return to this page for the purpose of adding another registration.%1$sThis can result in lost and/or corrupted data.%1$sIf you wish to add another registration, then please click the%1$s%7$s"Add Another New Registration to Event"%8$s button%1$son the Transaction details page, after you are redirected.%1$s%1$s%4$s redirecting in %5$s seconds %6$s', |
|
2678 | + 'event_espresso' |
|
2679 | + ), |
|
2680 | + '<br />', |
|
2681 | + '<h3 class="important-notice">', |
|
2682 | + '</h3>', |
|
2683 | + '<div class="float-right">', |
|
2684 | + '<span id="redirect_timer" class="important-notice">30</span>', |
|
2685 | + '</div>', |
|
2686 | + '<b>', |
|
2687 | + '</b>' |
|
2688 | + ); |
|
2689 | + return ' |
|
2690 | 2690 | <div id="ee-add-reg-back-button-dv"><p>' . $warning_msg . '</p></div> |
2691 | 2691 | <script > |
2692 | 2692 | // WHOAH !!! it appears that someone is using the back button from the Transaction admin page |
@@ -2699,792 +2699,792 @@ discard block |
||
2699 | 2699 | } |
2700 | 2700 | }, 800 ); |
2701 | 2701 | </script >'; |
2702 | - } |
|
2703 | - $template_args = array( |
|
2704 | - 'title' => '', |
|
2705 | - 'content' => '', |
|
2706 | - 'step_button_text' => '', |
|
2707 | - 'show_notification_toggle' => false, |
|
2708 | - ); |
|
2709 | - //to indicate we're processing a new registration |
|
2710 | - $hidden_fields = array( |
|
2711 | - 'processing_registration' => array( |
|
2712 | - 'type' => 'hidden', |
|
2713 | - 'value' => 0, |
|
2714 | - ), |
|
2715 | - 'event_id' => array( |
|
2716 | - 'type' => 'hidden', |
|
2717 | - 'value' => $this->_reg_event->ID(), |
|
2718 | - ), |
|
2719 | - ); |
|
2720 | - //if the cart is empty then we know we're at step one so we'll display ticket selector |
|
2721 | - $cart = EE_Registry::instance()->SSN->cart(); |
|
2722 | - $step = ! $cart instanceof EE_Cart ? 'ticket' : 'questions'; |
|
2723 | - switch ($step) { |
|
2724 | - case 'ticket' : |
|
2725 | - $hidden_fields['processing_registration']['value'] = 1; |
|
2726 | - $template_args['title'] = esc_html__( |
|
2727 | - 'Step One: Select the Ticket for this registration', |
|
2728 | - 'event_espresso' |
|
2729 | - ); |
|
2730 | - $template_args['content'] = |
|
2731 | - EED_Ticket_Selector::instance()->display_ticket_selector($this->_reg_event); |
|
2732 | - $template_args['step_button_text'] = esc_html__( |
|
2733 | - 'Add Tickets and Continue to Registrant Details', |
|
2734 | - 'event_espresso' |
|
2735 | - ); |
|
2736 | - $template_args['show_notification_toggle'] = false; |
|
2737 | - break; |
|
2738 | - case 'questions' : |
|
2739 | - $hidden_fields['processing_registration']['value'] = 2; |
|
2740 | - $template_args['title'] = esc_html__( |
|
2741 | - 'Step Two: Add Registrant Details for this Registration', |
|
2742 | - 'event_espresso' |
|
2743 | - ); |
|
2744 | - //in theory we should be able to run EED_SPCO at this point because the cart should have been setup |
|
2745 | - // properly by the first process_reg_step run. |
|
2746 | - $template_args['content'] = |
|
2747 | - EED_Single_Page_Checkout::registration_checkout_for_admin(); |
|
2748 | - $template_args['step_button_text'] = esc_html__( |
|
2749 | - 'Save Registration and Continue to Details', |
|
2750 | - 'event_espresso' |
|
2751 | - ); |
|
2752 | - $template_args['show_notification_toggle'] = true; |
|
2753 | - break; |
|
2754 | - } |
|
2755 | - //we come back to the process_registration_step route. |
|
2756 | - $this->_set_add_edit_form_tags('process_reg_step', $hidden_fields); |
|
2757 | - return EEH_Template::display_template( |
|
2758 | - REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee_step_content.template.php', |
|
2759 | - $template_args, |
|
2760 | - true |
|
2761 | - ); |
|
2762 | - } |
|
2763 | - |
|
2764 | - |
|
2765 | - /** |
|
2766 | - * set_reg_event |
|
2767 | - * |
|
2768 | - * @access private |
|
2769 | - * @return bool |
|
2770 | - * @throws EE_Error |
|
2771 | - */ |
|
2772 | - private function _set_reg_event() |
|
2773 | - { |
|
2774 | - if (is_object($this->_reg_event)) { |
|
2775 | - return true; |
|
2776 | - } |
|
2777 | - $EVT_ID = (! empty($this->_req_data['event_id'])) ? absint($this->_req_data['event_id']) : false; |
|
2778 | - if ( ! $EVT_ID) { |
|
2779 | - return false; |
|
2780 | - } |
|
2781 | - $this->_reg_event = EEM_Event::instance()->get_one_by_ID($EVT_ID); |
|
2782 | - return true; |
|
2783 | - } |
|
2784 | - |
|
2785 | - |
|
2786 | - /** |
|
2787 | - * process_reg_step |
|
2788 | - * |
|
2789 | - * @access public |
|
2790 | - * @return string |
|
2791 | - * @throws DomainException |
|
2792 | - * @throws EE_Error |
|
2793 | - * @throws RuntimeException |
|
2794 | - */ |
|
2795 | - public function process_reg_step() |
|
2796 | - { |
|
2797 | - EE_System::do_not_cache(); |
|
2798 | - $this->_set_reg_event(); |
|
2799 | - EE_Registry::instance()->REQ->set_espresso_page(true); |
|
2800 | - EE_Registry::instance()->REQ->set('uts', time()); |
|
2801 | - //what step are we on? |
|
2802 | - $cart = EE_Registry::instance()->SSN->cart(); |
|
2803 | - $step = ! $cart instanceof EE_Cart ? 'ticket' : 'questions'; |
|
2804 | - //if doing ajax then we need to verify the nonce |
|
2805 | - if (defined('DOING_AJAX')) { |
|
2806 | - $nonce = isset($this->_req_data[$this->_req_nonce]) |
|
2807 | - ? sanitize_text_field($this->_req_data[$this->_req_nonce]) : ''; |
|
2808 | - $this->_verify_nonce($nonce, $this->_req_nonce); |
|
2809 | - } |
|
2810 | - switch ($step) { |
|
2811 | - case 'ticket' : |
|
2812 | - //process ticket selection |
|
2813 | - $success = EED_Ticket_Selector::instance()->process_ticket_selections(); |
|
2814 | - if ($success) { |
|
2815 | - EE_Error::add_success( |
|
2816 | - esc_html__( |
|
2817 | - 'Tickets Selected. Now complete the registration.', |
|
2818 | - 'event_espresso' |
|
2819 | - ) |
|
2820 | - ); |
|
2821 | - } else { |
|
2822 | - $query_args['step_error'] = $this->_req_data['step_error'] = true; |
|
2823 | - } |
|
2824 | - if (defined('DOING_AJAX')) { |
|
2825 | - $this->new_registration(); //display next step |
|
2826 | - } else { |
|
2827 | - $query_args = array( |
|
2828 | - 'action' => 'new_registration', |
|
2829 | - 'processing_registration' => 1, |
|
2830 | - 'event_id' => $this->_reg_event->ID(), |
|
2831 | - 'uts' => time(), |
|
2832 | - ); |
|
2833 | - $this->_redirect_after_action( |
|
2834 | - false, |
|
2835 | - '', |
|
2836 | - '', |
|
2837 | - $query_args, |
|
2838 | - true |
|
2839 | - ); |
|
2840 | - } |
|
2841 | - break; |
|
2842 | - case 'questions' : |
|
2843 | - if (! isset( |
|
2844 | - $this->_req_data['txn_reg_status_change'], |
|
2845 | - $this->_req_data['txn_reg_status_change']['send_notifications']) |
|
2846 | - ) { |
|
2847 | - add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_false', 15); |
|
2848 | - } |
|
2849 | - //process registration |
|
2850 | - $transaction = EED_Single_Page_Checkout::instance()->process_registration_from_admin(); |
|
2851 | - if ($cart instanceof EE_Cart) { |
|
2852 | - $grand_total = $cart->get_cart_grand_total(); |
|
2853 | - if ($grand_total instanceof EE_Line_Item) { |
|
2854 | - $grand_total->save_this_and_descendants_to_txn(); |
|
2855 | - } |
|
2856 | - } |
|
2857 | - if ( ! $transaction instanceof EE_Transaction) { |
|
2858 | - $query_args = array( |
|
2859 | - 'action' => 'new_registration', |
|
2860 | - 'processing_registration' => 2, |
|
2861 | - 'event_id' => $this->_reg_event->ID(), |
|
2862 | - 'uts' => time(), |
|
2863 | - ); |
|
2864 | - if (defined('DOING_AJAX')) { |
|
2865 | - //display registration form again because there are errors (maybe validation?) |
|
2866 | - $this->new_registration(); |
|
2867 | - return; |
|
2868 | - } else { |
|
2869 | - $this->_redirect_after_action( |
|
2870 | - false, |
|
2871 | - '', |
|
2872 | - '', |
|
2873 | - $query_args, |
|
2874 | - true |
|
2875 | - ); |
|
2876 | - return; |
|
2877 | - } |
|
2878 | - } |
|
2879 | - // maybe update status, and make sure to save transaction if not done already |
|
2880 | - if ( ! $transaction->update_status_based_on_total_paid()) { |
|
2881 | - $transaction->save(); |
|
2882 | - } |
|
2883 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
2884 | - $this->_req_data = array(); |
|
2885 | - $query_args = array( |
|
2886 | - 'action' => 'redirect_to_txn', |
|
2887 | - 'TXN_ID' => $transaction->ID(), |
|
2888 | - 'EVT_ID' => $this->_reg_event->ID(), |
|
2889 | - 'event_name' => urlencode($this->_reg_event->name()), |
|
2890 | - 'redirect_from' => 'new_registration', |
|
2891 | - ); |
|
2892 | - $this->_redirect_after_action(false, '', '', $query_args, true); |
|
2893 | - break; |
|
2894 | - } |
|
2895 | - //what are you looking here for? Should be nothing to do at this point. |
|
2896 | - } |
|
2897 | - |
|
2898 | - |
|
2899 | - /** |
|
2900 | - * redirect_to_txn |
|
2901 | - * |
|
2902 | - * @access public |
|
2903 | - * @return void |
|
2904 | - * @throws EE_Error |
|
2905 | - */ |
|
2906 | - public function redirect_to_txn() |
|
2907 | - { |
|
2908 | - EE_System::do_not_cache(); |
|
2909 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
2910 | - $query_args = array( |
|
2911 | - 'action' => 'view_transaction', |
|
2912 | - 'TXN_ID' => isset($this->_req_data['TXN_ID']) ? absint($this->_req_data['TXN_ID']) : 0, |
|
2913 | - 'page' => 'espresso_transactions', |
|
2914 | - ); |
|
2915 | - if (isset($this->_req_data['EVT_ID'], $this->_req_data['redirect_from'])) { |
|
2916 | - $query_args['EVT_ID'] = $this->_req_data['EVT_ID']; |
|
2917 | - $query_args['event_name'] = urlencode($this->_req_data['event_name']); |
|
2918 | - $query_args['redirect_from'] = $this->_req_data['redirect_from']; |
|
2919 | - } |
|
2920 | - EE_Error::add_success( |
|
2921 | - esc_html__( |
|
2922 | - 'Registration Created. Please review the transaction and add any payments as necessary', |
|
2923 | - 'event_espresso' |
|
2924 | - ) |
|
2925 | - ); |
|
2926 | - $this->_redirect_after_action(false, '', '', $query_args, true); |
|
2927 | - } |
|
2928 | - |
|
2929 | - |
|
2930 | - /** |
|
2931 | - * generates HTML for the Attendee Contact List |
|
2932 | - * |
|
2933 | - * @access protected |
|
2934 | - * @return void |
|
2935 | - */ |
|
2936 | - protected function _attendee_contact_list_table() |
|
2937 | - { |
|
2938 | - do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
2939 | - $this->_search_btn_label = esc_html__('Contacts', 'event_espresso'); |
|
2940 | - $this->display_admin_list_table_page_with_no_sidebar(); |
|
2941 | - } |
|
2942 | - |
|
2943 | - |
|
2944 | - /** |
|
2945 | - * get_attendees |
|
2946 | - * |
|
2947 | - * @param $per_page |
|
2948 | - * @param bool $count whether to return count or data. |
|
2949 | - * @param bool $trash |
|
2950 | - * @return array |
|
2951 | - * @throws EE_Error |
|
2952 | - * @access public |
|
2953 | - */ |
|
2954 | - public function get_attendees($per_page, $count = false, $trash = false) |
|
2955 | - { |
|
2956 | - do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
2957 | - require_once(REG_ADMIN . 'EE_Attendee_Contact_List_Table.class.php'); |
|
2958 | - $ATT_MDL = EEM_Attendee::instance(); |
|
2959 | - $this->_req_data['orderby'] = ! empty($this->_req_data['orderby']) ? $this->_req_data['orderby'] : ''; |
|
2960 | - switch ($this->_req_data['orderby']) { |
|
2961 | - case 'ATT_ID': |
|
2962 | - $orderby = 'ATT_ID'; |
|
2963 | - break; |
|
2964 | - case 'ATT_fname': |
|
2965 | - $orderby = 'ATT_fname'; |
|
2966 | - break; |
|
2967 | - case 'ATT_email': |
|
2968 | - $orderby = 'ATT_email'; |
|
2969 | - break; |
|
2970 | - case 'ATT_city': |
|
2971 | - $orderby = 'ATT_city'; |
|
2972 | - break; |
|
2973 | - case 'STA_ID': |
|
2974 | - $orderby = 'STA_ID'; |
|
2975 | - break; |
|
2976 | - case 'CNT_ID': |
|
2977 | - $orderby = 'CNT_ID'; |
|
2978 | - break; |
|
2979 | - default: |
|
2980 | - $orderby = 'ATT_lname'; |
|
2981 | - } |
|
2982 | - $sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) |
|
2983 | - ? $this->_req_data['order'] |
|
2984 | - : 'ASC'; |
|
2985 | - $current_page = isset($this->_req_data['paged']) && ! empty($this->_req_data['paged']) |
|
2986 | - ? $this->_req_data['paged'] |
|
2987 | - : 1; |
|
2988 | - $per_page = isset($per_page) && ! empty($per_page) ? $per_page : 10; |
|
2989 | - $per_page = isset($this->_req_data['perpage']) && ! empty($this->_req_data['perpage']) |
|
2990 | - ? $this->_req_data['perpage'] |
|
2991 | - : $per_page; |
|
2992 | - $_where = array(); |
|
2993 | - if ( ! empty($this->_req_data['s'])) { |
|
2994 | - $sstr = '%' . $this->_req_data['s'] . '%'; |
|
2995 | - $_where['OR'] = array( |
|
2996 | - 'Registration.Event.EVT_name' => array('LIKE', $sstr), |
|
2997 | - 'Registration.Event.EVT_desc' => array('LIKE', $sstr), |
|
2998 | - 'Registration.Event.EVT_short_desc' => array('LIKE', $sstr), |
|
2999 | - 'ATT_fname' => array('LIKE', $sstr), |
|
3000 | - 'ATT_lname' => array('LIKE', $sstr), |
|
3001 | - 'ATT_short_bio' => array('LIKE', $sstr), |
|
3002 | - 'ATT_email' => array('LIKE', $sstr), |
|
3003 | - 'ATT_address' => array('LIKE', $sstr), |
|
3004 | - 'ATT_address2' => array('LIKE', $sstr), |
|
3005 | - 'ATT_city' => array('LIKE', $sstr), |
|
3006 | - 'Country.CNT_name' => array('LIKE', $sstr), |
|
3007 | - 'State.STA_name' => array('LIKE', $sstr), |
|
3008 | - 'ATT_phone' => array('LIKE', $sstr), |
|
3009 | - 'Registration.REG_final_price' => array('LIKE', $sstr), |
|
3010 | - 'Registration.REG_code' => array('LIKE', $sstr), |
|
3011 | - 'Registration.REG_count' => array('LIKE', $sstr), |
|
3012 | - 'Registration.REG_group_size' => array('LIKE', $sstr), |
|
3013 | - ); |
|
3014 | - } |
|
3015 | - $offset = ($current_page - 1) * $per_page; |
|
3016 | - $limit = $count ? null : array($offset, $per_page); |
|
3017 | - if ($trash) { |
|
3018 | - $_where['status'] = array('!=', 'publish'); |
|
3019 | - $all_attendees = $count |
|
3020 | - ? $ATT_MDL->count(array( |
|
3021 | - $_where, |
|
3022 | - 'order_by' => array($orderby => $sort), |
|
3023 | - 'limit' => $limit, |
|
3024 | - ), 'ATT_ID', true) |
|
3025 | - : $ATT_MDL->get_all(array( |
|
3026 | - $_where, |
|
3027 | - 'order_by' => array($orderby => $sort), |
|
3028 | - 'limit' => $limit, |
|
3029 | - )); |
|
3030 | - } else { |
|
3031 | - $_where['status'] = array('IN', array('publish')); |
|
3032 | - $all_attendees = $count |
|
3033 | - ? $ATT_MDL->count(array( |
|
3034 | - $_where, |
|
3035 | - 'order_by' => array($orderby => $sort), |
|
3036 | - 'limit' => $limit, |
|
3037 | - ), 'ATT_ID', true) |
|
3038 | - : $ATT_MDL->get_all(array( |
|
3039 | - $_where, |
|
3040 | - 'order_by' => array($orderby => $sort), |
|
3041 | - 'limit' => $limit, |
|
3042 | - )); |
|
3043 | - } |
|
3044 | - return $all_attendees; |
|
3045 | - } |
|
3046 | - |
|
3047 | - |
|
3048 | - /** |
|
3049 | - * This is just taking care of resending the registration confirmation |
|
3050 | - * |
|
3051 | - * @access protected |
|
3052 | - * @return void |
|
3053 | - */ |
|
3054 | - protected function _resend_registration() |
|
3055 | - { |
|
3056 | - $this->_process_resend_registration(); |
|
3057 | - $query_args = isset($this->_req_data['redirect_to']) |
|
3058 | - ? array('action' => $this->_req_data['redirect_to'], '_REG_ID' => $this->_req_data['_REG_ID']) |
|
3059 | - : array('action' => 'default'); |
|
3060 | - $this->_redirect_after_action(false, '', '', $query_args, true); |
|
3061 | - } |
|
3062 | - |
|
3063 | - /** |
|
3064 | - * Creates a registration report, but accepts the name of a method to use for preparing the query parameters |
|
3065 | - * to use when selecting registrations |
|
3066 | - * @param string $method_name_for_getting_query_params the name of the method (on this class) to use for preparing |
|
3067 | - * the query parameters from the request |
|
3068 | - * @return void ends the request with a redirect or download |
|
3069 | - */ |
|
3070 | - public function _registrations_report_base( $method_name_for_getting_query_params ) |
|
3071 | - { |
|
3072 | - if (! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
3073 | - wp_redirect(EE_Admin_Page::add_query_args_and_nonce( |
|
3074 | - array( |
|
3075 | - 'page' => 'espresso_batch', |
|
3076 | - 'batch' => 'file', |
|
3077 | - 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
|
3078 | - 'filters' => urlencode( |
|
3079 | - serialize( |
|
3080 | - call_user_func( |
|
3081 | - array( $this, $method_name_for_getting_query_params ), |
|
3082 | - EEH_Array::is_set( |
|
3083 | - $this->_req_data, |
|
3084 | - 'filters', |
|
3085 | - array() |
|
3086 | - ) |
|
3087 | - ) |
|
3088 | - ) |
|
3089 | - ), |
|
3090 | - 'use_filters' => EEH_Array::is_set($this->_req_data, 'use_filters', false), |
|
3091 | - 'job_handler' => urlencode('EventEspressoBatchRequest\JobHandlers\RegistrationsReport'), |
|
3092 | - 'return_url' => urlencode($this->_req_data['return_url']), |
|
3093 | - ))); |
|
3094 | - } else { |
|
3095 | - $new_request_args = array( |
|
3096 | - 'export' => 'report', |
|
3097 | - 'action' => 'registrations_report_for_event', |
|
3098 | - 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
|
3099 | - ); |
|
3100 | - $this->_req_data = array_merge($this->_req_data, $new_request_args); |
|
3101 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3102 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3103 | - $EE_Export = EE_Export::instance($this->_req_data); |
|
3104 | - $EE_Export->export(); |
|
3105 | - } |
|
3106 | - } |
|
3107 | - } |
|
3108 | - |
|
3109 | - |
|
3110 | - |
|
3111 | - /** |
|
3112 | - * Creates a registration report using only query parameters in the request |
|
3113 | - * @return void |
|
3114 | - */ |
|
3115 | - public function _registrations_report() |
|
3116 | - { |
|
3117 | - $this->_registrations_report_base('_get_registration_query_parameters'); |
|
3118 | - } |
|
3119 | - |
|
3120 | - |
|
3121 | - public function _contact_list_export() |
|
3122 | - { |
|
3123 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3124 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3125 | - $EE_Export = EE_Export::instance($this->_req_data); |
|
3126 | - $EE_Export->export_attendees(); |
|
3127 | - } |
|
3128 | - } |
|
3129 | - |
|
3130 | - |
|
3131 | - public function _contact_list_report() |
|
3132 | - { |
|
3133 | - if ( ! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
3134 | - wp_redirect(EE_Admin_Page::add_query_args_and_nonce(array( |
|
3135 | - 'page' => 'espresso_batch', |
|
3136 | - 'batch' => 'file', |
|
3137 | - 'job_handler' => urlencode('EventEspressoBatchRequest\JobHandlers\AttendeesReport'), |
|
3138 | - 'return_url' => urlencode($this->_req_data['return_url']), |
|
3139 | - ))); |
|
3140 | - } else { |
|
3141 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3142 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3143 | - $EE_Export = EE_Export::instance($this->_req_data); |
|
3144 | - $EE_Export->report_attendees(); |
|
3145 | - } |
|
3146 | - } |
|
3147 | - } |
|
3148 | - |
|
3149 | - |
|
3150 | - |
|
3151 | - |
|
3152 | - |
|
3153 | - /*************************************** ATTENDEE DETAILS ***************************************/ |
|
3154 | - /** |
|
3155 | - * This duplicates the attendee object for the given incoming registration id and attendee_id. |
|
3156 | - * |
|
3157 | - * @return void |
|
3158 | - * @throws EE_Error |
|
3159 | - */ |
|
3160 | - protected function _duplicate_attendee() |
|
3161 | - { |
|
3162 | - $action = ! empty($this->_req_data['return']) ? $this->_req_data['return'] : 'default'; |
|
3163 | - //verify we have necessary info |
|
3164 | - if (empty($this->_req_data['_REG_ID'])) { |
|
3165 | - EE_Error::add_error( |
|
3166 | - esc_html__( |
|
3167 | - 'Unable to create the contact for the registration because the required parameters are not present (_REG_ID )', |
|
3168 | - 'event_espresso' |
|
3169 | - ), __FILE__, __LINE__, __FUNCTION__ |
|
3170 | - ); |
|
3171 | - $query_args = array('action' => $action); |
|
3172 | - $this->_redirect_after_action('', '', '', $query_args, true); |
|
3173 | - } |
|
3174 | - //okay necessary deets present... let's dupe the incoming attendee and attach to incoming registration. |
|
3175 | - $registration = EEM_Registration::instance()->get_one_by_ID($this->_req_data['_REG_ID']); |
|
3176 | - $attendee = $registration->attendee(); |
|
3177 | - //remove relation of existing attendee on registration |
|
3178 | - $registration->_remove_relation_to($attendee, 'Attendee'); |
|
3179 | - //new attendee |
|
3180 | - $new_attendee = clone $attendee; |
|
3181 | - $new_attendee->set('ATT_ID', 0); |
|
3182 | - $new_attendee->save(); |
|
3183 | - //add new attendee to reg |
|
3184 | - $registration->_add_relation_to($new_attendee, 'Attendee'); |
|
3185 | - EE_Error::add_success( |
|
3186 | - esc_html__( |
|
3187 | - 'New Contact record created. Now make any edits you wish to make for this contact.', |
|
3188 | - 'event_espresso' |
|
3189 | - ) |
|
3190 | - ); |
|
3191 | - //redirect to edit page for attendee |
|
3192 | - $query_args = array('post' => $new_attendee->ID(), 'action' => 'edit_attendee'); |
|
3193 | - $this->_redirect_after_action('', '', '', $query_args, true); |
|
3194 | - } |
|
3195 | - |
|
3196 | - |
|
3197 | - //related to cpt routes |
|
3198 | - protected function _insert_update_cpt_item($post_id, $post) |
|
3199 | - { |
|
3200 | - $success = true; |
|
3201 | - $attendee = EEM_Attendee::instance()->get_one_by_ID($post_id); |
|
3202 | - //for attendee updates |
|
3203 | - if ($post->post_type = 'espresso_attendees' && ! empty($attendee)) { |
|
3204 | - //note we should only be UPDATING attendees at this point. |
|
3205 | - $updated_fields = array( |
|
3206 | - 'ATT_fname' => $this->_req_data['ATT_fname'], |
|
3207 | - 'ATT_lname' => $this->_req_data['ATT_lname'], |
|
3208 | - 'ATT_full_name' => $this->_req_data['ATT_fname'] . ' ' . $this->_req_data['ATT_lname'], |
|
3209 | - 'ATT_address' => isset($this->_req_data['ATT_address']) ? $this->_req_data['ATT_address'] : '', |
|
3210 | - 'ATT_address2' => isset($this->_req_data['ATT_address2']) ? $this->_req_data['ATT_address2'] : '', |
|
3211 | - 'ATT_city' => isset($this->_req_data['ATT_city']) ? $this->_req_data['ATT_city'] : '', |
|
3212 | - 'STA_ID' => isset($this->_req_data['STA_ID']) ? $this->_req_data['STA_ID'] : '', |
|
3213 | - 'CNT_ISO' => isset($this->_req_data['CNT_ISO']) ? $this->_req_data['CNT_ISO'] : '', |
|
3214 | - 'ATT_zip' => isset($this->_req_data['ATT_zip']) ? $this->_req_data['ATT_zip'] : '', |
|
3215 | - 'ATT_email' => isset($this->_req_data['ATT_email']) ? $this->_req_data['ATT_email'] : '', |
|
3216 | - 'ATT_phone' => isset($this->_req_data['ATT_phone']) ? $this->_req_data['ATT_phone'] : '', |
|
3217 | - ); |
|
3218 | - foreach ($updated_fields as $field => $value) { |
|
3219 | - $attendee->set($field, $value); |
|
3220 | - } |
|
3221 | - $success = $attendee->save(); |
|
3222 | - $attendee_update_callbacks = apply_filters( |
|
3223 | - 'FHEE__Registrations_Admin_Page__insert_update_cpt_item__attendee_update', |
|
3224 | - array() |
|
3225 | - ); |
|
3226 | - foreach ($attendee_update_callbacks as $a_callback) { |
|
3227 | - if (false === call_user_func_array($a_callback, array($attendee, $this->_req_data))) { |
|
3228 | - throw new EE_Error( |
|
3229 | - sprintf( |
|
3230 | - esc_html__( |
|
3231 | - 'The %s callback given for the "FHEE__Registrations_Admin_Page__insert_update_cpt_item__attendee_update" filter is not a valid callback. Please check the spelling.', |
|
3232 | - 'event_espresso' |
|
3233 | - ), |
|
3234 | - $a_callback |
|
3235 | - ) |
|
3236 | - ); |
|
3237 | - } |
|
3238 | - } |
|
3239 | - } |
|
3240 | - if ($success === false) { |
|
3241 | - EE_Error::add_error( |
|
3242 | - esc_html__( |
|
3243 | - 'Something went wrong with updating the meta table data for the registration.', |
|
3244 | - 'event_espresso' |
|
3245 | - ), |
|
3246 | - __FILE__, __FUNCTION__, __LINE__ |
|
3247 | - ); |
|
3248 | - } |
|
3249 | - } |
|
3250 | - |
|
3251 | - |
|
3252 | - public function trash_cpt_item($post_id) |
|
3253 | - { |
|
3254 | - } |
|
3255 | - |
|
3256 | - |
|
3257 | - public function delete_cpt_item($post_id) |
|
3258 | - { |
|
3259 | - } |
|
3260 | - |
|
3261 | - |
|
3262 | - public function restore_cpt_item($post_id) |
|
3263 | - { |
|
3264 | - } |
|
3265 | - |
|
3266 | - |
|
3267 | - protected function _restore_cpt_item($post_id, $revision_id) |
|
3268 | - { |
|
3269 | - } |
|
3270 | - |
|
3271 | - |
|
3272 | - public function attendee_editor_metaboxes() |
|
3273 | - { |
|
3274 | - $this->verify_cpt_object(); |
|
3275 | - remove_meta_box( |
|
3276 | - 'postexcerpt', |
|
3277 | - esc_html__('Excerpt', 'event_espresso'), |
|
3278 | - 'post_excerpt_meta_box', |
|
3279 | - $this->_cpt_routes[$this->_req_action], |
|
3280 | - 'normal', |
|
3281 | - 'core' |
|
3282 | - ); |
|
3283 | - remove_meta_box('commentstatusdiv', $this->_cpt_routes[$this->_req_action], 'normal', 'core'); |
|
3284 | - if (post_type_supports('espresso_attendees', 'excerpt')) { |
|
3285 | - add_meta_box( |
|
3286 | - 'postexcerpt', |
|
3287 | - esc_html__('Short Biography', 'event_espresso'), |
|
3288 | - 'post_excerpt_meta_box', |
|
3289 | - $this->_cpt_routes[$this->_req_action], |
|
3290 | - 'normal' |
|
3291 | - ); |
|
3292 | - } |
|
3293 | - if (post_type_supports('espresso_attendees', 'comments')) { |
|
3294 | - add_meta_box( |
|
3295 | - 'commentsdiv', |
|
3296 | - esc_html__('Notes on the Contact', 'event_espresso'), |
|
3297 | - 'post_comment_meta_box', |
|
3298 | - $this->_cpt_routes[$this->_req_action], |
|
3299 | - 'normal', |
|
3300 | - 'core' |
|
3301 | - ); |
|
3302 | - } |
|
3303 | - add_meta_box( |
|
3304 | - 'attendee_contact_info', |
|
3305 | - esc_html__('Contact Info', 'event_espresso'), |
|
3306 | - array($this, 'attendee_contact_info'), |
|
3307 | - $this->_cpt_routes[$this->_req_action], |
|
3308 | - 'side', |
|
3309 | - 'core' |
|
3310 | - ); |
|
3311 | - add_meta_box( |
|
3312 | - 'attendee_details_address', |
|
3313 | - esc_html__('Address Details', 'event_espresso'), |
|
3314 | - array($this, 'attendee_address_details'), |
|
3315 | - $this->_cpt_routes[$this->_req_action], |
|
3316 | - 'normal', |
|
3317 | - 'core' |
|
3318 | - ); |
|
3319 | - add_meta_box( |
|
3320 | - 'attendee_registrations', |
|
3321 | - esc_html__('Registrations for this Contact', 'event_espresso'), |
|
3322 | - array($this, 'attendee_registrations_meta_box'), |
|
3323 | - $this->_cpt_routes[$this->_req_action], |
|
3324 | - 'normal', |
|
3325 | - 'high' |
|
3326 | - ); |
|
3327 | - } |
|
3328 | - |
|
3329 | - |
|
3330 | - /** |
|
3331 | - * Metabox for attendee contact info |
|
3332 | - * |
|
3333 | - * @param WP_Post $post wp post object |
|
3334 | - * @return string attendee contact info ( and form ) |
|
3335 | - * @throws DomainException |
|
3336 | - */ |
|
3337 | - public function attendee_contact_info($post) |
|
3338 | - { |
|
3339 | - //get attendee object ( should already have it ) |
|
3340 | - $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
3341 | - $template = REG_TEMPLATE_PATH . 'attendee_contact_info_metabox_content.template.php'; |
|
3342 | - EEH_Template::display_template($template, $this->_template_args); |
|
3343 | - } |
|
3344 | - |
|
3345 | - |
|
3346 | - /** |
|
3347 | - * Metabox for attendee details |
|
3348 | - * |
|
3349 | - * @param WP_Post $post wp post object |
|
3350 | - * @return string attendee address details (and form) |
|
3351 | - * @throws DomainException |
|
3352 | - */ |
|
3353 | - public function attendee_address_details($post) |
|
3354 | - { |
|
3355 | - //get attendee object (should already have it) |
|
3356 | - $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
3357 | - $this->_template_args['state_html'] = EEH_Form_Fields::generate_form_input( |
|
3358 | - new EE_Question_Form_Input( |
|
3359 | - EE_Question::new_instance( |
|
3360 | - array( |
|
3361 | - 'QST_ID' => 0, |
|
3362 | - 'QST_display_text' => esc_html__('State/Province', 'event_espresso'), |
|
3363 | - 'QST_system' => 'admin-state', |
|
3364 | - ) |
|
3365 | - ), |
|
3366 | - EE_Answer::new_instance( |
|
3367 | - array( |
|
3368 | - 'ANS_ID' => 0, |
|
3369 | - 'ANS_value' => $this->_cpt_model_obj->state_ID(), |
|
3370 | - ) |
|
3371 | - ), |
|
3372 | - array( |
|
3373 | - 'input_id' => 'STA_ID', |
|
3374 | - 'input_name' => 'STA_ID', |
|
3375 | - 'input_prefix' => '', |
|
3376 | - 'append_qstn_id' => false, |
|
3377 | - ) |
|
3378 | - ) |
|
3379 | - ); |
|
3380 | - $this->_template_args['country_html'] = EEH_Form_Fields::generate_form_input( |
|
3381 | - new EE_Question_Form_Input( |
|
3382 | - EE_Question::new_instance( |
|
3383 | - array( |
|
3384 | - 'QST_ID' => 0, |
|
3385 | - 'QST_display_text' => esc_html__('Country', 'event_espresso'), |
|
3386 | - 'QST_system' => 'admin-country', |
|
3387 | - ) |
|
3388 | - ), |
|
3389 | - EE_Answer::new_instance( |
|
3390 | - array( |
|
3391 | - 'ANS_ID' => 0, |
|
3392 | - 'ANS_value' => $this->_cpt_model_obj->country_ID(), |
|
3393 | - ) |
|
3394 | - ), |
|
3395 | - array( |
|
3396 | - 'input_id' => 'CNT_ISO', |
|
3397 | - 'input_name' => 'CNT_ISO', |
|
3398 | - 'input_prefix' => '', |
|
3399 | - 'append_qstn_id' => false, |
|
3400 | - ) |
|
3401 | - ) |
|
3402 | - ); |
|
3403 | - $template = |
|
3404 | - REG_TEMPLATE_PATH . 'attendee_address_details_metabox_content.template.php'; |
|
3405 | - EEH_Template::display_template($template, $this->_template_args); |
|
3406 | - } |
|
3407 | - |
|
3408 | - |
|
3409 | - /** |
|
3410 | - * _attendee_details |
|
3411 | - * |
|
3412 | - * @access protected |
|
3413 | - * @param $post |
|
3414 | - * @return void |
|
3415 | - * @throws DomainException |
|
3416 | - * @throws EE_Error |
|
3417 | - */ |
|
3418 | - public function attendee_registrations_meta_box($post) |
|
3419 | - { |
|
3420 | - $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
3421 | - $this->_template_args['registrations'] = $this->_cpt_model_obj->get_many_related('Registration'); |
|
3422 | - $template = |
|
3423 | - REG_TEMPLATE_PATH . 'attendee_registrations_main_meta_box.template.php'; |
|
3424 | - EEH_Template::display_template($template, $this->_template_args); |
|
3425 | - } |
|
3426 | - |
|
3427 | - |
|
3428 | - /** |
|
3429 | - * add in the form fields for the attendee edit |
|
3430 | - * |
|
3431 | - * @param WP_Post $post wp post object |
|
3432 | - * @return string html for new form. |
|
3433 | - * @throws DomainException |
|
3434 | - */ |
|
3435 | - public function after_title_form_fields($post) |
|
3436 | - { |
|
3437 | - if ($post->post_type == 'espresso_attendees') { |
|
3438 | - $template = REG_TEMPLATE_PATH . 'attendee_details_after_title_form_fields.template.php'; |
|
3439 | - $template_args['attendee'] = $this->_cpt_model_obj; |
|
3440 | - EEH_Template::display_template($template, $template_args); |
|
3441 | - } |
|
3442 | - } |
|
3443 | - |
|
3444 | - |
|
3445 | - /** |
|
3446 | - * _trash_or_restore_attendee |
|
3447 | - * |
|
3448 | - * @param boolean $trash - whether to move item to trash (TRUE) or restore it (FALSE) |
|
3449 | - * @return void |
|
3450 | - * @throws EE_Error |
|
3451 | - * @access protected |
|
3452 | - */ |
|
3453 | - protected function _trash_or_restore_attendees($trash = true) |
|
3454 | - { |
|
3455 | - do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
3456 | - $ATT_MDL = EEM_Attendee::instance(); |
|
3457 | - $success = 1; |
|
3458 | - //Checkboxes |
|
3459 | - if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) { |
|
3460 | - // if array has more than one element than success message should be plural |
|
3461 | - $success = count($this->_req_data['checkbox']) > 1 ? 2 : 1; |
|
3462 | - // cycle thru checkboxes |
|
3463 | - while (list($ATT_ID, $value) = each($this->_req_data['checkbox'])) { |
|
3464 | - $updated = $trash ? $ATT_MDL->update_by_ID(array('status' => 'trash'), $ATT_ID) |
|
3465 | - : $ATT_MDL->update_by_ID(array('status' => 'publish'), $ATT_ID); |
|
3466 | - if ( ! $updated) { |
|
3467 | - $success = 0; |
|
3468 | - } |
|
3469 | - } |
|
3470 | - } else { |
|
3471 | - // grab single id and delete |
|
3472 | - $ATT_ID = absint($this->_req_data['ATT_ID']); |
|
3473 | - //get attendee |
|
3474 | - $att = $ATT_MDL->get_one_by_ID($ATT_ID); |
|
3475 | - $updated = $trash ? $att->set_status('trash') : $att->set_status('publish'); |
|
3476 | - $updated = $att->save(); |
|
3477 | - if ( ! $updated) { |
|
3478 | - $success = 0; |
|
3479 | - } |
|
3480 | - } |
|
3481 | - $what = $success > 1 |
|
3482 | - ? esc_html__('Contacts', 'event_espresso') |
|
3483 | - : esc_html__('Contact', 'event_espresso'); |
|
3484 | - $action_desc = $trash |
|
3485 | - ? esc_html__('moved to the trash', 'event_espresso') |
|
3486 | - : esc_html__('restored', 'event_espresso'); |
|
3487 | - $this->_redirect_after_action($success, $what, $action_desc, array('action' => 'contact_list')); |
|
3488 | - } |
|
2702 | + } |
|
2703 | + $template_args = array( |
|
2704 | + 'title' => '', |
|
2705 | + 'content' => '', |
|
2706 | + 'step_button_text' => '', |
|
2707 | + 'show_notification_toggle' => false, |
|
2708 | + ); |
|
2709 | + //to indicate we're processing a new registration |
|
2710 | + $hidden_fields = array( |
|
2711 | + 'processing_registration' => array( |
|
2712 | + 'type' => 'hidden', |
|
2713 | + 'value' => 0, |
|
2714 | + ), |
|
2715 | + 'event_id' => array( |
|
2716 | + 'type' => 'hidden', |
|
2717 | + 'value' => $this->_reg_event->ID(), |
|
2718 | + ), |
|
2719 | + ); |
|
2720 | + //if the cart is empty then we know we're at step one so we'll display ticket selector |
|
2721 | + $cart = EE_Registry::instance()->SSN->cart(); |
|
2722 | + $step = ! $cart instanceof EE_Cart ? 'ticket' : 'questions'; |
|
2723 | + switch ($step) { |
|
2724 | + case 'ticket' : |
|
2725 | + $hidden_fields['processing_registration']['value'] = 1; |
|
2726 | + $template_args['title'] = esc_html__( |
|
2727 | + 'Step One: Select the Ticket for this registration', |
|
2728 | + 'event_espresso' |
|
2729 | + ); |
|
2730 | + $template_args['content'] = |
|
2731 | + EED_Ticket_Selector::instance()->display_ticket_selector($this->_reg_event); |
|
2732 | + $template_args['step_button_text'] = esc_html__( |
|
2733 | + 'Add Tickets and Continue to Registrant Details', |
|
2734 | + 'event_espresso' |
|
2735 | + ); |
|
2736 | + $template_args['show_notification_toggle'] = false; |
|
2737 | + break; |
|
2738 | + case 'questions' : |
|
2739 | + $hidden_fields['processing_registration']['value'] = 2; |
|
2740 | + $template_args['title'] = esc_html__( |
|
2741 | + 'Step Two: Add Registrant Details for this Registration', |
|
2742 | + 'event_espresso' |
|
2743 | + ); |
|
2744 | + //in theory we should be able to run EED_SPCO at this point because the cart should have been setup |
|
2745 | + // properly by the first process_reg_step run. |
|
2746 | + $template_args['content'] = |
|
2747 | + EED_Single_Page_Checkout::registration_checkout_for_admin(); |
|
2748 | + $template_args['step_button_text'] = esc_html__( |
|
2749 | + 'Save Registration and Continue to Details', |
|
2750 | + 'event_espresso' |
|
2751 | + ); |
|
2752 | + $template_args['show_notification_toggle'] = true; |
|
2753 | + break; |
|
2754 | + } |
|
2755 | + //we come back to the process_registration_step route. |
|
2756 | + $this->_set_add_edit_form_tags('process_reg_step', $hidden_fields); |
|
2757 | + return EEH_Template::display_template( |
|
2758 | + REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee_step_content.template.php', |
|
2759 | + $template_args, |
|
2760 | + true |
|
2761 | + ); |
|
2762 | + } |
|
2763 | + |
|
2764 | + |
|
2765 | + /** |
|
2766 | + * set_reg_event |
|
2767 | + * |
|
2768 | + * @access private |
|
2769 | + * @return bool |
|
2770 | + * @throws EE_Error |
|
2771 | + */ |
|
2772 | + private function _set_reg_event() |
|
2773 | + { |
|
2774 | + if (is_object($this->_reg_event)) { |
|
2775 | + return true; |
|
2776 | + } |
|
2777 | + $EVT_ID = (! empty($this->_req_data['event_id'])) ? absint($this->_req_data['event_id']) : false; |
|
2778 | + if ( ! $EVT_ID) { |
|
2779 | + return false; |
|
2780 | + } |
|
2781 | + $this->_reg_event = EEM_Event::instance()->get_one_by_ID($EVT_ID); |
|
2782 | + return true; |
|
2783 | + } |
|
2784 | + |
|
2785 | + |
|
2786 | + /** |
|
2787 | + * process_reg_step |
|
2788 | + * |
|
2789 | + * @access public |
|
2790 | + * @return string |
|
2791 | + * @throws DomainException |
|
2792 | + * @throws EE_Error |
|
2793 | + * @throws RuntimeException |
|
2794 | + */ |
|
2795 | + public function process_reg_step() |
|
2796 | + { |
|
2797 | + EE_System::do_not_cache(); |
|
2798 | + $this->_set_reg_event(); |
|
2799 | + EE_Registry::instance()->REQ->set_espresso_page(true); |
|
2800 | + EE_Registry::instance()->REQ->set('uts', time()); |
|
2801 | + //what step are we on? |
|
2802 | + $cart = EE_Registry::instance()->SSN->cart(); |
|
2803 | + $step = ! $cart instanceof EE_Cart ? 'ticket' : 'questions'; |
|
2804 | + //if doing ajax then we need to verify the nonce |
|
2805 | + if (defined('DOING_AJAX')) { |
|
2806 | + $nonce = isset($this->_req_data[$this->_req_nonce]) |
|
2807 | + ? sanitize_text_field($this->_req_data[$this->_req_nonce]) : ''; |
|
2808 | + $this->_verify_nonce($nonce, $this->_req_nonce); |
|
2809 | + } |
|
2810 | + switch ($step) { |
|
2811 | + case 'ticket' : |
|
2812 | + //process ticket selection |
|
2813 | + $success = EED_Ticket_Selector::instance()->process_ticket_selections(); |
|
2814 | + if ($success) { |
|
2815 | + EE_Error::add_success( |
|
2816 | + esc_html__( |
|
2817 | + 'Tickets Selected. Now complete the registration.', |
|
2818 | + 'event_espresso' |
|
2819 | + ) |
|
2820 | + ); |
|
2821 | + } else { |
|
2822 | + $query_args['step_error'] = $this->_req_data['step_error'] = true; |
|
2823 | + } |
|
2824 | + if (defined('DOING_AJAX')) { |
|
2825 | + $this->new_registration(); //display next step |
|
2826 | + } else { |
|
2827 | + $query_args = array( |
|
2828 | + 'action' => 'new_registration', |
|
2829 | + 'processing_registration' => 1, |
|
2830 | + 'event_id' => $this->_reg_event->ID(), |
|
2831 | + 'uts' => time(), |
|
2832 | + ); |
|
2833 | + $this->_redirect_after_action( |
|
2834 | + false, |
|
2835 | + '', |
|
2836 | + '', |
|
2837 | + $query_args, |
|
2838 | + true |
|
2839 | + ); |
|
2840 | + } |
|
2841 | + break; |
|
2842 | + case 'questions' : |
|
2843 | + if (! isset( |
|
2844 | + $this->_req_data['txn_reg_status_change'], |
|
2845 | + $this->_req_data['txn_reg_status_change']['send_notifications']) |
|
2846 | + ) { |
|
2847 | + add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_false', 15); |
|
2848 | + } |
|
2849 | + //process registration |
|
2850 | + $transaction = EED_Single_Page_Checkout::instance()->process_registration_from_admin(); |
|
2851 | + if ($cart instanceof EE_Cart) { |
|
2852 | + $grand_total = $cart->get_cart_grand_total(); |
|
2853 | + if ($grand_total instanceof EE_Line_Item) { |
|
2854 | + $grand_total->save_this_and_descendants_to_txn(); |
|
2855 | + } |
|
2856 | + } |
|
2857 | + if ( ! $transaction instanceof EE_Transaction) { |
|
2858 | + $query_args = array( |
|
2859 | + 'action' => 'new_registration', |
|
2860 | + 'processing_registration' => 2, |
|
2861 | + 'event_id' => $this->_reg_event->ID(), |
|
2862 | + 'uts' => time(), |
|
2863 | + ); |
|
2864 | + if (defined('DOING_AJAX')) { |
|
2865 | + //display registration form again because there are errors (maybe validation?) |
|
2866 | + $this->new_registration(); |
|
2867 | + return; |
|
2868 | + } else { |
|
2869 | + $this->_redirect_after_action( |
|
2870 | + false, |
|
2871 | + '', |
|
2872 | + '', |
|
2873 | + $query_args, |
|
2874 | + true |
|
2875 | + ); |
|
2876 | + return; |
|
2877 | + } |
|
2878 | + } |
|
2879 | + // maybe update status, and make sure to save transaction if not done already |
|
2880 | + if ( ! $transaction->update_status_based_on_total_paid()) { |
|
2881 | + $transaction->save(); |
|
2882 | + } |
|
2883 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
2884 | + $this->_req_data = array(); |
|
2885 | + $query_args = array( |
|
2886 | + 'action' => 'redirect_to_txn', |
|
2887 | + 'TXN_ID' => $transaction->ID(), |
|
2888 | + 'EVT_ID' => $this->_reg_event->ID(), |
|
2889 | + 'event_name' => urlencode($this->_reg_event->name()), |
|
2890 | + 'redirect_from' => 'new_registration', |
|
2891 | + ); |
|
2892 | + $this->_redirect_after_action(false, '', '', $query_args, true); |
|
2893 | + break; |
|
2894 | + } |
|
2895 | + //what are you looking here for? Should be nothing to do at this point. |
|
2896 | + } |
|
2897 | + |
|
2898 | + |
|
2899 | + /** |
|
2900 | + * redirect_to_txn |
|
2901 | + * |
|
2902 | + * @access public |
|
2903 | + * @return void |
|
2904 | + * @throws EE_Error |
|
2905 | + */ |
|
2906 | + public function redirect_to_txn() |
|
2907 | + { |
|
2908 | + EE_System::do_not_cache(); |
|
2909 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
2910 | + $query_args = array( |
|
2911 | + 'action' => 'view_transaction', |
|
2912 | + 'TXN_ID' => isset($this->_req_data['TXN_ID']) ? absint($this->_req_data['TXN_ID']) : 0, |
|
2913 | + 'page' => 'espresso_transactions', |
|
2914 | + ); |
|
2915 | + if (isset($this->_req_data['EVT_ID'], $this->_req_data['redirect_from'])) { |
|
2916 | + $query_args['EVT_ID'] = $this->_req_data['EVT_ID']; |
|
2917 | + $query_args['event_name'] = urlencode($this->_req_data['event_name']); |
|
2918 | + $query_args['redirect_from'] = $this->_req_data['redirect_from']; |
|
2919 | + } |
|
2920 | + EE_Error::add_success( |
|
2921 | + esc_html__( |
|
2922 | + 'Registration Created. Please review the transaction and add any payments as necessary', |
|
2923 | + 'event_espresso' |
|
2924 | + ) |
|
2925 | + ); |
|
2926 | + $this->_redirect_after_action(false, '', '', $query_args, true); |
|
2927 | + } |
|
2928 | + |
|
2929 | + |
|
2930 | + /** |
|
2931 | + * generates HTML for the Attendee Contact List |
|
2932 | + * |
|
2933 | + * @access protected |
|
2934 | + * @return void |
|
2935 | + */ |
|
2936 | + protected function _attendee_contact_list_table() |
|
2937 | + { |
|
2938 | + do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
2939 | + $this->_search_btn_label = esc_html__('Contacts', 'event_espresso'); |
|
2940 | + $this->display_admin_list_table_page_with_no_sidebar(); |
|
2941 | + } |
|
2942 | + |
|
2943 | + |
|
2944 | + /** |
|
2945 | + * get_attendees |
|
2946 | + * |
|
2947 | + * @param $per_page |
|
2948 | + * @param bool $count whether to return count or data. |
|
2949 | + * @param bool $trash |
|
2950 | + * @return array |
|
2951 | + * @throws EE_Error |
|
2952 | + * @access public |
|
2953 | + */ |
|
2954 | + public function get_attendees($per_page, $count = false, $trash = false) |
|
2955 | + { |
|
2956 | + do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
2957 | + require_once(REG_ADMIN . 'EE_Attendee_Contact_List_Table.class.php'); |
|
2958 | + $ATT_MDL = EEM_Attendee::instance(); |
|
2959 | + $this->_req_data['orderby'] = ! empty($this->_req_data['orderby']) ? $this->_req_data['orderby'] : ''; |
|
2960 | + switch ($this->_req_data['orderby']) { |
|
2961 | + case 'ATT_ID': |
|
2962 | + $orderby = 'ATT_ID'; |
|
2963 | + break; |
|
2964 | + case 'ATT_fname': |
|
2965 | + $orderby = 'ATT_fname'; |
|
2966 | + break; |
|
2967 | + case 'ATT_email': |
|
2968 | + $orderby = 'ATT_email'; |
|
2969 | + break; |
|
2970 | + case 'ATT_city': |
|
2971 | + $orderby = 'ATT_city'; |
|
2972 | + break; |
|
2973 | + case 'STA_ID': |
|
2974 | + $orderby = 'STA_ID'; |
|
2975 | + break; |
|
2976 | + case 'CNT_ID': |
|
2977 | + $orderby = 'CNT_ID'; |
|
2978 | + break; |
|
2979 | + default: |
|
2980 | + $orderby = 'ATT_lname'; |
|
2981 | + } |
|
2982 | + $sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) |
|
2983 | + ? $this->_req_data['order'] |
|
2984 | + : 'ASC'; |
|
2985 | + $current_page = isset($this->_req_data['paged']) && ! empty($this->_req_data['paged']) |
|
2986 | + ? $this->_req_data['paged'] |
|
2987 | + : 1; |
|
2988 | + $per_page = isset($per_page) && ! empty($per_page) ? $per_page : 10; |
|
2989 | + $per_page = isset($this->_req_data['perpage']) && ! empty($this->_req_data['perpage']) |
|
2990 | + ? $this->_req_data['perpage'] |
|
2991 | + : $per_page; |
|
2992 | + $_where = array(); |
|
2993 | + if ( ! empty($this->_req_data['s'])) { |
|
2994 | + $sstr = '%' . $this->_req_data['s'] . '%'; |
|
2995 | + $_where['OR'] = array( |
|
2996 | + 'Registration.Event.EVT_name' => array('LIKE', $sstr), |
|
2997 | + 'Registration.Event.EVT_desc' => array('LIKE', $sstr), |
|
2998 | + 'Registration.Event.EVT_short_desc' => array('LIKE', $sstr), |
|
2999 | + 'ATT_fname' => array('LIKE', $sstr), |
|
3000 | + 'ATT_lname' => array('LIKE', $sstr), |
|
3001 | + 'ATT_short_bio' => array('LIKE', $sstr), |
|
3002 | + 'ATT_email' => array('LIKE', $sstr), |
|
3003 | + 'ATT_address' => array('LIKE', $sstr), |
|
3004 | + 'ATT_address2' => array('LIKE', $sstr), |
|
3005 | + 'ATT_city' => array('LIKE', $sstr), |
|
3006 | + 'Country.CNT_name' => array('LIKE', $sstr), |
|
3007 | + 'State.STA_name' => array('LIKE', $sstr), |
|
3008 | + 'ATT_phone' => array('LIKE', $sstr), |
|
3009 | + 'Registration.REG_final_price' => array('LIKE', $sstr), |
|
3010 | + 'Registration.REG_code' => array('LIKE', $sstr), |
|
3011 | + 'Registration.REG_count' => array('LIKE', $sstr), |
|
3012 | + 'Registration.REG_group_size' => array('LIKE', $sstr), |
|
3013 | + ); |
|
3014 | + } |
|
3015 | + $offset = ($current_page - 1) * $per_page; |
|
3016 | + $limit = $count ? null : array($offset, $per_page); |
|
3017 | + if ($trash) { |
|
3018 | + $_where['status'] = array('!=', 'publish'); |
|
3019 | + $all_attendees = $count |
|
3020 | + ? $ATT_MDL->count(array( |
|
3021 | + $_where, |
|
3022 | + 'order_by' => array($orderby => $sort), |
|
3023 | + 'limit' => $limit, |
|
3024 | + ), 'ATT_ID', true) |
|
3025 | + : $ATT_MDL->get_all(array( |
|
3026 | + $_where, |
|
3027 | + 'order_by' => array($orderby => $sort), |
|
3028 | + 'limit' => $limit, |
|
3029 | + )); |
|
3030 | + } else { |
|
3031 | + $_where['status'] = array('IN', array('publish')); |
|
3032 | + $all_attendees = $count |
|
3033 | + ? $ATT_MDL->count(array( |
|
3034 | + $_where, |
|
3035 | + 'order_by' => array($orderby => $sort), |
|
3036 | + 'limit' => $limit, |
|
3037 | + ), 'ATT_ID', true) |
|
3038 | + : $ATT_MDL->get_all(array( |
|
3039 | + $_where, |
|
3040 | + 'order_by' => array($orderby => $sort), |
|
3041 | + 'limit' => $limit, |
|
3042 | + )); |
|
3043 | + } |
|
3044 | + return $all_attendees; |
|
3045 | + } |
|
3046 | + |
|
3047 | + |
|
3048 | + /** |
|
3049 | + * This is just taking care of resending the registration confirmation |
|
3050 | + * |
|
3051 | + * @access protected |
|
3052 | + * @return void |
|
3053 | + */ |
|
3054 | + protected function _resend_registration() |
|
3055 | + { |
|
3056 | + $this->_process_resend_registration(); |
|
3057 | + $query_args = isset($this->_req_data['redirect_to']) |
|
3058 | + ? array('action' => $this->_req_data['redirect_to'], '_REG_ID' => $this->_req_data['_REG_ID']) |
|
3059 | + : array('action' => 'default'); |
|
3060 | + $this->_redirect_after_action(false, '', '', $query_args, true); |
|
3061 | + } |
|
3062 | + |
|
3063 | + /** |
|
3064 | + * Creates a registration report, but accepts the name of a method to use for preparing the query parameters |
|
3065 | + * to use when selecting registrations |
|
3066 | + * @param string $method_name_for_getting_query_params the name of the method (on this class) to use for preparing |
|
3067 | + * the query parameters from the request |
|
3068 | + * @return void ends the request with a redirect or download |
|
3069 | + */ |
|
3070 | + public function _registrations_report_base( $method_name_for_getting_query_params ) |
|
3071 | + { |
|
3072 | + if (! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
3073 | + wp_redirect(EE_Admin_Page::add_query_args_and_nonce( |
|
3074 | + array( |
|
3075 | + 'page' => 'espresso_batch', |
|
3076 | + 'batch' => 'file', |
|
3077 | + 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
|
3078 | + 'filters' => urlencode( |
|
3079 | + serialize( |
|
3080 | + call_user_func( |
|
3081 | + array( $this, $method_name_for_getting_query_params ), |
|
3082 | + EEH_Array::is_set( |
|
3083 | + $this->_req_data, |
|
3084 | + 'filters', |
|
3085 | + array() |
|
3086 | + ) |
|
3087 | + ) |
|
3088 | + ) |
|
3089 | + ), |
|
3090 | + 'use_filters' => EEH_Array::is_set($this->_req_data, 'use_filters', false), |
|
3091 | + 'job_handler' => urlencode('EventEspressoBatchRequest\JobHandlers\RegistrationsReport'), |
|
3092 | + 'return_url' => urlencode($this->_req_data['return_url']), |
|
3093 | + ))); |
|
3094 | + } else { |
|
3095 | + $new_request_args = array( |
|
3096 | + 'export' => 'report', |
|
3097 | + 'action' => 'registrations_report_for_event', |
|
3098 | + 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
|
3099 | + ); |
|
3100 | + $this->_req_data = array_merge($this->_req_data, $new_request_args); |
|
3101 | + if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3102 | + require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3103 | + $EE_Export = EE_Export::instance($this->_req_data); |
|
3104 | + $EE_Export->export(); |
|
3105 | + } |
|
3106 | + } |
|
3107 | + } |
|
3108 | + |
|
3109 | + |
|
3110 | + |
|
3111 | + /** |
|
3112 | + * Creates a registration report using only query parameters in the request |
|
3113 | + * @return void |
|
3114 | + */ |
|
3115 | + public function _registrations_report() |
|
3116 | + { |
|
3117 | + $this->_registrations_report_base('_get_registration_query_parameters'); |
|
3118 | + } |
|
3119 | + |
|
3120 | + |
|
3121 | + public function _contact_list_export() |
|
3122 | + { |
|
3123 | + if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3124 | + require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3125 | + $EE_Export = EE_Export::instance($this->_req_data); |
|
3126 | + $EE_Export->export_attendees(); |
|
3127 | + } |
|
3128 | + } |
|
3129 | + |
|
3130 | + |
|
3131 | + public function _contact_list_report() |
|
3132 | + { |
|
3133 | + if ( ! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
3134 | + wp_redirect(EE_Admin_Page::add_query_args_and_nonce(array( |
|
3135 | + 'page' => 'espresso_batch', |
|
3136 | + 'batch' => 'file', |
|
3137 | + 'job_handler' => urlencode('EventEspressoBatchRequest\JobHandlers\AttendeesReport'), |
|
3138 | + 'return_url' => urlencode($this->_req_data['return_url']), |
|
3139 | + ))); |
|
3140 | + } else { |
|
3141 | + if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
3142 | + require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
3143 | + $EE_Export = EE_Export::instance($this->_req_data); |
|
3144 | + $EE_Export->report_attendees(); |
|
3145 | + } |
|
3146 | + } |
|
3147 | + } |
|
3148 | + |
|
3149 | + |
|
3150 | + |
|
3151 | + |
|
3152 | + |
|
3153 | + /*************************************** ATTENDEE DETAILS ***************************************/ |
|
3154 | + /** |
|
3155 | + * This duplicates the attendee object for the given incoming registration id and attendee_id. |
|
3156 | + * |
|
3157 | + * @return void |
|
3158 | + * @throws EE_Error |
|
3159 | + */ |
|
3160 | + protected function _duplicate_attendee() |
|
3161 | + { |
|
3162 | + $action = ! empty($this->_req_data['return']) ? $this->_req_data['return'] : 'default'; |
|
3163 | + //verify we have necessary info |
|
3164 | + if (empty($this->_req_data['_REG_ID'])) { |
|
3165 | + EE_Error::add_error( |
|
3166 | + esc_html__( |
|
3167 | + 'Unable to create the contact for the registration because the required parameters are not present (_REG_ID )', |
|
3168 | + 'event_espresso' |
|
3169 | + ), __FILE__, __LINE__, __FUNCTION__ |
|
3170 | + ); |
|
3171 | + $query_args = array('action' => $action); |
|
3172 | + $this->_redirect_after_action('', '', '', $query_args, true); |
|
3173 | + } |
|
3174 | + //okay necessary deets present... let's dupe the incoming attendee and attach to incoming registration. |
|
3175 | + $registration = EEM_Registration::instance()->get_one_by_ID($this->_req_data['_REG_ID']); |
|
3176 | + $attendee = $registration->attendee(); |
|
3177 | + //remove relation of existing attendee on registration |
|
3178 | + $registration->_remove_relation_to($attendee, 'Attendee'); |
|
3179 | + //new attendee |
|
3180 | + $new_attendee = clone $attendee; |
|
3181 | + $new_attendee->set('ATT_ID', 0); |
|
3182 | + $new_attendee->save(); |
|
3183 | + //add new attendee to reg |
|
3184 | + $registration->_add_relation_to($new_attendee, 'Attendee'); |
|
3185 | + EE_Error::add_success( |
|
3186 | + esc_html__( |
|
3187 | + 'New Contact record created. Now make any edits you wish to make for this contact.', |
|
3188 | + 'event_espresso' |
|
3189 | + ) |
|
3190 | + ); |
|
3191 | + //redirect to edit page for attendee |
|
3192 | + $query_args = array('post' => $new_attendee->ID(), 'action' => 'edit_attendee'); |
|
3193 | + $this->_redirect_after_action('', '', '', $query_args, true); |
|
3194 | + } |
|
3195 | + |
|
3196 | + |
|
3197 | + //related to cpt routes |
|
3198 | + protected function _insert_update_cpt_item($post_id, $post) |
|
3199 | + { |
|
3200 | + $success = true; |
|
3201 | + $attendee = EEM_Attendee::instance()->get_one_by_ID($post_id); |
|
3202 | + //for attendee updates |
|
3203 | + if ($post->post_type = 'espresso_attendees' && ! empty($attendee)) { |
|
3204 | + //note we should only be UPDATING attendees at this point. |
|
3205 | + $updated_fields = array( |
|
3206 | + 'ATT_fname' => $this->_req_data['ATT_fname'], |
|
3207 | + 'ATT_lname' => $this->_req_data['ATT_lname'], |
|
3208 | + 'ATT_full_name' => $this->_req_data['ATT_fname'] . ' ' . $this->_req_data['ATT_lname'], |
|
3209 | + 'ATT_address' => isset($this->_req_data['ATT_address']) ? $this->_req_data['ATT_address'] : '', |
|
3210 | + 'ATT_address2' => isset($this->_req_data['ATT_address2']) ? $this->_req_data['ATT_address2'] : '', |
|
3211 | + 'ATT_city' => isset($this->_req_data['ATT_city']) ? $this->_req_data['ATT_city'] : '', |
|
3212 | + 'STA_ID' => isset($this->_req_data['STA_ID']) ? $this->_req_data['STA_ID'] : '', |
|
3213 | + 'CNT_ISO' => isset($this->_req_data['CNT_ISO']) ? $this->_req_data['CNT_ISO'] : '', |
|
3214 | + 'ATT_zip' => isset($this->_req_data['ATT_zip']) ? $this->_req_data['ATT_zip'] : '', |
|
3215 | + 'ATT_email' => isset($this->_req_data['ATT_email']) ? $this->_req_data['ATT_email'] : '', |
|
3216 | + 'ATT_phone' => isset($this->_req_data['ATT_phone']) ? $this->_req_data['ATT_phone'] : '', |
|
3217 | + ); |
|
3218 | + foreach ($updated_fields as $field => $value) { |
|
3219 | + $attendee->set($field, $value); |
|
3220 | + } |
|
3221 | + $success = $attendee->save(); |
|
3222 | + $attendee_update_callbacks = apply_filters( |
|
3223 | + 'FHEE__Registrations_Admin_Page__insert_update_cpt_item__attendee_update', |
|
3224 | + array() |
|
3225 | + ); |
|
3226 | + foreach ($attendee_update_callbacks as $a_callback) { |
|
3227 | + if (false === call_user_func_array($a_callback, array($attendee, $this->_req_data))) { |
|
3228 | + throw new EE_Error( |
|
3229 | + sprintf( |
|
3230 | + esc_html__( |
|
3231 | + 'The %s callback given for the "FHEE__Registrations_Admin_Page__insert_update_cpt_item__attendee_update" filter is not a valid callback. Please check the spelling.', |
|
3232 | + 'event_espresso' |
|
3233 | + ), |
|
3234 | + $a_callback |
|
3235 | + ) |
|
3236 | + ); |
|
3237 | + } |
|
3238 | + } |
|
3239 | + } |
|
3240 | + if ($success === false) { |
|
3241 | + EE_Error::add_error( |
|
3242 | + esc_html__( |
|
3243 | + 'Something went wrong with updating the meta table data for the registration.', |
|
3244 | + 'event_espresso' |
|
3245 | + ), |
|
3246 | + __FILE__, __FUNCTION__, __LINE__ |
|
3247 | + ); |
|
3248 | + } |
|
3249 | + } |
|
3250 | + |
|
3251 | + |
|
3252 | + public function trash_cpt_item($post_id) |
|
3253 | + { |
|
3254 | + } |
|
3255 | + |
|
3256 | + |
|
3257 | + public function delete_cpt_item($post_id) |
|
3258 | + { |
|
3259 | + } |
|
3260 | + |
|
3261 | + |
|
3262 | + public function restore_cpt_item($post_id) |
|
3263 | + { |
|
3264 | + } |
|
3265 | + |
|
3266 | + |
|
3267 | + protected function _restore_cpt_item($post_id, $revision_id) |
|
3268 | + { |
|
3269 | + } |
|
3270 | + |
|
3271 | + |
|
3272 | + public function attendee_editor_metaboxes() |
|
3273 | + { |
|
3274 | + $this->verify_cpt_object(); |
|
3275 | + remove_meta_box( |
|
3276 | + 'postexcerpt', |
|
3277 | + esc_html__('Excerpt', 'event_espresso'), |
|
3278 | + 'post_excerpt_meta_box', |
|
3279 | + $this->_cpt_routes[$this->_req_action], |
|
3280 | + 'normal', |
|
3281 | + 'core' |
|
3282 | + ); |
|
3283 | + remove_meta_box('commentstatusdiv', $this->_cpt_routes[$this->_req_action], 'normal', 'core'); |
|
3284 | + if (post_type_supports('espresso_attendees', 'excerpt')) { |
|
3285 | + add_meta_box( |
|
3286 | + 'postexcerpt', |
|
3287 | + esc_html__('Short Biography', 'event_espresso'), |
|
3288 | + 'post_excerpt_meta_box', |
|
3289 | + $this->_cpt_routes[$this->_req_action], |
|
3290 | + 'normal' |
|
3291 | + ); |
|
3292 | + } |
|
3293 | + if (post_type_supports('espresso_attendees', 'comments')) { |
|
3294 | + add_meta_box( |
|
3295 | + 'commentsdiv', |
|
3296 | + esc_html__('Notes on the Contact', 'event_espresso'), |
|
3297 | + 'post_comment_meta_box', |
|
3298 | + $this->_cpt_routes[$this->_req_action], |
|
3299 | + 'normal', |
|
3300 | + 'core' |
|
3301 | + ); |
|
3302 | + } |
|
3303 | + add_meta_box( |
|
3304 | + 'attendee_contact_info', |
|
3305 | + esc_html__('Contact Info', 'event_espresso'), |
|
3306 | + array($this, 'attendee_contact_info'), |
|
3307 | + $this->_cpt_routes[$this->_req_action], |
|
3308 | + 'side', |
|
3309 | + 'core' |
|
3310 | + ); |
|
3311 | + add_meta_box( |
|
3312 | + 'attendee_details_address', |
|
3313 | + esc_html__('Address Details', 'event_espresso'), |
|
3314 | + array($this, 'attendee_address_details'), |
|
3315 | + $this->_cpt_routes[$this->_req_action], |
|
3316 | + 'normal', |
|
3317 | + 'core' |
|
3318 | + ); |
|
3319 | + add_meta_box( |
|
3320 | + 'attendee_registrations', |
|
3321 | + esc_html__('Registrations for this Contact', 'event_espresso'), |
|
3322 | + array($this, 'attendee_registrations_meta_box'), |
|
3323 | + $this->_cpt_routes[$this->_req_action], |
|
3324 | + 'normal', |
|
3325 | + 'high' |
|
3326 | + ); |
|
3327 | + } |
|
3328 | + |
|
3329 | + |
|
3330 | + /** |
|
3331 | + * Metabox for attendee contact info |
|
3332 | + * |
|
3333 | + * @param WP_Post $post wp post object |
|
3334 | + * @return string attendee contact info ( and form ) |
|
3335 | + * @throws DomainException |
|
3336 | + */ |
|
3337 | + public function attendee_contact_info($post) |
|
3338 | + { |
|
3339 | + //get attendee object ( should already have it ) |
|
3340 | + $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
3341 | + $template = REG_TEMPLATE_PATH . 'attendee_contact_info_metabox_content.template.php'; |
|
3342 | + EEH_Template::display_template($template, $this->_template_args); |
|
3343 | + } |
|
3344 | + |
|
3345 | + |
|
3346 | + /** |
|
3347 | + * Metabox for attendee details |
|
3348 | + * |
|
3349 | + * @param WP_Post $post wp post object |
|
3350 | + * @return string attendee address details (and form) |
|
3351 | + * @throws DomainException |
|
3352 | + */ |
|
3353 | + public function attendee_address_details($post) |
|
3354 | + { |
|
3355 | + //get attendee object (should already have it) |
|
3356 | + $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
3357 | + $this->_template_args['state_html'] = EEH_Form_Fields::generate_form_input( |
|
3358 | + new EE_Question_Form_Input( |
|
3359 | + EE_Question::new_instance( |
|
3360 | + array( |
|
3361 | + 'QST_ID' => 0, |
|
3362 | + 'QST_display_text' => esc_html__('State/Province', 'event_espresso'), |
|
3363 | + 'QST_system' => 'admin-state', |
|
3364 | + ) |
|
3365 | + ), |
|
3366 | + EE_Answer::new_instance( |
|
3367 | + array( |
|
3368 | + 'ANS_ID' => 0, |
|
3369 | + 'ANS_value' => $this->_cpt_model_obj->state_ID(), |
|
3370 | + ) |
|
3371 | + ), |
|
3372 | + array( |
|
3373 | + 'input_id' => 'STA_ID', |
|
3374 | + 'input_name' => 'STA_ID', |
|
3375 | + 'input_prefix' => '', |
|
3376 | + 'append_qstn_id' => false, |
|
3377 | + ) |
|
3378 | + ) |
|
3379 | + ); |
|
3380 | + $this->_template_args['country_html'] = EEH_Form_Fields::generate_form_input( |
|
3381 | + new EE_Question_Form_Input( |
|
3382 | + EE_Question::new_instance( |
|
3383 | + array( |
|
3384 | + 'QST_ID' => 0, |
|
3385 | + 'QST_display_text' => esc_html__('Country', 'event_espresso'), |
|
3386 | + 'QST_system' => 'admin-country', |
|
3387 | + ) |
|
3388 | + ), |
|
3389 | + EE_Answer::new_instance( |
|
3390 | + array( |
|
3391 | + 'ANS_ID' => 0, |
|
3392 | + 'ANS_value' => $this->_cpt_model_obj->country_ID(), |
|
3393 | + ) |
|
3394 | + ), |
|
3395 | + array( |
|
3396 | + 'input_id' => 'CNT_ISO', |
|
3397 | + 'input_name' => 'CNT_ISO', |
|
3398 | + 'input_prefix' => '', |
|
3399 | + 'append_qstn_id' => false, |
|
3400 | + ) |
|
3401 | + ) |
|
3402 | + ); |
|
3403 | + $template = |
|
3404 | + REG_TEMPLATE_PATH . 'attendee_address_details_metabox_content.template.php'; |
|
3405 | + EEH_Template::display_template($template, $this->_template_args); |
|
3406 | + } |
|
3407 | + |
|
3408 | + |
|
3409 | + /** |
|
3410 | + * _attendee_details |
|
3411 | + * |
|
3412 | + * @access protected |
|
3413 | + * @param $post |
|
3414 | + * @return void |
|
3415 | + * @throws DomainException |
|
3416 | + * @throws EE_Error |
|
3417 | + */ |
|
3418 | + public function attendee_registrations_meta_box($post) |
|
3419 | + { |
|
3420 | + $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
3421 | + $this->_template_args['registrations'] = $this->_cpt_model_obj->get_many_related('Registration'); |
|
3422 | + $template = |
|
3423 | + REG_TEMPLATE_PATH . 'attendee_registrations_main_meta_box.template.php'; |
|
3424 | + EEH_Template::display_template($template, $this->_template_args); |
|
3425 | + } |
|
3426 | + |
|
3427 | + |
|
3428 | + /** |
|
3429 | + * add in the form fields for the attendee edit |
|
3430 | + * |
|
3431 | + * @param WP_Post $post wp post object |
|
3432 | + * @return string html for new form. |
|
3433 | + * @throws DomainException |
|
3434 | + */ |
|
3435 | + public function after_title_form_fields($post) |
|
3436 | + { |
|
3437 | + if ($post->post_type == 'espresso_attendees') { |
|
3438 | + $template = REG_TEMPLATE_PATH . 'attendee_details_after_title_form_fields.template.php'; |
|
3439 | + $template_args['attendee'] = $this->_cpt_model_obj; |
|
3440 | + EEH_Template::display_template($template, $template_args); |
|
3441 | + } |
|
3442 | + } |
|
3443 | + |
|
3444 | + |
|
3445 | + /** |
|
3446 | + * _trash_or_restore_attendee |
|
3447 | + * |
|
3448 | + * @param boolean $trash - whether to move item to trash (TRUE) or restore it (FALSE) |
|
3449 | + * @return void |
|
3450 | + * @throws EE_Error |
|
3451 | + * @access protected |
|
3452 | + */ |
|
3453 | + protected function _trash_or_restore_attendees($trash = true) |
|
3454 | + { |
|
3455 | + do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
3456 | + $ATT_MDL = EEM_Attendee::instance(); |
|
3457 | + $success = 1; |
|
3458 | + //Checkboxes |
|
3459 | + if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) { |
|
3460 | + // if array has more than one element than success message should be plural |
|
3461 | + $success = count($this->_req_data['checkbox']) > 1 ? 2 : 1; |
|
3462 | + // cycle thru checkboxes |
|
3463 | + while (list($ATT_ID, $value) = each($this->_req_data['checkbox'])) { |
|
3464 | + $updated = $trash ? $ATT_MDL->update_by_ID(array('status' => 'trash'), $ATT_ID) |
|
3465 | + : $ATT_MDL->update_by_ID(array('status' => 'publish'), $ATT_ID); |
|
3466 | + if ( ! $updated) { |
|
3467 | + $success = 0; |
|
3468 | + } |
|
3469 | + } |
|
3470 | + } else { |
|
3471 | + // grab single id and delete |
|
3472 | + $ATT_ID = absint($this->_req_data['ATT_ID']); |
|
3473 | + //get attendee |
|
3474 | + $att = $ATT_MDL->get_one_by_ID($ATT_ID); |
|
3475 | + $updated = $trash ? $att->set_status('trash') : $att->set_status('publish'); |
|
3476 | + $updated = $att->save(); |
|
3477 | + if ( ! $updated) { |
|
3478 | + $success = 0; |
|
3479 | + } |
|
3480 | + } |
|
3481 | + $what = $success > 1 |
|
3482 | + ? esc_html__('Contacts', 'event_espresso') |
|
3483 | + : esc_html__('Contact', 'event_espresso'); |
|
3484 | + $action_desc = $trash |
|
3485 | + ? esc_html__('moved to the trash', 'event_espresso') |
|
3486 | + : esc_html__('restored', 'event_espresso'); |
|
3487 | + $this->_redirect_after_action($success, $what, $action_desc, array('action' => 'contact_list')); |
|
3488 | + } |
|
3489 | 3489 | |
3490 | 3490 | } |
@@ -28,245 +28,245 @@ |
||
28 | 28 | class EspressoEventAttendees extends EspressoShortcode |
29 | 29 | { |
30 | 30 | |
31 | - private $query_params = array( |
|
32 | - 0 => array() |
|
33 | - ); |
|
34 | - |
|
35 | - private $template_args = array( |
|
36 | - 'contacts' => array(), |
|
37 | - 'event' => null, |
|
38 | - 'datetime' => null, |
|
39 | - 'ticket' => null, |
|
40 | - ); |
|
41 | - |
|
42 | - /** |
|
43 | - * the actual shortcode tag that gets registered with WordPress |
|
44 | - * |
|
45 | - * @return string |
|
46 | - */ |
|
47 | - public function getTag() |
|
48 | - { |
|
49 | - return 'ESPRESSO_EVENT_ATTENDEES'; |
|
50 | - } |
|
51 | - |
|
52 | - |
|
53 | - |
|
54 | - /** |
|
55 | - * the time in seconds to cache the results of the processShortcode() method |
|
56 | - * 0 means the processShortcode() results will NOT be cached at all |
|
57 | - * |
|
58 | - * @return int |
|
59 | - */ |
|
60 | - public function cacheExpiration() |
|
61 | - { |
|
62 | - return 0; |
|
63 | - } |
|
64 | - |
|
65 | - |
|
66 | - |
|
67 | - /** |
|
68 | - * a place for adding any initialization code that needs to run prior to wp_header(). |
|
69 | - * this may be required for shortcodes that utilize a corresponding module, |
|
70 | - * and need to enqueue assets for that module |
|
71 | - * |
|
72 | - * @return void |
|
73 | - */ |
|
74 | - public function initializeShortcode() |
|
75 | - { |
|
76 | - $this->shortcodeHasBeenInitialized(); |
|
77 | - } |
|
78 | - |
|
79 | - |
|
80 | - |
|
81 | - /** |
|
82 | - * process_shortcode - ESPRESSO_EVENT_ATTENDEES - Returns a list of attendees to an event. |
|
83 | - * [ESPRESSO_EVENT_ATTENDEES] - defaults to attendees for earliest active event, or earliest upcoming event. |
|
84 | - * [ESPRESSO_EVENT_ATTENDEES event_id=123] - attendees for specific event. |
|
85 | - * [ESPRESSO_EVENT_ATTENDEES datetime_id=245] - attendees for a specific datetime. |
|
86 | - * [ESPRESSO_EVENT_ATTENDEES ticket_id=123] - attendees for a specific ticket. |
|
87 | - * [ESPRESSO_EVENT_ATTENDEES status=all] - specific registration status (use status id) or all for all attendees |
|
88 | - * regardless of status. Note default is to only return approved attendees |
|
89 | - * [ESPRESSO_EVENT_ATTENDEES show_gravatar=true] - default is to not return gravatar. Otherwise if this is set |
|
90 | - * then return gravatar for email address given. |
|
91 | - * Note: because of the relationship between event_id, ticket_id, and datetime_id. |
|
92 | - * If more than one of those params is included then preference is given to the following: |
|
93 | - * - event_id is used whenever its present and any others are ignored. |
|
94 | - * - if no event_id then datetime is used whenever its present and any others are ignored. |
|
95 | - * - otherwise ticket_id is used if present. |
|
96 | - * |
|
97 | - * @param array $attributes |
|
98 | - * @return string |
|
99 | - * @throws \EE_Error |
|
100 | - */ |
|
101 | - public function processShortcode($attributes = array()) |
|
102 | - { |
|
103 | - // grab attributes and merge with defaults |
|
104 | - $attributes = $this->getAttributes((array)$attributes); |
|
105 | - // add attributes to template args |
|
106 | - $this->template_args['show_gravatar'] = $attributes['show_gravatar']; |
|
107 | - // add required objects: event, datetime, and ticket |
|
108 | - $this->template_args['event'] = $this->getEventAndQueryParams($attributes); |
|
109 | - $this->template_args['datetime'] = $this->getDatetimeAndQueryParams($attributes); |
|
110 | - $this->template_args['ticket'] = $this->getTicketAndQueryParams($attributes); |
|
111 | - |
|
112 | - // if any of the above objects is invalid or missing, |
|
113 | - // then there was an invalid parameter or the shortcode was used incorrectly |
|
114 | - // so when WP_DEBUG is set and true, we'll show a message, |
|
115 | - // otherwise we'll just return an empty string. |
|
116 | - if ( |
|
117 | - ! $this->template_args['event'] instanceof EE_Event |
|
118 | - || empty($this->query_params[0]) |
|
119 | - || ($attributes['datetime_id'] && ! $this->template_args['datetime'] instanceof EE_Datetime) |
|
120 | - || ($attributes['ticket_id'] && ! $this->template_args['ticket'] instanceof EE_Ticket) |
|
121 | - ) { |
|
122 | - if (WP_DEBUG) { |
|
123 | - return '<div class="important-notice ee-attention">' |
|
124 | - . esc_html__('The [ESPRESSO_EVENT_ATTENDEES] shortcode has been used incorrectly. Please double check the arguments you used for any typos. In the case of ID type arguments, its possible the given ID does not correspond to existing data in the database.', |
|
125 | - 'event_espresso') |
|
126 | - . '</div>'; |
|
127 | - } else { |
|
128 | - return ''; |
|
129 | - } |
|
130 | - } |
|
131 | - $this->setAdditionalQueryParams($attributes); |
|
132 | - //get contacts! |
|
133 | - $this->template_args['contacts'] = EEM_Attendee::instance()->get_all($this->query_params); |
|
134 | - //all set let's load up the template and return. |
|
135 | - return EEH_Template::locate_template('loop-espresso_event_attendees.php', $this->template_args, true, true); |
|
136 | - } |
|
137 | - |
|
138 | - |
|
139 | - |
|
140 | - /** |
|
141 | - * merge incoming attributes with filtered defaults |
|
142 | - * |
|
143 | - * @param array $attributes |
|
144 | - * @return array |
|
145 | - */ |
|
146 | - private function getAttributes(array $attributes) |
|
147 | - { |
|
148 | - return array_merge( |
|
149 | - (array) apply_filters( |
|
150 | - 'EES_Espresso_Event_Attendees__process_shortcode__default_shortcode_atts', |
|
151 | - array( |
|
152 | - 'event_id' => null, |
|
153 | - 'datetime_id' => null, |
|
154 | - 'ticket_id' => null, |
|
155 | - 'status' => EEM_Registration::status_id_approved, |
|
156 | - 'show_gravatar' => false |
|
157 | - ) |
|
158 | - ), |
|
159 | - $attributes |
|
160 | - ); |
|
161 | - } |
|
162 | - |
|
163 | - |
|
164 | - |
|
165 | - /** |
|
166 | - * @param array $attributes |
|
167 | - * @return EE_Event|null |
|
168 | - * @throws \EE_Error |
|
169 | - */ |
|
170 | - private function getEventAndQueryParams(array $attributes){ |
|
171 | - if ( ! empty($attributes['event_id'])) { |
|
172 | - $event = EEM_Event::instance()->get_one_by_ID($attributes['event_id']); |
|
173 | - if ($event instanceof EE_Event) { |
|
174 | - $this->query_params[0]['Registration.EVT_ID'] = $attributes['event_id']; |
|
175 | - return $event; |
|
176 | - } |
|
177 | - } |
|
178 | - //seems like is_espresso_event_single() isn't working as expected. So using alternate method. |
|
179 | - if (is_single() && is_espresso_event()) { |
|
180 | - $event = EEH_Event_View::get_event(); |
|
181 | - if ($event instanceof EE_Event) { |
|
182 | - $this->query_params[0]['Registration.EVT_ID'] = $event->ID(); |
|
183 | - return $event; |
|
184 | - } |
|
185 | - } |
|
186 | - // one last shot... |
|
187 | - // try getting the earliest active event |
|
188 | - $events = EEM_Event::instance()->get_active_events(array( |
|
189 | - 'limit' => 1, |
|
190 | - 'order_by' => array('Datetime.DTT_EVT_start' => 'ASC') |
|
191 | - )); |
|
192 | - // if none then get the next upcoming |
|
193 | - $events = empty($events) |
|
194 | - ? EEM_Event::instance()->get_upcoming_events(array( |
|
195 | - 'limit' => 1, |
|
196 | - 'order_by' => array('Datetime.DTT_EVT_start' => 'ASC') |
|
197 | - )) |
|
198 | - : $events; |
|
199 | - $event = reset($events); |
|
200 | - if ($event instanceof EE_Event) { |
|
201 | - $this->query_params[0]['Registration.EVT_ID'] = $event->ID(); |
|
202 | - return $event; |
|
203 | - } |
|
204 | - return null; |
|
205 | - } |
|
206 | - |
|
207 | - |
|
208 | - |
|
209 | - /** |
|
210 | - * @param array $attributes |
|
211 | - * @return EE_Datetime|null |
|
212 | - */ |
|
213 | - private function getDatetimeAndQueryParams(array $attributes) |
|
214 | - { |
|
215 | - if ( ! empty($attributes['datetime_id'])) { |
|
216 | - $datetime = EEM_Datetime::instance()->get_one_by_ID($attributes['datetime_id']); |
|
217 | - if ($datetime instanceof EE_Datetime) { |
|
218 | - $this->query_params[0]['Registration.Ticket.Datetime.DTT_ID'] = $attributes['datetime_id']; |
|
219 | - $this->query_params['default_where_conditions'] = 'this_model_only'; |
|
220 | - if ( ! $this->template_args['event'] instanceof EE_Event) { |
|
221 | - $this->template_args['event'] = $datetime->event(); |
|
222 | - } |
|
223 | - return $datetime; |
|
224 | - } |
|
225 | - } |
|
226 | - return null; |
|
227 | - } |
|
228 | - |
|
229 | - |
|
230 | - |
|
231 | - /** |
|
232 | - * @param array $attributes |
|
233 | - * @return \EE_Base_Class|null |
|
234 | - * @throws \EE_Error |
|
235 | - */ |
|
236 | - private function getTicketAndQueryParams(array $attributes) |
|
237 | - { |
|
238 | - if ( ! empty($attributes['ticket_id']) && empty($attributes['event_id']) && empty($attributes['datetime_id'])) { |
|
239 | - $ticket = EEM_Ticket::instance()->get_one_by_ID($attributes['ticket_id']); |
|
240 | - if ($ticket instanceof EE_Ticket) { |
|
241 | - $this->query_params[0]['Registration.TKT_ID'] = $attributes['ticket_id']; |
|
242 | - if ( ! $this->template_args['event'] instanceof EE_Event) { |
|
243 | - $this->template_args['event'] = $ticket->first_datetime() instanceof EE_Datetime |
|
244 | - ? $ticket->first_datetime()->event() |
|
245 | - : null; |
|
246 | - } |
|
247 | - return $ticket; |
|
248 | - } |
|
249 | - } |
|
250 | - return null; |
|
251 | - } |
|
252 | - |
|
253 | - |
|
254 | - |
|
255 | - /** |
|
256 | - * @param array $attributes |
|
257 | - */ |
|
258 | - private function setAdditionalQueryParams(array $attributes) |
|
259 | - { |
|
260 | - $reg_status_array = EEM_Registration::reg_status_array(); |
|
261 | - if ($attributes['status'] !== 'all' && isset($reg_status_array[$attributes['status']])) { |
|
262 | - $this->query_params[0]['Registration.STS_ID'] = $attributes['status']; |
|
263 | - } |
|
264 | - $this->query_params['group_by'] = array('ATT_ID'); |
|
265 | - $this->query_params['order_by'] = (array) apply_filters( |
|
266 | - 'FHEE__EES_Espresso_Event_Attendees__process_shortcode__order_by', |
|
267 | - array('ATT_lname' => 'ASC', 'ATT_fname' => 'ASC') |
|
268 | - ); |
|
269 | - } |
|
31 | + private $query_params = array( |
|
32 | + 0 => array() |
|
33 | + ); |
|
34 | + |
|
35 | + private $template_args = array( |
|
36 | + 'contacts' => array(), |
|
37 | + 'event' => null, |
|
38 | + 'datetime' => null, |
|
39 | + 'ticket' => null, |
|
40 | + ); |
|
41 | + |
|
42 | + /** |
|
43 | + * the actual shortcode tag that gets registered with WordPress |
|
44 | + * |
|
45 | + * @return string |
|
46 | + */ |
|
47 | + public function getTag() |
|
48 | + { |
|
49 | + return 'ESPRESSO_EVENT_ATTENDEES'; |
|
50 | + } |
|
51 | + |
|
52 | + |
|
53 | + |
|
54 | + /** |
|
55 | + * the time in seconds to cache the results of the processShortcode() method |
|
56 | + * 0 means the processShortcode() results will NOT be cached at all |
|
57 | + * |
|
58 | + * @return int |
|
59 | + */ |
|
60 | + public function cacheExpiration() |
|
61 | + { |
|
62 | + return 0; |
|
63 | + } |
|
64 | + |
|
65 | + |
|
66 | + |
|
67 | + /** |
|
68 | + * a place for adding any initialization code that needs to run prior to wp_header(). |
|
69 | + * this may be required for shortcodes that utilize a corresponding module, |
|
70 | + * and need to enqueue assets for that module |
|
71 | + * |
|
72 | + * @return void |
|
73 | + */ |
|
74 | + public function initializeShortcode() |
|
75 | + { |
|
76 | + $this->shortcodeHasBeenInitialized(); |
|
77 | + } |
|
78 | + |
|
79 | + |
|
80 | + |
|
81 | + /** |
|
82 | + * process_shortcode - ESPRESSO_EVENT_ATTENDEES - Returns a list of attendees to an event. |
|
83 | + * [ESPRESSO_EVENT_ATTENDEES] - defaults to attendees for earliest active event, or earliest upcoming event. |
|
84 | + * [ESPRESSO_EVENT_ATTENDEES event_id=123] - attendees for specific event. |
|
85 | + * [ESPRESSO_EVENT_ATTENDEES datetime_id=245] - attendees for a specific datetime. |
|
86 | + * [ESPRESSO_EVENT_ATTENDEES ticket_id=123] - attendees for a specific ticket. |
|
87 | + * [ESPRESSO_EVENT_ATTENDEES status=all] - specific registration status (use status id) or all for all attendees |
|
88 | + * regardless of status. Note default is to only return approved attendees |
|
89 | + * [ESPRESSO_EVENT_ATTENDEES show_gravatar=true] - default is to not return gravatar. Otherwise if this is set |
|
90 | + * then return gravatar for email address given. |
|
91 | + * Note: because of the relationship between event_id, ticket_id, and datetime_id. |
|
92 | + * If more than one of those params is included then preference is given to the following: |
|
93 | + * - event_id is used whenever its present and any others are ignored. |
|
94 | + * - if no event_id then datetime is used whenever its present and any others are ignored. |
|
95 | + * - otherwise ticket_id is used if present. |
|
96 | + * |
|
97 | + * @param array $attributes |
|
98 | + * @return string |
|
99 | + * @throws \EE_Error |
|
100 | + */ |
|
101 | + public function processShortcode($attributes = array()) |
|
102 | + { |
|
103 | + // grab attributes and merge with defaults |
|
104 | + $attributes = $this->getAttributes((array)$attributes); |
|
105 | + // add attributes to template args |
|
106 | + $this->template_args['show_gravatar'] = $attributes['show_gravatar']; |
|
107 | + // add required objects: event, datetime, and ticket |
|
108 | + $this->template_args['event'] = $this->getEventAndQueryParams($attributes); |
|
109 | + $this->template_args['datetime'] = $this->getDatetimeAndQueryParams($attributes); |
|
110 | + $this->template_args['ticket'] = $this->getTicketAndQueryParams($attributes); |
|
111 | + |
|
112 | + // if any of the above objects is invalid or missing, |
|
113 | + // then there was an invalid parameter or the shortcode was used incorrectly |
|
114 | + // so when WP_DEBUG is set and true, we'll show a message, |
|
115 | + // otherwise we'll just return an empty string. |
|
116 | + if ( |
|
117 | + ! $this->template_args['event'] instanceof EE_Event |
|
118 | + || empty($this->query_params[0]) |
|
119 | + || ($attributes['datetime_id'] && ! $this->template_args['datetime'] instanceof EE_Datetime) |
|
120 | + || ($attributes['ticket_id'] && ! $this->template_args['ticket'] instanceof EE_Ticket) |
|
121 | + ) { |
|
122 | + if (WP_DEBUG) { |
|
123 | + return '<div class="important-notice ee-attention">' |
|
124 | + . esc_html__('The [ESPRESSO_EVENT_ATTENDEES] shortcode has been used incorrectly. Please double check the arguments you used for any typos. In the case of ID type arguments, its possible the given ID does not correspond to existing data in the database.', |
|
125 | + 'event_espresso') |
|
126 | + . '</div>'; |
|
127 | + } else { |
|
128 | + return ''; |
|
129 | + } |
|
130 | + } |
|
131 | + $this->setAdditionalQueryParams($attributes); |
|
132 | + //get contacts! |
|
133 | + $this->template_args['contacts'] = EEM_Attendee::instance()->get_all($this->query_params); |
|
134 | + //all set let's load up the template and return. |
|
135 | + return EEH_Template::locate_template('loop-espresso_event_attendees.php', $this->template_args, true, true); |
|
136 | + } |
|
137 | + |
|
138 | + |
|
139 | + |
|
140 | + /** |
|
141 | + * merge incoming attributes with filtered defaults |
|
142 | + * |
|
143 | + * @param array $attributes |
|
144 | + * @return array |
|
145 | + */ |
|
146 | + private function getAttributes(array $attributes) |
|
147 | + { |
|
148 | + return array_merge( |
|
149 | + (array) apply_filters( |
|
150 | + 'EES_Espresso_Event_Attendees__process_shortcode__default_shortcode_atts', |
|
151 | + array( |
|
152 | + 'event_id' => null, |
|
153 | + 'datetime_id' => null, |
|
154 | + 'ticket_id' => null, |
|
155 | + 'status' => EEM_Registration::status_id_approved, |
|
156 | + 'show_gravatar' => false |
|
157 | + ) |
|
158 | + ), |
|
159 | + $attributes |
|
160 | + ); |
|
161 | + } |
|
162 | + |
|
163 | + |
|
164 | + |
|
165 | + /** |
|
166 | + * @param array $attributes |
|
167 | + * @return EE_Event|null |
|
168 | + * @throws \EE_Error |
|
169 | + */ |
|
170 | + private function getEventAndQueryParams(array $attributes){ |
|
171 | + if ( ! empty($attributes['event_id'])) { |
|
172 | + $event = EEM_Event::instance()->get_one_by_ID($attributes['event_id']); |
|
173 | + if ($event instanceof EE_Event) { |
|
174 | + $this->query_params[0]['Registration.EVT_ID'] = $attributes['event_id']; |
|
175 | + return $event; |
|
176 | + } |
|
177 | + } |
|
178 | + //seems like is_espresso_event_single() isn't working as expected. So using alternate method. |
|
179 | + if (is_single() && is_espresso_event()) { |
|
180 | + $event = EEH_Event_View::get_event(); |
|
181 | + if ($event instanceof EE_Event) { |
|
182 | + $this->query_params[0]['Registration.EVT_ID'] = $event->ID(); |
|
183 | + return $event; |
|
184 | + } |
|
185 | + } |
|
186 | + // one last shot... |
|
187 | + // try getting the earliest active event |
|
188 | + $events = EEM_Event::instance()->get_active_events(array( |
|
189 | + 'limit' => 1, |
|
190 | + 'order_by' => array('Datetime.DTT_EVT_start' => 'ASC') |
|
191 | + )); |
|
192 | + // if none then get the next upcoming |
|
193 | + $events = empty($events) |
|
194 | + ? EEM_Event::instance()->get_upcoming_events(array( |
|
195 | + 'limit' => 1, |
|
196 | + 'order_by' => array('Datetime.DTT_EVT_start' => 'ASC') |
|
197 | + )) |
|
198 | + : $events; |
|
199 | + $event = reset($events); |
|
200 | + if ($event instanceof EE_Event) { |
|
201 | + $this->query_params[0]['Registration.EVT_ID'] = $event->ID(); |
|
202 | + return $event; |
|
203 | + } |
|
204 | + return null; |
|
205 | + } |
|
206 | + |
|
207 | + |
|
208 | + |
|
209 | + /** |
|
210 | + * @param array $attributes |
|
211 | + * @return EE_Datetime|null |
|
212 | + */ |
|
213 | + private function getDatetimeAndQueryParams(array $attributes) |
|
214 | + { |
|
215 | + if ( ! empty($attributes['datetime_id'])) { |
|
216 | + $datetime = EEM_Datetime::instance()->get_one_by_ID($attributes['datetime_id']); |
|
217 | + if ($datetime instanceof EE_Datetime) { |
|
218 | + $this->query_params[0]['Registration.Ticket.Datetime.DTT_ID'] = $attributes['datetime_id']; |
|
219 | + $this->query_params['default_where_conditions'] = 'this_model_only'; |
|
220 | + if ( ! $this->template_args['event'] instanceof EE_Event) { |
|
221 | + $this->template_args['event'] = $datetime->event(); |
|
222 | + } |
|
223 | + return $datetime; |
|
224 | + } |
|
225 | + } |
|
226 | + return null; |
|
227 | + } |
|
228 | + |
|
229 | + |
|
230 | + |
|
231 | + /** |
|
232 | + * @param array $attributes |
|
233 | + * @return \EE_Base_Class|null |
|
234 | + * @throws \EE_Error |
|
235 | + */ |
|
236 | + private function getTicketAndQueryParams(array $attributes) |
|
237 | + { |
|
238 | + if ( ! empty($attributes['ticket_id']) && empty($attributes['event_id']) && empty($attributes['datetime_id'])) { |
|
239 | + $ticket = EEM_Ticket::instance()->get_one_by_ID($attributes['ticket_id']); |
|
240 | + if ($ticket instanceof EE_Ticket) { |
|
241 | + $this->query_params[0]['Registration.TKT_ID'] = $attributes['ticket_id']; |
|
242 | + if ( ! $this->template_args['event'] instanceof EE_Event) { |
|
243 | + $this->template_args['event'] = $ticket->first_datetime() instanceof EE_Datetime |
|
244 | + ? $ticket->first_datetime()->event() |
|
245 | + : null; |
|
246 | + } |
|
247 | + return $ticket; |
|
248 | + } |
|
249 | + } |
|
250 | + return null; |
|
251 | + } |
|
252 | + |
|
253 | + |
|
254 | + |
|
255 | + /** |
|
256 | + * @param array $attributes |
|
257 | + */ |
|
258 | + private function setAdditionalQueryParams(array $attributes) |
|
259 | + { |
|
260 | + $reg_status_array = EEM_Registration::reg_status_array(); |
|
261 | + if ($attributes['status'] !== 'all' && isset($reg_status_array[$attributes['status']])) { |
|
262 | + $this->query_params[0]['Registration.STS_ID'] = $attributes['status']; |
|
263 | + } |
|
264 | + $this->query_params['group_by'] = array('ATT_ID'); |
|
265 | + $this->query_params['order_by'] = (array) apply_filters( |
|
266 | + 'FHEE__EES_Espresso_Event_Attendees__process_shortcode__order_by', |
|
267 | + array('ATT_lname' => 'ASC', 'ATT_fname' => 'ASC') |
|
268 | + ); |
|
269 | + } |
|
270 | 270 | |
271 | 271 | |
272 | 272 |
@@ -24,82 +24,82 @@ |
||
24 | 24 | |
25 | 25 | |
26 | 26 | |
27 | - /** |
|
28 | - * the actual shortcode tag that gets registered with WordPress |
|
29 | - * |
|
30 | - * @return string |
|
31 | - */ |
|
32 | - public function getTag() |
|
33 | - { |
|
34 | - return 'ESPRESSO_TICKET_SELECTOR'; |
|
35 | - } |
|
36 | - |
|
37 | - |
|
38 | - |
|
39 | - /** |
|
40 | - * the time in seconds to cache the results of the processShortcode() method |
|
41 | - * 0 means the processShortcode() results will NOT be cached at all |
|
42 | - * |
|
43 | - * @return int |
|
44 | - */ |
|
45 | - public function cacheExpiration() |
|
46 | - { |
|
47 | - return 0; |
|
48 | - } |
|
49 | - |
|
50 | - |
|
51 | - /** |
|
52 | - * a place for adding any initialization code that needs to run prior to wp_header(). |
|
53 | - * this may be required for shortcodes that utilize a corresponding module, |
|
54 | - * and need to enqueue assets for that module |
|
55 | - * |
|
56 | - * @return void |
|
57 | - */ |
|
58 | - public function initializeShortcode() |
|
59 | - { |
|
60 | - add_filter('FHEE__EED_Ticket_Selector__load_tckt_slctr_assets', '__return_true'); |
|
61 | - $this->shortcodeHasBeenInitialized(); |
|
62 | - } |
|
63 | - |
|
64 | - |
|
65 | - |
|
66 | - /** |
|
67 | - * callback that runs when the shortcode is encountered in post content. |
|
68 | - * IMPORTANT !!! |
|
69 | - * remember that shortcode content should be RETURNED and NOT echoed out |
|
70 | - * |
|
71 | - * @param array $attributes |
|
72 | - * @return string |
|
73 | - * @throws InvalidArgumentException |
|
74 | - */ |
|
75 | - public function processShortcode($attributes = array()) |
|
76 | - { |
|
77 | - extract($attributes, EXTR_OVERWRITE); |
|
78 | - $event_id = isset($event_id) ? $event_id : 0; |
|
79 | - $event = EE_Registry::instance()->load_model('Event')->get_one_by_ID($event_id); |
|
80 | - if (! $event instanceof EE_Event) { |
|
81 | - new ExceptionStackTraceDisplay( |
|
82 | - new InvalidArgumentException( |
|
83 | - sprintf( |
|
84 | - esc_html__( |
|
85 | - 'A valid Event ID is required to use the "%1$s" shortcode.%4$sAn Event with an ID of "%2$s" could not be found.%4$sPlease verify that the shortcode added to this post\'s content includes an "%3$s" argument and that it\'s value corresponds to a valid Event ID.', |
|
86 | - 'event_espresso' |
|
87 | - ), |
|
88 | - $this->getTag(), |
|
89 | - $event_id, |
|
90 | - 'event_id', |
|
91 | - '<br />' |
|
92 | - ) |
|
93 | - ) |
|
94 | - ); |
|
95 | - return ''; |
|
96 | - } |
|
97 | - ob_start(); |
|
98 | - do_action('AHEE_event_details_before_post', $event_id); |
|
99 | - espresso_ticket_selector($event); |
|
100 | - do_action('AHEE_event_details_after_post'); |
|
101 | - return ob_get_clean(); |
|
102 | - } |
|
27 | + /** |
|
28 | + * the actual shortcode tag that gets registered with WordPress |
|
29 | + * |
|
30 | + * @return string |
|
31 | + */ |
|
32 | + public function getTag() |
|
33 | + { |
|
34 | + return 'ESPRESSO_TICKET_SELECTOR'; |
|
35 | + } |
|
36 | + |
|
37 | + |
|
38 | + |
|
39 | + /** |
|
40 | + * the time in seconds to cache the results of the processShortcode() method |
|
41 | + * 0 means the processShortcode() results will NOT be cached at all |
|
42 | + * |
|
43 | + * @return int |
|
44 | + */ |
|
45 | + public function cacheExpiration() |
|
46 | + { |
|
47 | + return 0; |
|
48 | + } |
|
49 | + |
|
50 | + |
|
51 | + /** |
|
52 | + * a place for adding any initialization code that needs to run prior to wp_header(). |
|
53 | + * this may be required for shortcodes that utilize a corresponding module, |
|
54 | + * and need to enqueue assets for that module |
|
55 | + * |
|
56 | + * @return void |
|
57 | + */ |
|
58 | + public function initializeShortcode() |
|
59 | + { |
|
60 | + add_filter('FHEE__EED_Ticket_Selector__load_tckt_slctr_assets', '__return_true'); |
|
61 | + $this->shortcodeHasBeenInitialized(); |
|
62 | + } |
|
63 | + |
|
64 | + |
|
65 | + |
|
66 | + /** |
|
67 | + * callback that runs when the shortcode is encountered in post content. |
|
68 | + * IMPORTANT !!! |
|
69 | + * remember that shortcode content should be RETURNED and NOT echoed out |
|
70 | + * |
|
71 | + * @param array $attributes |
|
72 | + * @return string |
|
73 | + * @throws InvalidArgumentException |
|
74 | + */ |
|
75 | + public function processShortcode($attributes = array()) |
|
76 | + { |
|
77 | + extract($attributes, EXTR_OVERWRITE); |
|
78 | + $event_id = isset($event_id) ? $event_id : 0; |
|
79 | + $event = EE_Registry::instance()->load_model('Event')->get_one_by_ID($event_id); |
|
80 | + if (! $event instanceof EE_Event) { |
|
81 | + new ExceptionStackTraceDisplay( |
|
82 | + new InvalidArgumentException( |
|
83 | + sprintf( |
|
84 | + esc_html__( |
|
85 | + 'A valid Event ID is required to use the "%1$s" shortcode.%4$sAn Event with an ID of "%2$s" could not be found.%4$sPlease verify that the shortcode added to this post\'s content includes an "%3$s" argument and that it\'s value corresponds to a valid Event ID.', |
|
86 | + 'event_espresso' |
|
87 | + ), |
|
88 | + $this->getTag(), |
|
89 | + $event_id, |
|
90 | + 'event_id', |
|
91 | + '<br />' |
|
92 | + ) |
|
93 | + ) |
|
94 | + ); |
|
95 | + return ''; |
|
96 | + } |
|
97 | + ob_start(); |
|
98 | + do_action('AHEE_event_details_before_post', $event_id); |
|
99 | + espresso_ticket_selector($event); |
|
100 | + do_action('AHEE_event_details_after_post'); |
|
101 | + return ob_get_clean(); |
|
102 | + } |
|
103 | 103 | |
104 | 104 | |
105 | 105 | } |
@@ -14,109 +14,109 @@ |
||
14 | 14 | trait EventsAdmin |
15 | 15 | { |
16 | 16 | |
17 | - /** |
|
18 | - * @param string $additional_params |
|
19 | - */ |
|
20 | - public function amOnDefaultEventsListTablePage($additional_params = '') |
|
21 | - { |
|
22 | - $this->actor()->amOnAdminPage(EventsPage::defaultEventsListTableUrl($additional_params)); |
|
23 | - } |
|
24 | - |
|
25 | - |
|
26 | - /** |
|
27 | - * Triggers the publishing of the Event. |
|
28 | - */ |
|
29 | - public function publishEvent() |
|
30 | - { |
|
31 | - $this->actor()->click(EventsPage::EVENT_EDITOR_PUBLISH_BUTTON_SELECTOR); |
|
32 | - } |
|
33 | - |
|
34 | - |
|
35 | - /** |
|
36 | - * Navigates the actor to the event list table page and will attempt to edit the event for the given title. |
|
37 | - * First this will search using the given title and then attempt to edit from the results of the search. |
|
38 | - * |
|
39 | - * Assumes actor is already logged in. |
|
40 | - * @param $event_title |
|
41 | - */ |
|
42 | - public function amEditingTheEventWithTitle($event_title) |
|
43 | - { |
|
44 | - $this->amOnDefaultEventsListTablePage(); |
|
45 | - $this->actor()->fillField(EventsPage::EVENT_LIST_TABLE_SEARCH_INPUT_SELECTOR, $event_title); |
|
46 | - $this->actor()->click(CoreAdmin::LIST_TABLE_SEARCH_SUBMIT_SELECTOR); |
|
47 | - $this->actor()->waitForText('Displaying search results for'); |
|
48 | - $this->actor()->click(EventsPage::eventListTableEventTitleEditLink($event_title)); |
|
49 | - } |
|
50 | - |
|
51 | - |
|
52 | - /** |
|
53 | - * Navigates the user to the single event page (frontend view) for the given event title via clicking the "View" |
|
54 | - * link for the event in the event list table. |
|
55 | - * Assumes the actor is already logged in and on the Event list table page. |
|
56 | - * |
|
57 | - * @param string $event_title |
|
58 | - */ |
|
59 | - public function amOnEventPageAfterClickingViewLinkInListTableForEvent($event_title) |
|
60 | - { |
|
61 | - $this->actor()->moveMouseOver(EventsPage::eventListTableEventTitleEditLinkSelectorForTitle($event_title)); |
|
62 | - $this->actor()->click(EventsPage::eventListTableEventTitleViewLinkSelectorForTitle($event_title)); |
|
63 | - } |
|
64 | - |
|
65 | - |
|
66 | - /** |
|
67 | - * This performs the click action on the gear icon that triggers the advanced settings view state. |
|
68 | - * Assumes the actor is already logged in and editing an event. |
|
69 | - * |
|
70 | - * @param int $row_number What ticket row to toggle open/close. |
|
71 | - */ |
|
72 | - public function toggleAdvancedSettingsViewForTicketRow($row_number = 1) |
|
73 | - { |
|
74 | - $this->actor()->click(EventsPage::eventEditorTicketAdvancedDetailsSelector($row_number)); |
|
75 | - } |
|
76 | - |
|
77 | - |
|
78 | - /** |
|
79 | - * Toggles the TKT_is_taxable checkbox for the ticket in the given row. |
|
80 | - * Assumes the actor is already logged in and editing an event and that the advanced settings view state for that |
|
81 | - * ticket is "open". |
|
82 | - * |
|
83 | - * @param int $row_number What ticket row to toggle the checkbox for. |
|
84 | - */ |
|
85 | - public function toggleTicketIsTaxableForTicketRow($row_number = 1) |
|
86 | - { |
|
87 | - $this->actor()->click(EventsPage::eventEditorTicketTaxableCheckboxSelector($row_number)); |
|
88 | - } |
|
89 | - |
|
90 | - |
|
91 | - /** |
|
92 | - * Use to change the default registration status for the event. |
|
93 | - * Assumes the view is already on the event editor. |
|
94 | - * @param $registration_status |
|
95 | - */ |
|
96 | - public function changeDefaultRegistrationStatusTo($registration_status) |
|
97 | - { |
|
98 | - $this->actor()->selectOption( |
|
99 | - EventsPage::EVENT_EDITOR_DEFAULT_REGISTRATION_STATUS_FIELD_SELECTOR, |
|
100 | - $registration_status |
|
101 | - ); |
|
102 | - } |
|
103 | - |
|
104 | - |
|
105 | - /** |
|
106 | - * Use this from the context of the event editor to select the given custom template for a given message type and |
|
107 | - * messenger. |
|
108 | - * |
|
109 | - * @param string $message_type_label The visible label for the message type (eg Registration Approved) |
|
110 | - * @param string $messenger_slug The slug for the messenger (eg 'email') |
|
111 | - * @param string $custom_template_label The visible label in the select input for the custom template you want |
|
112 | - * selected. |
|
113 | - */ |
|
114 | - public function selectCustomTemplateFor($message_type_label, $messenger_slug, $custom_template_label) |
|
115 | - { |
|
116 | - $this->actor()->click(EventsPage::eventEditorNotificationsMetaBoxMessengerTabSelector($messenger_slug)); |
|
117 | - $this->actor()->selectOption( |
|
118 | - EventsPage::eventEditorNotificationsMetaBoxSelectSelectorForMessageType($message_type_label), |
|
119 | - $custom_template_label |
|
120 | - ); |
|
121 | - } |
|
17 | + /** |
|
18 | + * @param string $additional_params |
|
19 | + */ |
|
20 | + public function amOnDefaultEventsListTablePage($additional_params = '') |
|
21 | + { |
|
22 | + $this->actor()->amOnAdminPage(EventsPage::defaultEventsListTableUrl($additional_params)); |
|
23 | + } |
|
24 | + |
|
25 | + |
|
26 | + /** |
|
27 | + * Triggers the publishing of the Event. |
|
28 | + */ |
|
29 | + public function publishEvent() |
|
30 | + { |
|
31 | + $this->actor()->click(EventsPage::EVENT_EDITOR_PUBLISH_BUTTON_SELECTOR); |
|
32 | + } |
|
33 | + |
|
34 | + |
|
35 | + /** |
|
36 | + * Navigates the actor to the event list table page and will attempt to edit the event for the given title. |
|
37 | + * First this will search using the given title and then attempt to edit from the results of the search. |
|
38 | + * |
|
39 | + * Assumes actor is already logged in. |
|
40 | + * @param $event_title |
|
41 | + */ |
|
42 | + public function amEditingTheEventWithTitle($event_title) |
|
43 | + { |
|
44 | + $this->amOnDefaultEventsListTablePage(); |
|
45 | + $this->actor()->fillField(EventsPage::EVENT_LIST_TABLE_SEARCH_INPUT_SELECTOR, $event_title); |
|
46 | + $this->actor()->click(CoreAdmin::LIST_TABLE_SEARCH_SUBMIT_SELECTOR); |
|
47 | + $this->actor()->waitForText('Displaying search results for'); |
|
48 | + $this->actor()->click(EventsPage::eventListTableEventTitleEditLink($event_title)); |
|
49 | + } |
|
50 | + |
|
51 | + |
|
52 | + /** |
|
53 | + * Navigates the user to the single event page (frontend view) for the given event title via clicking the "View" |
|
54 | + * link for the event in the event list table. |
|
55 | + * Assumes the actor is already logged in and on the Event list table page. |
|
56 | + * |
|
57 | + * @param string $event_title |
|
58 | + */ |
|
59 | + public function amOnEventPageAfterClickingViewLinkInListTableForEvent($event_title) |
|
60 | + { |
|
61 | + $this->actor()->moveMouseOver(EventsPage::eventListTableEventTitleEditLinkSelectorForTitle($event_title)); |
|
62 | + $this->actor()->click(EventsPage::eventListTableEventTitleViewLinkSelectorForTitle($event_title)); |
|
63 | + } |
|
64 | + |
|
65 | + |
|
66 | + /** |
|
67 | + * This performs the click action on the gear icon that triggers the advanced settings view state. |
|
68 | + * Assumes the actor is already logged in and editing an event. |
|
69 | + * |
|
70 | + * @param int $row_number What ticket row to toggle open/close. |
|
71 | + */ |
|
72 | + public function toggleAdvancedSettingsViewForTicketRow($row_number = 1) |
|
73 | + { |
|
74 | + $this->actor()->click(EventsPage::eventEditorTicketAdvancedDetailsSelector($row_number)); |
|
75 | + } |
|
76 | + |
|
77 | + |
|
78 | + /** |
|
79 | + * Toggles the TKT_is_taxable checkbox for the ticket in the given row. |
|
80 | + * Assumes the actor is already logged in and editing an event and that the advanced settings view state for that |
|
81 | + * ticket is "open". |
|
82 | + * |
|
83 | + * @param int $row_number What ticket row to toggle the checkbox for. |
|
84 | + */ |
|
85 | + public function toggleTicketIsTaxableForTicketRow($row_number = 1) |
|
86 | + { |
|
87 | + $this->actor()->click(EventsPage::eventEditorTicketTaxableCheckboxSelector($row_number)); |
|
88 | + } |
|
89 | + |
|
90 | + |
|
91 | + /** |
|
92 | + * Use to change the default registration status for the event. |
|
93 | + * Assumes the view is already on the event editor. |
|
94 | + * @param $registration_status |
|
95 | + */ |
|
96 | + public function changeDefaultRegistrationStatusTo($registration_status) |
|
97 | + { |
|
98 | + $this->actor()->selectOption( |
|
99 | + EventsPage::EVENT_EDITOR_DEFAULT_REGISTRATION_STATUS_FIELD_SELECTOR, |
|
100 | + $registration_status |
|
101 | + ); |
|
102 | + } |
|
103 | + |
|
104 | + |
|
105 | + /** |
|
106 | + * Use this from the context of the event editor to select the given custom template for a given message type and |
|
107 | + * messenger. |
|
108 | + * |
|
109 | + * @param string $message_type_label The visible label for the message type (eg Registration Approved) |
|
110 | + * @param string $messenger_slug The slug for the messenger (eg 'email') |
|
111 | + * @param string $custom_template_label The visible label in the select input for the custom template you want |
|
112 | + * selected. |
|
113 | + */ |
|
114 | + public function selectCustomTemplateFor($message_type_label, $messenger_slug, $custom_template_label) |
|
115 | + { |
|
116 | + $this->actor()->click(EventsPage::eventEditorNotificationsMetaBoxMessengerTabSelector($messenger_slug)); |
|
117 | + $this->actor()->selectOption( |
|
118 | + EventsPage::eventEditorNotificationsMetaBoxSelectSelectorForMessageType($message_type_label), |
|
119 | + $custom_template_label |
|
120 | + ); |
|
121 | + } |
|
122 | 122 | } |
123 | 123 | \ No newline at end of file |
@@ -10,237 +10,237 @@ |
||
10 | 10 | */ |
11 | 11 | trait MessagesAdmin |
12 | 12 | { |
13 | - /** |
|
14 | - * @param string $additional_params Any additional request parameters for the generated url should be included as |
|
15 | - * a string. |
|
16 | - */ |
|
17 | - public function amOnMessagesActivityListTablePage($additional_params = '') |
|
18 | - { |
|
19 | - $this->actor()->amOnAdminPage(MessagesPage::messageActivityListTableUrl($additional_params)); |
|
20 | - } |
|
21 | - |
|
22 | - /** |
|
23 | - * @param string $additional_params Any additional request parameters for the generated url should be included as |
|
24 | - * a string. |
|
25 | - */ |
|
26 | - public function amOnDefaultMessageTemplateListTablePage($additional_params = '') |
|
27 | - { |
|
28 | - $this->actor()->amOnAdminPage(MessagesPage::defaultMessageTemplateListTableUrl($additional_params)); |
|
29 | - } |
|
30 | - |
|
31 | - |
|
32 | - /** |
|
33 | - * @param string $additional_params Any additional request parameters for the generated url should be included as |
|
34 | - * a string. |
|
35 | - */ |
|
36 | - public function amOnCustomMessageTemplateListTablePage($additional_params = '') |
|
37 | - { |
|
38 | - $this->actor()->amOnAdminPage(MessagesPage::customMessageTemplateListTableUrl($additional_params)); |
|
39 | - } |
|
40 | - |
|
41 | - |
|
42 | - /** |
|
43 | - * Directs to message settings page |
|
44 | - */ |
|
45 | - public function amOnMessageSettingsPage() |
|
46 | - { |
|
47 | - $this->actor()->amOnAdminPage(MessagesPage::messageSettingsUrl()); |
|
48 | - } |
|
49 | - |
|
50 | - |
|
51 | - public function activateMessageTypeForMessenger($message_type_slug, $messenger_slug = 'email') |
|
52 | - { |
|
53 | - $this->actor()->dragAndDrop( |
|
54 | - MessagesPage::draggableSettingsBoxSelectorForMessageTypeAndMessenger($message_type_slug, $messenger_slug), |
|
55 | - MessagesPage::MESSAGES_SETTINGS_ACTIVE_MESSAGE_TYPES_CONTAINER_SELECTOR |
|
56 | - ); |
|
57 | - } |
|
58 | - |
|
59 | - |
|
60 | - /** |
|
61 | - * Assumes you are already on the list table page that has the ui for editing the template. |
|
62 | - * @param string $message_type_slug |
|
63 | - * @param string $context [optional] if you want to click directly to the given context in the editor |
|
64 | - */ |
|
65 | - public function clickToEditMessageTemplateByMessageType($message_type_slug, $context = '') |
|
66 | - { |
|
67 | - $this->actor()->click(MessagesPage::editMessageTemplateClassByMessageType($message_type_slug, $context)); |
|
68 | - } |
|
69 | - |
|
70 | - |
|
71 | - /** |
|
72 | - * Use this action to verify that the count for the given text in the specified field is as expected. For example |
|
73 | - * filling the condition of, "There should only be 1 instance of `[email protected]` in all the 'to' column. |
|
74 | - * |
|
75 | - * @param int $expected_occurence_count |
|
76 | - * @param string $text_to_check_for |
|
77 | - * @param string $field |
|
78 | - * @param string $message_type_label |
|
79 | - * @param string $message_status |
|
80 | - * @param string $messenger |
|
81 | - * @param string $context |
|
82 | - */ |
|
83 | - public function verifyMatchingCountofTextInMessageActivityListTableFor( |
|
84 | - $expected_occurence_count, |
|
85 | - $text_to_check_for, |
|
86 | - $field, |
|
87 | - $message_type_label, |
|
88 | - $message_status = MessagesPage::MESSAGE_STATUS_SENT, |
|
89 | - $messenger = 'Email', |
|
90 | - $context = 'Event Admin' |
|
91 | - ) { |
|
92 | - $elements = $this->actor()->grabMultiple(MessagesPage::messagesActivityListTableCellSelectorFor( |
|
93 | - $field, |
|
94 | - $message_type_label, |
|
95 | - $message_status, |
|
96 | - $messenger, |
|
97 | - $context, |
|
98 | - $text_to_check_for, |
|
99 | - 0 |
|
100 | - )); |
|
101 | - $actual_count = count($elements); |
|
102 | - $this->actor()->assertEquals( |
|
103 | - $expected_occurence_count, |
|
104 | - $actual_count, |
|
105 | - sprintf( |
|
106 | - 'Expected %s of the %s text for the %s field but there were actually %s counted.', |
|
107 | - $expected_occurence_count, |
|
108 | - $text_to_check_for, |
|
109 | - $field, |
|
110 | - $actual_count |
|
111 | - ) |
|
112 | - ); |
|
113 | - } |
|
114 | - |
|
115 | - |
|
116 | - /** |
|
117 | - * This will create a custom message template for the given messenger and message type from the context of the |
|
118 | - * default (global) message template list table. |
|
119 | - * Also takes care of verifying the template was created. |
|
120 | - * @param string $message_type_label |
|
121 | - * @param string $messenger_label |
|
122 | - */ |
|
123 | - public function createCustomMessageTemplateFromDefaultFor($message_type_label, $messenger_label) |
|
124 | - { |
|
125 | - $this->amOnDefaultMessageTemplateListTablePage(); |
|
126 | - $this->actor()->click( |
|
127 | - MessagesPage::createCustomButtonForMessageTypeAndMessenger( |
|
128 | - $message_type_label, |
|
129 | - $messenger_label |
|
130 | - ) |
|
131 | - ); |
|
132 | - $this->actor()->seeInField('#title', 'New Custom Template'); |
|
133 | - } |
|
134 | - |
|
135 | - |
|
136 | - /** |
|
137 | - * This switches the context of the current messages template to the given reference. |
|
138 | - * @param string $context_reference This should be the visible label for the option. |
|
139 | - */ |
|
140 | - public function switchContextTo($context_reference) |
|
141 | - { |
|
142 | - $this->actor()->selectOption(MessagesPage::MESSAGES_CONTEXT_SWITCHER_SELECTOR, $context_reference); |
|
143 | - $this->actor()->click(MessagesPage::MESSAGES_CONTEXT_SWITCHER_BUTTON_SELECTOR); |
|
144 | - $this->actor()->waitForText($context_reference, 10, 'h1'); |
|
145 | - } |
|
146 | - |
|
147 | - |
|
148 | - /** |
|
149 | - * This takes care of clicking the View Message icon for the given parameters. |
|
150 | - * Assumes you are already viewing the messages activity list table. |
|
151 | - * @param $message_type_label |
|
152 | - * @param $message_status |
|
153 | - * @param string $messenger |
|
154 | - * @param string $context |
|
155 | - * @param int $number_in_set |
|
156 | - */ |
|
157 | - public function viewMessageInMessagesListTableFor( |
|
158 | - $message_type_label, |
|
159 | - $message_status = MessagesPage::MESSAGE_STATUS_SENT, |
|
160 | - $messenger = 'Email', |
|
161 | - $context = 'Event Admin', |
|
162 | - $number_in_set = 1 |
|
163 | - ) { |
|
164 | - $this->actor()->click(MessagesPage::messagesActivityListTableViewButtonSelectorFor( |
|
165 | - $message_type_label, |
|
166 | - $message_status, |
|
167 | - $messenger, |
|
168 | - $context, |
|
169 | - $number_in_set |
|
170 | - )); |
|
171 | - } |
|
172 | - |
|
173 | - |
|
174 | - /** |
|
175 | - * Takes care of deleting a message matching the given parameters via the message activity list table. |
|
176 | - * Assumes you are already viewing the messages activity list table. |
|
177 | - * @param $message_type_label |
|
178 | - * @param $message_status |
|
179 | - * @param string $messenger |
|
180 | - * @param string $context |
|
181 | - * @param int $number_in_set |
|
182 | - */ |
|
183 | - public function deleteMessageInMessagesListTableFor( |
|
184 | - $message_type_label, |
|
185 | - $message_status = MessagesPage::MESSAGE_STATUS_SENT, |
|
186 | - $messenger = 'Email', |
|
187 | - $context = 'Event Admin', |
|
188 | - $number_in_set = 1 |
|
189 | - ) { |
|
190 | - $this->actor()->moveMouseOver( |
|
191 | - MessagesPage::messagesActivityListTableCellSelectorFor( |
|
192 | - 'to', |
|
193 | - $message_type_label, |
|
194 | - $message_status, |
|
195 | - $messenger, |
|
196 | - $context, |
|
197 | - '', |
|
198 | - $number_in_set |
|
199 | - ) |
|
200 | - ); |
|
201 | - $this->actor()->waitForElementVisible( |
|
202 | - MessagesPage::messagesActivityListTableDeleteActionSelectorFor( |
|
203 | - $message_type_label, |
|
204 | - $message_status, |
|
205 | - $messenger, |
|
206 | - $context, |
|
207 | - $number_in_set |
|
208 | - ) |
|
209 | - ); |
|
210 | - $this->actor()->click( |
|
211 | - MessagesPage::messagesActivityListTableDeleteActionSelectorFor( |
|
212 | - $message_type_label, |
|
213 | - $message_status, |
|
214 | - $messenger, |
|
215 | - $context, |
|
216 | - $number_in_set |
|
217 | - ) |
|
218 | - ); |
|
219 | - $this->actor()->waitForText('successfully deleted'); |
|
220 | - } |
|
221 | - |
|
222 | - |
|
223 | - /** |
|
224 | - * Assuming you have already triggered the view modal for a single message from the context of the message activity |
|
225 | - * list table, this will take care of validating the given text is in that window. |
|
226 | - * @param string $text_to_view |
|
227 | - */ |
|
228 | - public function seeTextInViewMessageModal($text_to_view, $should_not_see = false) |
|
229 | - { |
|
230 | - $this->actor()->waitForElementVisible('.ee-admin-dialog-container-inner-content'); |
|
231 | - $this->actor()->switchToIframe('message-view-window'); |
|
232 | - $should_not_see ? $this->actor()->dontSee($text_to_view) : $this->actor()->see($text_to_view); |
|
233 | - $this->actor()->switchToIframe(); |
|
234 | - } |
|
235 | - |
|
236 | - |
|
237 | - /** |
|
238 | - * Assuming you have already triggered the view modal for a single message from the context of the message activity |
|
239 | - * list table, this will take care of validating the given text is NOT that window. |
|
240 | - * @param string $text_to_view |
|
241 | - */ |
|
242 | - public function dontSeeTextInViewMessageModal($text_to_view) |
|
243 | - { |
|
244 | - $this->seeTextInViewMessageModal($text_to_view, true); |
|
245 | - } |
|
13 | + /** |
|
14 | + * @param string $additional_params Any additional request parameters for the generated url should be included as |
|
15 | + * a string. |
|
16 | + */ |
|
17 | + public function amOnMessagesActivityListTablePage($additional_params = '') |
|
18 | + { |
|
19 | + $this->actor()->amOnAdminPage(MessagesPage::messageActivityListTableUrl($additional_params)); |
|
20 | + } |
|
21 | + |
|
22 | + /** |
|
23 | + * @param string $additional_params Any additional request parameters for the generated url should be included as |
|
24 | + * a string. |
|
25 | + */ |
|
26 | + public function amOnDefaultMessageTemplateListTablePage($additional_params = '') |
|
27 | + { |
|
28 | + $this->actor()->amOnAdminPage(MessagesPage::defaultMessageTemplateListTableUrl($additional_params)); |
|
29 | + } |
|
30 | + |
|
31 | + |
|
32 | + /** |
|
33 | + * @param string $additional_params Any additional request parameters for the generated url should be included as |
|
34 | + * a string. |
|
35 | + */ |
|
36 | + public function amOnCustomMessageTemplateListTablePage($additional_params = '') |
|
37 | + { |
|
38 | + $this->actor()->amOnAdminPage(MessagesPage::customMessageTemplateListTableUrl($additional_params)); |
|
39 | + } |
|
40 | + |
|
41 | + |
|
42 | + /** |
|
43 | + * Directs to message settings page |
|
44 | + */ |
|
45 | + public function amOnMessageSettingsPage() |
|
46 | + { |
|
47 | + $this->actor()->amOnAdminPage(MessagesPage::messageSettingsUrl()); |
|
48 | + } |
|
49 | + |
|
50 | + |
|
51 | + public function activateMessageTypeForMessenger($message_type_slug, $messenger_slug = 'email') |
|
52 | + { |
|
53 | + $this->actor()->dragAndDrop( |
|
54 | + MessagesPage::draggableSettingsBoxSelectorForMessageTypeAndMessenger($message_type_slug, $messenger_slug), |
|
55 | + MessagesPage::MESSAGES_SETTINGS_ACTIVE_MESSAGE_TYPES_CONTAINER_SELECTOR |
|
56 | + ); |
|
57 | + } |
|
58 | + |
|
59 | + |
|
60 | + /** |
|
61 | + * Assumes you are already on the list table page that has the ui for editing the template. |
|
62 | + * @param string $message_type_slug |
|
63 | + * @param string $context [optional] if you want to click directly to the given context in the editor |
|
64 | + */ |
|
65 | + public function clickToEditMessageTemplateByMessageType($message_type_slug, $context = '') |
|
66 | + { |
|
67 | + $this->actor()->click(MessagesPage::editMessageTemplateClassByMessageType($message_type_slug, $context)); |
|
68 | + } |
|
69 | + |
|
70 | + |
|
71 | + /** |
|
72 | + * Use this action to verify that the count for the given text in the specified field is as expected. For example |
|
73 | + * filling the condition of, "There should only be 1 instance of `[email protected]` in all the 'to' column. |
|
74 | + * |
|
75 | + * @param int $expected_occurence_count |
|
76 | + * @param string $text_to_check_for |
|
77 | + * @param string $field |
|
78 | + * @param string $message_type_label |
|
79 | + * @param string $message_status |
|
80 | + * @param string $messenger |
|
81 | + * @param string $context |
|
82 | + */ |
|
83 | + public function verifyMatchingCountofTextInMessageActivityListTableFor( |
|
84 | + $expected_occurence_count, |
|
85 | + $text_to_check_for, |
|
86 | + $field, |
|
87 | + $message_type_label, |
|
88 | + $message_status = MessagesPage::MESSAGE_STATUS_SENT, |
|
89 | + $messenger = 'Email', |
|
90 | + $context = 'Event Admin' |
|
91 | + ) { |
|
92 | + $elements = $this->actor()->grabMultiple(MessagesPage::messagesActivityListTableCellSelectorFor( |
|
93 | + $field, |
|
94 | + $message_type_label, |
|
95 | + $message_status, |
|
96 | + $messenger, |
|
97 | + $context, |
|
98 | + $text_to_check_for, |
|
99 | + 0 |
|
100 | + )); |
|
101 | + $actual_count = count($elements); |
|
102 | + $this->actor()->assertEquals( |
|
103 | + $expected_occurence_count, |
|
104 | + $actual_count, |
|
105 | + sprintf( |
|
106 | + 'Expected %s of the %s text for the %s field but there were actually %s counted.', |
|
107 | + $expected_occurence_count, |
|
108 | + $text_to_check_for, |
|
109 | + $field, |
|
110 | + $actual_count |
|
111 | + ) |
|
112 | + ); |
|
113 | + } |
|
114 | + |
|
115 | + |
|
116 | + /** |
|
117 | + * This will create a custom message template for the given messenger and message type from the context of the |
|
118 | + * default (global) message template list table. |
|
119 | + * Also takes care of verifying the template was created. |
|
120 | + * @param string $message_type_label |
|
121 | + * @param string $messenger_label |
|
122 | + */ |
|
123 | + public function createCustomMessageTemplateFromDefaultFor($message_type_label, $messenger_label) |
|
124 | + { |
|
125 | + $this->amOnDefaultMessageTemplateListTablePage(); |
|
126 | + $this->actor()->click( |
|
127 | + MessagesPage::createCustomButtonForMessageTypeAndMessenger( |
|
128 | + $message_type_label, |
|
129 | + $messenger_label |
|
130 | + ) |
|
131 | + ); |
|
132 | + $this->actor()->seeInField('#title', 'New Custom Template'); |
|
133 | + } |
|
134 | + |
|
135 | + |
|
136 | + /** |
|
137 | + * This switches the context of the current messages template to the given reference. |
|
138 | + * @param string $context_reference This should be the visible label for the option. |
|
139 | + */ |
|
140 | + public function switchContextTo($context_reference) |
|
141 | + { |
|
142 | + $this->actor()->selectOption(MessagesPage::MESSAGES_CONTEXT_SWITCHER_SELECTOR, $context_reference); |
|
143 | + $this->actor()->click(MessagesPage::MESSAGES_CONTEXT_SWITCHER_BUTTON_SELECTOR); |
|
144 | + $this->actor()->waitForText($context_reference, 10, 'h1'); |
|
145 | + } |
|
146 | + |
|
147 | + |
|
148 | + /** |
|
149 | + * This takes care of clicking the View Message icon for the given parameters. |
|
150 | + * Assumes you are already viewing the messages activity list table. |
|
151 | + * @param $message_type_label |
|
152 | + * @param $message_status |
|
153 | + * @param string $messenger |
|
154 | + * @param string $context |
|
155 | + * @param int $number_in_set |
|
156 | + */ |
|
157 | + public function viewMessageInMessagesListTableFor( |
|
158 | + $message_type_label, |
|
159 | + $message_status = MessagesPage::MESSAGE_STATUS_SENT, |
|
160 | + $messenger = 'Email', |
|
161 | + $context = 'Event Admin', |
|
162 | + $number_in_set = 1 |
|
163 | + ) { |
|
164 | + $this->actor()->click(MessagesPage::messagesActivityListTableViewButtonSelectorFor( |
|
165 | + $message_type_label, |
|
166 | + $message_status, |
|
167 | + $messenger, |
|
168 | + $context, |
|
169 | + $number_in_set |
|
170 | + )); |
|
171 | + } |
|
172 | + |
|
173 | + |
|
174 | + /** |
|
175 | + * Takes care of deleting a message matching the given parameters via the message activity list table. |
|
176 | + * Assumes you are already viewing the messages activity list table. |
|
177 | + * @param $message_type_label |
|
178 | + * @param $message_status |
|
179 | + * @param string $messenger |
|
180 | + * @param string $context |
|
181 | + * @param int $number_in_set |
|
182 | + */ |
|
183 | + public function deleteMessageInMessagesListTableFor( |
|
184 | + $message_type_label, |
|
185 | + $message_status = MessagesPage::MESSAGE_STATUS_SENT, |
|
186 | + $messenger = 'Email', |
|
187 | + $context = 'Event Admin', |
|
188 | + $number_in_set = 1 |
|
189 | + ) { |
|
190 | + $this->actor()->moveMouseOver( |
|
191 | + MessagesPage::messagesActivityListTableCellSelectorFor( |
|
192 | + 'to', |
|
193 | + $message_type_label, |
|
194 | + $message_status, |
|
195 | + $messenger, |
|
196 | + $context, |
|
197 | + '', |
|
198 | + $number_in_set |
|
199 | + ) |
|
200 | + ); |
|
201 | + $this->actor()->waitForElementVisible( |
|
202 | + MessagesPage::messagesActivityListTableDeleteActionSelectorFor( |
|
203 | + $message_type_label, |
|
204 | + $message_status, |
|
205 | + $messenger, |
|
206 | + $context, |
|
207 | + $number_in_set |
|
208 | + ) |
|
209 | + ); |
|
210 | + $this->actor()->click( |
|
211 | + MessagesPage::messagesActivityListTableDeleteActionSelectorFor( |
|
212 | + $message_type_label, |
|
213 | + $message_status, |
|
214 | + $messenger, |
|
215 | + $context, |
|
216 | + $number_in_set |
|
217 | + ) |
|
218 | + ); |
|
219 | + $this->actor()->waitForText('successfully deleted'); |
|
220 | + } |
|
221 | + |
|
222 | + |
|
223 | + /** |
|
224 | + * Assuming you have already triggered the view modal for a single message from the context of the message activity |
|
225 | + * list table, this will take care of validating the given text is in that window. |
|
226 | + * @param string $text_to_view |
|
227 | + */ |
|
228 | + public function seeTextInViewMessageModal($text_to_view, $should_not_see = false) |
|
229 | + { |
|
230 | + $this->actor()->waitForElementVisible('.ee-admin-dialog-container-inner-content'); |
|
231 | + $this->actor()->switchToIframe('message-view-window'); |
|
232 | + $should_not_see ? $this->actor()->dontSee($text_to_view) : $this->actor()->see($text_to_view); |
|
233 | + $this->actor()->switchToIframe(); |
|
234 | + } |
|
235 | + |
|
236 | + |
|
237 | + /** |
|
238 | + * Assuming you have already triggered the view modal for a single message from the context of the message activity |
|
239 | + * list table, this will take care of validating the given text is NOT that window. |
|
240 | + * @param string $text_to_view |
|
241 | + */ |
|
242 | + public function dontSeeTextInViewMessageModal($text_to_view) |
|
243 | + { |
|
244 | + $this->seeTextInViewMessageModal($text_to_view, true); |
|
245 | + } |
|
246 | 246 | } |
@@ -14,225 +14,225 @@ |
||
14 | 14 | class EventsAdmin extends CoreAdmin |
15 | 15 | { |
16 | 16 | |
17 | - /** |
|
18 | - * Selector for the Add new Event button in the admin. |
|
19 | - * @var string |
|
20 | - */ |
|
21 | - const ADD_NEW_EVENT_BUTTON_SELECTOR = '#add-new-event'; |
|
22 | - |
|
23 | - |
|
24 | - /** |
|
25 | - * Selector for the Event Title field in the event editor |
|
26 | - * @var string |
|
27 | - */ |
|
28 | - const EVENT_EDITOR_TITLE_FIELD_SELECTOR = "//input[@id='title']"; |
|
29 | - |
|
30 | - /** |
|
31 | - * Selector for the publish submit button in the event editor. |
|
32 | - * @var string |
|
33 | - */ |
|
34 | - const EVENT_EDITOR_PUBLISH_BUTTON_SELECTOR = "#publish"; |
|
35 | - |
|
36 | - |
|
37 | - /** |
|
38 | - * @var string |
|
39 | - */ |
|
40 | - const EVENT_EDITOR_DEFAULT_REGISTRATION_STATUS_FIELD_SELECTOR = '#EVT_default_registration_status'; |
|
41 | - |
|
42 | - /** |
|
43 | - * Selector for the view link after publishing an event. |
|
44 | - * @var string |
|
45 | - */ |
|
46 | - const EVENT_EDITOR_VIEW_LINK_AFTER_PUBLISH_SELECTOR = "//div[@id='message']/p/a"; |
|
17 | + /** |
|
18 | + * Selector for the Add new Event button in the admin. |
|
19 | + * @var string |
|
20 | + */ |
|
21 | + const ADD_NEW_EVENT_BUTTON_SELECTOR = '#add-new-event'; |
|
22 | + |
|
23 | + |
|
24 | + /** |
|
25 | + * Selector for the Event Title field in the event editor |
|
26 | + * @var string |
|
27 | + */ |
|
28 | + const EVENT_EDITOR_TITLE_FIELD_SELECTOR = "//input[@id='title']"; |
|
29 | + |
|
30 | + /** |
|
31 | + * Selector for the publish submit button in the event editor. |
|
32 | + * @var string |
|
33 | + */ |
|
34 | + const EVENT_EDITOR_PUBLISH_BUTTON_SELECTOR = "#publish"; |
|
35 | + |
|
36 | + |
|
37 | + /** |
|
38 | + * @var string |
|
39 | + */ |
|
40 | + const EVENT_EDITOR_DEFAULT_REGISTRATION_STATUS_FIELD_SELECTOR = '#EVT_default_registration_status'; |
|
41 | + |
|
42 | + /** |
|
43 | + * Selector for the view link after publishing an event. |
|
44 | + * @var string |
|
45 | + */ |
|
46 | + const EVENT_EDITOR_VIEW_LINK_AFTER_PUBLISH_SELECTOR = "//div[@id='message']/p/a"; |
|
47 | 47 | |
48 | - |
|
49 | - /** |
|
50 | - * Selector for the ID of the event in the event editor |
|
51 | - * @var string |
|
52 | - */ |
|
53 | - const EVENT_EDITOR_EVT_ID_SELECTOR = "//input[@id='post_ID']"; |
|
48 | + |
|
49 | + /** |
|
50 | + * Selector for the ID of the event in the event editor |
|
51 | + * @var string |
|
52 | + */ |
|
53 | + const EVENT_EDITOR_EVT_ID_SELECTOR = "//input[@id='post_ID']"; |
|
54 | 54 | |
55 | 55 | |
56 | - /** |
|
57 | - * Selector for the search input on the event list table page. |
|
58 | - * @var string |
|
59 | - */ |
|
60 | - const EVENT_LIST_TABLE_SEARCH_INPUT_SELECTOR = '#toplevel_page_espresso_events-search-input'; |
|
61 | - |
|
62 | - |
|
63 | - |
|
64 | - |
|
65 | - /** |
|
66 | - * @param string $additional_params |
|
67 | - * @return string |
|
68 | - */ |
|
69 | - public static function defaultEventsListTableUrl($additional_params = '') |
|
70 | - { |
|
71 | - return self::adminUrl('espresso_events', 'default', $additional_params); |
|
72 | - } |
|
73 | - |
|
74 | - |
|
75 | - /** |
|
76 | - * The selector for the DTTname field for the given row in the event editor. |
|
77 | - * @param int $row_number |
|
78 | - * @return string |
|
79 | - */ |
|
80 | - public static function eventEditorDatetimeNameFieldSelector($row_number = 1) |
|
81 | - { |
|
82 | - return self::eventEditorDatetimeFieldSelectorForField('DTT_name', $row_number); |
|
83 | - } |
|
84 | - |
|
85 | - |
|
86 | - /** |
|
87 | - * The selector for the DTT_EVT_start field for the given row in the event editor.d |
|
88 | - * @param int $row_number |
|
89 | - * @return string |
|
90 | - */ |
|
91 | - public static function eventEditorDatetimeStartDateFieldSelector($row_number = 1) |
|
92 | - { |
|
93 | - return self::eventEditorDatetimeFieldSelectorForField('DTT_EVT_start', $row_number); |
|
94 | - } |
|
95 | - |
|
96 | - |
|
97 | - /** |
|
98 | - * Wrapper for getting the selector for a given field and given row of a datetime in the event editor. |
|
99 | - * |
|
100 | - * @param string $field_name |
|
101 | - * @param int $row_number |
|
102 | - * @return string |
|
103 | - */ |
|
104 | - public static function eventEditorDatetimeFieldSelectorForField($field_name, $row_number = 1) |
|
105 | - { |
|
106 | - return "//input[@id='event-datetime-$field_name-$row_number']"; |
|
107 | - } |
|
108 | - |
|
109 | - |
|
110 | - /** |
|
111 | - * The selector for the TKT_name field for the given display row in the event editor. |
|
112 | - * @param int $row_number |
|
113 | - * @return string |
|
114 | - */ |
|
115 | - public static function eventEditorTicketNameFieldSelector($row_number = 1) |
|
116 | - { |
|
117 | - return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_name', $row_number); |
|
118 | - } |
|
119 | - |
|
120 | - |
|
121 | - public static function eventEditorTicketPriceFieldSelector($row_number = 1) |
|
122 | - { |
|
123 | - return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_base_price', $row_number); |
|
124 | - } |
|
125 | - |
|
126 | - |
|
127 | - public static function eventEditorTicketAdvancedDetailsSelector($row_number = 1) |
|
128 | - { |
|
129 | - return "//tr[@id='display-ticketrow-$row_number']//span[contains(@class, 'gear-icon')]"; |
|
130 | - } |
|
131 | - |
|
132 | - |
|
133 | - public static function eventEditorTicketAdvancedDetailsSubtotalSelector($row_number = 1) |
|
134 | - { |
|
135 | - return "//span[@id='price-total-amount-$row_number']"; |
|
136 | - } |
|
137 | - |
|
138 | - |
|
139 | - public static function eventEditorTicketAdvancedDetailsTotalSelector($row_number = 1) |
|
140 | - { |
|
141 | - return "//span[@id='price-total-amount-$row_number']"; |
|
142 | - } |
|
143 | - |
|
144 | - |
|
145 | - public static function eventEditorTicketTaxableCheckboxSelector($row_number = 1) |
|
146 | - { |
|
147 | - return "//input[@id='edit-ticket-TKT_taxable-$row_number']"; |
|
148 | - } |
|
149 | - |
|
150 | - |
|
151 | - /** |
|
152 | - * This returns the xpath locater for the Tax amount display container within the advanced settings view for the |
|
153 | - * given ticket (row) and the given tax id (PRC_ID). |
|
154 | - * |
|
155 | - * @param int $tax_id The PRC_ID for the tax you want the locater for. Note, this defaults to the default tax |
|
156 | - * setup on a fresh install. |
|
157 | - * @param int $row_number What row representing the ticket you want the locator for. |
|
158 | - * @return string |
|
159 | - */ |
|
160 | - public static function eventEditorTicketTaxAmountDisplayForTaxIdAndTicketRowSelector($tax_id = 2, $row_number = 1) |
|
161 | - { |
|
162 | - return "//span[@id='TKT-tax-amount-display-$tax_id-$row_number']"; |
|
163 | - } |
|
164 | - |
|
165 | - |
|
166 | - /** |
|
167 | - * Wrapper for getting the selector for a given field and given display row of a ticket in the event editor. |
|
168 | - * @param $field_name |
|
169 | - * @param int $row_number |
|
170 | - * @return string |
|
171 | - */ |
|
172 | - public static function eventEditorTicketFieldSelectorForFieldInDisplayRow($field_name, $row_number = 1) |
|
173 | - { |
|
174 | - return "//tr[@id='display-ticketrow-$row_number']//input[contains(@class, 'edit-ticket-$field_name')]"; |
|
175 | - } |
|
176 | - |
|
177 | - |
|
178 | - /** |
|
179 | - * Returns the selector for the event title edit link in the events list table for the given Event Title. |
|
180 | - * @param string $event_title |
|
181 | - * @return string |
|
182 | - */ |
|
183 | - public static function eventListTableEventTitleEditLinkSelectorForTitle($event_title) |
|
184 | - { |
|
185 | - return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']"; |
|
186 | - } |
|
187 | - |
|
188 | - |
|
189 | - /** |
|
190 | - * Locator for for the ID column in the event list table for a given event title. |
|
191 | - * @param string $event_title |
|
192 | - * @return string |
|
193 | - */ |
|
194 | - public static function eventListTableEventIdSelectorForTitle($event_title) |
|
195 | - { |
|
196 | - return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']" |
|
197 | - . "//ancestor::tr/th[contains(@class, 'check-column')]/input"; |
|
198 | - } |
|
199 | - |
|
200 | - |
|
201 | - /** |
|
202 | - * Locator for the view link in the row of an event list table for the given event title. |
|
203 | - * @param string $event_title |
|
204 | - * @return string |
|
205 | - */ |
|
206 | - public static function eventListTableEventTitleViewLinkSelectorForTitle($event_title) |
|
207 | - { |
|
208 | - return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']" |
|
209 | - . "//ancestor::td//span[@class='view']/a"; |
|
210 | - } |
|
211 | - |
|
212 | - |
|
213 | - /** |
|
214 | - * Locator for the messenger tab in the Notifications metabox in the event editor. |
|
215 | - * @param string $messenger_slug The slug for the messenger (it's reference slug). |
|
216 | - * @return string |
|
217 | - */ |
|
218 | - public static function eventEditorNotificationsMetaBoxMessengerTabSelector($messenger_slug) |
|
219 | - { |
|
220 | - return "//div[@id='espresso_events_Messages_Hooks_Extend_messages_metabox_metabox']" |
|
221 | - . "//a[@rel='ee-tab-$messenger_slug']"; |
|
222 | - } |
|
223 | - |
|
224 | - |
|
225 | - /** |
|
226 | - * Locator for the select input within the notifications metabox. |
|
227 | - * Note, this assumes the tab content for the related messenger is already visible. |
|
228 | - * @param string $message_type_label The message type label (visible string in the table) you want the selector for. |
|
229 | - * @return string |
|
230 | - */ |
|
231 | - public static function eventEditorNotificationsMetaBoxSelectSelectorForMessageType($message_type_label) |
|
232 | - { |
|
233 | - return "//div[@id='espresso_events_Messages_Hooks_Extend_messages_metabox_metabox']" |
|
234 | - . "//table[@class='messages-custom-template-switcher']" |
|
235 | - . "//tr/td[contains(.,'Registration Approved')]" |
|
236 | - . "//ancestor::tr//select[contains(@class,'message-template-selector')]"; |
|
237 | - } |
|
56 | + /** |
|
57 | + * Selector for the search input on the event list table page. |
|
58 | + * @var string |
|
59 | + */ |
|
60 | + const EVENT_LIST_TABLE_SEARCH_INPUT_SELECTOR = '#toplevel_page_espresso_events-search-input'; |
|
61 | + |
|
62 | + |
|
63 | + |
|
64 | + |
|
65 | + /** |
|
66 | + * @param string $additional_params |
|
67 | + * @return string |
|
68 | + */ |
|
69 | + public static function defaultEventsListTableUrl($additional_params = '') |
|
70 | + { |
|
71 | + return self::adminUrl('espresso_events', 'default', $additional_params); |
|
72 | + } |
|
73 | + |
|
74 | + |
|
75 | + /** |
|
76 | + * The selector for the DTTname field for the given row in the event editor. |
|
77 | + * @param int $row_number |
|
78 | + * @return string |
|
79 | + */ |
|
80 | + public static function eventEditorDatetimeNameFieldSelector($row_number = 1) |
|
81 | + { |
|
82 | + return self::eventEditorDatetimeFieldSelectorForField('DTT_name', $row_number); |
|
83 | + } |
|
84 | + |
|
85 | + |
|
86 | + /** |
|
87 | + * The selector for the DTT_EVT_start field for the given row in the event editor.d |
|
88 | + * @param int $row_number |
|
89 | + * @return string |
|
90 | + */ |
|
91 | + public static function eventEditorDatetimeStartDateFieldSelector($row_number = 1) |
|
92 | + { |
|
93 | + return self::eventEditorDatetimeFieldSelectorForField('DTT_EVT_start', $row_number); |
|
94 | + } |
|
95 | + |
|
96 | + |
|
97 | + /** |
|
98 | + * Wrapper for getting the selector for a given field and given row of a datetime in the event editor. |
|
99 | + * |
|
100 | + * @param string $field_name |
|
101 | + * @param int $row_number |
|
102 | + * @return string |
|
103 | + */ |
|
104 | + public static function eventEditorDatetimeFieldSelectorForField($field_name, $row_number = 1) |
|
105 | + { |
|
106 | + return "//input[@id='event-datetime-$field_name-$row_number']"; |
|
107 | + } |
|
108 | + |
|
109 | + |
|
110 | + /** |
|
111 | + * The selector for the TKT_name field for the given display row in the event editor. |
|
112 | + * @param int $row_number |
|
113 | + * @return string |
|
114 | + */ |
|
115 | + public static function eventEditorTicketNameFieldSelector($row_number = 1) |
|
116 | + { |
|
117 | + return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_name', $row_number); |
|
118 | + } |
|
119 | + |
|
120 | + |
|
121 | + public static function eventEditorTicketPriceFieldSelector($row_number = 1) |
|
122 | + { |
|
123 | + return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_base_price', $row_number); |
|
124 | + } |
|
125 | + |
|
126 | + |
|
127 | + public static function eventEditorTicketAdvancedDetailsSelector($row_number = 1) |
|
128 | + { |
|
129 | + return "//tr[@id='display-ticketrow-$row_number']//span[contains(@class, 'gear-icon')]"; |
|
130 | + } |
|
131 | + |
|
132 | + |
|
133 | + public static function eventEditorTicketAdvancedDetailsSubtotalSelector($row_number = 1) |
|
134 | + { |
|
135 | + return "//span[@id='price-total-amount-$row_number']"; |
|
136 | + } |
|
137 | + |
|
138 | + |
|
139 | + public static function eventEditorTicketAdvancedDetailsTotalSelector($row_number = 1) |
|
140 | + { |
|
141 | + return "//span[@id='price-total-amount-$row_number']"; |
|
142 | + } |
|
143 | + |
|
144 | + |
|
145 | + public static function eventEditorTicketTaxableCheckboxSelector($row_number = 1) |
|
146 | + { |
|
147 | + return "//input[@id='edit-ticket-TKT_taxable-$row_number']"; |
|
148 | + } |
|
149 | + |
|
150 | + |
|
151 | + /** |
|
152 | + * This returns the xpath locater for the Tax amount display container within the advanced settings view for the |
|
153 | + * given ticket (row) and the given tax id (PRC_ID). |
|
154 | + * |
|
155 | + * @param int $tax_id The PRC_ID for the tax you want the locater for. Note, this defaults to the default tax |
|
156 | + * setup on a fresh install. |
|
157 | + * @param int $row_number What row representing the ticket you want the locator for. |
|
158 | + * @return string |
|
159 | + */ |
|
160 | + public static function eventEditorTicketTaxAmountDisplayForTaxIdAndTicketRowSelector($tax_id = 2, $row_number = 1) |
|
161 | + { |
|
162 | + return "//span[@id='TKT-tax-amount-display-$tax_id-$row_number']"; |
|
163 | + } |
|
164 | + |
|
165 | + |
|
166 | + /** |
|
167 | + * Wrapper for getting the selector for a given field and given display row of a ticket in the event editor. |
|
168 | + * @param $field_name |
|
169 | + * @param int $row_number |
|
170 | + * @return string |
|
171 | + */ |
|
172 | + public static function eventEditorTicketFieldSelectorForFieldInDisplayRow($field_name, $row_number = 1) |
|
173 | + { |
|
174 | + return "//tr[@id='display-ticketrow-$row_number']//input[contains(@class, 'edit-ticket-$field_name')]"; |
|
175 | + } |
|
176 | + |
|
177 | + |
|
178 | + /** |
|
179 | + * Returns the selector for the event title edit link in the events list table for the given Event Title. |
|
180 | + * @param string $event_title |
|
181 | + * @return string |
|
182 | + */ |
|
183 | + public static function eventListTableEventTitleEditLinkSelectorForTitle($event_title) |
|
184 | + { |
|
185 | + return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']"; |
|
186 | + } |
|
187 | + |
|
188 | + |
|
189 | + /** |
|
190 | + * Locator for for the ID column in the event list table for a given event title. |
|
191 | + * @param string $event_title |
|
192 | + * @return string |
|
193 | + */ |
|
194 | + public static function eventListTableEventIdSelectorForTitle($event_title) |
|
195 | + { |
|
196 | + return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']" |
|
197 | + . "//ancestor::tr/th[contains(@class, 'check-column')]/input"; |
|
198 | + } |
|
199 | + |
|
200 | + |
|
201 | + /** |
|
202 | + * Locator for the view link in the row of an event list table for the given event title. |
|
203 | + * @param string $event_title |
|
204 | + * @return string |
|
205 | + */ |
|
206 | + public static function eventListTableEventTitleViewLinkSelectorForTitle($event_title) |
|
207 | + { |
|
208 | + return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']" |
|
209 | + . "//ancestor::td//span[@class='view']/a"; |
|
210 | + } |
|
211 | + |
|
212 | + |
|
213 | + /** |
|
214 | + * Locator for the messenger tab in the Notifications metabox in the event editor. |
|
215 | + * @param string $messenger_slug The slug for the messenger (it's reference slug). |
|
216 | + * @return string |
|
217 | + */ |
|
218 | + public static function eventEditorNotificationsMetaBoxMessengerTabSelector($messenger_slug) |
|
219 | + { |
|
220 | + return "//div[@id='espresso_events_Messages_Hooks_Extend_messages_metabox_metabox']" |
|
221 | + . "//a[@rel='ee-tab-$messenger_slug']"; |
|
222 | + } |
|
223 | + |
|
224 | + |
|
225 | + /** |
|
226 | + * Locator for the select input within the notifications metabox. |
|
227 | + * Note, this assumes the tab content for the related messenger is already visible. |
|
228 | + * @param string $message_type_label The message type label (visible string in the table) you want the selector for. |
|
229 | + * @return string |
|
230 | + */ |
|
231 | + public static function eventEditorNotificationsMetaBoxSelectSelectorForMessageType($message_type_label) |
|
232 | + { |
|
233 | + return "//div[@id='espresso_events_Messages_Hooks_Extend_messages_metabox_metabox']" |
|
234 | + . "//table[@class='messages-custom-template-switcher']" |
|
235 | + . "//tr/td[contains(.,'Registration Approved')]" |
|
236 | + . "//ancestor::tr//select[contains(@class,'message-template-selector')]"; |
|
237 | + } |
|
238 | 238 | } |
@@ -1,5 +1,5 @@ discard block |
||
1 | 1 | <?php if ( ! defined('ABSPATH')) { |
2 | - exit('No direct script access allowed'); |
|
2 | + exit('No direct script access allowed'); |
|
3 | 3 | } |
4 | 4 | /* |
5 | 5 | Plugin Name: Event Espresso |
@@ -40,243 +40,243 @@ discard block |
||
40 | 40 | * @since 4.0 |
41 | 41 | */ |
42 | 42 | if (function_exists('espresso_version')) { |
43 | - /** |
|
44 | - * espresso_duplicate_plugin_error |
|
45 | - * displays if more than one version of EE is activated at the same time |
|
46 | - */ |
|
47 | - function espresso_duplicate_plugin_error() |
|
48 | - { |
|
49 | - ?> |
|
43 | + /** |
|
44 | + * espresso_duplicate_plugin_error |
|
45 | + * displays if more than one version of EE is activated at the same time |
|
46 | + */ |
|
47 | + function espresso_duplicate_plugin_error() |
|
48 | + { |
|
49 | + ?> |
|
50 | 50 | <div class="error"> |
51 | 51 | <p> |
52 | 52 | <?php echo esc_html__( |
53 | - 'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.', |
|
54 | - 'event_espresso' |
|
55 | - ); ?> |
|
53 | + 'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.', |
|
54 | + 'event_espresso' |
|
55 | + ); ?> |
|
56 | 56 | </p> |
57 | 57 | </div> |
58 | 58 | <?php |
59 | - espresso_deactivate_plugin(plugin_basename(__FILE__)); |
|
60 | - } |
|
59 | + espresso_deactivate_plugin(plugin_basename(__FILE__)); |
|
60 | + } |
|
61 | 61 | |
62 | - add_action('admin_notices', 'espresso_duplicate_plugin_error', 1); |
|
62 | + add_action('admin_notices', 'espresso_duplicate_plugin_error', 1); |
|
63 | 63 | } else { |
64 | - define('EE_MIN_PHP_VER_REQUIRED', '5.3.9'); |
|
65 | - if ( ! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) { |
|
66 | - /** |
|
67 | - * espresso_minimum_php_version_error |
|
68 | - * |
|
69 | - * @return void |
|
70 | - */ |
|
71 | - function espresso_minimum_php_version_error() |
|
72 | - { |
|
73 | - ?> |
|
64 | + define('EE_MIN_PHP_VER_REQUIRED', '5.3.9'); |
|
65 | + if ( ! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) { |
|
66 | + /** |
|
67 | + * espresso_minimum_php_version_error |
|
68 | + * |
|
69 | + * @return void |
|
70 | + */ |
|
71 | + function espresso_minimum_php_version_error() |
|
72 | + { |
|
73 | + ?> |
|
74 | 74 | <div class="error"> |
75 | 75 | <p> |
76 | 76 | <?php |
77 | - printf( |
|
78 | - esc_html__( |
|
79 | - 'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.', |
|
80 | - 'event_espresso' |
|
81 | - ), |
|
82 | - EE_MIN_PHP_VER_REQUIRED, |
|
83 | - PHP_VERSION, |
|
84 | - '<br/>', |
|
85 | - '<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>' |
|
86 | - ); |
|
87 | - ?> |
|
77 | + printf( |
|
78 | + esc_html__( |
|
79 | + 'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.', |
|
80 | + 'event_espresso' |
|
81 | + ), |
|
82 | + EE_MIN_PHP_VER_REQUIRED, |
|
83 | + PHP_VERSION, |
|
84 | + '<br/>', |
|
85 | + '<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>' |
|
86 | + ); |
|
87 | + ?> |
|
88 | 88 | </p> |
89 | 89 | </div> |
90 | 90 | <?php |
91 | - espresso_deactivate_plugin(plugin_basename(__FILE__)); |
|
92 | - } |
|
91 | + espresso_deactivate_plugin(plugin_basename(__FILE__)); |
|
92 | + } |
|
93 | 93 | |
94 | - add_action('admin_notices', 'espresso_minimum_php_version_error', 1); |
|
95 | - } else { |
|
96 | - /** |
|
97 | - * espresso_version |
|
98 | - * Returns the plugin version |
|
99 | - * |
|
100 | - * @return string |
|
101 | - */ |
|
102 | - function espresso_version() |
|
103 | - { |
|
104 | - return apply_filters('FHEE__espresso__espresso_version', '4.9.43.rc.014'); |
|
105 | - } |
|
94 | + add_action('admin_notices', 'espresso_minimum_php_version_error', 1); |
|
95 | + } else { |
|
96 | + /** |
|
97 | + * espresso_version |
|
98 | + * Returns the plugin version |
|
99 | + * |
|
100 | + * @return string |
|
101 | + */ |
|
102 | + function espresso_version() |
|
103 | + { |
|
104 | + return apply_filters('FHEE__espresso__espresso_version', '4.9.43.rc.014'); |
|
105 | + } |
|
106 | 106 | |
107 | - // define versions |
|
108 | - define('EVENT_ESPRESSO_VERSION', espresso_version()); |
|
109 | - define('EE_MIN_WP_VER_REQUIRED', '4.1'); |
|
110 | - define('EE_MIN_WP_VER_RECOMMENDED', '4.4.2'); |
|
111 | - define('EE_MIN_PHP_VER_RECOMMENDED', '5.4.44'); |
|
112 | - define('EVENT_ESPRESSO_MAIN_FILE', __FILE__); |
|
113 | - //used to be DIRECTORY_SEPARATOR, but that caused issues on windows |
|
114 | - if ( ! defined('DS')) { |
|
115 | - define('DS', '/'); |
|
116 | - } |
|
117 | - if ( ! defined('PS')) { |
|
118 | - define('PS', PATH_SEPARATOR); |
|
119 | - } |
|
120 | - if ( ! defined('SP')) { |
|
121 | - define('SP', ' '); |
|
122 | - } |
|
123 | - if ( ! defined('EENL')) { |
|
124 | - define('EENL', "\n"); |
|
125 | - } |
|
126 | - define('EE_SUPPORT_EMAIL', '[email protected]'); |
|
127 | - // define the plugin directory and URL |
|
128 | - define('EE_PLUGIN_BASENAME', plugin_basename(EVENT_ESPRESSO_MAIN_FILE)); |
|
129 | - define('EE_PLUGIN_DIR_PATH', plugin_dir_path(EVENT_ESPRESSO_MAIN_FILE)); |
|
130 | - define('EE_PLUGIN_DIR_URL', plugin_dir_url(EVENT_ESPRESSO_MAIN_FILE)); |
|
131 | - // main root folder paths |
|
132 | - define('EE_ADMIN_PAGES', EE_PLUGIN_DIR_PATH . 'admin_pages' . DS); |
|
133 | - define('EE_CORE', EE_PLUGIN_DIR_PATH . 'core' . DS); |
|
134 | - define('EE_MODULES', EE_PLUGIN_DIR_PATH . 'modules' . DS); |
|
135 | - define('EE_PUBLIC', EE_PLUGIN_DIR_PATH . 'public' . DS); |
|
136 | - define('EE_SHORTCODES', EE_PLUGIN_DIR_PATH . 'shortcodes' . DS); |
|
137 | - define('EE_WIDGETS', EE_PLUGIN_DIR_PATH . 'widgets' . DS); |
|
138 | - define('EE_PAYMENT_METHODS', EE_PLUGIN_DIR_PATH . 'payment_methods' . DS); |
|
139 | - define('EE_CAFF_PATH', EE_PLUGIN_DIR_PATH . 'caffeinated' . DS); |
|
140 | - // core system paths |
|
141 | - define('EE_ADMIN', EE_CORE . 'admin' . DS); |
|
142 | - define('EE_CPTS', EE_CORE . 'CPTs' . DS); |
|
143 | - define('EE_CLASSES', EE_CORE . 'db_classes' . DS); |
|
144 | - define('EE_INTERFACES', EE_CORE . 'interfaces' . DS); |
|
145 | - define('EE_BUSINESS', EE_CORE . 'business' . DS); |
|
146 | - define('EE_MODELS', EE_CORE . 'db_models' . DS); |
|
147 | - define('EE_HELPERS', EE_CORE . 'helpers' . DS); |
|
148 | - define('EE_LIBRARIES', EE_CORE . 'libraries' . DS); |
|
149 | - define('EE_TEMPLATES', EE_CORE . 'templates' . DS); |
|
150 | - define('EE_THIRD_PARTY', EE_CORE . 'third_party_libs' . DS); |
|
151 | - define('EE_GLOBAL_ASSETS', EE_TEMPLATES . 'global_assets' . DS); |
|
152 | - define('EE_FORM_SECTIONS', EE_LIBRARIES . 'form_sections' . DS); |
|
153 | - // gateways |
|
154 | - define('EE_GATEWAYS', EE_MODULES . 'gateways' . DS); |
|
155 | - define('EE_GATEWAYS_URL', EE_PLUGIN_DIR_URL . 'modules' . DS . 'gateways' . DS); |
|
156 | - // asset URL paths |
|
157 | - define('EE_TEMPLATES_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'templates' . DS); |
|
158 | - define('EE_GLOBAL_ASSETS_URL', EE_TEMPLATES_URL . 'global_assets' . DS); |
|
159 | - define('EE_IMAGES_URL', EE_GLOBAL_ASSETS_URL . 'images' . DS); |
|
160 | - define('EE_THIRD_PARTY_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'third_party_libs' . DS); |
|
161 | - define('EE_HELPERS_ASSETS', EE_PLUGIN_DIR_URL . 'core/helpers/assets/'); |
|
162 | - define('EE_LIBRARIES_URL', EE_PLUGIN_DIR_URL . 'core/libraries/'); |
|
163 | - // define upload paths |
|
164 | - $uploads = wp_upload_dir(); |
|
165 | - // define the uploads directory and URL |
|
166 | - define('EVENT_ESPRESSO_UPLOAD_DIR', $uploads['basedir'] . DS . 'espresso' . DS); |
|
167 | - define('EVENT_ESPRESSO_UPLOAD_URL', $uploads['baseurl'] . DS . 'espresso' . DS); |
|
168 | - // define the templates directory and URL |
|
169 | - define('EVENT_ESPRESSO_TEMPLATE_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'templates' . DS); |
|
170 | - define('EVENT_ESPRESSO_TEMPLATE_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'templates' . DS); |
|
171 | - // define the gateway directory and URL |
|
172 | - define('EVENT_ESPRESSO_GATEWAY_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'gateways' . DS); |
|
173 | - define('EVENT_ESPRESSO_GATEWAY_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'gateways' . DS); |
|
174 | - // languages folder/path |
|
175 | - define('EE_LANGUAGES_SAFE_LOC', '..' . DS . 'uploads' . DS . 'espresso' . DS . 'languages' . DS); |
|
176 | - define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'languages' . DS); |
|
177 | - //check for dompdf fonts in uploads |
|
178 | - if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS)) { |
|
179 | - define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS); |
|
180 | - } |
|
181 | - //ajax constants |
|
182 | - define( |
|
183 | - 'EE_FRONT_AJAX', |
|
184 | - isset($_REQUEST['ee_front_ajax']) || isset($_REQUEST['data']['ee_front_ajax']) ? true : false |
|
185 | - ); |
|
186 | - define( |
|
187 | - 'EE_ADMIN_AJAX', |
|
188 | - isset($_REQUEST['ee_admin_ajax']) || isset($_REQUEST['data']['ee_admin_ajax']) ? true : false |
|
189 | - ); |
|
190 | - //just a handy constant occasionally needed for finding values representing infinity in the DB |
|
191 | - //you're better to use this than its straight value (currently -1) in case you ever |
|
192 | - //want to change its default value! or find when -1 means infinity |
|
193 | - define('EE_INF_IN_DB', -1); |
|
194 | - define('EE_INF', INF > (float)PHP_INT_MAX ? INF : PHP_INT_MAX); |
|
195 | - define('EE_DEBUG', false); |
|
196 | - // for older WP versions |
|
197 | - if ( ! defined('MONTH_IN_SECONDS')) { |
|
198 | - define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30); |
|
199 | - } |
|
200 | - /** |
|
201 | - * espresso_plugin_activation |
|
202 | - * adds a wp-option to indicate that EE has been activated via the WP admin plugins page |
|
203 | - */ |
|
204 | - function espresso_plugin_activation() |
|
205 | - { |
|
206 | - update_option('ee_espresso_activation', true); |
|
207 | - } |
|
107 | + // define versions |
|
108 | + define('EVENT_ESPRESSO_VERSION', espresso_version()); |
|
109 | + define('EE_MIN_WP_VER_REQUIRED', '4.1'); |
|
110 | + define('EE_MIN_WP_VER_RECOMMENDED', '4.4.2'); |
|
111 | + define('EE_MIN_PHP_VER_RECOMMENDED', '5.4.44'); |
|
112 | + define('EVENT_ESPRESSO_MAIN_FILE', __FILE__); |
|
113 | + //used to be DIRECTORY_SEPARATOR, but that caused issues on windows |
|
114 | + if ( ! defined('DS')) { |
|
115 | + define('DS', '/'); |
|
116 | + } |
|
117 | + if ( ! defined('PS')) { |
|
118 | + define('PS', PATH_SEPARATOR); |
|
119 | + } |
|
120 | + if ( ! defined('SP')) { |
|
121 | + define('SP', ' '); |
|
122 | + } |
|
123 | + if ( ! defined('EENL')) { |
|
124 | + define('EENL', "\n"); |
|
125 | + } |
|
126 | + define('EE_SUPPORT_EMAIL', '[email protected]'); |
|
127 | + // define the plugin directory and URL |
|
128 | + define('EE_PLUGIN_BASENAME', plugin_basename(EVENT_ESPRESSO_MAIN_FILE)); |
|
129 | + define('EE_PLUGIN_DIR_PATH', plugin_dir_path(EVENT_ESPRESSO_MAIN_FILE)); |
|
130 | + define('EE_PLUGIN_DIR_URL', plugin_dir_url(EVENT_ESPRESSO_MAIN_FILE)); |
|
131 | + // main root folder paths |
|
132 | + define('EE_ADMIN_PAGES', EE_PLUGIN_DIR_PATH . 'admin_pages' . DS); |
|
133 | + define('EE_CORE', EE_PLUGIN_DIR_PATH . 'core' . DS); |
|
134 | + define('EE_MODULES', EE_PLUGIN_DIR_PATH . 'modules' . DS); |
|
135 | + define('EE_PUBLIC', EE_PLUGIN_DIR_PATH . 'public' . DS); |
|
136 | + define('EE_SHORTCODES', EE_PLUGIN_DIR_PATH . 'shortcodes' . DS); |
|
137 | + define('EE_WIDGETS', EE_PLUGIN_DIR_PATH . 'widgets' . DS); |
|
138 | + define('EE_PAYMENT_METHODS', EE_PLUGIN_DIR_PATH . 'payment_methods' . DS); |
|
139 | + define('EE_CAFF_PATH', EE_PLUGIN_DIR_PATH . 'caffeinated' . DS); |
|
140 | + // core system paths |
|
141 | + define('EE_ADMIN', EE_CORE . 'admin' . DS); |
|
142 | + define('EE_CPTS', EE_CORE . 'CPTs' . DS); |
|
143 | + define('EE_CLASSES', EE_CORE . 'db_classes' . DS); |
|
144 | + define('EE_INTERFACES', EE_CORE . 'interfaces' . DS); |
|
145 | + define('EE_BUSINESS', EE_CORE . 'business' . DS); |
|
146 | + define('EE_MODELS', EE_CORE . 'db_models' . DS); |
|
147 | + define('EE_HELPERS', EE_CORE . 'helpers' . DS); |
|
148 | + define('EE_LIBRARIES', EE_CORE . 'libraries' . DS); |
|
149 | + define('EE_TEMPLATES', EE_CORE . 'templates' . DS); |
|
150 | + define('EE_THIRD_PARTY', EE_CORE . 'third_party_libs' . DS); |
|
151 | + define('EE_GLOBAL_ASSETS', EE_TEMPLATES . 'global_assets' . DS); |
|
152 | + define('EE_FORM_SECTIONS', EE_LIBRARIES . 'form_sections' . DS); |
|
153 | + // gateways |
|
154 | + define('EE_GATEWAYS', EE_MODULES . 'gateways' . DS); |
|
155 | + define('EE_GATEWAYS_URL', EE_PLUGIN_DIR_URL . 'modules' . DS . 'gateways' . DS); |
|
156 | + // asset URL paths |
|
157 | + define('EE_TEMPLATES_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'templates' . DS); |
|
158 | + define('EE_GLOBAL_ASSETS_URL', EE_TEMPLATES_URL . 'global_assets' . DS); |
|
159 | + define('EE_IMAGES_URL', EE_GLOBAL_ASSETS_URL . 'images' . DS); |
|
160 | + define('EE_THIRD_PARTY_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'third_party_libs' . DS); |
|
161 | + define('EE_HELPERS_ASSETS', EE_PLUGIN_DIR_URL . 'core/helpers/assets/'); |
|
162 | + define('EE_LIBRARIES_URL', EE_PLUGIN_DIR_URL . 'core/libraries/'); |
|
163 | + // define upload paths |
|
164 | + $uploads = wp_upload_dir(); |
|
165 | + // define the uploads directory and URL |
|
166 | + define('EVENT_ESPRESSO_UPLOAD_DIR', $uploads['basedir'] . DS . 'espresso' . DS); |
|
167 | + define('EVENT_ESPRESSO_UPLOAD_URL', $uploads['baseurl'] . DS . 'espresso' . DS); |
|
168 | + // define the templates directory and URL |
|
169 | + define('EVENT_ESPRESSO_TEMPLATE_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'templates' . DS); |
|
170 | + define('EVENT_ESPRESSO_TEMPLATE_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'templates' . DS); |
|
171 | + // define the gateway directory and URL |
|
172 | + define('EVENT_ESPRESSO_GATEWAY_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'gateways' . DS); |
|
173 | + define('EVENT_ESPRESSO_GATEWAY_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'gateways' . DS); |
|
174 | + // languages folder/path |
|
175 | + define('EE_LANGUAGES_SAFE_LOC', '..' . DS . 'uploads' . DS . 'espresso' . DS . 'languages' . DS); |
|
176 | + define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'languages' . DS); |
|
177 | + //check for dompdf fonts in uploads |
|
178 | + if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS)) { |
|
179 | + define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS); |
|
180 | + } |
|
181 | + //ajax constants |
|
182 | + define( |
|
183 | + 'EE_FRONT_AJAX', |
|
184 | + isset($_REQUEST['ee_front_ajax']) || isset($_REQUEST['data']['ee_front_ajax']) ? true : false |
|
185 | + ); |
|
186 | + define( |
|
187 | + 'EE_ADMIN_AJAX', |
|
188 | + isset($_REQUEST['ee_admin_ajax']) || isset($_REQUEST['data']['ee_admin_ajax']) ? true : false |
|
189 | + ); |
|
190 | + //just a handy constant occasionally needed for finding values representing infinity in the DB |
|
191 | + //you're better to use this than its straight value (currently -1) in case you ever |
|
192 | + //want to change its default value! or find when -1 means infinity |
|
193 | + define('EE_INF_IN_DB', -1); |
|
194 | + define('EE_INF', INF > (float)PHP_INT_MAX ? INF : PHP_INT_MAX); |
|
195 | + define('EE_DEBUG', false); |
|
196 | + // for older WP versions |
|
197 | + if ( ! defined('MONTH_IN_SECONDS')) { |
|
198 | + define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30); |
|
199 | + } |
|
200 | + /** |
|
201 | + * espresso_plugin_activation |
|
202 | + * adds a wp-option to indicate that EE has been activated via the WP admin plugins page |
|
203 | + */ |
|
204 | + function espresso_plugin_activation() |
|
205 | + { |
|
206 | + update_option('ee_espresso_activation', true); |
|
207 | + } |
|
208 | 208 | |
209 | - register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation'); |
|
210 | - /** |
|
211 | - * espresso_load_error_handling |
|
212 | - * this function loads EE's class for handling exceptions and errors |
|
213 | - */ |
|
214 | - function espresso_load_error_handling() |
|
215 | - { |
|
216 | - // load debugging tools |
|
217 | - if (WP_DEBUG === true && is_readable(EE_HELPERS . 'EEH_Debug_Tools.helper.php')) { |
|
218 | - require_once(EE_HELPERS . 'EEH_Debug_Tools.helper.php'); |
|
219 | - EEH_Debug_Tools::instance(); |
|
220 | - } |
|
221 | - // load error handling |
|
222 | - if (is_readable(EE_CORE . 'EE_Error.core.php')) { |
|
223 | - require_once(EE_CORE . 'EE_Error.core.php'); |
|
224 | - } else { |
|
225 | - wp_die(esc_html__('The EE_Error core class could not be loaded.', 'event_espresso')); |
|
226 | - } |
|
227 | - } |
|
209 | + register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation'); |
|
210 | + /** |
|
211 | + * espresso_load_error_handling |
|
212 | + * this function loads EE's class for handling exceptions and errors |
|
213 | + */ |
|
214 | + function espresso_load_error_handling() |
|
215 | + { |
|
216 | + // load debugging tools |
|
217 | + if (WP_DEBUG === true && is_readable(EE_HELPERS . 'EEH_Debug_Tools.helper.php')) { |
|
218 | + require_once(EE_HELPERS . 'EEH_Debug_Tools.helper.php'); |
|
219 | + EEH_Debug_Tools::instance(); |
|
220 | + } |
|
221 | + // load error handling |
|
222 | + if (is_readable(EE_CORE . 'EE_Error.core.php')) { |
|
223 | + require_once(EE_CORE . 'EE_Error.core.php'); |
|
224 | + } else { |
|
225 | + wp_die(esc_html__('The EE_Error core class could not be loaded.', 'event_espresso')); |
|
226 | + } |
|
227 | + } |
|
228 | 228 | |
229 | - /** |
|
230 | - * espresso_load_required |
|
231 | - * given a class name and path, this function will load that file or throw an exception |
|
232 | - * |
|
233 | - * @param string $classname |
|
234 | - * @param string $full_path_to_file |
|
235 | - * @throws EE_Error |
|
236 | - */ |
|
237 | - function espresso_load_required($classname, $full_path_to_file) |
|
238 | - { |
|
239 | - static $error_handling_loaded = false; |
|
240 | - if ( ! $error_handling_loaded) { |
|
241 | - espresso_load_error_handling(); |
|
242 | - $error_handling_loaded = true; |
|
243 | - } |
|
244 | - if (is_readable($full_path_to_file)) { |
|
245 | - require_once($full_path_to_file); |
|
246 | - } else { |
|
247 | - throw new EE_Error ( |
|
248 | - sprintf( |
|
249 | - esc_html__( |
|
250 | - 'The %s class file could not be located or is not readable due to file permissions.', |
|
251 | - 'event_espresso' |
|
252 | - ), |
|
253 | - $classname |
|
254 | - ) |
|
255 | - ); |
|
256 | - } |
|
257 | - } |
|
229 | + /** |
|
230 | + * espresso_load_required |
|
231 | + * given a class name and path, this function will load that file or throw an exception |
|
232 | + * |
|
233 | + * @param string $classname |
|
234 | + * @param string $full_path_to_file |
|
235 | + * @throws EE_Error |
|
236 | + */ |
|
237 | + function espresso_load_required($classname, $full_path_to_file) |
|
238 | + { |
|
239 | + static $error_handling_loaded = false; |
|
240 | + if ( ! $error_handling_loaded) { |
|
241 | + espresso_load_error_handling(); |
|
242 | + $error_handling_loaded = true; |
|
243 | + } |
|
244 | + if (is_readable($full_path_to_file)) { |
|
245 | + require_once($full_path_to_file); |
|
246 | + } else { |
|
247 | + throw new EE_Error ( |
|
248 | + sprintf( |
|
249 | + esc_html__( |
|
250 | + 'The %s class file could not be located or is not readable due to file permissions.', |
|
251 | + 'event_espresso' |
|
252 | + ), |
|
253 | + $classname |
|
254 | + ) |
|
255 | + ); |
|
256 | + } |
|
257 | + } |
|
258 | 258 | |
259 | - espresso_load_required('EEH_Base', EE_CORE . 'helpers' . DS . 'EEH_Base.helper.php'); |
|
260 | - espresso_load_required('EEH_File', EE_CORE . 'helpers' . DS . 'EEH_File.helper.php'); |
|
261 | - espresso_load_required('EE_Bootstrap', EE_CORE . 'EE_Bootstrap.core.php'); |
|
262 | - new EE_Bootstrap(); |
|
263 | - } |
|
259 | + espresso_load_required('EEH_Base', EE_CORE . 'helpers' . DS . 'EEH_Base.helper.php'); |
|
260 | + espresso_load_required('EEH_File', EE_CORE . 'helpers' . DS . 'EEH_File.helper.php'); |
|
261 | + espresso_load_required('EE_Bootstrap', EE_CORE . 'EE_Bootstrap.core.php'); |
|
262 | + new EE_Bootstrap(); |
|
263 | + } |
|
264 | 264 | } |
265 | 265 | if ( ! function_exists('espresso_deactivate_plugin')) { |
266 | - /** |
|
267 | - * deactivate_plugin |
|
268 | - * usage: espresso_deactivate_plugin( plugin_basename( __FILE__ )); |
|
269 | - * |
|
270 | - * @access public |
|
271 | - * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file |
|
272 | - * @return void |
|
273 | - */ |
|
274 | - function espresso_deactivate_plugin($plugin_basename = '') |
|
275 | - { |
|
276 | - if ( ! function_exists('deactivate_plugins')) { |
|
277 | - require_once(ABSPATH . 'wp-admin/includes/plugin.php'); |
|
278 | - } |
|
279 | - unset($_GET['activate'], $_REQUEST['activate']); |
|
280 | - deactivate_plugins($plugin_basename); |
|
281 | - } |
|
266 | + /** |
|
267 | + * deactivate_plugin |
|
268 | + * usage: espresso_deactivate_plugin( plugin_basename( __FILE__ )); |
|
269 | + * |
|
270 | + * @access public |
|
271 | + * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file |
|
272 | + * @return void |
|
273 | + */ |
|
274 | + function espresso_deactivate_plugin($plugin_basename = '') |
|
275 | + { |
|
276 | + if ( ! function_exists('deactivate_plugins')) { |
|
277 | + require_once(ABSPATH . 'wp-admin/includes/plugin.php'); |
|
278 | + } |
|
279 | + unset($_GET['activate'], $_REQUEST['activate']); |
|
280 | + deactivate_plugins($plugin_basename); |
|
281 | + } |
|
282 | 282 | } |
283 | 283 | \ No newline at end of file |
@@ -1,5 +1,5 @@ discard block |
||
1 | 1 | <?php |
2 | -if (!defined('EVENT_ESPRESSO_VERSION') ) |
|
2 | +if ( ! defined('EVENT_ESPRESSO_VERSION')) |
|
3 | 3 | exit('NO direct script access allowed'); |
4 | 4 | |
5 | 5 | /** |
@@ -32,15 +32,15 @@ discard block |
||
32 | 32 | |
33 | 33 | |
34 | 34 | |
35 | - public function __construct( $routing = TRUE ) { |
|
36 | - parent::__construct( $routing ); |
|
37 | - define( 'EE_ABOUT_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND . 'about/templates/' ); |
|
35 | + public function __construct($routing = TRUE) { |
|
36 | + parent::__construct($routing); |
|
37 | + define('EE_ABOUT_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND.'about/templates/'); |
|
38 | 38 | } |
39 | 39 | |
40 | 40 | |
41 | 41 | |
42 | 42 | protected function _extend_page_config() { |
43 | - $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND . 'about'; |
|
43 | + $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND.'about'; |
|
44 | 44 | } |
45 | 45 | |
46 | 46 | protected function _set_page_routes() { |
@@ -112,11 +112,11 @@ discard block |
||
112 | 112 | protected function _whats_new() { |
113 | 113 | $steps = EE_Maintenance_Mode::instance()->level() != EE_Maintenance_Mode::level_2_complete_maintenance ? $this->_get_started_steps() : FALSE; |
114 | 114 | $steps = $steps !== FALSE ? $steps : ''; |
115 | - $this->_admin_page_title = sprintf( __('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION ); |
|
115 | + $this->_admin_page_title = sprintf(__('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION); |
|
116 | 116 | $settings_message = $steps; |
117 | - $this->_template_args['admin_page_subtitle'] = __('Thank you for choosing Event Espresso, the most powerful Event Management plugin for WordPress.', 'event_espresso'). $settings_message ; |
|
118 | - $template = is_readable(EE_ABOUT_CAF_TEMPLATE_PATH . 'whats_new.template.php') ? EE_ABOUT_CAF_TEMPLATE_PATH . 'whats_new.template.php' : EE_ABOUT_TEMPLATE_PATH . 'whats_new.template.php'; |
|
119 | - $this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE ); |
|
117 | + $this->_template_args['admin_page_subtitle'] = __('Thank you for choosing Event Espresso, the most powerful Event Management plugin for WordPress.', 'event_espresso').$settings_message; |
|
118 | + $template = is_readable(EE_ABOUT_CAF_TEMPLATE_PATH.'whats_new.template.php') ? EE_ABOUT_CAF_TEMPLATE_PATH.'whats_new.template.php' : EE_ABOUT_TEMPLATE_PATH.'whats_new.template.php'; |
|
119 | + $this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE); |
|
120 | 120 | $this->display_about_admin_page(); |
121 | 121 | } |
122 | 122 | |
@@ -124,32 +124,32 @@ discard block |
||
124 | 124 | protected function _overview() { |
125 | 125 | $this->_admin_page_title = __('About Event Espresso', 'event_espresso'); |
126 | 126 | $this->_template_args['admin_page_subtitle'] = __('Thank you for choosing Event Espresso, the most powerful Event Management plugin for WordPress.', 'event_espresso'); |
127 | - $template = is_readable(EE_ABOUT_CAF_TEMPLATE_PATH . 'ee4-overview.template.php') ? EE_ABOUT_CAF_TEMPLATE_PATH . 'ee4-overview.template.php' : EE_ABOUT_TEMPLATE_PATH . 'ee4-overview.template.php'; |
|
128 | - $this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE ); |
|
127 | + $template = is_readable(EE_ABOUT_CAF_TEMPLATE_PATH.'ee4-overview.template.php') ? EE_ABOUT_CAF_TEMPLATE_PATH.'ee4-overview.template.php' : EE_ABOUT_TEMPLATE_PATH.'ee4-overview.template.php'; |
|
128 | + $this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE); |
|
129 | 129 | $this->display_about_admin_page(); |
130 | 130 | } |
131 | 131 | |
132 | 132 | protected function _credits() { |
133 | 133 | // $this->_template_args['admin_page_title'] = sprintf( __('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION ); |
134 | 134 | $this->_template_args['admin_page_subtitle'] = __('Thank you for choosing Event Espresso, the most powerful Event Management plugin for WordPress.', 'event_espresso'); |
135 | - $template = EE_ABOUT_TEMPLATE_PATH . 'credits.template.php'; |
|
136 | - $this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE ); |
|
135 | + $template = EE_ABOUT_TEMPLATE_PATH.'credits.template.php'; |
|
136 | + $this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE); |
|
137 | 137 | $this->display_about_admin_page(); |
138 | 138 | } |
139 | 139 | |
140 | 140 | protected function _decafvpro() { |
141 | - $this->_template_args['admin_page_title'] = sprintf( __('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION ); |
|
141 | + $this->_template_args['admin_page_title'] = sprintf(__('Welcome to Event Espresso %s', 'event_espresso'), EVENT_ESPRESSO_VERSION); |
|
142 | 142 | $this->_template_args['admin_page_subtitle'] = sprintf(__('Event Espresso lets you focus on doing %swhat you love%s — %sorganizing your events%s', 'event_espresso'), '<em>', '</em>', '<strong>', '</strong>'); |
143 | - $template = EE_ABOUT_TEMPLATE_PATH . 'decafvpro.template.php'; |
|
144 | - $this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE ); |
|
143 | + $template = EE_ABOUT_TEMPLATE_PATH.'decafvpro.template.php'; |
|
144 | + $this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE); |
|
145 | 145 | $this->display_about_admin_page(); |
146 | 146 | } |
147 | 147 | |
148 | 148 | protected function _reviews() { |
149 | 149 | $this->_template_args['admin_page_title'] = __('Rave Reviews About Event Espresso 4', 'event_espresso'); |
150 | 150 | $this->_template_args['admin_page_subtitle'] = __('At Event Espresso, customer satisfaction is our ultimate goal.', 'event_espresso'); |
151 | - $template = EE_ABOUT_TEMPLATE_PATH . 'reviews.template.php'; |
|
152 | - $this->_template_args['about_admin_page_content'] = EEH_Template::display_template( $template, $this->_template_args, TRUE ); |
|
151 | + $template = EE_ABOUT_TEMPLATE_PATH.'reviews.template.php'; |
|
152 | + $this->_template_args['about_admin_page_content'] = EEH_Template::display_template($template, $this->_template_args, TRUE); |
|
153 | 153 | $this->display_about_admin_page(); |
154 | 154 | } |
155 | 155 | } |
@@ -1,8 +1,8 @@ discard block |
||
1 | 1 | <div class="changelog"> |
2 | 2 | <h2 class="about-headline-callout"><?php esc_html_e('Welcome to Event Espresso 4!', 'event_espresso'); ?></h2> |
3 | - <p><?php echo sprintf( esc_html__('Manage your events from your WordPress dashboard. Reduce your admin, reduce your costs, make your life easier! This is the Caffeinated/Regular version of Event Espresso, but we also have a hosted version called %sEvent Smart%s for customers that want to cut back on their hosting and security expenses.', 'event_espresso'),'<a href="https://eventsmart.com//?utm_source=ee4_decaf&utm_medium=link&utm_campaign=espresso_about_tab&utm_content=EE4+Caffeinated">','</a>'); ?></p> |
|
3 | + <p><?php echo sprintf(esc_html__('Manage your events from your WordPress dashboard. Reduce your admin, reduce your costs, make your life easier! This is the Caffeinated/Regular version of Event Espresso, but we also have a hosted version called %sEvent Smart%s for customers that want to cut back on their hosting and security expenses.', 'event_espresso'), '<a href="https://eventsmart.com//?utm_source=ee4_decaf&utm_medium=link&utm_campaign=espresso_about_tab&utm_content=EE4+Caffeinated">', '</a>'); ?></p> |
|
4 | 4 | <h2><?php esc_html_e('Powering 40,000+ event websites; $100 million in ticket sales per year!', 'event_espresso'); ?></h2> |
5 | - <p><?php echo sprintf( esc_html__('Event Espresso is a %sWordPress event manager%s which makes it easy for you to register attendees for classes, workshops, events, trainings, conferences or concerts, all from your WordPress website. Event Espresso events are created from the WordPress admin area. You can create signup forms to collect information about your attendees, accept payments, and create reports. The lite version of the plugin provides everything that you need to manage your event using WordPress.', 'event_espresso'),'<a href="http://eventespresso.com/?utm_source=wordpress_org&utm_medium=link&utm_campaign=espresso_about_tab&utm_content=EE4+Decaf" rel="nofollow">','</a>'); ?></p> |
|
5 | + <p><?php echo sprintf(esc_html__('Event Espresso is a %sWordPress event manager%s which makes it easy for you to register attendees for classes, workshops, events, trainings, conferences or concerts, all from your WordPress website. Event Espresso events are created from the WordPress admin area. You can create signup forms to collect information about your attendees, accept payments, and create reports. The lite version of the plugin provides everything that you need to manage your event using WordPress.', 'event_espresso'), '<a href="http://eventespresso.com/?utm_source=wordpress_org&utm_medium=link&utm_campaign=espresso_about_tab&utm_content=EE4+Decaf" rel="nofollow">', '</a>'); ?></p> |
|
6 | 6 | <div class="feature-section col three-col about-updates"> |
7 | 7 | <div class="col-1"> |
8 | 8 | <img src="<?php echo EE_GLOBAL_ASSETS_URL; ?>images/screenshots/publish_meta_box.jpg"> |
@@ -60,11 +60,11 @@ discard block |
||
60 | 60 | <h2 class="about-headline-callout"><?php esc_html_e('People Like You Manage Event Registration with WordPress', 'event_espresso'); ?></h2> |
61 | 61 | <div class="feature-section col two-col"> |
62 | 62 | <div class="grid_6"> |
63 | - <p><?php echo sprintf( esc_html__('Trusted by thousands, Event Espresso is the best WordPress event online registration and ticketing manager plugin–and the best supported with full-time support. Turn your existing blog or website into a %sfully-featured event management website%s and a new way to make money. With Event Espresso you get it all; everything from custom registration forms and emails, seating limits, multiple price options, and discount codes to printable tickets.', 'event_espresso'),'<strong>','</strong>'); ?></p> |
|
63 | + <p><?php echo sprintf(esc_html__('Trusted by thousands, Event Espresso is the best WordPress event online registration and ticketing manager plugin–and the best supported with full-time support. Turn your existing blog or website into a %sfully-featured event management website%s and a new way to make money. With Event Espresso you get it all; everything from custom registration forms and emails, seating limits, multiple price options, and discount codes to printable tickets.', 'event_espresso'), '<strong>', '</strong>'); ?></p> |
|
64 | 64 | <p><?php esc_html_e('Event Espresso works perfectly for classes, workshops, fundraisers, sporting, trainings, conferences, networking, religion, social, non-profit, and nearly any other type of event.', 'event_espresso'); ?></p> |
65 | 65 | </div> |
66 | 66 | <div class="grid_6"> |
67 | - <p><?php echo sprintf( esc_html__('Our online event registration software can %smake your organization more profitable and efficient%s by helping you save money on registration and ticketing fees, reduce the countless hours of time you spend manually processing registrations, create a “green” and paperless event registration process and you will be open for business to accept registrations and payment 24/7.', 'event_espresso'),'<strong>','</strong>'); ?></p> |
|
67 | + <p><?php echo sprintf(esc_html__('Our online event registration software can %smake your organization more profitable and efficient%s by helping you save money on registration and ticketing fees, reduce the countless hours of time you spend manually processing registrations, create a “green” and paperless event registration process and you will be open for business to accept registrations and payment 24/7.', 'event_espresso'), '<strong>', '</strong>'); ?></p> |
|
68 | 68 | <p><?php esc_html_e('If you\'re doing event registration and ticketing any other way, then you’re wasting time and money. We offer packages and prices to fit any budget, so get started with your online event registration and ticketing management system today.', 'event_espresso'); ?></p> |
69 | 69 | </div> |
70 | 70 | </div> |
@@ -74,7 +74,7 @@ discard block |
||
74 | 74 | <h3><?php esc_html_e('Turn your blog into a complete event registration and management system', 'event_espresso'); ?></h3> |
75 | 75 | <p><?php esc_html_e('Create a beautiful event page with ticket selection, venue details, and an integrated single page checkout system. With WordPress, Event Espresso, and Espresso Arabica 2014 (based on the "Twenty Fourteen" theme by WordPress), your events will certainly sell out faster than ever!', 'event_espresso'); ?></p> |
76 | 76 | <p><?php esc_html_e('With a striking design that does not compromise the simplicity of WordPress and Event Espresso 4, Espresso Arabica 2014 will be the best event theme on the market.', 'event_espresso'); ?></p> |
77 | - <p><?php echo sprintf( esc_html__('%sLearn more >>%s', 'event_espresso'), '<a href="http://eventespresso.com/wiki/setup-event-espresso-arabica-theme/">', '</a>' ); ?></p> |
|
77 | + <p><?php echo sprintf(esc_html__('%sLearn more >>%s', 'event_espresso'), '<a href="http://eventespresso.com/wiki/setup-event-espresso-arabica-theme/">', '</a>'); ?></p> |
|
78 | 78 | </div> |
79 | 79 | <div><img src="<?php echo EE_GLOBAL_ASSETS_URL; ?>images/screenshots/single-event-page.jpg"></div> |
80 | 80 | </div> |