@@ -1,39 +1,39 @@ discard block |
||
| 1 | 1 | <div id="ee-single-page-checkout-dv" class=""> |
| 2 | 2 | <?php |
| 3 | -if ( ! $empty_cart ) { |
|
| 4 | - if ( apply_filters( 'FHEE__registration_page_wrapper_template__display_time_limit', false ) ) { ?> |
|
| 3 | +if ( ! $empty_cart) { |
|
| 4 | + if (apply_filters('FHEE__registration_page_wrapper_template__display_time_limit', false)) { ?> |
|
| 5 | 5 | <p id="spco-registration-time-limit-pg" class="spco-steps-pg ee-attention important-notice" style="display: none;"> |
| 6 | 6 | <?php echo sprintf( |
| 7 | 7 | apply_filters( |
| 8 | 8 | 'FHEE__registration_page_wrapper_template___time_limit', |
| 9 | - __( 'You have %1$s to complete your registration.', 'event_espresso' ) |
|
| 9 | + __('You have %1$s to complete your registration.', 'event_espresso') |
|
| 10 | 10 | ), |
| 11 | - '<span id="spco-registration-time-limit-spn" class="spco-registration-time-limit-spn">' . $registration_time_limit . '</span>' |
|
| 11 | + '<span id="spco-registration-time-limit-spn" class="spco-registration-time-limit-spn">'.$registration_time_limit.'</span>' |
|
| 12 | 12 | ); |
| 13 | 13 | ?> |
| 14 | 14 | <span id="spco-registration-expiration-spn" class="" style="display:none;"></span> |
| 15 | 15 | </p> |
| 16 | 16 | <?php } |
| 17 | - if ( ! $revisit && apply_filters( 'FHEE__registration_page_wrapper_template__steps_display', TRUE )) { |
|
| 17 | + if ( ! $revisit && apply_filters('FHEE__registration_page_wrapper_template__steps_display', TRUE)) { |
|
| 18 | 18 | ?> |
| 19 | 19 | <h2 id="spco-steps-big-hdr" class="spco-steps-big-hdr"><?php _e(' Steps', 'event_espresso'); ?></h2> |
| 20 | 20 | |
| 21 | 21 | <div id="spco-steps-display-dv"> |
| 22 | 22 | <?php |
| 23 | 23 | $step_nmbr = 1; |
| 24 | - $total_steps = count( $reg_steps ) - 1; |
|
| 25 | - foreach ( $reg_steps as $reg_step ) { |
|
| 26 | - if ( $reg_step instanceof EE_SPCO_Reg_Step && $reg_step->slug() != 'finalize_registration' ) { |
|
| 24 | + $total_steps = count($reg_steps) - 1; |
|
| 25 | + foreach ($reg_steps as $reg_step) { |
|
| 26 | + if ($reg_step instanceof EE_SPCO_Reg_Step && $reg_step->slug() != 'finalize_registration') { |
|
| 27 | 27 | $slug = $reg_step->slug(); |
| 28 | 28 | $step_display_dv_class = $reg_step->is_current_step() ? 'active-step' : 'inactive-step'; |
| 29 | 29 | ?> |
| 30 | 30 | <div id="spco-step-<?php echo $slug; ?>-display-dv" class="spco-step-display-dv <?php echo $step_display_dv_class; ?> steps-<?php echo $total_steps; ?>"> |
| 31 | 31 | <h4 id="spco-step-<?php echo $slug; ?>-display-hdr" class="spco-steps-display-hdr"> |
| 32 | - <span class="spco-step-big-nmbr"><?php echo $step_nmbr; ?></span> <span class="spco-step-name"><?php echo str_replace( ' ', '<br/> ', $reg_step->name() ); ?></span> |
|
| 32 | + <span class="spco-step-big-nmbr"><?php echo $step_nmbr; ?></span> <span class="spco-step-name"><?php echo str_replace(' ', '<br/> ', $reg_step->name()); ?></span> |
|
| 33 | 33 | </h4> |
| 34 | 34 | </div> |
| 35 | 35 | |
| 36 | - <?php if ( $step_nmbr < $total_steps ) { ?> |
|
| 36 | + <?php if ($step_nmbr < $total_steps) { ?> |
|
| 37 | 37 | <div class="spco-step-arrow-dv">»</div> |
| 38 | 38 | <?php |
| 39 | 39 | } |
@@ -47,22 +47,22 @@ discard block |
||
| 47 | 47 | <?php |
| 48 | 48 | } |
| 49 | 49 | |
| 50 | - do_action( 'AHEE__SPCO__before_registration_steps' ); |
|
| 50 | + do_action('AHEE__SPCO__before_registration_steps'); |
|
| 51 | 51 | $step_nmbr = 1; |
| 52 | - foreach ( $reg_steps as $reg_step ) { |
|
| 53 | - if ( $reg_step instanceof EE_SPCO_Reg_Step && $reg_step->slug() != 'finalize_registration' ) { |
|
| 52 | + foreach ($reg_steps as $reg_step) { |
|
| 53 | + if ($reg_step instanceof EE_SPCO_Reg_Step && $reg_step->slug() != 'finalize_registration') { |
|
| 54 | 54 | $slug = $reg_step->slug(); |
| 55 | - do_action( 'AHEE__' . $slug . '__reg_step_start', $reg_step ); |
|
| 55 | + do_action('AHEE__'.$slug.'__reg_step_start', $reg_step); |
|
| 56 | 56 | // todo: deprecate hook AHEE__registration_page_attendee_information__start |
| 57 | 57 | ?> |
| 58 | 58 | <div id="spco-<?php echo $slug; ?>-dv" class="spco-step-dv <?php echo $reg_step->div_class(); ?>"> |
| 59 | 59 | <?php echo $reg_step->display_reg_form(); ?> |
| 60 | - <?php do_action( 'AHEE__SPCO_after_reg_step_form', $slug, $next_step ); ?> |
|
| 60 | + <?php do_action('AHEE__SPCO_after_reg_step_form', $slug, $next_step); ?> |
|
| 61 | 61 | </div> |
| 62 | 62 | <?php $step_nmbr++; |
| 63 | 63 | } |
| 64 | 64 | } |
| 65 | - do_action( 'AHEE__SPCO__after_registration_steps' ); |
|
| 65 | + do_action('AHEE__SPCO__after_registration_steps'); |
|
| 66 | 66 | |
| 67 | 67 | } else { |
| 68 | 68 | ?> |
@@ -71,7 +71,7 @@ discard block |
||
| 71 | 71 | <?php echo $cookies_not_set_msg; ?> |
| 72 | 72 | <?php |
| 73 | 73 | } |
| 74 | -do_action( 'AHEE__SPCO__reg_form_footer' ); |
|
| 74 | +do_action('AHEE__SPCO__reg_form_footer'); |
|
| 75 | 75 | ?> |
| 76 | 76 | |
| 77 | 77 | </div> |
@@ -603,7 +603,7 @@ discard block |
||
| 603 | 603 | /** |
| 604 | 604 | * returns any events attached to this attendee ($_Event property); |
| 605 | 605 | * |
| 606 | - * @return array |
|
| 606 | + * @return EE_Base_Class[] |
|
| 607 | 607 | * @throws EE_Error |
| 608 | 608 | */ |
| 609 | 609 | public function events() |
@@ -618,7 +618,7 @@ discard block |
||
| 618 | 618 | * used to save the billing info |
| 619 | 619 | * |
| 620 | 620 | * @param EE_Payment_Method $payment_method the _gateway_name property on the gateway class |
| 621 | - * @return EE_Form_Section_Proper|null |
|
| 621 | + * @return null|EE_Billing_Info_Form |
|
| 622 | 622 | * @throws EE_Error |
| 623 | 623 | */ |
| 624 | 624 | public function billing_info_for_payment_method($payment_method) |
@@ -27,734 +27,734 @@ |
||
| 27 | 27 | class EE_Attendee extends EE_CPT_Base implements EEI_Contact, EEI_Address, EEI_Admin_Links, EEI_Attendee |
| 28 | 28 | { |
| 29 | 29 | |
| 30 | - /** |
|
| 31 | - * Sets some dynamic defaults |
|
| 32 | - * |
|
| 33 | - * @param array $fieldValues |
|
| 34 | - * @param bool $bydb |
|
| 35 | - * @param string $timezone |
|
| 36 | - * @param array $date_formats |
|
| 37 | - * @throws EE_Error |
|
| 38 | - */ |
|
| 39 | - protected function __construct($fieldValues = null, $bydb = false, $timezone = null, $date_formats = array()) |
|
| 40 | - { |
|
| 41 | - if (! isset($fieldValues['ATT_full_name'])) { |
|
| 42 | - $fname = isset($fieldValues['ATT_fname']) ? $fieldValues['ATT_fname'] . ' ' : ''; |
|
| 43 | - $lname = isset($fieldValues['ATT_lname']) ? $fieldValues['ATT_lname'] : ''; |
|
| 44 | - $fieldValues['ATT_full_name'] = $fname . $lname; |
|
| 45 | - } |
|
| 46 | - if (! isset($fieldValues['ATT_slug'])) { |
|
| 47 | - // $fieldValues['ATT_slug'] = sanitize_key(wp_generate_password(20)); |
|
| 48 | - $fieldValues['ATT_slug'] = sanitize_title($fieldValues['ATT_full_name']); |
|
| 49 | - } |
|
| 50 | - if (! isset($fieldValues['ATT_short_bio']) && isset($fieldValues['ATT_bio'])) { |
|
| 51 | - $fieldValues['ATT_short_bio'] = substr($fieldValues['ATT_bio'], 0, 50); |
|
| 52 | - } |
|
| 53 | - parent::__construct($fieldValues, $bydb, $timezone, $date_formats); |
|
| 54 | - } |
|
| 55 | - |
|
| 56 | - |
|
| 57 | - /** |
|
| 58 | - * @param array $props_n_values incoming values |
|
| 59 | - * @param string $timezone incoming timezone (if not set the timezone set for the website will be |
|
| 60 | - * used.) |
|
| 61 | - * @param array $date_formats incoming date_formats in an array where the first value is the |
|
| 62 | - * date_format and the second value is the time format |
|
| 63 | - * @return EE_Attendee |
|
| 64 | - * @throws EE_Error |
|
| 65 | - */ |
|
| 66 | - public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array()) |
|
| 67 | - { |
|
| 68 | - $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats); |
|
| 69 | - return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats); |
|
| 70 | - } |
|
| 71 | - |
|
| 72 | - |
|
| 73 | - /** |
|
| 74 | - * @param array $props_n_values incoming values from the database |
|
| 75 | - * @param string $timezone incoming timezone as set by the model. If not set the timezone for |
|
| 76 | - * the website will be used. |
|
| 77 | - * @return EE_Attendee |
|
| 78 | - */ |
|
| 79 | - public static function new_instance_from_db($props_n_values = array(), $timezone = null) |
|
| 80 | - { |
|
| 81 | - return new self($props_n_values, true, $timezone); |
|
| 82 | - } |
|
| 83 | - |
|
| 84 | - |
|
| 85 | - /** |
|
| 86 | - * Set Attendee First Name |
|
| 87 | - * |
|
| 88 | - * @access public |
|
| 89 | - * @param string $fname |
|
| 90 | - * @throws EE_Error |
|
| 91 | - */ |
|
| 92 | - public function set_fname($fname = '') |
|
| 93 | - { |
|
| 94 | - $this->set('ATT_fname', $fname); |
|
| 95 | - } |
|
| 96 | - |
|
| 97 | - |
|
| 98 | - /** |
|
| 99 | - * Set Attendee Last Name |
|
| 100 | - * |
|
| 101 | - * @access public |
|
| 102 | - * @param string $lname |
|
| 103 | - * @throws EE_Error |
|
| 104 | - */ |
|
| 105 | - public function set_lname($lname = '') |
|
| 106 | - { |
|
| 107 | - $this->set('ATT_lname', $lname); |
|
| 108 | - } |
|
| 109 | - |
|
| 110 | - |
|
| 111 | - /** |
|
| 112 | - * Set Attendee Address |
|
| 113 | - * |
|
| 114 | - * @access public |
|
| 115 | - * @param string $address |
|
| 116 | - * @throws EE_Error |
|
| 117 | - */ |
|
| 118 | - public function set_address($address = '') |
|
| 119 | - { |
|
| 120 | - $this->set('ATT_address', $address); |
|
| 121 | - } |
|
| 122 | - |
|
| 123 | - |
|
| 124 | - /** |
|
| 125 | - * Set Attendee Address2 |
|
| 126 | - * |
|
| 127 | - * @access public |
|
| 128 | - * @param string $address2 |
|
| 129 | - * @throws EE_Error |
|
| 130 | - */ |
|
| 131 | - public function set_address2($address2 = '') |
|
| 132 | - { |
|
| 133 | - $this->set('ATT_address2', $address2); |
|
| 134 | - } |
|
| 135 | - |
|
| 136 | - |
|
| 137 | - /** |
|
| 138 | - * Set Attendee City |
|
| 139 | - * |
|
| 140 | - * @access public |
|
| 141 | - * @param string $city |
|
| 142 | - * @throws EE_Error |
|
| 143 | - */ |
|
| 144 | - public function set_city($city = '') |
|
| 145 | - { |
|
| 146 | - $this->set('ATT_city', $city); |
|
| 147 | - } |
|
| 148 | - |
|
| 149 | - |
|
| 150 | - /** |
|
| 151 | - * Set Attendee State ID |
|
| 152 | - * |
|
| 153 | - * @access public |
|
| 154 | - * @param int $STA_ID |
|
| 155 | - * @throws EE_Error |
|
| 156 | - */ |
|
| 157 | - public function set_state($STA_ID = 0) |
|
| 158 | - { |
|
| 159 | - $this->set('STA_ID', $STA_ID); |
|
| 160 | - } |
|
| 161 | - |
|
| 162 | - |
|
| 163 | - /** |
|
| 164 | - * Set Attendee Country ISO Code |
|
| 165 | - * |
|
| 166 | - * @access public |
|
| 167 | - * @param string $CNT_ISO |
|
| 168 | - * @throws EE_Error |
|
| 169 | - */ |
|
| 170 | - public function set_country($CNT_ISO = '') |
|
| 171 | - { |
|
| 172 | - $this->set('CNT_ISO', $CNT_ISO); |
|
| 173 | - } |
|
| 174 | - |
|
| 175 | - |
|
| 176 | - /** |
|
| 177 | - * Set Attendee Zip/Postal Code |
|
| 178 | - * |
|
| 179 | - * @access public |
|
| 180 | - * @param string $zip |
|
| 181 | - * @throws EE_Error |
|
| 182 | - */ |
|
| 183 | - public function set_zip($zip = '') |
|
| 184 | - { |
|
| 185 | - $this->set('ATT_zip', $zip); |
|
| 186 | - } |
|
| 187 | - |
|
| 188 | - |
|
| 189 | - /** |
|
| 190 | - * Set Attendee Email Address |
|
| 191 | - * |
|
| 192 | - * @access public |
|
| 193 | - * @param string $email |
|
| 194 | - * @throws EE_Error |
|
| 195 | - */ |
|
| 196 | - public function set_email($email = '') |
|
| 197 | - { |
|
| 198 | - $this->set('ATT_email', $email); |
|
| 199 | - } |
|
| 200 | - |
|
| 201 | - |
|
| 202 | - /** |
|
| 203 | - * Set Attendee Phone |
|
| 204 | - * |
|
| 205 | - * @access public |
|
| 206 | - * @param string $phone |
|
| 207 | - * @throws EE_Error |
|
| 208 | - */ |
|
| 209 | - public function set_phone($phone = '') |
|
| 210 | - { |
|
| 211 | - $this->set('ATT_phone', $phone); |
|
| 212 | - } |
|
| 213 | - |
|
| 214 | - |
|
| 215 | - /** |
|
| 216 | - * set deleted |
|
| 217 | - * |
|
| 218 | - * @access public |
|
| 219 | - * @param bool $ATT_deleted |
|
| 220 | - * @throws EE_Error |
|
| 221 | - */ |
|
| 222 | - public function set_deleted($ATT_deleted = false) |
|
| 223 | - { |
|
| 224 | - $this->set('ATT_deleted', $ATT_deleted); |
|
| 225 | - } |
|
| 226 | - |
|
| 227 | - |
|
| 228 | - /** |
|
| 229 | - * Returns the value for the post_author id saved with the cpt |
|
| 230 | - * |
|
| 231 | - * @since 4.5.0 |
|
| 232 | - * @return int |
|
| 233 | - * @throws EE_Error |
|
| 234 | - */ |
|
| 235 | - public function wp_user() |
|
| 236 | - { |
|
| 237 | - return $this->get('ATT_author'); |
|
| 238 | - } |
|
| 239 | - |
|
| 240 | - |
|
| 241 | - /** |
|
| 242 | - * get Attendee First Name |
|
| 243 | - * |
|
| 244 | - * @access public |
|
| 245 | - * @return string |
|
| 246 | - * @throws EE_Error |
|
| 247 | - */ |
|
| 248 | - public function fname() |
|
| 249 | - { |
|
| 250 | - return $this->get('ATT_fname'); |
|
| 251 | - } |
|
| 252 | - |
|
| 253 | - |
|
| 254 | - /** |
|
| 255 | - * echoes out the attendee's first name |
|
| 256 | - * |
|
| 257 | - * @return void |
|
| 258 | - * @throws EE_Error |
|
| 259 | - */ |
|
| 260 | - public function e_full_name() |
|
| 261 | - { |
|
| 262 | - echo $this->full_name(); |
|
| 263 | - } |
|
| 264 | - |
|
| 265 | - |
|
| 266 | - /** |
|
| 267 | - * Returns the first and last name concatenated together with a space. |
|
| 268 | - * |
|
| 269 | - * @param bool $apply_html_entities |
|
| 270 | - * @return string |
|
| 271 | - * @throws EE_Error |
|
| 272 | - */ |
|
| 273 | - public function full_name($apply_html_entities = false) |
|
| 274 | - { |
|
| 275 | - $full_name = array( |
|
| 276 | - $this->fname(), |
|
| 277 | - $this->lname(), |
|
| 278 | - ); |
|
| 279 | - $full_name = array_filter($full_name); |
|
| 280 | - $full_name = implode(' ', $full_name); |
|
| 281 | - return $apply_html_entities ? htmlentities($full_name, ENT_QUOTES, 'UTF-8') : $full_name; |
|
| 282 | - } |
|
| 283 | - |
|
| 284 | - |
|
| 285 | - /** |
|
| 286 | - * This returns the value of the `ATT_full_name` field which is usually equivalent to calling `full_name()` unless |
|
| 287 | - * the post_title field has been directly modified in the db for the post (espresso_attendees post type) for this |
|
| 288 | - * attendee. |
|
| 289 | - * |
|
| 290 | - * @param bool $apply_html_entities |
|
| 291 | - * @return string |
|
| 292 | - * @throws EE_Error |
|
| 293 | - */ |
|
| 294 | - public function ATT_full_name($apply_html_entities = false) |
|
| 295 | - { |
|
| 296 | - return $apply_html_entities |
|
| 297 | - ? htmlentities($this->get('ATT_full_name'), ENT_QUOTES, 'UTF-8') |
|
| 298 | - : $this->get('ATT_full_name'); |
|
| 299 | - } |
|
| 300 | - |
|
| 301 | - |
|
| 302 | - /** |
|
| 303 | - * get Attendee Last Name |
|
| 304 | - * |
|
| 305 | - * @access public |
|
| 306 | - * @return string |
|
| 307 | - * @throws EE_Error |
|
| 308 | - */ |
|
| 309 | - public function lname() |
|
| 310 | - { |
|
| 311 | - return $this->get('ATT_lname'); |
|
| 312 | - } |
|
| 313 | - |
|
| 314 | - |
|
| 315 | - /** |
|
| 316 | - * Gets the attendee's full address as an array so client code can decide hwo to display it |
|
| 317 | - * |
|
| 318 | - * @return array numerically indexed, with each part of the address that is known. |
|
| 319 | - * Eg, if the user only responded to state and country, |
|
| 320 | - * it would be array(0=>'Alabama',1=>'USA') |
|
| 321 | - * @return array |
|
| 322 | - * @throws EE_Error |
|
| 323 | - */ |
|
| 324 | - public function full_address_as_array() |
|
| 325 | - { |
|
| 326 | - $full_address_array = array(); |
|
| 327 | - $initial_address_fields = array('ATT_address', 'ATT_address2', 'ATT_city',); |
|
| 328 | - foreach ($initial_address_fields as $address_field_name) { |
|
| 329 | - $address_fields_value = $this->get($address_field_name); |
|
| 330 | - if (! empty($address_fields_value)) { |
|
| 331 | - $full_address_array[] = $address_fields_value; |
|
| 332 | - } |
|
| 333 | - } |
|
| 334 | - //now handle state and country |
|
| 335 | - $state_obj = $this->state_obj(); |
|
| 336 | - if ($state_obj instanceof EE_State) { |
|
| 337 | - $full_address_array[] = $state_obj->name(); |
|
| 338 | - } |
|
| 339 | - $country_obj = $this->country_obj(); |
|
| 340 | - if ($country_obj instanceof EE_Country) { |
|
| 341 | - $full_address_array[] = $country_obj->name(); |
|
| 342 | - } |
|
| 343 | - //lastly get the xip |
|
| 344 | - $zip_value = $this->zip(); |
|
| 345 | - if (! empty($zip_value)) { |
|
| 346 | - $full_address_array[] = $zip_value; |
|
| 347 | - } |
|
| 348 | - return $full_address_array; |
|
| 349 | - } |
|
| 350 | - |
|
| 351 | - |
|
| 352 | - /** |
|
| 353 | - * get Attendee Address |
|
| 354 | - * |
|
| 355 | - * @return string |
|
| 356 | - * @throws EE_Error |
|
| 357 | - */ |
|
| 358 | - public function address() |
|
| 359 | - { |
|
| 360 | - return $this->get('ATT_address'); |
|
| 361 | - } |
|
| 362 | - |
|
| 363 | - |
|
| 364 | - /** |
|
| 365 | - * get Attendee Address2 |
|
| 366 | - * |
|
| 367 | - * @return string |
|
| 368 | - * @throws EE_Error |
|
| 369 | - */ |
|
| 370 | - public function address2() |
|
| 371 | - { |
|
| 372 | - return $this->get('ATT_address2'); |
|
| 373 | - } |
|
| 374 | - |
|
| 375 | - |
|
| 376 | - /** |
|
| 377 | - * get Attendee City |
|
| 378 | - * |
|
| 379 | - * @return string |
|
| 380 | - * @throws EE_Error |
|
| 381 | - */ |
|
| 382 | - public function city() |
|
| 383 | - { |
|
| 384 | - return $this->get('ATT_city'); |
|
| 385 | - } |
|
| 386 | - |
|
| 387 | - |
|
| 388 | - /** |
|
| 389 | - * get Attendee State ID |
|
| 390 | - * |
|
| 391 | - * @return string |
|
| 392 | - * @throws EE_Error |
|
| 393 | - */ |
|
| 394 | - public function state_ID() |
|
| 395 | - { |
|
| 396 | - return $this->get('STA_ID'); |
|
| 397 | - } |
|
| 398 | - |
|
| 399 | - |
|
| 400 | - /** |
|
| 401 | - * @return string |
|
| 402 | - * @throws EE_Error |
|
| 403 | - */ |
|
| 404 | - public function state_abbrev() |
|
| 405 | - { |
|
| 406 | - return $this->state_obj() instanceof EE_State ? $this->state_obj()->abbrev() : ''; |
|
| 407 | - } |
|
| 408 | - |
|
| 409 | - |
|
| 410 | - /** |
|
| 411 | - * Gets the state set to this attendee |
|
| 412 | - * |
|
| 413 | - * @return EE_State |
|
| 414 | - * @throws EE_Error |
|
| 415 | - */ |
|
| 416 | - public function state_obj() |
|
| 417 | - { |
|
| 418 | - return $this->get_first_related('State'); |
|
| 419 | - } |
|
| 420 | - |
|
| 421 | - |
|
| 422 | - /** |
|
| 423 | - * Returns the state's name, otherwise 'Unknown' |
|
| 424 | - * |
|
| 425 | - * @return string |
|
| 426 | - * @throws EE_Error |
|
| 427 | - */ |
|
| 428 | - public function state_name() |
|
| 429 | - { |
|
| 430 | - if ($this->state_obj()) { |
|
| 431 | - return $this->state_obj()->name(); |
|
| 432 | - } else { |
|
| 433 | - return ''; |
|
| 434 | - } |
|
| 435 | - } |
|
| 436 | - |
|
| 437 | - |
|
| 438 | - /** |
|
| 439 | - * either displays the state abbreviation or the state name, as determined |
|
| 440 | - * by the "FHEE__EEI_Address__state__use_abbreviation" filter. |
|
| 441 | - * defaults to abbreviation |
|
| 442 | - * |
|
| 443 | - * @return string |
|
| 444 | - * @throws EE_Error |
|
| 445 | - */ |
|
| 446 | - public function state() |
|
| 447 | - { |
|
| 448 | - if (apply_filters('FHEE__EEI_Address__state__use_abbreviation', true, $this->state_obj())) { |
|
| 449 | - return $this->state_abbrev(); |
|
| 450 | - } |
|
| 451 | - return $this->state_name(); |
|
| 452 | - } |
|
| 453 | - |
|
| 454 | - |
|
| 455 | - /** |
|
| 456 | - * get Attendee Country ISO Code |
|
| 457 | - * |
|
| 458 | - * @return string |
|
| 459 | - * @throws EE_Error |
|
| 460 | - */ |
|
| 461 | - public function country_ID() |
|
| 462 | - { |
|
| 463 | - return $this->get('CNT_ISO'); |
|
| 464 | - } |
|
| 465 | - |
|
| 466 | - |
|
| 467 | - /** |
|
| 468 | - * Gets country set for this attendee |
|
| 469 | - * |
|
| 470 | - * @return EE_Country |
|
| 471 | - * @throws EE_Error |
|
| 472 | - */ |
|
| 473 | - public function country_obj() |
|
| 474 | - { |
|
| 475 | - return $this->get_first_related('Country'); |
|
| 476 | - } |
|
| 477 | - |
|
| 478 | - |
|
| 479 | - /** |
|
| 480 | - * Returns the country's name if known, otherwise 'Unknown' |
|
| 481 | - * |
|
| 482 | - * @return string |
|
| 483 | - * @throws EE_Error |
|
| 484 | - */ |
|
| 485 | - public function country_name() |
|
| 486 | - { |
|
| 487 | - if ($this->country_obj()) { |
|
| 488 | - return $this->country_obj()->name(); |
|
| 489 | - } |
|
| 490 | - return ''; |
|
| 491 | - } |
|
| 492 | - |
|
| 493 | - |
|
| 494 | - /** |
|
| 495 | - * either displays the country ISO2 code or the country name, as determined |
|
| 496 | - * by the "FHEE__EEI_Address__country__use_abbreviation" filter. |
|
| 497 | - * defaults to abbreviation |
|
| 498 | - * |
|
| 499 | - * @return string |
|
| 500 | - * @throws EE_Error |
|
| 501 | - */ |
|
| 502 | - public function country() |
|
| 503 | - { |
|
| 504 | - if (apply_filters('FHEE__EEI_Address__country__use_abbreviation', true, $this->country_obj())) { |
|
| 505 | - return $this->country_ID(); |
|
| 506 | - } |
|
| 507 | - return $this->country_name(); |
|
| 508 | - } |
|
| 509 | - |
|
| 510 | - |
|
| 511 | - /** |
|
| 512 | - * get Attendee Zip/Postal Code |
|
| 513 | - * |
|
| 514 | - * @return string |
|
| 515 | - * @throws EE_Error |
|
| 516 | - */ |
|
| 517 | - public function zip() |
|
| 518 | - { |
|
| 519 | - return $this->get('ATT_zip'); |
|
| 520 | - } |
|
| 521 | - |
|
| 522 | - |
|
| 523 | - /** |
|
| 524 | - * get Attendee Email Address |
|
| 525 | - * |
|
| 526 | - * @return string |
|
| 527 | - * @throws EE_Error |
|
| 528 | - */ |
|
| 529 | - public function email() |
|
| 530 | - { |
|
| 531 | - return $this->get('ATT_email'); |
|
| 532 | - } |
|
| 533 | - |
|
| 534 | - |
|
| 535 | - /** |
|
| 536 | - * get Attendee Phone # |
|
| 537 | - * |
|
| 538 | - * @return string |
|
| 539 | - * @throws EE_Error |
|
| 540 | - */ |
|
| 541 | - public function phone() |
|
| 542 | - { |
|
| 543 | - return $this->get('ATT_phone'); |
|
| 544 | - } |
|
| 545 | - |
|
| 546 | - |
|
| 547 | - /** |
|
| 548 | - * get deleted |
|
| 549 | - * |
|
| 550 | - * @return bool |
|
| 551 | - * @throws EE_Error |
|
| 552 | - */ |
|
| 553 | - public function deleted() |
|
| 554 | - { |
|
| 555 | - return $this->get('ATT_deleted'); |
|
| 556 | - } |
|
| 557 | - |
|
| 558 | - |
|
| 559 | - /** |
|
| 560 | - * Gets registrations of this attendee |
|
| 561 | - * |
|
| 562 | - * @param array $query_params |
|
| 563 | - * @return EE_Registration[] |
|
| 564 | - * @throws EE_Error |
|
| 565 | - */ |
|
| 566 | - public function get_registrations($query_params = array()) |
|
| 567 | - { |
|
| 568 | - return $this->get_many_related('Registration', $query_params); |
|
| 569 | - } |
|
| 570 | - |
|
| 571 | - |
|
| 572 | - /** |
|
| 573 | - * Gets the most recent registration of this attendee |
|
| 574 | - * |
|
| 575 | - * @return EE_Registration |
|
| 576 | - * @throws EE_Error |
|
| 577 | - */ |
|
| 578 | - public function get_most_recent_registration() |
|
| 579 | - { |
|
| 580 | - return $this->get_first_related( |
|
| 581 | - 'Registration', |
|
| 582 | - array('order_by' => array('REG_date' => 'DESC')) |
|
| 583 | - ); //null, 'REG_date', 'DESC', '=', 'OBJECT_K'); |
|
| 584 | - } |
|
| 585 | - |
|
| 586 | - |
|
| 587 | - /** |
|
| 588 | - * Gets the most recent registration for this attend at this event |
|
| 589 | - * |
|
| 590 | - * @param int $event_id |
|
| 591 | - * @return EE_Registration |
|
| 592 | - * @throws EE_Error |
|
| 593 | - */ |
|
| 594 | - public function get_most_recent_registration_for_event($event_id) |
|
| 595 | - { |
|
| 596 | - return $this->get_first_related( |
|
| 597 | - 'Registration', |
|
| 598 | - array(array('EVT_ID' => $event_id), 'order_by' => array('REG_date' => 'DESC')) |
|
| 599 | - ); |
|
| 600 | - } |
|
| 601 | - |
|
| 602 | - |
|
| 603 | - /** |
|
| 604 | - * returns any events attached to this attendee ($_Event property); |
|
| 605 | - * |
|
| 606 | - * @return array |
|
| 607 | - * @throws EE_Error |
|
| 608 | - */ |
|
| 609 | - public function events() |
|
| 610 | - { |
|
| 611 | - return $this->get_many_related('Event'); |
|
| 612 | - } |
|
| 613 | - |
|
| 614 | - |
|
| 615 | - /** |
|
| 616 | - * Gets the billing info array where keys match espresso_reg_page_billing_inputs(), |
|
| 617 | - * and keys are their cleaned values. @see EE_Attendee::save_and_clean_billing_info_for_payment_method() which was |
|
| 618 | - * used to save the billing info |
|
| 619 | - * |
|
| 620 | - * @param EE_Payment_Method $payment_method the _gateway_name property on the gateway class |
|
| 621 | - * @return EE_Form_Section_Proper|null |
|
| 622 | - * @throws EE_Error |
|
| 623 | - */ |
|
| 624 | - public function billing_info_for_payment_method($payment_method) |
|
| 625 | - { |
|
| 626 | - $pm_type = $payment_method->type_obj(); |
|
| 627 | - if (! $pm_type instanceof EE_PMT_Base) { |
|
| 628 | - return null; |
|
| 629 | - } |
|
| 630 | - $billing_info = $this->get_post_meta($this->get_billing_info_postmeta_name($payment_method), true); |
|
| 631 | - if (! $billing_info) { |
|
| 632 | - return null; |
|
| 633 | - } |
|
| 634 | - $billing_form = $pm_type->billing_form(); |
|
| 635 | - if ($billing_form instanceof EE_Form_Section_Proper) { |
|
| 636 | - $billing_form->receive_form_submission(array($billing_form->name() => $billing_info), false); |
|
| 637 | - } |
|
| 638 | - return $billing_form; |
|
| 639 | - } |
|
| 640 | - |
|
| 641 | - |
|
| 642 | - /** |
|
| 643 | - * Gets the postmeta key that holds this attendee's billing info for the |
|
| 644 | - * specified payment method |
|
| 645 | - * |
|
| 646 | - * @param EE_Payment_Method $payment_method |
|
| 647 | - * @return string |
|
| 648 | - * @throws EE_Error |
|
| 649 | - */ |
|
| 650 | - public function get_billing_info_postmeta_name($payment_method) |
|
| 651 | - { |
|
| 652 | - if ($payment_method->type_obj() instanceof EE_PMT_Base) { |
|
| 653 | - return 'billing_info_' . $payment_method->type_obj()->system_name(); |
|
| 654 | - } |
|
| 655 | - return null; |
|
| 656 | - } |
|
| 657 | - |
|
| 658 | - |
|
| 659 | - /** |
|
| 660 | - * Saves the billing info to the attendee. @see EE_Attendee::billing_info_for_payment_method() which is used to |
|
| 661 | - * retrieve it |
|
| 662 | - * |
|
| 663 | - * @param EE_Billing_Attendee_Info_Form $billing_form |
|
| 664 | - * @param EE_Payment_Method $payment_method |
|
| 665 | - * @return boolean |
|
| 666 | - * @throws EE_Error |
|
| 667 | - */ |
|
| 668 | - public function save_and_clean_billing_info_for_payment_method($billing_form, $payment_method) |
|
| 669 | - { |
|
| 670 | - if (! $billing_form instanceof EE_Billing_Attendee_Info_Form) { |
|
| 671 | - EE_Error::add_error(__('Cannot save billing info because there is none.', 'event_espresso')); |
|
| 672 | - return false; |
|
| 673 | - } |
|
| 674 | - $billing_form->clean_sensitive_data(); |
|
| 675 | - return update_post_meta( |
|
| 676 | - $this->ID(), |
|
| 677 | - $this->get_billing_info_postmeta_name($payment_method), |
|
| 678 | - $billing_form->input_values(true) |
|
| 679 | - ); |
|
| 680 | - } |
|
| 681 | - |
|
| 682 | - |
|
| 683 | - /** |
|
| 684 | - * Return the link to the admin details for the object. |
|
| 685 | - * |
|
| 686 | - * @return string |
|
| 687 | - * @throws EE_Error |
|
| 688 | - * @throws InvalidArgumentException |
|
| 689 | - * @throws InvalidDataTypeException |
|
| 690 | - * @throws InvalidInterfaceException |
|
| 691 | - * @throws ReflectionException |
|
| 692 | - */ |
|
| 693 | - public function get_admin_details_link() |
|
| 694 | - { |
|
| 695 | - return $this->get_admin_edit_link(); |
|
| 696 | - } |
|
| 697 | - |
|
| 698 | - |
|
| 699 | - /** |
|
| 700 | - * Returns the link to the editor for the object. Sometimes this is the same as the details. |
|
| 701 | - * |
|
| 702 | - * @return string |
|
| 703 | - * @throws EE_Error |
|
| 704 | - * @throws InvalidArgumentException |
|
| 705 | - * @throws ReflectionException |
|
| 706 | - * @throws InvalidDataTypeException |
|
| 707 | - * @throws InvalidInterfaceException |
|
| 708 | - */ |
|
| 709 | - public function get_admin_edit_link() |
|
| 710 | - { |
|
| 711 | - EE_Registry::instance()->load_helper('URL'); |
|
| 712 | - return EEH_URL::add_query_args_and_nonce( |
|
| 713 | - array( |
|
| 714 | - 'page' => 'espresso_registrations', |
|
| 715 | - 'action' => 'edit_attendee', |
|
| 716 | - 'post' => $this->ID(), |
|
| 717 | - ), |
|
| 718 | - admin_url('admin.php') |
|
| 719 | - ); |
|
| 720 | - } |
|
| 721 | - |
|
| 722 | - |
|
| 723 | - /** |
|
| 724 | - * Returns the link to a settings page for the object. |
|
| 725 | - * |
|
| 726 | - * @return string |
|
| 727 | - * @throws EE_Error |
|
| 728 | - * @throws InvalidArgumentException |
|
| 729 | - * @throws InvalidDataTypeException |
|
| 730 | - * @throws InvalidInterfaceException |
|
| 731 | - * @throws ReflectionException |
|
| 732 | - */ |
|
| 733 | - public function get_admin_settings_link() |
|
| 734 | - { |
|
| 735 | - return $this->get_admin_edit_link(); |
|
| 736 | - } |
|
| 737 | - |
|
| 738 | - |
|
| 739 | - /** |
|
| 740 | - * Returns the link to the "overview" for the object (typically the "list table" view). |
|
| 741 | - * |
|
| 742 | - * @return string |
|
| 743 | - * @throws EE_Error |
|
| 744 | - * @throws InvalidArgumentException |
|
| 745 | - * @throws ReflectionException |
|
| 746 | - * @throws InvalidDataTypeException |
|
| 747 | - * @throws InvalidInterfaceException |
|
| 748 | - */ |
|
| 749 | - public function get_admin_overview_link() |
|
| 750 | - { |
|
| 751 | - EE_Registry::instance()->load_helper('URL'); |
|
| 752 | - return EEH_URL::add_query_args_and_nonce( |
|
| 753 | - array( |
|
| 754 | - 'page' => 'espresso_registrations', |
|
| 755 | - 'action' => 'contact_list', |
|
| 756 | - ), |
|
| 757 | - admin_url('admin.php') |
|
| 758 | - ); |
|
| 759 | - } |
|
| 30 | + /** |
|
| 31 | + * Sets some dynamic defaults |
|
| 32 | + * |
|
| 33 | + * @param array $fieldValues |
|
| 34 | + * @param bool $bydb |
|
| 35 | + * @param string $timezone |
|
| 36 | + * @param array $date_formats |
|
| 37 | + * @throws EE_Error |
|
| 38 | + */ |
|
| 39 | + protected function __construct($fieldValues = null, $bydb = false, $timezone = null, $date_formats = array()) |
|
| 40 | + { |
|
| 41 | + if (! isset($fieldValues['ATT_full_name'])) { |
|
| 42 | + $fname = isset($fieldValues['ATT_fname']) ? $fieldValues['ATT_fname'] . ' ' : ''; |
|
| 43 | + $lname = isset($fieldValues['ATT_lname']) ? $fieldValues['ATT_lname'] : ''; |
|
| 44 | + $fieldValues['ATT_full_name'] = $fname . $lname; |
|
| 45 | + } |
|
| 46 | + if (! isset($fieldValues['ATT_slug'])) { |
|
| 47 | + // $fieldValues['ATT_slug'] = sanitize_key(wp_generate_password(20)); |
|
| 48 | + $fieldValues['ATT_slug'] = sanitize_title($fieldValues['ATT_full_name']); |
|
| 49 | + } |
|
| 50 | + if (! isset($fieldValues['ATT_short_bio']) && isset($fieldValues['ATT_bio'])) { |
|
| 51 | + $fieldValues['ATT_short_bio'] = substr($fieldValues['ATT_bio'], 0, 50); |
|
| 52 | + } |
|
| 53 | + parent::__construct($fieldValues, $bydb, $timezone, $date_formats); |
|
| 54 | + } |
|
| 55 | + |
|
| 56 | + |
|
| 57 | + /** |
|
| 58 | + * @param array $props_n_values incoming values |
|
| 59 | + * @param string $timezone incoming timezone (if not set the timezone set for the website will be |
|
| 60 | + * used.) |
|
| 61 | + * @param array $date_formats incoming date_formats in an array where the first value is the |
|
| 62 | + * date_format and the second value is the time format |
|
| 63 | + * @return EE_Attendee |
|
| 64 | + * @throws EE_Error |
|
| 65 | + */ |
|
| 66 | + public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array()) |
|
| 67 | + { |
|
| 68 | + $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats); |
|
| 69 | + return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats); |
|
| 70 | + } |
|
| 71 | + |
|
| 72 | + |
|
| 73 | + /** |
|
| 74 | + * @param array $props_n_values incoming values from the database |
|
| 75 | + * @param string $timezone incoming timezone as set by the model. If not set the timezone for |
|
| 76 | + * the website will be used. |
|
| 77 | + * @return EE_Attendee |
|
| 78 | + */ |
|
| 79 | + public static function new_instance_from_db($props_n_values = array(), $timezone = null) |
|
| 80 | + { |
|
| 81 | + return new self($props_n_values, true, $timezone); |
|
| 82 | + } |
|
| 83 | + |
|
| 84 | + |
|
| 85 | + /** |
|
| 86 | + * Set Attendee First Name |
|
| 87 | + * |
|
| 88 | + * @access public |
|
| 89 | + * @param string $fname |
|
| 90 | + * @throws EE_Error |
|
| 91 | + */ |
|
| 92 | + public function set_fname($fname = '') |
|
| 93 | + { |
|
| 94 | + $this->set('ATT_fname', $fname); |
|
| 95 | + } |
|
| 96 | + |
|
| 97 | + |
|
| 98 | + /** |
|
| 99 | + * Set Attendee Last Name |
|
| 100 | + * |
|
| 101 | + * @access public |
|
| 102 | + * @param string $lname |
|
| 103 | + * @throws EE_Error |
|
| 104 | + */ |
|
| 105 | + public function set_lname($lname = '') |
|
| 106 | + { |
|
| 107 | + $this->set('ATT_lname', $lname); |
|
| 108 | + } |
|
| 109 | + |
|
| 110 | + |
|
| 111 | + /** |
|
| 112 | + * Set Attendee Address |
|
| 113 | + * |
|
| 114 | + * @access public |
|
| 115 | + * @param string $address |
|
| 116 | + * @throws EE_Error |
|
| 117 | + */ |
|
| 118 | + public function set_address($address = '') |
|
| 119 | + { |
|
| 120 | + $this->set('ATT_address', $address); |
|
| 121 | + } |
|
| 122 | + |
|
| 123 | + |
|
| 124 | + /** |
|
| 125 | + * Set Attendee Address2 |
|
| 126 | + * |
|
| 127 | + * @access public |
|
| 128 | + * @param string $address2 |
|
| 129 | + * @throws EE_Error |
|
| 130 | + */ |
|
| 131 | + public function set_address2($address2 = '') |
|
| 132 | + { |
|
| 133 | + $this->set('ATT_address2', $address2); |
|
| 134 | + } |
|
| 135 | + |
|
| 136 | + |
|
| 137 | + /** |
|
| 138 | + * Set Attendee City |
|
| 139 | + * |
|
| 140 | + * @access public |
|
| 141 | + * @param string $city |
|
| 142 | + * @throws EE_Error |
|
| 143 | + */ |
|
| 144 | + public function set_city($city = '') |
|
| 145 | + { |
|
| 146 | + $this->set('ATT_city', $city); |
|
| 147 | + } |
|
| 148 | + |
|
| 149 | + |
|
| 150 | + /** |
|
| 151 | + * Set Attendee State ID |
|
| 152 | + * |
|
| 153 | + * @access public |
|
| 154 | + * @param int $STA_ID |
|
| 155 | + * @throws EE_Error |
|
| 156 | + */ |
|
| 157 | + public function set_state($STA_ID = 0) |
|
| 158 | + { |
|
| 159 | + $this->set('STA_ID', $STA_ID); |
|
| 160 | + } |
|
| 161 | + |
|
| 162 | + |
|
| 163 | + /** |
|
| 164 | + * Set Attendee Country ISO Code |
|
| 165 | + * |
|
| 166 | + * @access public |
|
| 167 | + * @param string $CNT_ISO |
|
| 168 | + * @throws EE_Error |
|
| 169 | + */ |
|
| 170 | + public function set_country($CNT_ISO = '') |
|
| 171 | + { |
|
| 172 | + $this->set('CNT_ISO', $CNT_ISO); |
|
| 173 | + } |
|
| 174 | + |
|
| 175 | + |
|
| 176 | + /** |
|
| 177 | + * Set Attendee Zip/Postal Code |
|
| 178 | + * |
|
| 179 | + * @access public |
|
| 180 | + * @param string $zip |
|
| 181 | + * @throws EE_Error |
|
| 182 | + */ |
|
| 183 | + public function set_zip($zip = '') |
|
| 184 | + { |
|
| 185 | + $this->set('ATT_zip', $zip); |
|
| 186 | + } |
|
| 187 | + |
|
| 188 | + |
|
| 189 | + /** |
|
| 190 | + * Set Attendee Email Address |
|
| 191 | + * |
|
| 192 | + * @access public |
|
| 193 | + * @param string $email |
|
| 194 | + * @throws EE_Error |
|
| 195 | + */ |
|
| 196 | + public function set_email($email = '') |
|
| 197 | + { |
|
| 198 | + $this->set('ATT_email', $email); |
|
| 199 | + } |
|
| 200 | + |
|
| 201 | + |
|
| 202 | + /** |
|
| 203 | + * Set Attendee Phone |
|
| 204 | + * |
|
| 205 | + * @access public |
|
| 206 | + * @param string $phone |
|
| 207 | + * @throws EE_Error |
|
| 208 | + */ |
|
| 209 | + public function set_phone($phone = '') |
|
| 210 | + { |
|
| 211 | + $this->set('ATT_phone', $phone); |
|
| 212 | + } |
|
| 213 | + |
|
| 214 | + |
|
| 215 | + /** |
|
| 216 | + * set deleted |
|
| 217 | + * |
|
| 218 | + * @access public |
|
| 219 | + * @param bool $ATT_deleted |
|
| 220 | + * @throws EE_Error |
|
| 221 | + */ |
|
| 222 | + public function set_deleted($ATT_deleted = false) |
|
| 223 | + { |
|
| 224 | + $this->set('ATT_deleted', $ATT_deleted); |
|
| 225 | + } |
|
| 226 | + |
|
| 227 | + |
|
| 228 | + /** |
|
| 229 | + * Returns the value for the post_author id saved with the cpt |
|
| 230 | + * |
|
| 231 | + * @since 4.5.0 |
|
| 232 | + * @return int |
|
| 233 | + * @throws EE_Error |
|
| 234 | + */ |
|
| 235 | + public function wp_user() |
|
| 236 | + { |
|
| 237 | + return $this->get('ATT_author'); |
|
| 238 | + } |
|
| 239 | + |
|
| 240 | + |
|
| 241 | + /** |
|
| 242 | + * get Attendee First Name |
|
| 243 | + * |
|
| 244 | + * @access public |
|
| 245 | + * @return string |
|
| 246 | + * @throws EE_Error |
|
| 247 | + */ |
|
| 248 | + public function fname() |
|
| 249 | + { |
|
| 250 | + return $this->get('ATT_fname'); |
|
| 251 | + } |
|
| 252 | + |
|
| 253 | + |
|
| 254 | + /** |
|
| 255 | + * echoes out the attendee's first name |
|
| 256 | + * |
|
| 257 | + * @return void |
|
| 258 | + * @throws EE_Error |
|
| 259 | + */ |
|
| 260 | + public function e_full_name() |
|
| 261 | + { |
|
| 262 | + echo $this->full_name(); |
|
| 263 | + } |
|
| 264 | + |
|
| 265 | + |
|
| 266 | + /** |
|
| 267 | + * Returns the first and last name concatenated together with a space. |
|
| 268 | + * |
|
| 269 | + * @param bool $apply_html_entities |
|
| 270 | + * @return string |
|
| 271 | + * @throws EE_Error |
|
| 272 | + */ |
|
| 273 | + public function full_name($apply_html_entities = false) |
|
| 274 | + { |
|
| 275 | + $full_name = array( |
|
| 276 | + $this->fname(), |
|
| 277 | + $this->lname(), |
|
| 278 | + ); |
|
| 279 | + $full_name = array_filter($full_name); |
|
| 280 | + $full_name = implode(' ', $full_name); |
|
| 281 | + return $apply_html_entities ? htmlentities($full_name, ENT_QUOTES, 'UTF-8') : $full_name; |
|
| 282 | + } |
|
| 283 | + |
|
| 284 | + |
|
| 285 | + /** |
|
| 286 | + * This returns the value of the `ATT_full_name` field which is usually equivalent to calling `full_name()` unless |
|
| 287 | + * the post_title field has been directly modified in the db for the post (espresso_attendees post type) for this |
|
| 288 | + * attendee. |
|
| 289 | + * |
|
| 290 | + * @param bool $apply_html_entities |
|
| 291 | + * @return string |
|
| 292 | + * @throws EE_Error |
|
| 293 | + */ |
|
| 294 | + public function ATT_full_name($apply_html_entities = false) |
|
| 295 | + { |
|
| 296 | + return $apply_html_entities |
|
| 297 | + ? htmlentities($this->get('ATT_full_name'), ENT_QUOTES, 'UTF-8') |
|
| 298 | + : $this->get('ATT_full_name'); |
|
| 299 | + } |
|
| 300 | + |
|
| 301 | + |
|
| 302 | + /** |
|
| 303 | + * get Attendee Last Name |
|
| 304 | + * |
|
| 305 | + * @access public |
|
| 306 | + * @return string |
|
| 307 | + * @throws EE_Error |
|
| 308 | + */ |
|
| 309 | + public function lname() |
|
| 310 | + { |
|
| 311 | + return $this->get('ATT_lname'); |
|
| 312 | + } |
|
| 313 | + |
|
| 314 | + |
|
| 315 | + /** |
|
| 316 | + * Gets the attendee's full address as an array so client code can decide hwo to display it |
|
| 317 | + * |
|
| 318 | + * @return array numerically indexed, with each part of the address that is known. |
|
| 319 | + * Eg, if the user only responded to state and country, |
|
| 320 | + * it would be array(0=>'Alabama',1=>'USA') |
|
| 321 | + * @return array |
|
| 322 | + * @throws EE_Error |
|
| 323 | + */ |
|
| 324 | + public function full_address_as_array() |
|
| 325 | + { |
|
| 326 | + $full_address_array = array(); |
|
| 327 | + $initial_address_fields = array('ATT_address', 'ATT_address2', 'ATT_city',); |
|
| 328 | + foreach ($initial_address_fields as $address_field_name) { |
|
| 329 | + $address_fields_value = $this->get($address_field_name); |
|
| 330 | + if (! empty($address_fields_value)) { |
|
| 331 | + $full_address_array[] = $address_fields_value; |
|
| 332 | + } |
|
| 333 | + } |
|
| 334 | + //now handle state and country |
|
| 335 | + $state_obj = $this->state_obj(); |
|
| 336 | + if ($state_obj instanceof EE_State) { |
|
| 337 | + $full_address_array[] = $state_obj->name(); |
|
| 338 | + } |
|
| 339 | + $country_obj = $this->country_obj(); |
|
| 340 | + if ($country_obj instanceof EE_Country) { |
|
| 341 | + $full_address_array[] = $country_obj->name(); |
|
| 342 | + } |
|
| 343 | + //lastly get the xip |
|
| 344 | + $zip_value = $this->zip(); |
|
| 345 | + if (! empty($zip_value)) { |
|
| 346 | + $full_address_array[] = $zip_value; |
|
| 347 | + } |
|
| 348 | + return $full_address_array; |
|
| 349 | + } |
|
| 350 | + |
|
| 351 | + |
|
| 352 | + /** |
|
| 353 | + * get Attendee Address |
|
| 354 | + * |
|
| 355 | + * @return string |
|
| 356 | + * @throws EE_Error |
|
| 357 | + */ |
|
| 358 | + public function address() |
|
| 359 | + { |
|
| 360 | + return $this->get('ATT_address'); |
|
| 361 | + } |
|
| 362 | + |
|
| 363 | + |
|
| 364 | + /** |
|
| 365 | + * get Attendee Address2 |
|
| 366 | + * |
|
| 367 | + * @return string |
|
| 368 | + * @throws EE_Error |
|
| 369 | + */ |
|
| 370 | + public function address2() |
|
| 371 | + { |
|
| 372 | + return $this->get('ATT_address2'); |
|
| 373 | + } |
|
| 374 | + |
|
| 375 | + |
|
| 376 | + /** |
|
| 377 | + * get Attendee City |
|
| 378 | + * |
|
| 379 | + * @return string |
|
| 380 | + * @throws EE_Error |
|
| 381 | + */ |
|
| 382 | + public function city() |
|
| 383 | + { |
|
| 384 | + return $this->get('ATT_city'); |
|
| 385 | + } |
|
| 386 | + |
|
| 387 | + |
|
| 388 | + /** |
|
| 389 | + * get Attendee State ID |
|
| 390 | + * |
|
| 391 | + * @return string |
|
| 392 | + * @throws EE_Error |
|
| 393 | + */ |
|
| 394 | + public function state_ID() |
|
| 395 | + { |
|
| 396 | + return $this->get('STA_ID'); |
|
| 397 | + } |
|
| 398 | + |
|
| 399 | + |
|
| 400 | + /** |
|
| 401 | + * @return string |
|
| 402 | + * @throws EE_Error |
|
| 403 | + */ |
|
| 404 | + public function state_abbrev() |
|
| 405 | + { |
|
| 406 | + return $this->state_obj() instanceof EE_State ? $this->state_obj()->abbrev() : ''; |
|
| 407 | + } |
|
| 408 | + |
|
| 409 | + |
|
| 410 | + /** |
|
| 411 | + * Gets the state set to this attendee |
|
| 412 | + * |
|
| 413 | + * @return EE_State |
|
| 414 | + * @throws EE_Error |
|
| 415 | + */ |
|
| 416 | + public function state_obj() |
|
| 417 | + { |
|
| 418 | + return $this->get_first_related('State'); |
|
| 419 | + } |
|
| 420 | + |
|
| 421 | + |
|
| 422 | + /** |
|
| 423 | + * Returns the state's name, otherwise 'Unknown' |
|
| 424 | + * |
|
| 425 | + * @return string |
|
| 426 | + * @throws EE_Error |
|
| 427 | + */ |
|
| 428 | + public function state_name() |
|
| 429 | + { |
|
| 430 | + if ($this->state_obj()) { |
|
| 431 | + return $this->state_obj()->name(); |
|
| 432 | + } else { |
|
| 433 | + return ''; |
|
| 434 | + } |
|
| 435 | + } |
|
| 436 | + |
|
| 437 | + |
|
| 438 | + /** |
|
| 439 | + * either displays the state abbreviation or the state name, as determined |
|
| 440 | + * by the "FHEE__EEI_Address__state__use_abbreviation" filter. |
|
| 441 | + * defaults to abbreviation |
|
| 442 | + * |
|
| 443 | + * @return string |
|
| 444 | + * @throws EE_Error |
|
| 445 | + */ |
|
| 446 | + public function state() |
|
| 447 | + { |
|
| 448 | + if (apply_filters('FHEE__EEI_Address__state__use_abbreviation', true, $this->state_obj())) { |
|
| 449 | + return $this->state_abbrev(); |
|
| 450 | + } |
|
| 451 | + return $this->state_name(); |
|
| 452 | + } |
|
| 453 | + |
|
| 454 | + |
|
| 455 | + /** |
|
| 456 | + * get Attendee Country ISO Code |
|
| 457 | + * |
|
| 458 | + * @return string |
|
| 459 | + * @throws EE_Error |
|
| 460 | + */ |
|
| 461 | + public function country_ID() |
|
| 462 | + { |
|
| 463 | + return $this->get('CNT_ISO'); |
|
| 464 | + } |
|
| 465 | + |
|
| 466 | + |
|
| 467 | + /** |
|
| 468 | + * Gets country set for this attendee |
|
| 469 | + * |
|
| 470 | + * @return EE_Country |
|
| 471 | + * @throws EE_Error |
|
| 472 | + */ |
|
| 473 | + public function country_obj() |
|
| 474 | + { |
|
| 475 | + return $this->get_first_related('Country'); |
|
| 476 | + } |
|
| 477 | + |
|
| 478 | + |
|
| 479 | + /** |
|
| 480 | + * Returns the country's name if known, otherwise 'Unknown' |
|
| 481 | + * |
|
| 482 | + * @return string |
|
| 483 | + * @throws EE_Error |
|
| 484 | + */ |
|
| 485 | + public function country_name() |
|
| 486 | + { |
|
| 487 | + if ($this->country_obj()) { |
|
| 488 | + return $this->country_obj()->name(); |
|
| 489 | + } |
|
| 490 | + return ''; |
|
| 491 | + } |
|
| 492 | + |
|
| 493 | + |
|
| 494 | + /** |
|
| 495 | + * either displays the country ISO2 code or the country name, as determined |
|
| 496 | + * by the "FHEE__EEI_Address__country__use_abbreviation" filter. |
|
| 497 | + * defaults to abbreviation |
|
| 498 | + * |
|
| 499 | + * @return string |
|
| 500 | + * @throws EE_Error |
|
| 501 | + */ |
|
| 502 | + public function country() |
|
| 503 | + { |
|
| 504 | + if (apply_filters('FHEE__EEI_Address__country__use_abbreviation', true, $this->country_obj())) { |
|
| 505 | + return $this->country_ID(); |
|
| 506 | + } |
|
| 507 | + return $this->country_name(); |
|
| 508 | + } |
|
| 509 | + |
|
| 510 | + |
|
| 511 | + /** |
|
| 512 | + * get Attendee Zip/Postal Code |
|
| 513 | + * |
|
| 514 | + * @return string |
|
| 515 | + * @throws EE_Error |
|
| 516 | + */ |
|
| 517 | + public function zip() |
|
| 518 | + { |
|
| 519 | + return $this->get('ATT_zip'); |
|
| 520 | + } |
|
| 521 | + |
|
| 522 | + |
|
| 523 | + /** |
|
| 524 | + * get Attendee Email Address |
|
| 525 | + * |
|
| 526 | + * @return string |
|
| 527 | + * @throws EE_Error |
|
| 528 | + */ |
|
| 529 | + public function email() |
|
| 530 | + { |
|
| 531 | + return $this->get('ATT_email'); |
|
| 532 | + } |
|
| 533 | + |
|
| 534 | + |
|
| 535 | + /** |
|
| 536 | + * get Attendee Phone # |
|
| 537 | + * |
|
| 538 | + * @return string |
|
| 539 | + * @throws EE_Error |
|
| 540 | + */ |
|
| 541 | + public function phone() |
|
| 542 | + { |
|
| 543 | + return $this->get('ATT_phone'); |
|
| 544 | + } |
|
| 545 | + |
|
| 546 | + |
|
| 547 | + /** |
|
| 548 | + * get deleted |
|
| 549 | + * |
|
| 550 | + * @return bool |
|
| 551 | + * @throws EE_Error |
|
| 552 | + */ |
|
| 553 | + public function deleted() |
|
| 554 | + { |
|
| 555 | + return $this->get('ATT_deleted'); |
|
| 556 | + } |
|
| 557 | + |
|
| 558 | + |
|
| 559 | + /** |
|
| 560 | + * Gets registrations of this attendee |
|
| 561 | + * |
|
| 562 | + * @param array $query_params |
|
| 563 | + * @return EE_Registration[] |
|
| 564 | + * @throws EE_Error |
|
| 565 | + */ |
|
| 566 | + public function get_registrations($query_params = array()) |
|
| 567 | + { |
|
| 568 | + return $this->get_many_related('Registration', $query_params); |
|
| 569 | + } |
|
| 570 | + |
|
| 571 | + |
|
| 572 | + /** |
|
| 573 | + * Gets the most recent registration of this attendee |
|
| 574 | + * |
|
| 575 | + * @return EE_Registration |
|
| 576 | + * @throws EE_Error |
|
| 577 | + */ |
|
| 578 | + public function get_most_recent_registration() |
|
| 579 | + { |
|
| 580 | + return $this->get_first_related( |
|
| 581 | + 'Registration', |
|
| 582 | + array('order_by' => array('REG_date' => 'DESC')) |
|
| 583 | + ); //null, 'REG_date', 'DESC', '=', 'OBJECT_K'); |
|
| 584 | + } |
|
| 585 | + |
|
| 586 | + |
|
| 587 | + /** |
|
| 588 | + * Gets the most recent registration for this attend at this event |
|
| 589 | + * |
|
| 590 | + * @param int $event_id |
|
| 591 | + * @return EE_Registration |
|
| 592 | + * @throws EE_Error |
|
| 593 | + */ |
|
| 594 | + public function get_most_recent_registration_for_event($event_id) |
|
| 595 | + { |
|
| 596 | + return $this->get_first_related( |
|
| 597 | + 'Registration', |
|
| 598 | + array(array('EVT_ID' => $event_id), 'order_by' => array('REG_date' => 'DESC')) |
|
| 599 | + ); |
|
| 600 | + } |
|
| 601 | + |
|
| 602 | + |
|
| 603 | + /** |
|
| 604 | + * returns any events attached to this attendee ($_Event property); |
|
| 605 | + * |
|
| 606 | + * @return array |
|
| 607 | + * @throws EE_Error |
|
| 608 | + */ |
|
| 609 | + public function events() |
|
| 610 | + { |
|
| 611 | + return $this->get_many_related('Event'); |
|
| 612 | + } |
|
| 613 | + |
|
| 614 | + |
|
| 615 | + /** |
|
| 616 | + * Gets the billing info array where keys match espresso_reg_page_billing_inputs(), |
|
| 617 | + * and keys are their cleaned values. @see EE_Attendee::save_and_clean_billing_info_for_payment_method() which was |
|
| 618 | + * used to save the billing info |
|
| 619 | + * |
|
| 620 | + * @param EE_Payment_Method $payment_method the _gateway_name property on the gateway class |
|
| 621 | + * @return EE_Form_Section_Proper|null |
|
| 622 | + * @throws EE_Error |
|
| 623 | + */ |
|
| 624 | + public function billing_info_for_payment_method($payment_method) |
|
| 625 | + { |
|
| 626 | + $pm_type = $payment_method->type_obj(); |
|
| 627 | + if (! $pm_type instanceof EE_PMT_Base) { |
|
| 628 | + return null; |
|
| 629 | + } |
|
| 630 | + $billing_info = $this->get_post_meta($this->get_billing_info_postmeta_name($payment_method), true); |
|
| 631 | + if (! $billing_info) { |
|
| 632 | + return null; |
|
| 633 | + } |
|
| 634 | + $billing_form = $pm_type->billing_form(); |
|
| 635 | + if ($billing_form instanceof EE_Form_Section_Proper) { |
|
| 636 | + $billing_form->receive_form_submission(array($billing_form->name() => $billing_info), false); |
|
| 637 | + } |
|
| 638 | + return $billing_form; |
|
| 639 | + } |
|
| 640 | + |
|
| 641 | + |
|
| 642 | + /** |
|
| 643 | + * Gets the postmeta key that holds this attendee's billing info for the |
|
| 644 | + * specified payment method |
|
| 645 | + * |
|
| 646 | + * @param EE_Payment_Method $payment_method |
|
| 647 | + * @return string |
|
| 648 | + * @throws EE_Error |
|
| 649 | + */ |
|
| 650 | + public function get_billing_info_postmeta_name($payment_method) |
|
| 651 | + { |
|
| 652 | + if ($payment_method->type_obj() instanceof EE_PMT_Base) { |
|
| 653 | + return 'billing_info_' . $payment_method->type_obj()->system_name(); |
|
| 654 | + } |
|
| 655 | + return null; |
|
| 656 | + } |
|
| 657 | + |
|
| 658 | + |
|
| 659 | + /** |
|
| 660 | + * Saves the billing info to the attendee. @see EE_Attendee::billing_info_for_payment_method() which is used to |
|
| 661 | + * retrieve it |
|
| 662 | + * |
|
| 663 | + * @param EE_Billing_Attendee_Info_Form $billing_form |
|
| 664 | + * @param EE_Payment_Method $payment_method |
|
| 665 | + * @return boolean |
|
| 666 | + * @throws EE_Error |
|
| 667 | + */ |
|
| 668 | + public function save_and_clean_billing_info_for_payment_method($billing_form, $payment_method) |
|
| 669 | + { |
|
| 670 | + if (! $billing_form instanceof EE_Billing_Attendee_Info_Form) { |
|
| 671 | + EE_Error::add_error(__('Cannot save billing info because there is none.', 'event_espresso')); |
|
| 672 | + return false; |
|
| 673 | + } |
|
| 674 | + $billing_form->clean_sensitive_data(); |
|
| 675 | + return update_post_meta( |
|
| 676 | + $this->ID(), |
|
| 677 | + $this->get_billing_info_postmeta_name($payment_method), |
|
| 678 | + $billing_form->input_values(true) |
|
| 679 | + ); |
|
| 680 | + } |
|
| 681 | + |
|
| 682 | + |
|
| 683 | + /** |
|
| 684 | + * Return the link to the admin details for the object. |
|
| 685 | + * |
|
| 686 | + * @return string |
|
| 687 | + * @throws EE_Error |
|
| 688 | + * @throws InvalidArgumentException |
|
| 689 | + * @throws InvalidDataTypeException |
|
| 690 | + * @throws InvalidInterfaceException |
|
| 691 | + * @throws ReflectionException |
|
| 692 | + */ |
|
| 693 | + public function get_admin_details_link() |
|
| 694 | + { |
|
| 695 | + return $this->get_admin_edit_link(); |
|
| 696 | + } |
|
| 697 | + |
|
| 698 | + |
|
| 699 | + /** |
|
| 700 | + * Returns the link to the editor for the object. Sometimes this is the same as the details. |
|
| 701 | + * |
|
| 702 | + * @return string |
|
| 703 | + * @throws EE_Error |
|
| 704 | + * @throws InvalidArgumentException |
|
| 705 | + * @throws ReflectionException |
|
| 706 | + * @throws InvalidDataTypeException |
|
| 707 | + * @throws InvalidInterfaceException |
|
| 708 | + */ |
|
| 709 | + public function get_admin_edit_link() |
|
| 710 | + { |
|
| 711 | + EE_Registry::instance()->load_helper('URL'); |
|
| 712 | + return EEH_URL::add_query_args_and_nonce( |
|
| 713 | + array( |
|
| 714 | + 'page' => 'espresso_registrations', |
|
| 715 | + 'action' => 'edit_attendee', |
|
| 716 | + 'post' => $this->ID(), |
|
| 717 | + ), |
|
| 718 | + admin_url('admin.php') |
|
| 719 | + ); |
|
| 720 | + } |
|
| 721 | + |
|
| 722 | + |
|
| 723 | + /** |
|
| 724 | + * Returns the link to a settings page for the object. |
|
| 725 | + * |
|
| 726 | + * @return string |
|
| 727 | + * @throws EE_Error |
|
| 728 | + * @throws InvalidArgumentException |
|
| 729 | + * @throws InvalidDataTypeException |
|
| 730 | + * @throws InvalidInterfaceException |
|
| 731 | + * @throws ReflectionException |
|
| 732 | + */ |
|
| 733 | + public function get_admin_settings_link() |
|
| 734 | + { |
|
| 735 | + return $this->get_admin_edit_link(); |
|
| 736 | + } |
|
| 737 | + |
|
| 738 | + |
|
| 739 | + /** |
|
| 740 | + * Returns the link to the "overview" for the object (typically the "list table" view). |
|
| 741 | + * |
|
| 742 | + * @return string |
|
| 743 | + * @throws EE_Error |
|
| 744 | + * @throws InvalidArgumentException |
|
| 745 | + * @throws ReflectionException |
|
| 746 | + * @throws InvalidDataTypeException |
|
| 747 | + * @throws InvalidInterfaceException |
|
| 748 | + */ |
|
| 749 | + public function get_admin_overview_link() |
|
| 750 | + { |
|
| 751 | + EE_Registry::instance()->load_helper('URL'); |
|
| 752 | + return EEH_URL::add_query_args_and_nonce( |
|
| 753 | + array( |
|
| 754 | + 'page' => 'espresso_registrations', |
|
| 755 | + 'action' => 'contact_list', |
|
| 756 | + ), |
|
| 757 | + admin_url('admin.php') |
|
| 758 | + ); |
|
| 759 | + } |
|
| 760 | 760 | } |
@@ -38,16 +38,16 @@ discard block |
||
| 38 | 38 | */ |
| 39 | 39 | protected function __construct($fieldValues = null, $bydb = false, $timezone = null, $date_formats = array()) |
| 40 | 40 | { |
| 41 | - if (! isset($fieldValues['ATT_full_name'])) { |
|
| 42 | - $fname = isset($fieldValues['ATT_fname']) ? $fieldValues['ATT_fname'] . ' ' : ''; |
|
| 41 | + if ( ! isset($fieldValues['ATT_full_name'])) { |
|
| 42 | + $fname = isset($fieldValues['ATT_fname']) ? $fieldValues['ATT_fname'].' ' : ''; |
|
| 43 | 43 | $lname = isset($fieldValues['ATT_lname']) ? $fieldValues['ATT_lname'] : ''; |
| 44 | - $fieldValues['ATT_full_name'] = $fname . $lname; |
|
| 44 | + $fieldValues['ATT_full_name'] = $fname.$lname; |
|
| 45 | 45 | } |
| 46 | - if (! isset($fieldValues['ATT_slug'])) { |
|
| 46 | + if ( ! isset($fieldValues['ATT_slug'])) { |
|
| 47 | 47 | // $fieldValues['ATT_slug'] = sanitize_key(wp_generate_password(20)); |
| 48 | 48 | $fieldValues['ATT_slug'] = sanitize_title($fieldValues['ATT_full_name']); |
| 49 | 49 | } |
| 50 | - if (! isset($fieldValues['ATT_short_bio']) && isset($fieldValues['ATT_bio'])) { |
|
| 50 | + if ( ! isset($fieldValues['ATT_short_bio']) && isset($fieldValues['ATT_bio'])) { |
|
| 51 | 51 | $fieldValues['ATT_short_bio'] = substr($fieldValues['ATT_bio'], 0, 50); |
| 52 | 52 | } |
| 53 | 53 | parent::__construct($fieldValues, $bydb, $timezone, $date_formats); |
@@ -327,7 +327,7 @@ discard block |
||
| 327 | 327 | $initial_address_fields = array('ATT_address', 'ATT_address2', 'ATT_city',); |
| 328 | 328 | foreach ($initial_address_fields as $address_field_name) { |
| 329 | 329 | $address_fields_value = $this->get($address_field_name); |
| 330 | - if (! empty($address_fields_value)) { |
|
| 330 | + if ( ! empty($address_fields_value)) { |
|
| 331 | 331 | $full_address_array[] = $address_fields_value; |
| 332 | 332 | } |
| 333 | 333 | } |
@@ -342,7 +342,7 @@ discard block |
||
| 342 | 342 | } |
| 343 | 343 | //lastly get the xip |
| 344 | 344 | $zip_value = $this->zip(); |
| 345 | - if (! empty($zip_value)) { |
|
| 345 | + if ( ! empty($zip_value)) { |
|
| 346 | 346 | $full_address_array[] = $zip_value; |
| 347 | 347 | } |
| 348 | 348 | return $full_address_array; |
@@ -624,11 +624,11 @@ discard block |
||
| 624 | 624 | public function billing_info_for_payment_method($payment_method) |
| 625 | 625 | { |
| 626 | 626 | $pm_type = $payment_method->type_obj(); |
| 627 | - if (! $pm_type instanceof EE_PMT_Base) { |
|
| 627 | + if ( ! $pm_type instanceof EE_PMT_Base) { |
|
| 628 | 628 | return null; |
| 629 | 629 | } |
| 630 | 630 | $billing_info = $this->get_post_meta($this->get_billing_info_postmeta_name($payment_method), true); |
| 631 | - if (! $billing_info) { |
|
| 631 | + if ( ! $billing_info) { |
|
| 632 | 632 | return null; |
| 633 | 633 | } |
| 634 | 634 | $billing_form = $pm_type->billing_form(); |
@@ -650,7 +650,7 @@ discard block |
||
| 650 | 650 | public function get_billing_info_postmeta_name($payment_method) |
| 651 | 651 | { |
| 652 | 652 | if ($payment_method->type_obj() instanceof EE_PMT_Base) { |
| 653 | - return 'billing_info_' . $payment_method->type_obj()->system_name(); |
|
| 653 | + return 'billing_info_'.$payment_method->type_obj()->system_name(); |
|
| 654 | 654 | } |
| 655 | 655 | return null; |
| 656 | 656 | } |
@@ -667,7 +667,7 @@ discard block |
||
| 667 | 667 | */ |
| 668 | 668 | public function save_and_clean_billing_info_for_payment_method($billing_form, $payment_method) |
| 669 | 669 | { |
| 670 | - if (! $billing_form instanceof EE_Billing_Attendee_Info_Form) { |
|
| 670 | + if ( ! $billing_form instanceof EE_Billing_Attendee_Info_Form) { |
|
| 671 | 671 | EE_Error::add_error(__('Cannot save billing info because there is none.', 'event_espresso')); |
| 672 | 672 | return false; |
| 673 | 673 | } |
@@ -303,7 +303,7 @@ discard block |
||
| 303 | 303 | * ATT_address column |
| 304 | 304 | * |
| 305 | 305 | * @param EE_Attendee $attendee |
| 306 | - * @return mixed |
|
| 306 | + * @return string |
|
| 307 | 307 | * @throws EE_Error |
| 308 | 308 | */ |
| 309 | 309 | public function column_ATT_address(EE_Attendee $attendee) |
@@ -316,7 +316,7 @@ discard block |
||
| 316 | 316 | * ATT_city column |
| 317 | 317 | * |
| 318 | 318 | * @param EE_Attendee $attendee |
| 319 | - * @return mixed |
|
| 319 | + * @return string |
|
| 320 | 320 | * @throws EE_Error |
| 321 | 321 | */ |
| 322 | 322 | public function column_ATT_city(EE_Attendee $attendee) |
@@ -369,7 +369,7 @@ discard block |
||
| 369 | 369 | * Phone Number column |
| 370 | 370 | * |
| 371 | 371 | * @param EE_Attendee $attendee |
| 372 | - * @return mixed |
|
| 372 | + * @return string |
|
| 373 | 373 | * @throws EE_Error |
| 374 | 374 | */ |
| 375 | 375 | public function column_ATT_phone(EE_Attendee $attendee) |
@@ -15,365 +15,365 @@ |
||
| 15 | 15 | */ |
| 16 | 16 | class EE_Attendee_Contact_List_Table extends EE_Admin_List_Table |
| 17 | 17 | { |
| 18 | - /** |
|
| 19 | - * Initial setup of data (called by parent). |
|
| 20 | - */ |
|
| 21 | - protected function _setup_data() |
|
| 22 | - { |
|
| 23 | - $this->_data = $this->_view !== 'trash' |
|
| 24 | - ? $this->_admin_page->get_attendees($this->_per_page) |
|
| 25 | - : $this->_admin_page->get_attendees($this->_per_page, false, true); |
|
| 26 | - $this->_all_data_count = $this->_view !== 'trash' |
|
| 27 | - ? $this->_admin_page->get_attendees($this->_per_page, true) |
|
| 28 | - : $this->_admin_page->get_attendees($this->_per_page, true, true); |
|
| 29 | - } |
|
| 30 | - |
|
| 31 | - |
|
| 32 | - /** |
|
| 33 | - * Initial setup of properties. |
|
| 34 | - */ |
|
| 35 | - protected function _set_properties() |
|
| 36 | - { |
|
| 37 | - $this->_wp_list_args = array( |
|
| 38 | - 'singular' => esc_html__('attendee', 'event_espresso'), |
|
| 39 | - 'plural' => esc_html__('attendees', 'event_espresso'), |
|
| 40 | - 'ajax' => true, |
|
| 41 | - 'screen' => $this->_admin_page->get_current_screen()->id, |
|
| 42 | - ); |
|
| 43 | - |
|
| 44 | - $this->_columns = array( |
|
| 45 | - 'cb' => '<input type="checkbox" />', //Render a checkbox instead of text |
|
| 46 | - 'ATT_ID' => esc_html__('ID', 'event_espresso'), |
|
| 47 | - 'ATT_fname' => esc_html__('First Name', 'event_espresso'), |
|
| 48 | - 'ATT_lname' => esc_html__('Last Name', 'event_espresso'), |
|
| 49 | - 'ATT_email' => esc_html__('Email Address', 'event_espresso'), |
|
| 50 | - 'Registration_Count' => esc_html__('# Registrations', 'event_espresso'), |
|
| 51 | - 'ATT_phone' => esc_html__('Phone', 'event_espresso'), |
|
| 52 | - 'ATT_address' => esc_html__('Address', 'event_espresso'), |
|
| 53 | - 'ATT_city' => esc_html__('City', 'event_espresso'), |
|
| 54 | - 'STA_ID' => esc_html__('State/Province', 'event_espresso'), |
|
| 55 | - 'CNT_ISO' => esc_html__('Country', 'event_espresso'), |
|
| 56 | - ); |
|
| 57 | - |
|
| 58 | - $this->_sortable_columns = array( |
|
| 59 | - 'ATT_ID' => array('ATT_ID' => false), |
|
| 60 | - 'ATT_lname' => array('ATT_lname' => true), //true means its already sorted |
|
| 61 | - 'ATT_fname' => array('ATT_fname' => false), |
|
| 62 | - 'ATT_email' => array('ATT_email' => false), |
|
| 63 | - 'Registration_Count' => array('Registration_Count' => false), |
|
| 64 | - 'ATT_city' => array('ATT_city' => false), |
|
| 65 | - 'STA_ID' => array('STA_ID' => false), |
|
| 66 | - 'CNT_ISO' => array('CNT_ISO' => false), |
|
| 67 | - ); |
|
| 68 | - |
|
| 69 | - $this->_hidden_columns = array( |
|
| 70 | - 'ATT_phone', |
|
| 71 | - 'ATT_address', |
|
| 72 | - 'ATT_city', |
|
| 73 | - 'STA_ID', |
|
| 74 | - 'CNT_ISO' |
|
| 75 | - ); |
|
| 76 | - } |
|
| 77 | - |
|
| 78 | - |
|
| 79 | - /** |
|
| 80 | - * Initial setup of filters |
|
| 81 | - * @return array |
|
| 82 | - */ |
|
| 83 | - protected function _get_table_filters() |
|
| 84 | - { |
|
| 85 | - return array(); |
|
| 86 | - } |
|
| 87 | - |
|
| 88 | - |
|
| 89 | - /** |
|
| 90 | - * Initial setup of counts for views |
|
| 91 | - * @throws InvalidArgumentException |
|
| 92 | - * @throws InvalidDataTypeException |
|
| 93 | - * @throws InvalidInterfaceException |
|
| 94 | - */ |
|
| 95 | - protected function _add_view_counts() |
|
| 96 | - { |
|
| 97 | - $this->_views['in_use']['count'] = $this->_admin_page->get_attendees($this->_per_page, true); |
|
| 98 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 99 | - 'ee_delete_contacts', |
|
| 100 | - 'espresso_registrations_delete_registration' |
|
| 101 | - )) { |
|
| 102 | - $this->_views['trash']['count'] = $this->_admin_page->get_attendees($this->_per_page, true, true); |
|
| 103 | - } |
|
| 104 | - } |
|
| 105 | - |
|
| 106 | - |
|
| 107 | - /** |
|
| 108 | - * Get count of attendees. |
|
| 109 | - * @return int |
|
| 110 | - * @throws EE_Error |
|
| 111 | - * @throws InvalidArgumentException |
|
| 112 | - * @throws InvalidDataTypeException |
|
| 113 | - * @throws InvalidInterfaceException |
|
| 114 | - */ |
|
| 115 | - protected function _get_attendees_count() |
|
| 116 | - { |
|
| 117 | - return EEM_Attendee::instance()->count(); |
|
| 118 | - } |
|
| 119 | - |
|
| 120 | - |
|
| 121 | - /** |
|
| 122 | - * Checkbox column |
|
| 123 | - * |
|
| 124 | - * @param EE_Attendee $attendee Unable to typehint this method because overrides parent. |
|
| 125 | - * @return string |
|
| 126 | - * @throws EE_Error |
|
| 127 | - */ |
|
| 128 | - public function column_cb($attendee) |
|
| 129 | - { |
|
| 130 | - if (! $attendee instanceof EE_Attendee) { |
|
| 131 | - return ''; |
|
| 132 | - } |
|
| 133 | - return sprintf( |
|
| 134 | - '<input type="checkbox" name="checkbox[%1$s]" value="%1$s" />', |
|
| 135 | - $attendee->ID() |
|
| 136 | - ); |
|
| 137 | - } |
|
| 138 | - |
|
| 139 | - |
|
| 140 | - /** |
|
| 141 | - * ATT_ID column |
|
| 142 | - * |
|
| 143 | - * @param EE_Attendee $attendee |
|
| 144 | - * @return string |
|
| 145 | - * @throws EE_Error |
|
| 146 | - */ |
|
| 147 | - public function column_ATT_ID(EE_Attendee $attendee) |
|
| 148 | - { |
|
| 149 | - $content = $attendee->ID(); |
|
| 150 | - $attendee_name = $attendee instanceof EE_Attendee ? $attendee->full_name() : ''; |
|
| 151 | - $content .= ' <span class="show-on-mobile-view-only">' . $attendee_name . '</span>'; |
|
| 152 | - return $content; |
|
| 153 | - } |
|
| 154 | - |
|
| 155 | - |
|
| 156 | - /** |
|
| 157 | - * ATT_lname column |
|
| 158 | - * |
|
| 159 | - * @param EE_Attendee $attendee |
|
| 160 | - * @return string |
|
| 161 | - * @throws InvalidArgumentException |
|
| 162 | - * @throws InvalidDataTypeException |
|
| 163 | - * @throws InvalidInterfaceException |
|
| 164 | - * @throws EE_Error |
|
| 165 | - */ |
|
| 166 | - public function column_ATT_lname(EE_Attendee $attendee) |
|
| 167 | - { |
|
| 168 | - // edit attendee link |
|
| 169 | - $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce( |
|
| 170 | - array( |
|
| 171 | - 'action' => 'edit_attendee', |
|
| 172 | - 'post' => $attendee->ID(), |
|
| 173 | - ), |
|
| 174 | - REG_ADMIN_URL |
|
| 175 | - ); |
|
| 176 | - $name_link = EE_Registry::instance()->CAP->current_user_can( |
|
| 177 | - 'ee_edit_contacts', |
|
| 178 | - 'espresso_registrations_edit_attendee' |
|
| 179 | - ) |
|
| 180 | - ? '<a href="' . $edit_lnk_url . '" title="' |
|
| 181 | - . esc_attr__('Edit Contact', 'event_espresso') . '">' |
|
| 182 | - . $attendee->lname() . '</a>' |
|
| 183 | - : $attendee->lname(); |
|
| 184 | - return $name_link; |
|
| 185 | - } |
|
| 186 | - |
|
| 187 | - |
|
| 188 | - /** |
|
| 189 | - * ATT_fname column |
|
| 190 | - * |
|
| 191 | - * @param EE_Attendee $attendee |
|
| 192 | - * @return string |
|
| 193 | - * @throws InvalidArgumentException |
|
| 194 | - * @throws InvalidDataTypeException |
|
| 195 | - * @throws InvalidInterfaceException |
|
| 196 | - * @throws EE_Error |
|
| 197 | - */ |
|
| 198 | - public function column_ATT_fname(EE_Attendee $attendee) |
|
| 199 | - { |
|
| 200 | - //Build row actions |
|
| 201 | - $actions = array(); |
|
| 202 | - // edit attendee link |
|
| 203 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 204 | - 'ee_edit_contacts', |
|
| 205 | - 'espresso_registrations_edit_attendee' |
|
| 206 | - )) { |
|
| 207 | - $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce( |
|
| 208 | - array( |
|
| 209 | - 'action' => 'edit_attendee', |
|
| 210 | - 'post' => $attendee->ID(), |
|
| 211 | - ), |
|
| 212 | - REG_ADMIN_URL |
|
| 213 | - ); |
|
| 214 | - $actions['edit'] = '<a href="' . $edit_lnk_url . '" title="' |
|
| 215 | - . esc_attr__('Edit Contact', 'event_espresso') . '">' |
|
| 216 | - . esc_html__('Edit', 'event_espresso') . '</a>'; |
|
| 217 | - } |
|
| 218 | - |
|
| 219 | - if ($this->_view === 'in_use') { |
|
| 220 | - // trash attendee link |
|
| 221 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 222 | - 'ee_delete_contacts', |
|
| 223 | - 'espresso_registrations_trash_attendees' |
|
| 224 | - )) { |
|
| 225 | - $trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce( |
|
| 226 | - array( |
|
| 227 | - 'action' => 'trash_attendee', |
|
| 228 | - 'ATT_ID' => $attendee->ID(), |
|
| 229 | - ), |
|
| 230 | - REG_ADMIN_URL |
|
| 231 | - ); |
|
| 232 | - $actions['trash'] = '<a href="' . $trash_lnk_url . '" title="' |
|
| 233 | - . esc_attr__('Move Contact to Trash', 'event_espresso') |
|
| 234 | - . '">' . esc_html__('Trash', 'event_espresso') . '</a>'; |
|
| 235 | - } |
|
| 236 | - } else { |
|
| 237 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 238 | - 'ee_delete_contacts', |
|
| 239 | - 'espresso_registrations_restore_attendees' |
|
| 240 | - )) { |
|
| 241 | - // restore attendee link |
|
| 242 | - $restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 243 | - 'action' => 'restore_attendees', |
|
| 244 | - 'ATT_ID' => $attendee->ID(), |
|
| 245 | - ), REG_ADMIN_URL); |
|
| 246 | - $actions['restore'] = '<a href="' . $restore_lnk_url . '" title="' |
|
| 247 | - . esc_attr__('Restore Contact', 'event_espresso') . '">' |
|
| 248 | - . esc_html__('Restore', 'event_espresso') . '</a>'; |
|
| 249 | - } |
|
| 250 | - } |
|
| 251 | - |
|
| 252 | - $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 253 | - 'action' => 'edit_attendee', |
|
| 254 | - 'post' => $attendee->ID(), |
|
| 255 | - ), REG_ADMIN_URL); |
|
| 256 | - $name_link = EE_Registry::instance()->CAP->current_user_can( |
|
| 257 | - 'ee_edit_contacts', |
|
| 258 | - 'espresso_registrations_edit_attendee' |
|
| 259 | - ) |
|
| 260 | - ? '<a href="' . $edit_lnk_url . '" title="' |
|
| 261 | - . esc_attr__('Edit Contact', 'event_espresso') . '">' . $attendee->fname() . '</a>' |
|
| 262 | - : $attendee->fname(); |
|
| 263 | - |
|
| 264 | - //Return the name contents |
|
| 265 | - return sprintf('%1$s %2$s', $name_link, $this->row_actions($actions)); |
|
| 266 | - } |
|
| 267 | - |
|
| 268 | - |
|
| 269 | - /** |
|
| 270 | - * Email Column |
|
| 271 | - * |
|
| 272 | - * @param EE_Attendee $attendee |
|
| 273 | - * @return string |
|
| 274 | - * @throws EE_Error |
|
| 275 | - */ |
|
| 276 | - public function column_ATT_email(EE_Attendee $attendee) |
|
| 277 | - { |
|
| 278 | - return '<a href="mailto:' . $attendee->email() . '">' . $attendee->email() . '</a>'; |
|
| 279 | - } |
|
| 280 | - |
|
| 281 | - |
|
| 282 | - /** |
|
| 283 | - * Column displaying count of registrations attached to Attendee. |
|
| 284 | - * |
|
| 285 | - * @param EE_Attendee $attendee |
|
| 286 | - * @return string |
|
| 287 | - * @throws EE_Error |
|
| 288 | - */ |
|
| 289 | - public function column_Registration_Count(EE_Attendee $attendee) |
|
| 290 | - { |
|
| 291 | - $link = EEH_URL::add_query_args_and_nonce( |
|
| 292 | - array( |
|
| 293 | - 'action' => 'default', |
|
| 294 | - 'ATT_ID' => $attendee->ID() |
|
| 295 | - ), |
|
| 296 | - REG_ADMIN_URL |
|
| 297 | - ); |
|
| 298 | - return '<a href="' . $link . '">' . $attendee->getCustomSelect('Registration_Count') . '</a>'; |
|
| 299 | - } |
|
| 300 | - |
|
| 301 | - |
|
| 302 | - /** |
|
| 303 | - * ATT_address column |
|
| 304 | - * |
|
| 305 | - * @param EE_Attendee $attendee |
|
| 306 | - * @return mixed |
|
| 307 | - * @throws EE_Error |
|
| 308 | - */ |
|
| 309 | - public function column_ATT_address(EE_Attendee $attendee) |
|
| 310 | - { |
|
| 311 | - return $attendee->address(); |
|
| 312 | - } |
|
| 313 | - |
|
| 314 | - |
|
| 315 | - /** |
|
| 316 | - * ATT_city column |
|
| 317 | - * |
|
| 318 | - * @param EE_Attendee $attendee |
|
| 319 | - * @return mixed |
|
| 320 | - * @throws EE_Error |
|
| 321 | - */ |
|
| 322 | - public function column_ATT_city(EE_Attendee $attendee) |
|
| 323 | - { |
|
| 324 | - return $attendee->city(); |
|
| 325 | - } |
|
| 326 | - |
|
| 327 | - |
|
| 328 | - /** |
|
| 329 | - * State Column |
|
| 330 | - * |
|
| 331 | - * @param EE_Attendee $attendee |
|
| 332 | - * @return string |
|
| 333 | - * @throws EE_Error |
|
| 334 | - * @throws InvalidArgumentException |
|
| 335 | - * @throws InvalidDataTypeException |
|
| 336 | - * @throws InvalidInterfaceException |
|
| 337 | - */ |
|
| 338 | - public function column_STA_ID(EE_Attendee $attendee) |
|
| 339 | - { |
|
| 340 | - $states = EEM_State::instance()->get_all_states(); |
|
| 341 | - $state = isset($states[$attendee->state_ID()]) |
|
| 342 | - ? $states[$attendee->state_ID()]->get('STA_name') |
|
| 343 | - : $attendee->state_ID(); |
|
| 344 | - return ! is_numeric($state) ? $state : ''; |
|
| 345 | - } |
|
| 346 | - |
|
| 347 | - |
|
| 348 | - /** |
|
| 349 | - * Country Column |
|
| 350 | - * |
|
| 351 | - * @param EE_Attendee $attendee |
|
| 352 | - * @return string |
|
| 353 | - * @throws EE_Error |
|
| 354 | - * @throws InvalidArgumentException |
|
| 355 | - * @throws InvalidDataTypeException |
|
| 356 | - * @throws InvalidInterfaceException |
|
| 357 | - */ |
|
| 358 | - public function column_CNT_ISO(EE_Attendee $attendee) |
|
| 359 | - { |
|
| 360 | - $countries = EEM_Country::instance()->get_all_countries(); |
|
| 361 | - $country = isset($countries[$attendee->country_ID()]) |
|
| 362 | - ? $countries[$attendee->country_ID()]->get('CNT_name') |
|
| 363 | - : $attendee->country_ID(); |
|
| 364 | - return ! is_numeric($country) ? $country : ''; |
|
| 365 | - } |
|
| 366 | - |
|
| 367 | - |
|
| 368 | - /** |
|
| 369 | - * Phone Number column |
|
| 370 | - * |
|
| 371 | - * @param EE_Attendee $attendee |
|
| 372 | - * @return mixed |
|
| 373 | - * @throws EE_Error |
|
| 374 | - */ |
|
| 375 | - public function column_ATT_phone(EE_Attendee $attendee) |
|
| 376 | - { |
|
| 377 | - return $attendee->phone(); |
|
| 378 | - } |
|
| 18 | + /** |
|
| 19 | + * Initial setup of data (called by parent). |
|
| 20 | + */ |
|
| 21 | + protected function _setup_data() |
|
| 22 | + { |
|
| 23 | + $this->_data = $this->_view !== 'trash' |
|
| 24 | + ? $this->_admin_page->get_attendees($this->_per_page) |
|
| 25 | + : $this->_admin_page->get_attendees($this->_per_page, false, true); |
|
| 26 | + $this->_all_data_count = $this->_view !== 'trash' |
|
| 27 | + ? $this->_admin_page->get_attendees($this->_per_page, true) |
|
| 28 | + : $this->_admin_page->get_attendees($this->_per_page, true, true); |
|
| 29 | + } |
|
| 30 | + |
|
| 31 | + |
|
| 32 | + /** |
|
| 33 | + * Initial setup of properties. |
|
| 34 | + */ |
|
| 35 | + protected function _set_properties() |
|
| 36 | + { |
|
| 37 | + $this->_wp_list_args = array( |
|
| 38 | + 'singular' => esc_html__('attendee', 'event_espresso'), |
|
| 39 | + 'plural' => esc_html__('attendees', 'event_espresso'), |
|
| 40 | + 'ajax' => true, |
|
| 41 | + 'screen' => $this->_admin_page->get_current_screen()->id, |
|
| 42 | + ); |
|
| 43 | + |
|
| 44 | + $this->_columns = array( |
|
| 45 | + 'cb' => '<input type="checkbox" />', //Render a checkbox instead of text |
|
| 46 | + 'ATT_ID' => esc_html__('ID', 'event_espresso'), |
|
| 47 | + 'ATT_fname' => esc_html__('First Name', 'event_espresso'), |
|
| 48 | + 'ATT_lname' => esc_html__('Last Name', 'event_espresso'), |
|
| 49 | + 'ATT_email' => esc_html__('Email Address', 'event_espresso'), |
|
| 50 | + 'Registration_Count' => esc_html__('# Registrations', 'event_espresso'), |
|
| 51 | + 'ATT_phone' => esc_html__('Phone', 'event_espresso'), |
|
| 52 | + 'ATT_address' => esc_html__('Address', 'event_espresso'), |
|
| 53 | + 'ATT_city' => esc_html__('City', 'event_espresso'), |
|
| 54 | + 'STA_ID' => esc_html__('State/Province', 'event_espresso'), |
|
| 55 | + 'CNT_ISO' => esc_html__('Country', 'event_espresso'), |
|
| 56 | + ); |
|
| 57 | + |
|
| 58 | + $this->_sortable_columns = array( |
|
| 59 | + 'ATT_ID' => array('ATT_ID' => false), |
|
| 60 | + 'ATT_lname' => array('ATT_lname' => true), //true means its already sorted |
|
| 61 | + 'ATT_fname' => array('ATT_fname' => false), |
|
| 62 | + 'ATT_email' => array('ATT_email' => false), |
|
| 63 | + 'Registration_Count' => array('Registration_Count' => false), |
|
| 64 | + 'ATT_city' => array('ATT_city' => false), |
|
| 65 | + 'STA_ID' => array('STA_ID' => false), |
|
| 66 | + 'CNT_ISO' => array('CNT_ISO' => false), |
|
| 67 | + ); |
|
| 68 | + |
|
| 69 | + $this->_hidden_columns = array( |
|
| 70 | + 'ATT_phone', |
|
| 71 | + 'ATT_address', |
|
| 72 | + 'ATT_city', |
|
| 73 | + 'STA_ID', |
|
| 74 | + 'CNT_ISO' |
|
| 75 | + ); |
|
| 76 | + } |
|
| 77 | + |
|
| 78 | + |
|
| 79 | + /** |
|
| 80 | + * Initial setup of filters |
|
| 81 | + * @return array |
|
| 82 | + */ |
|
| 83 | + protected function _get_table_filters() |
|
| 84 | + { |
|
| 85 | + return array(); |
|
| 86 | + } |
|
| 87 | + |
|
| 88 | + |
|
| 89 | + /** |
|
| 90 | + * Initial setup of counts for views |
|
| 91 | + * @throws InvalidArgumentException |
|
| 92 | + * @throws InvalidDataTypeException |
|
| 93 | + * @throws InvalidInterfaceException |
|
| 94 | + */ |
|
| 95 | + protected function _add_view_counts() |
|
| 96 | + { |
|
| 97 | + $this->_views['in_use']['count'] = $this->_admin_page->get_attendees($this->_per_page, true); |
|
| 98 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 99 | + 'ee_delete_contacts', |
|
| 100 | + 'espresso_registrations_delete_registration' |
|
| 101 | + )) { |
|
| 102 | + $this->_views['trash']['count'] = $this->_admin_page->get_attendees($this->_per_page, true, true); |
|
| 103 | + } |
|
| 104 | + } |
|
| 105 | + |
|
| 106 | + |
|
| 107 | + /** |
|
| 108 | + * Get count of attendees. |
|
| 109 | + * @return int |
|
| 110 | + * @throws EE_Error |
|
| 111 | + * @throws InvalidArgumentException |
|
| 112 | + * @throws InvalidDataTypeException |
|
| 113 | + * @throws InvalidInterfaceException |
|
| 114 | + */ |
|
| 115 | + protected function _get_attendees_count() |
|
| 116 | + { |
|
| 117 | + return EEM_Attendee::instance()->count(); |
|
| 118 | + } |
|
| 119 | + |
|
| 120 | + |
|
| 121 | + /** |
|
| 122 | + * Checkbox column |
|
| 123 | + * |
|
| 124 | + * @param EE_Attendee $attendee Unable to typehint this method because overrides parent. |
|
| 125 | + * @return string |
|
| 126 | + * @throws EE_Error |
|
| 127 | + */ |
|
| 128 | + public function column_cb($attendee) |
|
| 129 | + { |
|
| 130 | + if (! $attendee instanceof EE_Attendee) { |
|
| 131 | + return ''; |
|
| 132 | + } |
|
| 133 | + return sprintf( |
|
| 134 | + '<input type="checkbox" name="checkbox[%1$s]" value="%1$s" />', |
|
| 135 | + $attendee->ID() |
|
| 136 | + ); |
|
| 137 | + } |
|
| 138 | + |
|
| 139 | + |
|
| 140 | + /** |
|
| 141 | + * ATT_ID column |
|
| 142 | + * |
|
| 143 | + * @param EE_Attendee $attendee |
|
| 144 | + * @return string |
|
| 145 | + * @throws EE_Error |
|
| 146 | + */ |
|
| 147 | + public function column_ATT_ID(EE_Attendee $attendee) |
|
| 148 | + { |
|
| 149 | + $content = $attendee->ID(); |
|
| 150 | + $attendee_name = $attendee instanceof EE_Attendee ? $attendee->full_name() : ''; |
|
| 151 | + $content .= ' <span class="show-on-mobile-view-only">' . $attendee_name . '</span>'; |
|
| 152 | + return $content; |
|
| 153 | + } |
|
| 154 | + |
|
| 155 | + |
|
| 156 | + /** |
|
| 157 | + * ATT_lname column |
|
| 158 | + * |
|
| 159 | + * @param EE_Attendee $attendee |
|
| 160 | + * @return string |
|
| 161 | + * @throws InvalidArgumentException |
|
| 162 | + * @throws InvalidDataTypeException |
|
| 163 | + * @throws InvalidInterfaceException |
|
| 164 | + * @throws EE_Error |
|
| 165 | + */ |
|
| 166 | + public function column_ATT_lname(EE_Attendee $attendee) |
|
| 167 | + { |
|
| 168 | + // edit attendee link |
|
| 169 | + $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce( |
|
| 170 | + array( |
|
| 171 | + 'action' => 'edit_attendee', |
|
| 172 | + 'post' => $attendee->ID(), |
|
| 173 | + ), |
|
| 174 | + REG_ADMIN_URL |
|
| 175 | + ); |
|
| 176 | + $name_link = EE_Registry::instance()->CAP->current_user_can( |
|
| 177 | + 'ee_edit_contacts', |
|
| 178 | + 'espresso_registrations_edit_attendee' |
|
| 179 | + ) |
|
| 180 | + ? '<a href="' . $edit_lnk_url . '" title="' |
|
| 181 | + . esc_attr__('Edit Contact', 'event_espresso') . '">' |
|
| 182 | + . $attendee->lname() . '</a>' |
|
| 183 | + : $attendee->lname(); |
|
| 184 | + return $name_link; |
|
| 185 | + } |
|
| 186 | + |
|
| 187 | + |
|
| 188 | + /** |
|
| 189 | + * ATT_fname column |
|
| 190 | + * |
|
| 191 | + * @param EE_Attendee $attendee |
|
| 192 | + * @return string |
|
| 193 | + * @throws InvalidArgumentException |
|
| 194 | + * @throws InvalidDataTypeException |
|
| 195 | + * @throws InvalidInterfaceException |
|
| 196 | + * @throws EE_Error |
|
| 197 | + */ |
|
| 198 | + public function column_ATT_fname(EE_Attendee $attendee) |
|
| 199 | + { |
|
| 200 | + //Build row actions |
|
| 201 | + $actions = array(); |
|
| 202 | + // edit attendee link |
|
| 203 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 204 | + 'ee_edit_contacts', |
|
| 205 | + 'espresso_registrations_edit_attendee' |
|
| 206 | + )) { |
|
| 207 | + $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce( |
|
| 208 | + array( |
|
| 209 | + 'action' => 'edit_attendee', |
|
| 210 | + 'post' => $attendee->ID(), |
|
| 211 | + ), |
|
| 212 | + REG_ADMIN_URL |
|
| 213 | + ); |
|
| 214 | + $actions['edit'] = '<a href="' . $edit_lnk_url . '" title="' |
|
| 215 | + . esc_attr__('Edit Contact', 'event_espresso') . '">' |
|
| 216 | + . esc_html__('Edit', 'event_espresso') . '</a>'; |
|
| 217 | + } |
|
| 218 | + |
|
| 219 | + if ($this->_view === 'in_use') { |
|
| 220 | + // trash attendee link |
|
| 221 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 222 | + 'ee_delete_contacts', |
|
| 223 | + 'espresso_registrations_trash_attendees' |
|
| 224 | + )) { |
|
| 225 | + $trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce( |
|
| 226 | + array( |
|
| 227 | + 'action' => 'trash_attendee', |
|
| 228 | + 'ATT_ID' => $attendee->ID(), |
|
| 229 | + ), |
|
| 230 | + REG_ADMIN_URL |
|
| 231 | + ); |
|
| 232 | + $actions['trash'] = '<a href="' . $trash_lnk_url . '" title="' |
|
| 233 | + . esc_attr__('Move Contact to Trash', 'event_espresso') |
|
| 234 | + . '">' . esc_html__('Trash', 'event_espresso') . '</a>'; |
|
| 235 | + } |
|
| 236 | + } else { |
|
| 237 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 238 | + 'ee_delete_contacts', |
|
| 239 | + 'espresso_registrations_restore_attendees' |
|
| 240 | + )) { |
|
| 241 | + // restore attendee link |
|
| 242 | + $restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 243 | + 'action' => 'restore_attendees', |
|
| 244 | + 'ATT_ID' => $attendee->ID(), |
|
| 245 | + ), REG_ADMIN_URL); |
|
| 246 | + $actions['restore'] = '<a href="' . $restore_lnk_url . '" title="' |
|
| 247 | + . esc_attr__('Restore Contact', 'event_espresso') . '">' |
|
| 248 | + . esc_html__('Restore', 'event_espresso') . '</a>'; |
|
| 249 | + } |
|
| 250 | + } |
|
| 251 | + |
|
| 252 | + $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 253 | + 'action' => 'edit_attendee', |
|
| 254 | + 'post' => $attendee->ID(), |
|
| 255 | + ), REG_ADMIN_URL); |
|
| 256 | + $name_link = EE_Registry::instance()->CAP->current_user_can( |
|
| 257 | + 'ee_edit_contacts', |
|
| 258 | + 'espresso_registrations_edit_attendee' |
|
| 259 | + ) |
|
| 260 | + ? '<a href="' . $edit_lnk_url . '" title="' |
|
| 261 | + . esc_attr__('Edit Contact', 'event_espresso') . '">' . $attendee->fname() . '</a>' |
|
| 262 | + : $attendee->fname(); |
|
| 263 | + |
|
| 264 | + //Return the name contents |
|
| 265 | + return sprintf('%1$s %2$s', $name_link, $this->row_actions($actions)); |
|
| 266 | + } |
|
| 267 | + |
|
| 268 | + |
|
| 269 | + /** |
|
| 270 | + * Email Column |
|
| 271 | + * |
|
| 272 | + * @param EE_Attendee $attendee |
|
| 273 | + * @return string |
|
| 274 | + * @throws EE_Error |
|
| 275 | + */ |
|
| 276 | + public function column_ATT_email(EE_Attendee $attendee) |
|
| 277 | + { |
|
| 278 | + return '<a href="mailto:' . $attendee->email() . '">' . $attendee->email() . '</a>'; |
|
| 279 | + } |
|
| 280 | + |
|
| 281 | + |
|
| 282 | + /** |
|
| 283 | + * Column displaying count of registrations attached to Attendee. |
|
| 284 | + * |
|
| 285 | + * @param EE_Attendee $attendee |
|
| 286 | + * @return string |
|
| 287 | + * @throws EE_Error |
|
| 288 | + */ |
|
| 289 | + public function column_Registration_Count(EE_Attendee $attendee) |
|
| 290 | + { |
|
| 291 | + $link = EEH_URL::add_query_args_and_nonce( |
|
| 292 | + array( |
|
| 293 | + 'action' => 'default', |
|
| 294 | + 'ATT_ID' => $attendee->ID() |
|
| 295 | + ), |
|
| 296 | + REG_ADMIN_URL |
|
| 297 | + ); |
|
| 298 | + return '<a href="' . $link . '">' . $attendee->getCustomSelect('Registration_Count') . '</a>'; |
|
| 299 | + } |
|
| 300 | + |
|
| 301 | + |
|
| 302 | + /** |
|
| 303 | + * ATT_address column |
|
| 304 | + * |
|
| 305 | + * @param EE_Attendee $attendee |
|
| 306 | + * @return mixed |
|
| 307 | + * @throws EE_Error |
|
| 308 | + */ |
|
| 309 | + public function column_ATT_address(EE_Attendee $attendee) |
|
| 310 | + { |
|
| 311 | + return $attendee->address(); |
|
| 312 | + } |
|
| 313 | + |
|
| 314 | + |
|
| 315 | + /** |
|
| 316 | + * ATT_city column |
|
| 317 | + * |
|
| 318 | + * @param EE_Attendee $attendee |
|
| 319 | + * @return mixed |
|
| 320 | + * @throws EE_Error |
|
| 321 | + */ |
|
| 322 | + public function column_ATT_city(EE_Attendee $attendee) |
|
| 323 | + { |
|
| 324 | + return $attendee->city(); |
|
| 325 | + } |
|
| 326 | + |
|
| 327 | + |
|
| 328 | + /** |
|
| 329 | + * State Column |
|
| 330 | + * |
|
| 331 | + * @param EE_Attendee $attendee |
|
| 332 | + * @return string |
|
| 333 | + * @throws EE_Error |
|
| 334 | + * @throws InvalidArgumentException |
|
| 335 | + * @throws InvalidDataTypeException |
|
| 336 | + * @throws InvalidInterfaceException |
|
| 337 | + */ |
|
| 338 | + public function column_STA_ID(EE_Attendee $attendee) |
|
| 339 | + { |
|
| 340 | + $states = EEM_State::instance()->get_all_states(); |
|
| 341 | + $state = isset($states[$attendee->state_ID()]) |
|
| 342 | + ? $states[$attendee->state_ID()]->get('STA_name') |
|
| 343 | + : $attendee->state_ID(); |
|
| 344 | + return ! is_numeric($state) ? $state : ''; |
|
| 345 | + } |
|
| 346 | + |
|
| 347 | + |
|
| 348 | + /** |
|
| 349 | + * Country Column |
|
| 350 | + * |
|
| 351 | + * @param EE_Attendee $attendee |
|
| 352 | + * @return string |
|
| 353 | + * @throws EE_Error |
|
| 354 | + * @throws InvalidArgumentException |
|
| 355 | + * @throws InvalidDataTypeException |
|
| 356 | + * @throws InvalidInterfaceException |
|
| 357 | + */ |
|
| 358 | + public function column_CNT_ISO(EE_Attendee $attendee) |
|
| 359 | + { |
|
| 360 | + $countries = EEM_Country::instance()->get_all_countries(); |
|
| 361 | + $country = isset($countries[$attendee->country_ID()]) |
|
| 362 | + ? $countries[$attendee->country_ID()]->get('CNT_name') |
|
| 363 | + : $attendee->country_ID(); |
|
| 364 | + return ! is_numeric($country) ? $country : ''; |
|
| 365 | + } |
|
| 366 | + |
|
| 367 | + |
|
| 368 | + /** |
|
| 369 | + * Phone Number column |
|
| 370 | + * |
|
| 371 | + * @param EE_Attendee $attendee |
|
| 372 | + * @return mixed |
|
| 373 | + * @throws EE_Error |
|
| 374 | + */ |
|
| 375 | + public function column_ATT_phone(EE_Attendee $attendee) |
|
| 376 | + { |
|
| 377 | + return $attendee->phone(); |
|
| 378 | + } |
|
| 379 | 379 | } |
@@ -127,7 +127,7 @@ discard block |
||
| 127 | 127 | */ |
| 128 | 128 | public function column_cb($attendee) |
| 129 | 129 | { |
| 130 | - if (! $attendee instanceof EE_Attendee) { |
|
| 130 | + if ( ! $attendee instanceof EE_Attendee) { |
|
| 131 | 131 | return ''; |
| 132 | 132 | } |
| 133 | 133 | return sprintf( |
@@ -148,7 +148,7 @@ discard block |
||
| 148 | 148 | { |
| 149 | 149 | $content = $attendee->ID(); |
| 150 | 150 | $attendee_name = $attendee instanceof EE_Attendee ? $attendee->full_name() : ''; |
| 151 | - $content .= ' <span class="show-on-mobile-view-only">' . $attendee_name . '</span>'; |
|
| 151 | + $content .= ' <span class="show-on-mobile-view-only">'.$attendee_name.'</span>'; |
|
| 152 | 152 | return $content; |
| 153 | 153 | } |
| 154 | 154 | |
@@ -177,9 +177,9 @@ discard block |
||
| 177 | 177 | 'ee_edit_contacts', |
| 178 | 178 | 'espresso_registrations_edit_attendee' |
| 179 | 179 | ) |
| 180 | - ? '<a href="' . $edit_lnk_url . '" title="' |
|
| 181 | - . esc_attr__('Edit Contact', 'event_espresso') . '">' |
|
| 182 | - . $attendee->lname() . '</a>' |
|
| 180 | + ? '<a href="'.$edit_lnk_url.'" title="' |
|
| 181 | + . esc_attr__('Edit Contact', 'event_espresso').'">' |
|
| 182 | + . $attendee->lname().'</a>' |
|
| 183 | 183 | : $attendee->lname(); |
| 184 | 184 | return $name_link; |
| 185 | 185 | } |
@@ -211,9 +211,9 @@ discard block |
||
| 211 | 211 | ), |
| 212 | 212 | REG_ADMIN_URL |
| 213 | 213 | ); |
| 214 | - $actions['edit'] = '<a href="' . $edit_lnk_url . '" title="' |
|
| 215 | - . esc_attr__('Edit Contact', 'event_espresso') . '">' |
|
| 216 | - . esc_html__('Edit', 'event_espresso') . '</a>'; |
|
| 214 | + $actions['edit'] = '<a href="'.$edit_lnk_url.'" title="' |
|
| 215 | + . esc_attr__('Edit Contact', 'event_espresso').'">' |
|
| 216 | + . esc_html__('Edit', 'event_espresso').'</a>'; |
|
| 217 | 217 | } |
| 218 | 218 | |
| 219 | 219 | if ($this->_view === 'in_use') { |
@@ -229,9 +229,9 @@ discard block |
||
| 229 | 229 | ), |
| 230 | 230 | REG_ADMIN_URL |
| 231 | 231 | ); |
| 232 | - $actions['trash'] = '<a href="' . $trash_lnk_url . '" title="' |
|
| 232 | + $actions['trash'] = '<a href="'.$trash_lnk_url.'" title="' |
|
| 233 | 233 | . esc_attr__('Move Contact to Trash', 'event_espresso') |
| 234 | - . '">' . esc_html__('Trash', 'event_espresso') . '</a>'; |
|
| 234 | + . '">'.esc_html__('Trash', 'event_espresso').'</a>'; |
|
| 235 | 235 | } |
| 236 | 236 | } else { |
| 237 | 237 | if (EE_Registry::instance()->CAP->current_user_can( |
@@ -243,9 +243,9 @@ discard block |
||
| 243 | 243 | 'action' => 'restore_attendees', |
| 244 | 244 | 'ATT_ID' => $attendee->ID(), |
| 245 | 245 | ), REG_ADMIN_URL); |
| 246 | - $actions['restore'] = '<a href="' . $restore_lnk_url . '" title="' |
|
| 247 | - . esc_attr__('Restore Contact', 'event_espresso') . '">' |
|
| 248 | - . esc_html__('Restore', 'event_espresso') . '</a>'; |
|
| 246 | + $actions['restore'] = '<a href="'.$restore_lnk_url.'" title="' |
|
| 247 | + . esc_attr__('Restore Contact', 'event_espresso').'">' |
|
| 248 | + . esc_html__('Restore', 'event_espresso').'</a>'; |
|
| 249 | 249 | } |
| 250 | 250 | } |
| 251 | 251 | |
@@ -257,8 +257,8 @@ discard block |
||
| 257 | 257 | 'ee_edit_contacts', |
| 258 | 258 | 'espresso_registrations_edit_attendee' |
| 259 | 259 | ) |
| 260 | - ? '<a href="' . $edit_lnk_url . '" title="' |
|
| 261 | - . esc_attr__('Edit Contact', 'event_espresso') . '">' . $attendee->fname() . '</a>' |
|
| 260 | + ? '<a href="'.$edit_lnk_url.'" title="' |
|
| 261 | + . esc_attr__('Edit Contact', 'event_espresso').'">'.$attendee->fname().'</a>' |
|
| 262 | 262 | : $attendee->fname(); |
| 263 | 263 | |
| 264 | 264 | //Return the name contents |
@@ -275,7 +275,7 @@ discard block |
||
| 275 | 275 | */ |
| 276 | 276 | public function column_ATT_email(EE_Attendee $attendee) |
| 277 | 277 | { |
| 278 | - return '<a href="mailto:' . $attendee->email() . '">' . $attendee->email() . '</a>'; |
|
| 278 | + return '<a href="mailto:'.$attendee->email().'">'.$attendee->email().'</a>'; |
|
| 279 | 279 | } |
| 280 | 280 | |
| 281 | 281 | |
@@ -295,7 +295,7 @@ discard block |
||
| 295 | 295 | ), |
| 296 | 296 | REG_ADMIN_URL |
| 297 | 297 | ); |
| 298 | - return '<a href="' . $link . '">' . $attendee->getCustomSelect('Registration_Count') . '</a>'; |
|
| 298 | + return '<a href="'.$link.'">'.$attendee->getCustomSelect('Registration_Count').'</a>'; |
|
| 299 | 299 | } |
| 300 | 300 | |
| 301 | 301 | |
@@ -30,2339 +30,2339 @@ discard block |
||
| 30 | 30 | class Registrations_Admin_Page extends EE_Admin_Page_CPT |
| 31 | 31 | { |
| 32 | 32 | |
| 33 | - /** |
|
| 34 | - * @var EE_Registration |
|
| 35 | - */ |
|
| 36 | - private $_registration; |
|
| 37 | - |
|
| 38 | - /** |
|
| 39 | - * @var EE_Event |
|
| 40 | - */ |
|
| 41 | - private $_reg_event; |
|
| 42 | - |
|
| 43 | - /** |
|
| 44 | - * @var EE_Session |
|
| 45 | - */ |
|
| 46 | - private $_session; |
|
| 47 | - |
|
| 48 | - private static $_reg_status; |
|
| 49 | - |
|
| 50 | - /** |
|
| 51 | - * Form for displaying the custom questions for this registration. |
|
| 52 | - * This gets used a few times throughout the request so its best to cache it |
|
| 53 | - * |
|
| 54 | - * @var EE_Registration_Custom_Questions_Form |
|
| 55 | - */ |
|
| 56 | - protected $_reg_custom_questions_form = null; |
|
| 57 | - |
|
| 58 | - |
|
| 59 | - /** |
|
| 60 | - * constructor |
|
| 61 | - * |
|
| 62 | - * @Constructor |
|
| 63 | - * @access public |
|
| 64 | - * @param bool $routing |
|
| 65 | - * @return Registrations_Admin_Page |
|
| 66 | - */ |
|
| 67 | - public function __construct($routing = true) |
|
| 68 | - { |
|
| 69 | - parent::__construct($routing); |
|
| 70 | - add_action('wp_loaded', array($this, 'wp_loaded')); |
|
| 71 | - } |
|
| 72 | - |
|
| 73 | - |
|
| 74 | - public function wp_loaded() |
|
| 75 | - { |
|
| 76 | - // when adding a new registration... |
|
| 77 | - if (isset($this->_req_data['action']) && $this->_req_data['action'] === 'new_registration') { |
|
| 78 | - EE_System::do_not_cache(); |
|
| 79 | - if (! isset($this->_req_data['processing_registration']) |
|
| 80 | - || absint($this->_req_data['processing_registration']) !== 1 |
|
| 81 | - ) { |
|
| 82 | - // and it's NOT the attendee information reg step |
|
| 83 | - // force cookie expiration by setting time to last week |
|
| 84 | - setcookie('ee_registration_added', 0, time() - WEEK_IN_SECONDS, '/'); |
|
| 85 | - // and update the global |
|
| 86 | - $_COOKIE['ee_registration_added'] = 0; |
|
| 87 | - } |
|
| 88 | - } |
|
| 89 | - } |
|
| 90 | - |
|
| 91 | - |
|
| 92 | - protected function _init_page_props() |
|
| 93 | - { |
|
| 94 | - $this->page_slug = REG_PG_SLUG; |
|
| 95 | - $this->_admin_base_url = REG_ADMIN_URL; |
|
| 96 | - $this->_admin_base_path = REG_ADMIN; |
|
| 97 | - $this->page_label = esc_html__('Registrations', 'event_espresso'); |
|
| 98 | - $this->_cpt_routes = array( |
|
| 99 | - 'add_new_attendee' => 'espresso_attendees', |
|
| 100 | - 'edit_attendee' => 'espresso_attendees', |
|
| 101 | - 'insert_attendee' => 'espresso_attendees', |
|
| 102 | - 'update_attendee' => 'espresso_attendees', |
|
| 103 | - ); |
|
| 104 | - $this->_cpt_model_names = array( |
|
| 105 | - 'add_new_attendee' => 'EEM_Attendee', |
|
| 106 | - 'edit_attendee' => 'EEM_Attendee', |
|
| 107 | - ); |
|
| 108 | - $this->_cpt_edit_routes = array( |
|
| 109 | - 'espresso_attendees' => 'edit_attendee', |
|
| 110 | - ); |
|
| 111 | - $this->_pagenow_map = array( |
|
| 112 | - 'add_new_attendee' => 'post-new.php', |
|
| 113 | - 'edit_attendee' => 'post.php', |
|
| 114 | - 'trash' => 'post.php', |
|
| 115 | - ); |
|
| 116 | - add_action('edit_form_after_title', array($this, 'after_title_form_fields'), 10); |
|
| 117 | - //add filters so that the comment urls don't take users to a confusing 404 page |
|
| 118 | - add_filter('get_comment_link', array($this, 'clear_comment_link'), 10, 3); |
|
| 119 | - } |
|
| 120 | - |
|
| 121 | - |
|
| 122 | - public function clear_comment_link($link, $comment, $args) |
|
| 123 | - { |
|
| 124 | - //gotta make sure this only happens on this route |
|
| 125 | - $post_type = get_post_type($comment->comment_post_ID); |
|
| 126 | - if ($post_type === 'espresso_attendees') { |
|
| 127 | - return '#commentsdiv'; |
|
| 128 | - } |
|
| 129 | - return $link; |
|
| 130 | - } |
|
| 131 | - |
|
| 132 | - |
|
| 133 | - protected function _ajax_hooks() |
|
| 134 | - { |
|
| 135 | - //todo: all hooks for registrations ajax goes in here |
|
| 136 | - add_action('wp_ajax_toggle_checkin_status', array($this, 'toggle_checkin_status')); |
|
| 137 | - } |
|
| 138 | - |
|
| 139 | - |
|
| 140 | - protected function _define_page_props() |
|
| 141 | - { |
|
| 142 | - $this->_admin_page_title = $this->page_label; |
|
| 143 | - $this->_labels = array( |
|
| 144 | - 'buttons' => array( |
|
| 145 | - 'add-registrant' => esc_html__('Add New Registration', 'event_espresso'), |
|
| 146 | - 'add-attendee' => esc_html__('Add Contact', 'event_espresso'), |
|
| 147 | - 'edit' => esc_html__('Edit Contact', 'event_espresso'), |
|
| 148 | - 'report' => esc_html__("Event Registrations CSV Report", "event_espresso"), |
|
| 149 | - 'report_all' => esc_html__('All Registrations CSV Report', 'event_espresso'), |
|
| 150 | - 'report_filtered' => esc_html__('Filtered CSV Report', 'event_espresso'), |
|
| 151 | - 'contact_list_report' => esc_html__('Contact List Report', 'event_espresso'), |
|
| 152 | - 'contact_list_export' => esc_html__("Export Data", "event_espresso"), |
|
| 153 | - ), |
|
| 154 | - 'publishbox' => array( |
|
| 155 | - 'add_new_attendee' => esc_html__("Add Contact Record", 'event_espresso'), |
|
| 156 | - 'edit_attendee' => esc_html__("Update Contact Record", 'event_espresso'), |
|
| 157 | - ), |
|
| 158 | - 'hide_add_button_on_cpt_route' => array( |
|
| 159 | - 'edit_attendee' => true, |
|
| 160 | - ), |
|
| 161 | - ); |
|
| 162 | - } |
|
| 163 | - |
|
| 164 | - |
|
| 165 | - /** |
|
| 166 | - * grab url requests and route them |
|
| 167 | - * |
|
| 168 | - * @access private |
|
| 169 | - * @return void |
|
| 170 | - */ |
|
| 171 | - public function _set_page_routes() |
|
| 172 | - { |
|
| 173 | - $this->_get_registration_status_array(); |
|
| 174 | - $reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID']) |
|
| 175 | - ? $this->_req_data['_REG_ID'] : 0; |
|
| 176 | - $reg_id = empty($reg_id) && ! empty($this->_req_data['reg_status_change_form']['REG_ID']) |
|
| 177 | - ? $this->_req_data['reg_status_change_form']['REG_ID'] |
|
| 178 | - : $reg_id; |
|
| 179 | - $att_id = ! empty($this->_req_data['ATT_ID']) && ! is_array($this->_req_data['ATT_ID']) |
|
| 180 | - ? $this->_req_data['ATT_ID'] : 0; |
|
| 181 | - $att_id = ! empty($this->_req_data['post']) && ! is_array($this->_req_data['post']) |
|
| 182 | - ? $this->_req_data['post'] |
|
| 183 | - : $att_id; |
|
| 184 | - $this->_page_routes = array( |
|
| 185 | - 'default' => array( |
|
| 186 | - 'func' => '_registrations_overview_list_table', |
|
| 187 | - 'capability' => 'ee_read_registrations', |
|
| 188 | - ), |
|
| 189 | - 'view_registration' => array( |
|
| 190 | - 'func' => '_registration_details', |
|
| 191 | - 'capability' => 'ee_read_registration', |
|
| 192 | - 'obj_id' => $reg_id, |
|
| 193 | - ), |
|
| 194 | - 'edit_registration' => array( |
|
| 195 | - 'func' => '_update_attendee_registration_form', |
|
| 196 | - 'noheader' => true, |
|
| 197 | - 'headers_sent_route' => 'view_registration', |
|
| 198 | - 'capability' => 'ee_edit_registration', |
|
| 199 | - 'obj_id' => $reg_id, |
|
| 200 | - '_REG_ID' => $reg_id, |
|
| 201 | - ), |
|
| 202 | - 'trash_registrations' => array( |
|
| 203 | - 'func' => '_trash_or_restore_registrations', |
|
| 204 | - 'args' => array('trash' => true), |
|
| 205 | - 'noheader' => true, |
|
| 206 | - 'capability' => 'ee_delete_registrations', |
|
| 207 | - ), |
|
| 208 | - 'restore_registrations' => array( |
|
| 209 | - 'func' => '_trash_or_restore_registrations', |
|
| 210 | - 'args' => array('trash' => false), |
|
| 211 | - 'noheader' => true, |
|
| 212 | - 'capability' => 'ee_delete_registrations', |
|
| 213 | - ), |
|
| 214 | - 'delete_registrations' => array( |
|
| 215 | - 'func' => '_delete_registrations', |
|
| 216 | - 'noheader' => true, |
|
| 217 | - 'capability' => 'ee_delete_registrations', |
|
| 218 | - ), |
|
| 219 | - 'new_registration' => array( |
|
| 220 | - 'func' => 'new_registration', |
|
| 221 | - 'capability' => 'ee_edit_registrations', |
|
| 222 | - ), |
|
| 223 | - 'process_reg_step' => array( |
|
| 224 | - 'func' => 'process_reg_step', |
|
| 225 | - 'noheader' => true, |
|
| 226 | - 'capability' => 'ee_edit_registrations', |
|
| 227 | - ), |
|
| 228 | - 'redirect_to_txn' => array( |
|
| 229 | - 'func' => 'redirect_to_txn', |
|
| 230 | - 'noheader' => true, |
|
| 231 | - 'capability' => 'ee_edit_registrations', |
|
| 232 | - ), |
|
| 233 | - 'change_reg_status' => array( |
|
| 234 | - 'func' => '_change_reg_status', |
|
| 235 | - 'noheader' => true, |
|
| 236 | - 'capability' => 'ee_edit_registration', |
|
| 237 | - 'obj_id' => $reg_id, |
|
| 238 | - ), |
|
| 239 | - 'approve_registration' => array( |
|
| 240 | - 'func' => 'approve_registration', |
|
| 241 | - 'noheader' => true, |
|
| 242 | - 'capability' => 'ee_edit_registration', |
|
| 243 | - 'obj_id' => $reg_id, |
|
| 244 | - ), |
|
| 245 | - 'approve_and_notify_registration' => array( |
|
| 246 | - 'func' => 'approve_registration', |
|
| 247 | - 'noheader' => true, |
|
| 248 | - 'args' => array(true), |
|
| 249 | - 'capability' => 'ee_edit_registration', |
|
| 250 | - 'obj_id' => $reg_id, |
|
| 251 | - ), |
|
| 252 | - 'approve_registrations' => array( |
|
| 253 | - 'func' => 'bulk_action_on_registrations', |
|
| 254 | - 'noheader' => true, |
|
| 255 | - 'capability' => 'ee_edit_registrations', |
|
| 256 | - 'args' => array('approve') |
|
| 257 | - ), |
|
| 258 | - 'approve_and_notify_registrations' => array( |
|
| 259 | - 'func' => 'bulk_action_on_registrations', |
|
| 260 | - 'noheader' => true, |
|
| 261 | - 'capability' => 'ee_edit_registrations', |
|
| 262 | - 'args' => array('approve', true) |
|
| 263 | - ), |
|
| 264 | - 'decline_registration' => array( |
|
| 265 | - 'func' => 'decline_registration', |
|
| 266 | - 'noheader' => true, |
|
| 267 | - 'capability' => 'ee_edit_registration', |
|
| 268 | - 'obj_id' => $reg_id, |
|
| 269 | - ), |
|
| 270 | - 'decline_and_notify_registration' => array( |
|
| 271 | - 'func' => 'decline_registration', |
|
| 272 | - 'noheader' => true, |
|
| 273 | - 'args' => array(true), |
|
| 274 | - 'capability' => 'ee_edit_registration', |
|
| 275 | - 'obj_id' => $reg_id, |
|
| 276 | - ), |
|
| 277 | - 'decline_registrations' => array( |
|
| 278 | - 'func' => 'bulk_action_on_registrations', |
|
| 279 | - 'noheader' => true, |
|
| 280 | - 'capability' => 'ee_edit_registrations', |
|
| 281 | - 'args' => array('decline') |
|
| 282 | - ), |
|
| 283 | - 'decline_and_notify_registrations' => array( |
|
| 284 | - 'func' => 'bulk_action_on_registrations', |
|
| 285 | - 'noheader' => true, |
|
| 286 | - 'capability' => 'ee_edit_registrations', |
|
| 287 | - 'args' => array('decline', true) |
|
| 288 | - ), |
|
| 289 | - 'pending_registration' => array( |
|
| 290 | - 'func' => 'pending_registration', |
|
| 291 | - 'noheader' => true, |
|
| 292 | - 'capability' => 'ee_edit_registration', |
|
| 293 | - 'obj_id' => $reg_id, |
|
| 294 | - ), |
|
| 295 | - 'pending_and_notify_registration' => array( |
|
| 296 | - 'func' => 'pending_registration', |
|
| 297 | - 'noheader' => true, |
|
| 298 | - 'args' => array(true), |
|
| 299 | - 'capability' => 'ee_edit_registration', |
|
| 300 | - 'obj_id' => $reg_id, |
|
| 301 | - ), |
|
| 302 | - 'pending_registrations' => array( |
|
| 303 | - 'func' => 'bulk_action_on_registrations', |
|
| 304 | - 'noheader' => true, |
|
| 305 | - 'capability' => 'ee_edit_registrations', |
|
| 306 | - 'args' => array('pending') |
|
| 307 | - ), |
|
| 308 | - 'pending_and_notify_registrations' => array( |
|
| 309 | - 'func' => 'bulk_action_on_registrations', |
|
| 310 | - 'noheader' => true, |
|
| 311 | - 'capability' => 'ee_edit_registrations', |
|
| 312 | - 'args' => array('pending', true) |
|
| 313 | - ), |
|
| 314 | - 'no_approve_registration' => array( |
|
| 315 | - 'func' => 'not_approve_registration', |
|
| 316 | - 'noheader' => true, |
|
| 317 | - 'capability' => 'ee_edit_registration', |
|
| 318 | - 'obj_id' => $reg_id, |
|
| 319 | - ), |
|
| 320 | - 'no_approve_and_notify_registration' => array( |
|
| 321 | - 'func' => 'not_approve_registration', |
|
| 322 | - 'noheader' => true, |
|
| 323 | - 'args' => array(true), |
|
| 324 | - 'capability' => 'ee_edit_registration', |
|
| 325 | - 'obj_id' => $reg_id, |
|
| 326 | - ), |
|
| 327 | - 'no_approve_registrations' => array( |
|
| 328 | - 'func' => 'bulk_action_on_registrations', |
|
| 329 | - 'noheader' => true, |
|
| 330 | - 'capability' => 'ee_edit_registrations', |
|
| 331 | - 'args' => array('not_approve') |
|
| 332 | - ), |
|
| 333 | - 'no_approve_and_notify_registrations' => array( |
|
| 334 | - 'func' => 'bulk_action_on_registrations', |
|
| 335 | - 'noheader' => true, |
|
| 336 | - 'capability' => 'ee_edit_registrations', |
|
| 337 | - 'args' => array('not_approve', true) |
|
| 338 | - ), |
|
| 339 | - 'cancel_registration' => array( |
|
| 340 | - 'func' => 'cancel_registration', |
|
| 341 | - 'noheader' => true, |
|
| 342 | - 'capability' => 'ee_edit_registration', |
|
| 343 | - 'obj_id' => $reg_id, |
|
| 344 | - ), |
|
| 345 | - 'cancel_and_notify_registration' => array( |
|
| 346 | - 'func' => 'cancel_registration', |
|
| 347 | - 'noheader' => true, |
|
| 348 | - 'args' => array(true), |
|
| 349 | - 'capability' => 'ee_edit_registration', |
|
| 350 | - 'obj_id' => $reg_id, |
|
| 351 | - ), |
|
| 352 | - 'cancel_registrations' => array( |
|
| 353 | - 'func' => 'bulk_action_on_registrations', |
|
| 354 | - 'noheader' => true, |
|
| 355 | - 'capability' => 'ee_edit_registrations', |
|
| 356 | - 'args' => array('cancel') |
|
| 357 | - ), |
|
| 358 | - 'cancel_and_notify_registrations' => array( |
|
| 359 | - 'func' => 'bulk_action_on_registrations', |
|
| 360 | - 'noheader' => true, |
|
| 361 | - 'capability' => 'ee_edit_registrations', |
|
| 362 | - 'args' => array('cancel', true) |
|
| 363 | - ), |
|
| 364 | - 'wait_list_registration' => array( |
|
| 365 | - 'func' => 'wait_list_registration', |
|
| 366 | - 'noheader' => true, |
|
| 367 | - 'capability' => 'ee_edit_registration', |
|
| 368 | - 'obj_id' => $reg_id, |
|
| 369 | - ), |
|
| 370 | - 'wait_list_and_notify_registration' => array( |
|
| 371 | - 'func' => 'wait_list_registration', |
|
| 372 | - 'noheader' => true, |
|
| 373 | - 'args' => array(true), |
|
| 374 | - 'capability' => 'ee_edit_registration', |
|
| 375 | - 'obj_id' => $reg_id, |
|
| 376 | - ), |
|
| 377 | - 'contact_list' => array( |
|
| 378 | - 'func' => '_attendee_contact_list_table', |
|
| 379 | - 'capability' => 'ee_read_contacts', |
|
| 380 | - ), |
|
| 381 | - 'add_new_attendee' => array( |
|
| 382 | - 'func' => '_create_new_cpt_item', |
|
| 383 | - 'args' => array( |
|
| 384 | - 'new_attendee' => true, |
|
| 385 | - 'capability' => 'ee_edit_contacts', |
|
| 386 | - ), |
|
| 387 | - ), |
|
| 388 | - 'edit_attendee' => array( |
|
| 389 | - 'func' => '_edit_cpt_item', |
|
| 390 | - 'capability' => 'ee_edit_contacts', |
|
| 391 | - 'obj_id' => $att_id, |
|
| 392 | - ), |
|
| 393 | - 'duplicate_attendee' => array( |
|
| 394 | - 'func' => '_duplicate_attendee', |
|
| 395 | - 'noheader' => true, |
|
| 396 | - 'capability' => 'ee_edit_contacts', |
|
| 397 | - 'obj_id' => $att_id, |
|
| 398 | - ), |
|
| 399 | - 'insert_attendee' => array( |
|
| 400 | - 'func' => '_insert_or_update_attendee', |
|
| 401 | - 'args' => array( |
|
| 402 | - 'new_attendee' => true, |
|
| 403 | - ), |
|
| 404 | - 'noheader' => true, |
|
| 405 | - 'capability' => 'ee_edit_contacts', |
|
| 406 | - ), |
|
| 407 | - 'update_attendee' => array( |
|
| 408 | - 'func' => '_insert_or_update_attendee', |
|
| 409 | - 'args' => array( |
|
| 410 | - 'new_attendee' => false, |
|
| 411 | - ), |
|
| 412 | - 'noheader' => true, |
|
| 413 | - 'capability' => 'ee_edit_contacts', |
|
| 414 | - 'obj_id' => $att_id, |
|
| 415 | - ), |
|
| 416 | - 'trash_attendees' => array( |
|
| 417 | - 'func' => '_trash_or_restore_attendees', |
|
| 418 | - 'args' => array( |
|
| 419 | - 'trash' => 'true' |
|
| 420 | - ), |
|
| 421 | - 'noheader' => true, |
|
| 422 | - 'capability' => 'ee_delete_contacts' |
|
| 423 | - ), |
|
| 424 | - 'trash_attendee' => array( |
|
| 425 | - 'func' => '_trash_or_restore_attendees', |
|
| 426 | - 'args' => array( |
|
| 427 | - 'trash' => true, |
|
| 428 | - ), |
|
| 429 | - 'noheader' => true, |
|
| 430 | - 'capability' => 'ee_delete_contacts', |
|
| 431 | - 'obj_id' => $att_id, |
|
| 432 | - ), |
|
| 433 | - 'restore_attendees' => array( |
|
| 434 | - 'func' => '_trash_or_restore_attendees', |
|
| 435 | - 'args' => array( |
|
| 436 | - 'trash' => false, |
|
| 437 | - ), |
|
| 438 | - 'noheader' => true, |
|
| 439 | - 'capability' => 'ee_delete_contacts', |
|
| 440 | - 'obj_id' => $att_id, |
|
| 441 | - ), |
|
| 442 | - 'resend_registration' => array( |
|
| 443 | - 'func' => '_resend_registration', |
|
| 444 | - 'noheader' => true, |
|
| 445 | - 'capability' => 'ee_send_message', |
|
| 446 | - ), |
|
| 447 | - 'registrations_report' => array( |
|
| 448 | - 'func' => '_registrations_report', |
|
| 449 | - 'noheader' => true, |
|
| 450 | - 'capability' => 'ee_read_registrations', |
|
| 451 | - ), |
|
| 452 | - 'contact_list_export' => array( |
|
| 453 | - 'func' => '_contact_list_export', |
|
| 454 | - 'noheader' => true, |
|
| 455 | - 'capability' => 'export', |
|
| 456 | - ), |
|
| 457 | - 'contact_list_report' => array( |
|
| 458 | - 'func' => '_contact_list_report', |
|
| 459 | - 'noheader' => true, |
|
| 460 | - 'capability' => 'ee_read_contacts', |
|
| 461 | - ), |
|
| 462 | - ); |
|
| 463 | - } |
|
| 464 | - |
|
| 465 | - |
|
| 466 | - protected function _set_page_config() |
|
| 467 | - { |
|
| 468 | - $this->_page_config = array( |
|
| 469 | - 'default' => array( |
|
| 470 | - 'nav' => array( |
|
| 471 | - 'label' => esc_html__('Overview', 'event_espresso'), |
|
| 472 | - 'order' => 5, |
|
| 473 | - ), |
|
| 474 | - 'help_tabs' => array( |
|
| 475 | - 'registrations_overview_help_tab' => array( |
|
| 476 | - 'title' => esc_html__('Registrations Overview', 'event_espresso'), |
|
| 477 | - 'filename' => 'registrations_overview', |
|
| 478 | - ), |
|
| 479 | - 'registrations_overview_table_column_headings_help_tab' => array( |
|
| 480 | - 'title' => esc_html__('Registrations Table Column Headings', 'event_espresso'), |
|
| 481 | - 'filename' => 'registrations_overview_table_column_headings', |
|
| 482 | - ), |
|
| 483 | - 'registrations_overview_filters_help_tab' => array( |
|
| 484 | - 'title' => esc_html__('Registration Filters', 'event_espresso'), |
|
| 485 | - 'filename' => 'registrations_overview_filters', |
|
| 486 | - ), |
|
| 487 | - 'registrations_overview_views_help_tab' => array( |
|
| 488 | - 'title' => esc_html__('Registration Views', 'event_espresso'), |
|
| 489 | - 'filename' => 'registrations_overview_views', |
|
| 490 | - ), |
|
| 491 | - 'registrations_regoverview_other_help_tab' => array( |
|
| 492 | - 'title' => esc_html__('Registrations Other', 'event_espresso'), |
|
| 493 | - 'filename' => 'registrations_overview_other', |
|
| 494 | - ), |
|
| 495 | - ), |
|
| 496 | - 'help_tour' => array('Registration_Overview_Help_Tour'), |
|
| 497 | - 'qtips' => array('Registration_List_Table_Tips'), |
|
| 498 | - 'list_table' => 'EE_Registrations_List_Table', |
|
| 499 | - 'require_nonce' => false, |
|
| 500 | - ), |
|
| 501 | - 'view_registration' => array( |
|
| 502 | - 'nav' => array( |
|
| 503 | - 'label' => esc_html__('REG Details', 'event_espresso'), |
|
| 504 | - 'order' => 15, |
|
| 505 | - 'url' => isset($this->_req_data['_REG_ID']) |
|
| 506 | - ? add_query_arg(array('_REG_ID' => $this->_req_data['_REG_ID']), $this->_current_page_view_url) |
|
| 507 | - : $this->_admin_base_url, |
|
| 508 | - 'persistent' => false, |
|
| 509 | - ), |
|
| 510 | - 'help_tabs' => array( |
|
| 511 | - 'registrations_details_help_tab' => array( |
|
| 512 | - 'title' => esc_html__('Registration Details', 'event_espresso'), |
|
| 513 | - 'filename' => 'registrations_details', |
|
| 514 | - ), |
|
| 515 | - 'registrations_details_table_help_tab' => array( |
|
| 516 | - 'title' => esc_html__('Registration Details Table', 'event_espresso'), |
|
| 517 | - 'filename' => 'registrations_details_table', |
|
| 518 | - ), |
|
| 519 | - 'registrations_details_form_answers_help_tab' => array( |
|
| 520 | - 'title' => esc_html__('Registration Form Answers', 'event_espresso'), |
|
| 521 | - 'filename' => 'registrations_details_form_answers', |
|
| 522 | - ), |
|
| 523 | - 'registrations_details_registrant_details_help_tab' => array( |
|
| 524 | - 'title' => esc_html__('Contact Details', 'event_espresso'), |
|
| 525 | - 'filename' => 'registrations_details_registrant_details', |
|
| 526 | - ), |
|
| 527 | - ), |
|
| 528 | - 'help_tour' => array('Registration_Details_Help_Tour'), |
|
| 529 | - 'metaboxes' => array_merge( |
|
| 530 | - $this->_default_espresso_metaboxes, |
|
| 531 | - array('_registration_details_metaboxes') |
|
| 532 | - ), |
|
| 533 | - 'require_nonce' => false, |
|
| 534 | - ), |
|
| 535 | - 'new_registration' => array( |
|
| 536 | - 'nav' => array( |
|
| 537 | - 'label' => esc_html__('Add New Registration', 'event_espresso'), |
|
| 538 | - 'url' => '#', |
|
| 539 | - 'order' => 15, |
|
| 540 | - 'persistent' => false, |
|
| 541 | - ), |
|
| 542 | - 'metaboxes' => $this->_default_espresso_metaboxes, |
|
| 543 | - 'labels' => array( |
|
| 544 | - 'publishbox' => esc_html__('Save Registration', 'event_espresso'), |
|
| 545 | - ), |
|
| 546 | - 'require_nonce' => false, |
|
| 547 | - ), |
|
| 548 | - 'add_new_attendee' => array( |
|
| 549 | - 'nav' => array( |
|
| 550 | - 'label' => esc_html__('Add Contact', 'event_espresso'), |
|
| 551 | - 'order' => 15, |
|
| 552 | - 'persistent' => false, |
|
| 553 | - ), |
|
| 554 | - 'metaboxes' => array_merge( |
|
| 555 | - $this->_default_espresso_metaboxes, |
|
| 556 | - array('_publish_post_box', 'attendee_editor_metaboxes') |
|
| 557 | - ), |
|
| 558 | - 'require_nonce' => false, |
|
| 559 | - ), |
|
| 560 | - 'edit_attendee' => array( |
|
| 561 | - 'nav' => array( |
|
| 562 | - 'label' => esc_html__('Edit Contact', 'event_espresso'), |
|
| 563 | - 'order' => 15, |
|
| 564 | - 'persistent' => false, |
|
| 565 | - 'url' => isset($this->_req_data['ATT_ID']) |
|
| 566 | - ? add_query_arg(array('ATT_ID' => $this->_req_data['ATT_ID']), $this->_current_page_view_url) |
|
| 567 | - : $this->_admin_base_url, |
|
| 568 | - ), |
|
| 569 | - 'metaboxes' => array('attendee_editor_metaboxes'), |
|
| 570 | - 'require_nonce' => false, |
|
| 571 | - ), |
|
| 572 | - 'contact_list' => array( |
|
| 573 | - 'nav' => array( |
|
| 574 | - 'label' => esc_html__('Contact List', 'event_espresso'), |
|
| 575 | - 'order' => 20, |
|
| 576 | - ), |
|
| 577 | - 'list_table' => 'EE_Attendee_Contact_List_Table', |
|
| 578 | - 'help_tabs' => array( |
|
| 579 | - 'registrations_contact_list_help_tab' => array( |
|
| 580 | - 'title' => esc_html__('Registrations Contact List', 'event_espresso'), |
|
| 581 | - 'filename' => 'registrations_contact_list', |
|
| 582 | - ), |
|
| 583 | - 'registrations_contact-list_table_column_headings_help_tab' => array( |
|
| 584 | - 'title' => esc_html__('Contact List Table Column Headings', 'event_espresso'), |
|
| 585 | - 'filename' => 'registrations_contact_list_table_column_headings', |
|
| 586 | - ), |
|
| 587 | - 'registrations_contact_list_views_help_tab' => array( |
|
| 588 | - 'title' => esc_html__('Contact List Views', 'event_espresso'), |
|
| 589 | - 'filename' => 'registrations_contact_list_views', |
|
| 590 | - ), |
|
| 591 | - 'registrations_contact_list_other_help_tab' => array( |
|
| 592 | - 'title' => esc_html__('Contact List Other', 'event_espresso'), |
|
| 593 | - 'filename' => 'registrations_contact_list_other', |
|
| 594 | - ), |
|
| 595 | - ), |
|
| 596 | - 'help_tour' => array('Contact_List_Help_Tour'), |
|
| 597 | - 'metaboxes' => array(), |
|
| 598 | - 'require_nonce' => false, |
|
| 599 | - ), |
|
| 600 | - //override default cpt routes |
|
| 601 | - 'create_new' => '', |
|
| 602 | - 'edit' => '', |
|
| 603 | - ); |
|
| 604 | - } |
|
| 605 | - |
|
| 606 | - |
|
| 607 | - /** |
|
| 608 | - * The below methods aren't used by this class currently |
|
| 609 | - */ |
|
| 610 | - protected function _add_screen_options() |
|
| 611 | - { |
|
| 612 | - } |
|
| 613 | - |
|
| 614 | - |
|
| 615 | - protected function _add_feature_pointers() |
|
| 616 | - { |
|
| 617 | - } |
|
| 618 | - |
|
| 619 | - |
|
| 620 | - public function admin_init() |
|
| 621 | - { |
|
| 622 | - EE_Registry::$i18n_js_strings['update_att_qstns'] = esc_html__( |
|
| 623 | - 'click "Update Registration Questions" to save your changes', |
|
| 624 | - 'event_espresso' |
|
| 625 | - ); |
|
| 626 | - } |
|
| 627 | - |
|
| 628 | - |
|
| 629 | - public function admin_notices() |
|
| 630 | - { |
|
| 631 | - } |
|
| 632 | - |
|
| 633 | - |
|
| 634 | - public function admin_footer_scripts() |
|
| 635 | - { |
|
| 636 | - } |
|
| 637 | - |
|
| 638 | - |
|
| 639 | - /** |
|
| 640 | - * get list of registration statuses |
|
| 641 | - * |
|
| 642 | - * @access private |
|
| 643 | - * @return void |
|
| 644 | - * @throws EE_Error |
|
| 645 | - */ |
|
| 646 | - private function _get_registration_status_array() |
|
| 647 | - { |
|
| 648 | - self::$_reg_status = EEM_Registration::reg_status_array(array(), true); |
|
| 649 | - } |
|
| 650 | - |
|
| 651 | - |
|
| 652 | - protected function _add_screen_options_default() |
|
| 653 | - { |
|
| 654 | - $this->_per_page_screen_option(); |
|
| 655 | - } |
|
| 656 | - |
|
| 657 | - |
|
| 658 | - protected function _add_screen_options_contact_list() |
|
| 659 | - { |
|
| 660 | - $page_title = $this->_admin_page_title; |
|
| 661 | - $this->_admin_page_title = esc_html__("Contacts", 'event_espresso'); |
|
| 662 | - $this->_per_page_screen_option(); |
|
| 663 | - $this->_admin_page_title = $page_title; |
|
| 664 | - } |
|
| 665 | - |
|
| 666 | - |
|
| 667 | - public function load_scripts_styles() |
|
| 668 | - { |
|
| 669 | - //style |
|
| 670 | - wp_register_style( |
|
| 671 | - 'espresso_reg', |
|
| 672 | - REG_ASSETS_URL . 'espresso_registrations_admin.css', |
|
| 673 | - array('ee-admin-css'), |
|
| 674 | - EVENT_ESPRESSO_VERSION |
|
| 675 | - ); |
|
| 676 | - wp_enqueue_style('espresso_reg'); |
|
| 677 | - //script |
|
| 678 | - wp_register_script( |
|
| 679 | - 'espresso_reg', |
|
| 680 | - REG_ASSETS_URL . 'espresso_registrations_admin.js', |
|
| 681 | - array('jquery-ui-datepicker', 'jquery-ui-draggable', 'ee_admin_js'), |
|
| 682 | - EVENT_ESPRESSO_VERSION, |
|
| 683 | - true |
|
| 684 | - ); |
|
| 685 | - wp_enqueue_script('espresso_reg'); |
|
| 686 | - } |
|
| 687 | - |
|
| 688 | - |
|
| 689 | - public function load_scripts_styles_edit_attendee() |
|
| 690 | - { |
|
| 691 | - //stuff to only show up on our attendee edit details page. |
|
| 692 | - $attendee_details_translations = array( |
|
| 693 | - 'att_publish_text' => sprintf( |
|
| 694 | - esc_html__('Created on: <b>%1$s</b>', 'event_espresso'), |
|
| 695 | - $this->_cpt_model_obj->get_datetime('ATT_created') |
|
| 696 | - ), |
|
| 697 | - ); |
|
| 698 | - wp_localize_script('espresso_reg', 'ATTENDEE_DETAILS', $attendee_details_translations); |
|
| 699 | - wp_enqueue_script('jquery-validate'); |
|
| 700 | - } |
|
| 701 | - |
|
| 702 | - |
|
| 703 | - public function load_scripts_styles_view_registration() |
|
| 704 | - { |
|
| 705 | - //styles |
|
| 706 | - wp_enqueue_style('espresso-ui-theme'); |
|
| 707 | - //scripts |
|
| 708 | - $this->_get_reg_custom_questions_form($this->_registration->ID()); |
|
| 709 | - $this->_reg_custom_questions_form->wp_enqueue_scripts(true); |
|
| 710 | - } |
|
| 711 | - |
|
| 712 | - |
|
| 713 | - public function load_scripts_styles_contact_list() |
|
| 714 | - { |
|
| 715 | - wp_deregister_style('espresso_reg'); |
|
| 716 | - wp_register_style( |
|
| 717 | - 'espresso_att', |
|
| 718 | - REG_ASSETS_URL . 'espresso_attendees_admin.css', |
|
| 719 | - array('ee-admin-css'), |
|
| 720 | - EVENT_ESPRESSO_VERSION |
|
| 721 | - ); |
|
| 722 | - wp_enqueue_style('espresso_att'); |
|
| 723 | - } |
|
| 724 | - |
|
| 725 | - |
|
| 726 | - public function load_scripts_styles_new_registration() |
|
| 727 | - { |
|
| 728 | - wp_register_script( |
|
| 729 | - 'ee-spco-for-admin', |
|
| 730 | - REG_ASSETS_URL . 'spco_for_admin.js', |
|
| 731 | - array('underscore', 'jquery'), |
|
| 732 | - EVENT_ESPRESSO_VERSION, |
|
| 733 | - true |
|
| 734 | - ); |
|
| 735 | - wp_enqueue_script('ee-spco-for-admin'); |
|
| 736 | - add_filter('FHEE__EED_Ticket_Selector__load_tckt_slctr_assets', '__return_true'); |
|
| 737 | - EE_Form_Section_Proper::wp_enqueue_scripts(); |
|
| 738 | - EED_Ticket_Selector::load_tckt_slctr_assets(); |
|
| 739 | - EE_Datepicker_Input::enqueue_styles_and_scripts(); |
|
| 740 | - } |
|
| 741 | - |
|
| 742 | - |
|
| 743 | - public function AHEE__EE_Admin_Page__route_admin_request_resend_registration() |
|
| 744 | - { |
|
| 745 | - add_filter('FHEE_load_EE_messages', '__return_true'); |
|
| 746 | - } |
|
| 747 | - |
|
| 748 | - |
|
| 749 | - public function AHEE__EE_Admin_Page__route_admin_request_approve_registration() |
|
| 750 | - { |
|
| 751 | - add_filter('FHEE_load_EE_messages', '__return_true'); |
|
| 752 | - } |
|
| 753 | - |
|
| 754 | - |
|
| 755 | - protected function _set_list_table_views_default() |
|
| 756 | - { |
|
| 757 | - //for notification related bulk actions we need to make sure only active messengers have an option. |
|
| 758 | - EED_Messages::set_autoloaders(); |
|
| 759 | - /** @type EE_Message_Resource_Manager $message_resource_manager */ |
|
| 760 | - $message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager'); |
|
| 761 | - $active_mts = $message_resource_manager->list_of_active_message_types(); |
|
| 762 | - //key= bulk_action_slug, value= message type. |
|
| 763 | - $match_array = array( |
|
| 764 | - 'approve_registrations' => 'registration', |
|
| 765 | - 'decline_registrations' => 'declined_registration', |
|
| 766 | - 'pending_registrations' => 'pending_approval', |
|
| 767 | - 'no_approve_registrations' => 'not_approved_registration', |
|
| 768 | - 'cancel_registrations' => 'cancelled_registration', |
|
| 769 | - ); |
|
| 770 | - $can_send = EE_Registry::instance()->CAP->current_user_can( |
|
| 771 | - 'ee_send_message', |
|
| 772 | - 'batch_send_messages' |
|
| 773 | - ); |
|
| 774 | - /** setup reg status bulk actions **/ |
|
| 775 | - $def_reg_status_actions['approve_registrations'] = esc_html__('Approve Registrations', 'event_espresso'); |
|
| 776 | - if ($can_send && in_array($match_array['approve_registrations'], $active_mts, true)) { |
|
| 777 | - $def_reg_status_actions['approve_and_notify_registrations'] = esc_html__( |
|
| 778 | - 'Approve and Notify Registrations', |
|
| 779 | - 'event_espresso' |
|
| 780 | - ); |
|
| 781 | - } |
|
| 782 | - $def_reg_status_actions['decline_registrations'] = esc_html__('Decline Registrations', 'event_espresso'); |
|
| 783 | - if ($can_send && in_array($match_array['decline_registrations'], $active_mts, true)) { |
|
| 784 | - $def_reg_status_actions['decline_and_notify_registrations'] = esc_html__( |
|
| 785 | - 'Decline and Notify Registrations', |
|
| 786 | - 'event_espresso' |
|
| 787 | - ); |
|
| 788 | - } |
|
| 789 | - $def_reg_status_actions['pending_registrations'] = esc_html__( |
|
| 790 | - 'Set Registrations to Pending Payment', |
|
| 791 | - 'event_espresso' |
|
| 792 | - ); |
|
| 793 | - if ($can_send && in_array($match_array['pending_registrations'], $active_mts, true)) { |
|
| 794 | - $def_reg_status_actions['pending_and_notify_registrations'] = esc_html__( |
|
| 795 | - 'Set Registrations to Pending Payment and Notify', |
|
| 796 | - 'event_espresso' |
|
| 797 | - ); |
|
| 798 | - } |
|
| 799 | - $def_reg_status_actions['no_approve_registrations'] = esc_html__( |
|
| 800 | - 'Set Registrations to Not Approved', |
|
| 801 | - 'event_espresso' |
|
| 802 | - ); |
|
| 803 | - if ($can_send && in_array($match_array['no_approve_registrations'], $active_mts, true)) { |
|
| 804 | - $def_reg_status_actions['no_approve_and_notify_registrations'] = esc_html__( |
|
| 805 | - 'Set Registrations to Not Approved and Notify', |
|
| 806 | - 'event_espresso' |
|
| 807 | - ); |
|
| 808 | - } |
|
| 809 | - $def_reg_status_actions['cancel_registrations'] = esc_html__('Cancel Registrations', 'event_espresso'); |
|
| 810 | - if ($can_send && in_array($match_array['cancel_registrations'], $active_mts, true)) { |
|
| 811 | - $def_reg_status_actions['cancel_and_notify_registrations'] = esc_html__( |
|
| 812 | - 'Cancel Registrations and Notify', |
|
| 813 | - 'event_espresso' |
|
| 814 | - ); |
|
| 815 | - } |
|
| 816 | - $def_reg_status_actions = apply_filters( |
|
| 817 | - 'FHEE__Registrations_Admin_Page___set_list_table_views_default__def_reg_status_actions_array', |
|
| 818 | - $def_reg_status_actions, |
|
| 819 | - $active_mts, |
|
| 820 | - $can_send |
|
| 821 | - ); |
|
| 822 | - |
|
| 823 | - $this->_views = array( |
|
| 824 | - 'all' => array( |
|
| 825 | - 'slug' => 'all', |
|
| 826 | - 'label' => esc_html__('View All Registrations', 'event_espresso'), |
|
| 827 | - 'count' => 0, |
|
| 828 | - 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
| 829 | - 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
| 830 | - )), |
|
| 831 | - ), |
|
| 832 | - 'month' => array( |
|
| 833 | - 'slug' => 'month', |
|
| 834 | - 'label' => esc_html__('This Month', 'event_espresso'), |
|
| 835 | - 'count' => 0, |
|
| 836 | - 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
| 837 | - 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
| 838 | - )), |
|
| 839 | - ), |
|
| 840 | - 'today' => array( |
|
| 841 | - 'slug' => 'today', |
|
| 842 | - 'label' => sprintf( |
|
| 843 | - esc_html__('Today - %s', 'event_espresso'), |
|
| 844 | - date('M d, Y', current_time('timestamp')) |
|
| 845 | - ), |
|
| 846 | - 'count' => 0, |
|
| 847 | - 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
| 848 | - 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
| 849 | - )), |
|
| 850 | - ), |
|
| 851 | - ); |
|
| 852 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 853 | - 'ee_delete_registrations', |
|
| 854 | - 'espresso_registrations_delete_registration' |
|
| 855 | - )) { |
|
| 856 | - $this->_views['incomplete'] = array( |
|
| 857 | - 'slug' => 'incomplete', |
|
| 858 | - 'label' => esc_html__('Incomplete', 'event_espresso'), |
|
| 859 | - 'count' => 0, |
|
| 860 | - 'bulk_action' => array( |
|
| 861 | - 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
| 862 | - ), |
|
| 863 | - ); |
|
| 864 | - $this->_views['trash'] = array( |
|
| 865 | - 'slug' => 'trash', |
|
| 866 | - 'label' => esc_html__('Trash', 'event_espresso'), |
|
| 867 | - 'count' => 0, |
|
| 868 | - 'bulk_action' => array( |
|
| 869 | - 'restore_registrations' => esc_html__('Restore Registrations', 'event_espresso'), |
|
| 870 | - 'delete_registrations' => esc_html__('Delete Registrations Permanently', 'event_espresso'), |
|
| 871 | - ), |
|
| 872 | - ); |
|
| 873 | - } |
|
| 874 | - } |
|
| 875 | - |
|
| 876 | - |
|
| 877 | - protected function _set_list_table_views_contact_list() |
|
| 878 | - { |
|
| 879 | - $this->_views = array( |
|
| 880 | - 'in_use' => array( |
|
| 881 | - 'slug' => 'in_use', |
|
| 882 | - 'label' => esc_html__('In Use', 'event_espresso'), |
|
| 883 | - 'count' => 0, |
|
| 884 | - 'bulk_action' => array( |
|
| 885 | - 'trash_attendees' => esc_html__('Move to Trash', 'event_espresso'), |
|
| 886 | - ), |
|
| 887 | - ), |
|
| 888 | - ); |
|
| 889 | - if (EE_Registry::instance()->CAP->current_user_can('ee_delete_contacts', |
|
| 890 | - 'espresso_registrations_trash_attendees') |
|
| 891 | - ) { |
|
| 892 | - $this->_views['trash'] = array( |
|
| 893 | - 'slug' => 'trash', |
|
| 894 | - 'label' => esc_html__('Trash', 'event_espresso'), |
|
| 895 | - 'count' => 0, |
|
| 896 | - 'bulk_action' => array( |
|
| 897 | - 'restore_attendees' => esc_html__('Restore from Trash', 'event_espresso'), |
|
| 898 | - ), |
|
| 899 | - ); |
|
| 900 | - } |
|
| 901 | - } |
|
| 902 | - |
|
| 903 | - |
|
| 904 | - protected function _registration_legend_items() |
|
| 905 | - { |
|
| 906 | - $fc_items = array( |
|
| 907 | - 'star-icon' => array( |
|
| 908 | - 'class' => 'dashicons dashicons-star-filled lt-blue-icon ee-icon-size-8', |
|
| 909 | - 'desc' => esc_html__('This is the Primary Registrant', 'event_espresso'), |
|
| 910 | - ), |
|
| 911 | - 'view_details' => array( |
|
| 912 | - 'class' => 'dashicons dashicons-clipboard', |
|
| 913 | - 'desc' => esc_html__('View Registration Details', 'event_espresso'), |
|
| 914 | - ), |
|
| 915 | - 'edit_attendee' => array( |
|
| 916 | - 'class' => 'ee-icon ee-icon-user-edit ee-icon-size-16', |
|
| 917 | - 'desc' => esc_html__('Edit Contact Details', 'event_espresso'), |
|
| 918 | - ), |
|
| 919 | - 'view_transaction' => array( |
|
| 920 | - 'class' => 'dashicons dashicons-cart', |
|
| 921 | - 'desc' => esc_html__('View Transaction Details', 'event_espresso'), |
|
| 922 | - ), |
|
| 923 | - 'view_invoice' => array( |
|
| 924 | - 'class' => 'dashicons dashicons-media-spreadsheet', |
|
| 925 | - 'desc' => esc_html__('View Transaction Invoice', 'event_espresso'), |
|
| 926 | - ), |
|
| 927 | - ); |
|
| 928 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 929 | - 'ee_send_message', |
|
| 930 | - 'espresso_registrations_resend_registration' |
|
| 931 | - )) { |
|
| 932 | - $fc_items['resend_registration'] = array( |
|
| 933 | - 'class' => 'dashicons dashicons-email-alt', |
|
| 934 | - 'desc' => esc_html__('Resend Registration Details', 'event_espresso'), |
|
| 935 | - ); |
|
| 936 | - } else { |
|
| 937 | - $fc_items['blank'] = array('class' => 'blank', 'desc' => ''); |
|
| 938 | - } |
|
| 939 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 940 | - 'ee_read_global_messages', |
|
| 941 | - 'view_filtered_messages' |
|
| 942 | - )) { |
|
| 943 | - $related_for_icon = EEH_MSG_Template::get_message_action_icon('see_notifications_for'); |
|
| 944 | - if (isset($related_for_icon['css_class']) && isset($related_for_icon['label'])) { |
|
| 945 | - $fc_items['view_related_messages'] = array( |
|
| 946 | - 'class' => $related_for_icon['css_class'], |
|
| 947 | - 'desc' => $related_for_icon['label'], |
|
| 948 | - ); |
|
| 949 | - } |
|
| 950 | - } |
|
| 951 | - $sc_items = array( |
|
| 952 | - 'approved_status' => array( |
|
| 953 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved, |
|
| 954 | - 'desc' => EEH_Template::pretty_status( |
|
| 955 | - EEM_Registration::status_id_approved, |
|
| 956 | - false, |
|
| 957 | - 'sentence' |
|
| 958 | - ), |
|
| 959 | - ), |
|
| 960 | - 'pending_status' => array( |
|
| 961 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment, |
|
| 962 | - 'desc' => EEH_Template::pretty_status( |
|
| 963 | - EEM_Registration::status_id_pending_payment, |
|
| 964 | - false, |
|
| 965 | - 'sentence' |
|
| 966 | - ), |
|
| 967 | - ), |
|
| 968 | - 'wait_list' => array( |
|
| 969 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list, |
|
| 970 | - 'desc' => EEH_Template::pretty_status( |
|
| 971 | - EEM_Registration::status_id_wait_list, |
|
| 972 | - false, |
|
| 973 | - 'sentence' |
|
| 974 | - ), |
|
| 975 | - ), |
|
| 976 | - 'incomplete_status' => array( |
|
| 977 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_incomplete, |
|
| 978 | - 'desc' => EEH_Template::pretty_status( |
|
| 979 | - EEM_Registration::status_id_incomplete, |
|
| 980 | - false, |
|
| 981 | - 'sentence' |
|
| 982 | - ), |
|
| 983 | - ), |
|
| 984 | - 'not_approved' => array( |
|
| 985 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved, |
|
| 986 | - 'desc' => EEH_Template::pretty_status( |
|
| 987 | - EEM_Registration::status_id_not_approved, |
|
| 988 | - false, |
|
| 989 | - 'sentence' |
|
| 990 | - ), |
|
| 991 | - ), |
|
| 992 | - 'declined_status' => array( |
|
| 993 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined, |
|
| 994 | - 'desc' => EEH_Template::pretty_status( |
|
| 995 | - EEM_Registration::status_id_declined, |
|
| 996 | - false, |
|
| 997 | - 'sentence' |
|
| 998 | - ), |
|
| 999 | - ), |
|
| 1000 | - 'cancelled_status' => array( |
|
| 1001 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled, |
|
| 1002 | - 'desc' => EEH_Template::pretty_status( |
|
| 1003 | - EEM_Registration::status_id_cancelled, |
|
| 1004 | - false, |
|
| 1005 | - 'sentence' |
|
| 1006 | - ), |
|
| 1007 | - ), |
|
| 1008 | - ); |
|
| 1009 | - return array_merge($fc_items, $sc_items); |
|
| 1010 | - } |
|
| 1011 | - |
|
| 1012 | - |
|
| 1013 | - |
|
| 1014 | - /*************************************** REGISTRATION OVERVIEW **************************************/ |
|
| 1015 | - /** |
|
| 1016 | - * @throws \EE_Error |
|
| 1017 | - */ |
|
| 1018 | - protected function _registrations_overview_list_table() |
|
| 1019 | - { |
|
| 1020 | - $this->_template_args['admin_page_header'] = ''; |
|
| 1021 | - $EVT_ID = ! empty($this->_req_data['event_id']) |
|
| 1022 | - ? absint($this->_req_data['event_id']) |
|
| 1023 | - : 0; |
|
| 1024 | - $ATT_ID = !empty($this->_req_data['ATT_ID']) |
|
| 1025 | - ? absint($this->_req_data['ATT_ID']) |
|
| 1026 | - : 0; |
|
| 1027 | - if ($ATT_ID) { |
|
| 1028 | - $attendee = EEM_Attendee::instance()->get_one_by_ID($ATT_ID); |
|
| 1029 | - if ($attendee instanceof EE_Attendee) { |
|
| 1030 | - $this->_template_args['admin_page_header'] = sprintf( |
|
| 1031 | - esc_html__( |
|
| 1032 | - '%1$s Viewing registrations for %2$s%3$s', |
|
| 1033 | - 'event_espresso' |
|
| 1034 | - ), |
|
| 1035 | - '<h3 style="line-height:1.5em;">', |
|
| 1036 | - '<a href="' . EE_Admin_Page::add_query_args_and_nonce( |
|
| 1037 | - array( |
|
| 1038 | - 'action' => 'edit_attendee', |
|
| 1039 | - 'post' => $ATT_ID |
|
| 1040 | - ), |
|
| 1041 | - REG_ADMIN_URL |
|
| 1042 | - ) . '">' . $attendee->full_name() . '</a>', |
|
| 1043 | - '</h3>' |
|
| 1044 | - ); |
|
| 1045 | - } |
|
| 1046 | - } |
|
| 1047 | - if ($EVT_ID) { |
|
| 1048 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 1049 | - 'ee_edit_registrations', |
|
| 1050 | - 'espresso_registrations_new_registration', |
|
| 1051 | - $EVT_ID |
|
| 1052 | - )) { |
|
| 1053 | - $this->_admin_page_title .= ' ' . $this->get_action_link_or_button( |
|
| 1054 | - 'new_registration', |
|
| 1055 | - 'add-registrant', |
|
| 1056 | - array('event_id' => $EVT_ID), |
|
| 1057 | - 'add-new-h2' |
|
| 1058 | - ); |
|
| 1059 | - } |
|
| 1060 | - $event = EEM_Event::instance()->get_one_by_ID($EVT_ID); |
|
| 1061 | - if ($event instanceof EE_Event) { |
|
| 1062 | - $this->_template_args['admin_page_header'] = sprintf( |
|
| 1063 | - esc_html__( |
|
| 1064 | - '%s Viewing registrations for the event: %s%s', |
|
| 1065 | - 'event_espresso' |
|
| 1066 | - ), |
|
| 1067 | - '<h3 style="line-height:1.5em;">', |
|
| 1068 | - '<br /><a href="' |
|
| 1069 | - . EE_Admin_Page::add_query_args_and_nonce( |
|
| 1070 | - array( |
|
| 1071 | - 'action' => 'edit', |
|
| 1072 | - 'post' => $event->ID(), |
|
| 1073 | - ), |
|
| 1074 | - EVENTS_ADMIN_URL |
|
| 1075 | - ) |
|
| 1076 | - . '"> ' |
|
| 1077 | - . $event->get('EVT_name') |
|
| 1078 | - . ' </a> ', |
|
| 1079 | - '</h3>' |
|
| 1080 | - ); |
|
| 1081 | - } |
|
| 1082 | - $DTT_ID = ! empty($this->_req_data['datetime_id']) ? absint($this->_req_data['datetime_id']) : 0; |
|
| 1083 | - $datetime = EEM_Datetime::instance()->get_one_by_ID($DTT_ID); |
|
| 1084 | - if ($datetime instanceof EE_Datetime && $this->_template_args['admin_page_header'] !== '') { |
|
| 1085 | - $this->_template_args['admin_page_header'] = substr( |
|
| 1086 | - $this->_template_args['admin_page_header'], |
|
| 1087 | - 0, |
|
| 1088 | - -5 |
|
| 1089 | - ); |
|
| 1090 | - $this->_template_args['admin_page_header'] .= ' <span class="drk-grey-text">'; |
|
| 1091 | - $this->_template_args['admin_page_header'] .= '<span class="dashicons dashicons-calendar"></span>'; |
|
| 1092 | - $this->_template_args['admin_page_header'] .= $datetime->name(); |
|
| 1093 | - $this->_template_args['admin_page_header'] .= ' ( ' . $datetime->start_date() . ' )'; |
|
| 1094 | - $this->_template_args['admin_page_header'] .= '</span></h3>'; |
|
| 1095 | - } |
|
| 1096 | - } |
|
| 1097 | - $this->_template_args['after_list_table'] = $this->_display_legend($this->_registration_legend_items()); |
|
| 1098 | - $this->display_admin_list_table_page_with_no_sidebar(); |
|
| 1099 | - } |
|
| 1100 | - |
|
| 1101 | - |
|
| 1102 | - /** |
|
| 1103 | - * This sets the _registration property for the registration details screen |
|
| 1104 | - * |
|
| 1105 | - * @access private |
|
| 1106 | - * @return bool |
|
| 1107 | - * @throws EE_Error |
|
| 1108 | - * @throws InvalidArgumentException |
|
| 1109 | - * @throws InvalidDataTypeException |
|
| 1110 | - * @throws InvalidInterfaceException |
|
| 1111 | - */ |
|
| 1112 | - private function _set_registration_object() |
|
| 1113 | - { |
|
| 1114 | - //get out if we've already set the object |
|
| 1115 | - if ($this->_registration instanceof EE_Registration) { |
|
| 1116 | - return true; |
|
| 1117 | - } |
|
| 1118 | - $REG = EEM_Registration::instance(); |
|
| 1119 | - $REG_ID = ( ! empty($this->_req_data['_REG_ID'])) ? absint($this->_req_data['_REG_ID']) : false; |
|
| 1120 | - if ($this->_registration = $REG->get_one_by_ID($REG_ID)) { |
|
| 1121 | - return true; |
|
| 1122 | - } else { |
|
| 1123 | - $error_msg = sprintf( |
|
| 1124 | - esc_html__( |
|
| 1125 | - 'An error occurred and the details for Registration ID #%s could not be retrieved.', |
|
| 1126 | - 'event_espresso' |
|
| 1127 | - ), |
|
| 1128 | - $REG_ID |
|
| 1129 | - ); |
|
| 1130 | - EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__); |
|
| 1131 | - $this->_registration = null; |
|
| 1132 | - return false; |
|
| 1133 | - } |
|
| 1134 | - } |
|
| 1135 | - |
|
| 1136 | - |
|
| 1137 | - /** |
|
| 1138 | - * Used to retrieve registrations for the list table. |
|
| 1139 | - * |
|
| 1140 | - * @param int $per_page |
|
| 1141 | - * @param bool $count |
|
| 1142 | - * @param bool $this_month |
|
| 1143 | - * @param bool $today |
|
| 1144 | - * @return EE_Registration[]|int |
|
| 1145 | - * @throws EE_Error |
|
| 1146 | - * @throws InvalidArgumentException |
|
| 1147 | - * @throws InvalidDataTypeException |
|
| 1148 | - * @throws InvalidInterfaceException |
|
| 1149 | - */ |
|
| 1150 | - public function get_registrations( |
|
| 1151 | - $per_page = 10, |
|
| 1152 | - $count = false, |
|
| 1153 | - $this_month = false, |
|
| 1154 | - $today = false |
|
| 1155 | - ) { |
|
| 1156 | - if ($this_month) { |
|
| 1157 | - $this->_req_data['status'] = 'month'; |
|
| 1158 | - } |
|
| 1159 | - if ($today) { |
|
| 1160 | - $this->_req_data['status'] = 'today'; |
|
| 1161 | - } |
|
| 1162 | - $query_params = $this->_get_registration_query_parameters($this->_req_data, $per_page, $count); |
|
| 1163 | - /** |
|
| 1164 | - * Override the default groupby added by EEM_Base so that sorts with multiple order bys work as expected |
|
| 1165 | - * @link https://events.codebasehq.com/projects/event-espresso/tickets/10093 |
|
| 1166 | - * @see EEM_Base::get_all() |
|
| 1167 | - */ |
|
| 1168 | - $query_params['group_by'] = ''; |
|
| 1169 | - |
|
| 1170 | - return $count |
|
| 1171 | - ? EEM_Registration::instance()->count($query_params) |
|
| 1172 | - /** @type EE_Registration[] */ |
|
| 1173 | - : EEM_Registration::instance()->get_all($query_params); |
|
| 1174 | - } |
|
| 1175 | - |
|
| 1176 | - |
|
| 1177 | - /** |
|
| 1178 | - * Retrieves the query parameters to be used by the Registration model for getting registrations. |
|
| 1179 | - * Note: this listens to values on the request for some of the query parameters. |
|
| 1180 | - * |
|
| 1181 | - * @param array $request |
|
| 1182 | - * @param int $per_page |
|
| 1183 | - * @param bool $count |
|
| 1184 | - * @return array |
|
| 1185 | - * @throws EE_Error |
|
| 1186 | - */ |
|
| 1187 | - protected function _get_registration_query_parameters( |
|
| 1188 | - $request = array(), |
|
| 1189 | - $per_page = 10, |
|
| 1190 | - $count = false |
|
| 1191 | - ) { |
|
| 1192 | - |
|
| 1193 | - $query_params = array( |
|
| 1194 | - 0 => $this->_get_where_conditions_for_registrations_query( |
|
| 1195 | - $request |
|
| 1196 | - ), |
|
| 1197 | - 'caps' => EEM_Registration::caps_read_admin, |
|
| 1198 | - 'default_where_conditions' => 'this_model_only', |
|
| 1199 | - ); |
|
| 1200 | - if (! $count) { |
|
| 1201 | - $query_params = array_merge( |
|
| 1202 | - $query_params, |
|
| 1203 | - $this->_get_orderby_for_registrations_query(), |
|
| 1204 | - $this->_get_limit($per_page) |
|
| 1205 | - ); |
|
| 1206 | - } |
|
| 1207 | - |
|
| 1208 | - return $query_params; |
|
| 1209 | - } |
|
| 1210 | - |
|
| 1211 | - |
|
| 1212 | - /** |
|
| 1213 | - * This will add ATT_ID to the provided $where array for EE model query parameters. |
|
| 1214 | - * |
|
| 1215 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1216 | - * @return array |
|
| 1217 | - */ |
|
| 1218 | - protected function addAttendeeIdToWhereConditions(array $request) |
|
| 1219 | - { |
|
| 1220 | - $where = array(); |
|
| 1221 | - if (! empty($request['ATT_ID'])) { |
|
| 1222 | - $where['ATT_ID'] = absint($request['ATT_ID']); |
|
| 1223 | - } |
|
| 1224 | - return $where; |
|
| 1225 | - } |
|
| 1226 | - |
|
| 1227 | - |
|
| 1228 | - /** |
|
| 1229 | - * This will add EVT_ID to the provided $where array for EE model query parameters. |
|
| 1230 | - * |
|
| 1231 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1232 | - * @return array |
|
| 1233 | - */ |
|
| 1234 | - protected function _add_event_id_to_where_conditions(array $request) |
|
| 1235 | - { |
|
| 1236 | - $where = array(); |
|
| 1237 | - if (! empty($request['event_id'])) { |
|
| 1238 | - $where['EVT_ID'] = absint($request['event_id']); |
|
| 1239 | - } |
|
| 1240 | - return $where; |
|
| 1241 | - } |
|
| 1242 | - |
|
| 1243 | - |
|
| 1244 | - /** |
|
| 1245 | - * Adds category ID if it exists in the request to the where conditions for the registrations query. |
|
| 1246 | - * |
|
| 1247 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1248 | - * @return array |
|
| 1249 | - */ |
|
| 1250 | - protected function _add_category_id_to_where_conditions(array $request) |
|
| 1251 | - { |
|
| 1252 | - $where = array(); |
|
| 1253 | - if (! empty($request['EVT_CAT']) && (int)$request['EVT_CAT'] !== -1) { |
|
| 1254 | - $where['Event.Term_Taxonomy.term_id'] = absint($request['EVT_CAT']); |
|
| 1255 | - } |
|
| 1256 | - return $where; |
|
| 1257 | - } |
|
| 1258 | - |
|
| 1259 | - |
|
| 1260 | - /** |
|
| 1261 | - * Adds the datetime ID if it exists in the request to the where conditions for the registrations query. |
|
| 1262 | - * |
|
| 1263 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1264 | - * @return array |
|
| 1265 | - */ |
|
| 1266 | - protected function _add_datetime_id_to_where_conditions(array $request) |
|
| 1267 | - { |
|
| 1268 | - $where = array(); |
|
| 1269 | - if (! empty($request['datetime_id'])) { |
|
| 1270 | - $where['Ticket.Datetime.DTT_ID'] = absint($request['datetime_id']); |
|
| 1271 | - } |
|
| 1272 | - if (! empty($request['DTT_ID'])) { |
|
| 1273 | - $where['Ticket.Datetime.DTT_ID'] = absint($request['DTT_ID']); |
|
| 1274 | - } |
|
| 1275 | - return $where; |
|
| 1276 | - } |
|
| 1277 | - |
|
| 1278 | - |
|
| 1279 | - /** |
|
| 1280 | - * Adds the correct registration status to the where conditions for the registrations query. |
|
| 1281 | - * |
|
| 1282 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1283 | - * @return array |
|
| 1284 | - */ |
|
| 1285 | - protected function _add_registration_status_to_where_conditions(array $request) |
|
| 1286 | - { |
|
| 1287 | - $where = array(); |
|
| 1288 | - $view = EEH_Array::is_set($request, 'status', ''); |
|
| 1289 | - $registration_status = ! empty($request['_reg_status']) |
|
| 1290 | - ? sanitize_text_field($request['_reg_status']) |
|
| 1291 | - : ''; |
|
| 1292 | - |
|
| 1293 | - /* |
|
| 33 | + /** |
|
| 34 | + * @var EE_Registration |
|
| 35 | + */ |
|
| 36 | + private $_registration; |
|
| 37 | + |
|
| 38 | + /** |
|
| 39 | + * @var EE_Event |
|
| 40 | + */ |
|
| 41 | + private $_reg_event; |
|
| 42 | + |
|
| 43 | + /** |
|
| 44 | + * @var EE_Session |
|
| 45 | + */ |
|
| 46 | + private $_session; |
|
| 47 | + |
|
| 48 | + private static $_reg_status; |
|
| 49 | + |
|
| 50 | + /** |
|
| 51 | + * Form for displaying the custom questions for this registration. |
|
| 52 | + * This gets used a few times throughout the request so its best to cache it |
|
| 53 | + * |
|
| 54 | + * @var EE_Registration_Custom_Questions_Form |
|
| 55 | + */ |
|
| 56 | + protected $_reg_custom_questions_form = null; |
|
| 57 | + |
|
| 58 | + |
|
| 59 | + /** |
|
| 60 | + * constructor |
|
| 61 | + * |
|
| 62 | + * @Constructor |
|
| 63 | + * @access public |
|
| 64 | + * @param bool $routing |
|
| 65 | + * @return Registrations_Admin_Page |
|
| 66 | + */ |
|
| 67 | + public function __construct($routing = true) |
|
| 68 | + { |
|
| 69 | + parent::__construct($routing); |
|
| 70 | + add_action('wp_loaded', array($this, 'wp_loaded')); |
|
| 71 | + } |
|
| 72 | + |
|
| 73 | + |
|
| 74 | + public function wp_loaded() |
|
| 75 | + { |
|
| 76 | + // when adding a new registration... |
|
| 77 | + if (isset($this->_req_data['action']) && $this->_req_data['action'] === 'new_registration') { |
|
| 78 | + EE_System::do_not_cache(); |
|
| 79 | + if (! isset($this->_req_data['processing_registration']) |
|
| 80 | + || absint($this->_req_data['processing_registration']) !== 1 |
|
| 81 | + ) { |
|
| 82 | + // and it's NOT the attendee information reg step |
|
| 83 | + // force cookie expiration by setting time to last week |
|
| 84 | + setcookie('ee_registration_added', 0, time() - WEEK_IN_SECONDS, '/'); |
|
| 85 | + // and update the global |
|
| 86 | + $_COOKIE['ee_registration_added'] = 0; |
|
| 87 | + } |
|
| 88 | + } |
|
| 89 | + } |
|
| 90 | + |
|
| 91 | + |
|
| 92 | + protected function _init_page_props() |
|
| 93 | + { |
|
| 94 | + $this->page_slug = REG_PG_SLUG; |
|
| 95 | + $this->_admin_base_url = REG_ADMIN_URL; |
|
| 96 | + $this->_admin_base_path = REG_ADMIN; |
|
| 97 | + $this->page_label = esc_html__('Registrations', 'event_espresso'); |
|
| 98 | + $this->_cpt_routes = array( |
|
| 99 | + 'add_new_attendee' => 'espresso_attendees', |
|
| 100 | + 'edit_attendee' => 'espresso_attendees', |
|
| 101 | + 'insert_attendee' => 'espresso_attendees', |
|
| 102 | + 'update_attendee' => 'espresso_attendees', |
|
| 103 | + ); |
|
| 104 | + $this->_cpt_model_names = array( |
|
| 105 | + 'add_new_attendee' => 'EEM_Attendee', |
|
| 106 | + 'edit_attendee' => 'EEM_Attendee', |
|
| 107 | + ); |
|
| 108 | + $this->_cpt_edit_routes = array( |
|
| 109 | + 'espresso_attendees' => 'edit_attendee', |
|
| 110 | + ); |
|
| 111 | + $this->_pagenow_map = array( |
|
| 112 | + 'add_new_attendee' => 'post-new.php', |
|
| 113 | + 'edit_attendee' => 'post.php', |
|
| 114 | + 'trash' => 'post.php', |
|
| 115 | + ); |
|
| 116 | + add_action('edit_form_after_title', array($this, 'after_title_form_fields'), 10); |
|
| 117 | + //add filters so that the comment urls don't take users to a confusing 404 page |
|
| 118 | + add_filter('get_comment_link', array($this, 'clear_comment_link'), 10, 3); |
|
| 119 | + } |
|
| 120 | + |
|
| 121 | + |
|
| 122 | + public function clear_comment_link($link, $comment, $args) |
|
| 123 | + { |
|
| 124 | + //gotta make sure this only happens on this route |
|
| 125 | + $post_type = get_post_type($comment->comment_post_ID); |
|
| 126 | + if ($post_type === 'espresso_attendees') { |
|
| 127 | + return '#commentsdiv'; |
|
| 128 | + } |
|
| 129 | + return $link; |
|
| 130 | + } |
|
| 131 | + |
|
| 132 | + |
|
| 133 | + protected function _ajax_hooks() |
|
| 134 | + { |
|
| 135 | + //todo: all hooks for registrations ajax goes in here |
|
| 136 | + add_action('wp_ajax_toggle_checkin_status', array($this, 'toggle_checkin_status')); |
|
| 137 | + } |
|
| 138 | + |
|
| 139 | + |
|
| 140 | + protected function _define_page_props() |
|
| 141 | + { |
|
| 142 | + $this->_admin_page_title = $this->page_label; |
|
| 143 | + $this->_labels = array( |
|
| 144 | + 'buttons' => array( |
|
| 145 | + 'add-registrant' => esc_html__('Add New Registration', 'event_espresso'), |
|
| 146 | + 'add-attendee' => esc_html__('Add Contact', 'event_espresso'), |
|
| 147 | + 'edit' => esc_html__('Edit Contact', 'event_espresso'), |
|
| 148 | + 'report' => esc_html__("Event Registrations CSV Report", "event_espresso"), |
|
| 149 | + 'report_all' => esc_html__('All Registrations CSV Report', 'event_espresso'), |
|
| 150 | + 'report_filtered' => esc_html__('Filtered CSV Report', 'event_espresso'), |
|
| 151 | + 'contact_list_report' => esc_html__('Contact List Report', 'event_espresso'), |
|
| 152 | + 'contact_list_export' => esc_html__("Export Data", "event_espresso"), |
|
| 153 | + ), |
|
| 154 | + 'publishbox' => array( |
|
| 155 | + 'add_new_attendee' => esc_html__("Add Contact Record", 'event_espresso'), |
|
| 156 | + 'edit_attendee' => esc_html__("Update Contact Record", 'event_espresso'), |
|
| 157 | + ), |
|
| 158 | + 'hide_add_button_on_cpt_route' => array( |
|
| 159 | + 'edit_attendee' => true, |
|
| 160 | + ), |
|
| 161 | + ); |
|
| 162 | + } |
|
| 163 | + |
|
| 164 | + |
|
| 165 | + /** |
|
| 166 | + * grab url requests and route them |
|
| 167 | + * |
|
| 168 | + * @access private |
|
| 169 | + * @return void |
|
| 170 | + */ |
|
| 171 | + public function _set_page_routes() |
|
| 172 | + { |
|
| 173 | + $this->_get_registration_status_array(); |
|
| 174 | + $reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID']) |
|
| 175 | + ? $this->_req_data['_REG_ID'] : 0; |
|
| 176 | + $reg_id = empty($reg_id) && ! empty($this->_req_data['reg_status_change_form']['REG_ID']) |
|
| 177 | + ? $this->_req_data['reg_status_change_form']['REG_ID'] |
|
| 178 | + : $reg_id; |
|
| 179 | + $att_id = ! empty($this->_req_data['ATT_ID']) && ! is_array($this->_req_data['ATT_ID']) |
|
| 180 | + ? $this->_req_data['ATT_ID'] : 0; |
|
| 181 | + $att_id = ! empty($this->_req_data['post']) && ! is_array($this->_req_data['post']) |
|
| 182 | + ? $this->_req_data['post'] |
|
| 183 | + : $att_id; |
|
| 184 | + $this->_page_routes = array( |
|
| 185 | + 'default' => array( |
|
| 186 | + 'func' => '_registrations_overview_list_table', |
|
| 187 | + 'capability' => 'ee_read_registrations', |
|
| 188 | + ), |
|
| 189 | + 'view_registration' => array( |
|
| 190 | + 'func' => '_registration_details', |
|
| 191 | + 'capability' => 'ee_read_registration', |
|
| 192 | + 'obj_id' => $reg_id, |
|
| 193 | + ), |
|
| 194 | + 'edit_registration' => array( |
|
| 195 | + 'func' => '_update_attendee_registration_form', |
|
| 196 | + 'noheader' => true, |
|
| 197 | + 'headers_sent_route' => 'view_registration', |
|
| 198 | + 'capability' => 'ee_edit_registration', |
|
| 199 | + 'obj_id' => $reg_id, |
|
| 200 | + '_REG_ID' => $reg_id, |
|
| 201 | + ), |
|
| 202 | + 'trash_registrations' => array( |
|
| 203 | + 'func' => '_trash_or_restore_registrations', |
|
| 204 | + 'args' => array('trash' => true), |
|
| 205 | + 'noheader' => true, |
|
| 206 | + 'capability' => 'ee_delete_registrations', |
|
| 207 | + ), |
|
| 208 | + 'restore_registrations' => array( |
|
| 209 | + 'func' => '_trash_or_restore_registrations', |
|
| 210 | + 'args' => array('trash' => false), |
|
| 211 | + 'noheader' => true, |
|
| 212 | + 'capability' => 'ee_delete_registrations', |
|
| 213 | + ), |
|
| 214 | + 'delete_registrations' => array( |
|
| 215 | + 'func' => '_delete_registrations', |
|
| 216 | + 'noheader' => true, |
|
| 217 | + 'capability' => 'ee_delete_registrations', |
|
| 218 | + ), |
|
| 219 | + 'new_registration' => array( |
|
| 220 | + 'func' => 'new_registration', |
|
| 221 | + 'capability' => 'ee_edit_registrations', |
|
| 222 | + ), |
|
| 223 | + 'process_reg_step' => array( |
|
| 224 | + 'func' => 'process_reg_step', |
|
| 225 | + 'noheader' => true, |
|
| 226 | + 'capability' => 'ee_edit_registrations', |
|
| 227 | + ), |
|
| 228 | + 'redirect_to_txn' => array( |
|
| 229 | + 'func' => 'redirect_to_txn', |
|
| 230 | + 'noheader' => true, |
|
| 231 | + 'capability' => 'ee_edit_registrations', |
|
| 232 | + ), |
|
| 233 | + 'change_reg_status' => array( |
|
| 234 | + 'func' => '_change_reg_status', |
|
| 235 | + 'noheader' => true, |
|
| 236 | + 'capability' => 'ee_edit_registration', |
|
| 237 | + 'obj_id' => $reg_id, |
|
| 238 | + ), |
|
| 239 | + 'approve_registration' => array( |
|
| 240 | + 'func' => 'approve_registration', |
|
| 241 | + 'noheader' => true, |
|
| 242 | + 'capability' => 'ee_edit_registration', |
|
| 243 | + 'obj_id' => $reg_id, |
|
| 244 | + ), |
|
| 245 | + 'approve_and_notify_registration' => array( |
|
| 246 | + 'func' => 'approve_registration', |
|
| 247 | + 'noheader' => true, |
|
| 248 | + 'args' => array(true), |
|
| 249 | + 'capability' => 'ee_edit_registration', |
|
| 250 | + 'obj_id' => $reg_id, |
|
| 251 | + ), |
|
| 252 | + 'approve_registrations' => array( |
|
| 253 | + 'func' => 'bulk_action_on_registrations', |
|
| 254 | + 'noheader' => true, |
|
| 255 | + 'capability' => 'ee_edit_registrations', |
|
| 256 | + 'args' => array('approve') |
|
| 257 | + ), |
|
| 258 | + 'approve_and_notify_registrations' => array( |
|
| 259 | + 'func' => 'bulk_action_on_registrations', |
|
| 260 | + 'noheader' => true, |
|
| 261 | + 'capability' => 'ee_edit_registrations', |
|
| 262 | + 'args' => array('approve', true) |
|
| 263 | + ), |
|
| 264 | + 'decline_registration' => array( |
|
| 265 | + 'func' => 'decline_registration', |
|
| 266 | + 'noheader' => true, |
|
| 267 | + 'capability' => 'ee_edit_registration', |
|
| 268 | + 'obj_id' => $reg_id, |
|
| 269 | + ), |
|
| 270 | + 'decline_and_notify_registration' => array( |
|
| 271 | + 'func' => 'decline_registration', |
|
| 272 | + 'noheader' => true, |
|
| 273 | + 'args' => array(true), |
|
| 274 | + 'capability' => 'ee_edit_registration', |
|
| 275 | + 'obj_id' => $reg_id, |
|
| 276 | + ), |
|
| 277 | + 'decline_registrations' => array( |
|
| 278 | + 'func' => 'bulk_action_on_registrations', |
|
| 279 | + 'noheader' => true, |
|
| 280 | + 'capability' => 'ee_edit_registrations', |
|
| 281 | + 'args' => array('decline') |
|
| 282 | + ), |
|
| 283 | + 'decline_and_notify_registrations' => array( |
|
| 284 | + 'func' => 'bulk_action_on_registrations', |
|
| 285 | + 'noheader' => true, |
|
| 286 | + 'capability' => 'ee_edit_registrations', |
|
| 287 | + 'args' => array('decline', true) |
|
| 288 | + ), |
|
| 289 | + 'pending_registration' => array( |
|
| 290 | + 'func' => 'pending_registration', |
|
| 291 | + 'noheader' => true, |
|
| 292 | + 'capability' => 'ee_edit_registration', |
|
| 293 | + 'obj_id' => $reg_id, |
|
| 294 | + ), |
|
| 295 | + 'pending_and_notify_registration' => array( |
|
| 296 | + 'func' => 'pending_registration', |
|
| 297 | + 'noheader' => true, |
|
| 298 | + 'args' => array(true), |
|
| 299 | + 'capability' => 'ee_edit_registration', |
|
| 300 | + 'obj_id' => $reg_id, |
|
| 301 | + ), |
|
| 302 | + 'pending_registrations' => array( |
|
| 303 | + 'func' => 'bulk_action_on_registrations', |
|
| 304 | + 'noheader' => true, |
|
| 305 | + 'capability' => 'ee_edit_registrations', |
|
| 306 | + 'args' => array('pending') |
|
| 307 | + ), |
|
| 308 | + 'pending_and_notify_registrations' => array( |
|
| 309 | + 'func' => 'bulk_action_on_registrations', |
|
| 310 | + 'noheader' => true, |
|
| 311 | + 'capability' => 'ee_edit_registrations', |
|
| 312 | + 'args' => array('pending', true) |
|
| 313 | + ), |
|
| 314 | + 'no_approve_registration' => array( |
|
| 315 | + 'func' => 'not_approve_registration', |
|
| 316 | + 'noheader' => true, |
|
| 317 | + 'capability' => 'ee_edit_registration', |
|
| 318 | + 'obj_id' => $reg_id, |
|
| 319 | + ), |
|
| 320 | + 'no_approve_and_notify_registration' => array( |
|
| 321 | + 'func' => 'not_approve_registration', |
|
| 322 | + 'noheader' => true, |
|
| 323 | + 'args' => array(true), |
|
| 324 | + 'capability' => 'ee_edit_registration', |
|
| 325 | + 'obj_id' => $reg_id, |
|
| 326 | + ), |
|
| 327 | + 'no_approve_registrations' => array( |
|
| 328 | + 'func' => 'bulk_action_on_registrations', |
|
| 329 | + 'noheader' => true, |
|
| 330 | + 'capability' => 'ee_edit_registrations', |
|
| 331 | + 'args' => array('not_approve') |
|
| 332 | + ), |
|
| 333 | + 'no_approve_and_notify_registrations' => array( |
|
| 334 | + 'func' => 'bulk_action_on_registrations', |
|
| 335 | + 'noheader' => true, |
|
| 336 | + 'capability' => 'ee_edit_registrations', |
|
| 337 | + 'args' => array('not_approve', true) |
|
| 338 | + ), |
|
| 339 | + 'cancel_registration' => array( |
|
| 340 | + 'func' => 'cancel_registration', |
|
| 341 | + 'noheader' => true, |
|
| 342 | + 'capability' => 'ee_edit_registration', |
|
| 343 | + 'obj_id' => $reg_id, |
|
| 344 | + ), |
|
| 345 | + 'cancel_and_notify_registration' => array( |
|
| 346 | + 'func' => 'cancel_registration', |
|
| 347 | + 'noheader' => true, |
|
| 348 | + 'args' => array(true), |
|
| 349 | + 'capability' => 'ee_edit_registration', |
|
| 350 | + 'obj_id' => $reg_id, |
|
| 351 | + ), |
|
| 352 | + 'cancel_registrations' => array( |
|
| 353 | + 'func' => 'bulk_action_on_registrations', |
|
| 354 | + 'noheader' => true, |
|
| 355 | + 'capability' => 'ee_edit_registrations', |
|
| 356 | + 'args' => array('cancel') |
|
| 357 | + ), |
|
| 358 | + 'cancel_and_notify_registrations' => array( |
|
| 359 | + 'func' => 'bulk_action_on_registrations', |
|
| 360 | + 'noheader' => true, |
|
| 361 | + 'capability' => 'ee_edit_registrations', |
|
| 362 | + 'args' => array('cancel', true) |
|
| 363 | + ), |
|
| 364 | + 'wait_list_registration' => array( |
|
| 365 | + 'func' => 'wait_list_registration', |
|
| 366 | + 'noheader' => true, |
|
| 367 | + 'capability' => 'ee_edit_registration', |
|
| 368 | + 'obj_id' => $reg_id, |
|
| 369 | + ), |
|
| 370 | + 'wait_list_and_notify_registration' => array( |
|
| 371 | + 'func' => 'wait_list_registration', |
|
| 372 | + 'noheader' => true, |
|
| 373 | + 'args' => array(true), |
|
| 374 | + 'capability' => 'ee_edit_registration', |
|
| 375 | + 'obj_id' => $reg_id, |
|
| 376 | + ), |
|
| 377 | + 'contact_list' => array( |
|
| 378 | + 'func' => '_attendee_contact_list_table', |
|
| 379 | + 'capability' => 'ee_read_contacts', |
|
| 380 | + ), |
|
| 381 | + 'add_new_attendee' => array( |
|
| 382 | + 'func' => '_create_new_cpt_item', |
|
| 383 | + 'args' => array( |
|
| 384 | + 'new_attendee' => true, |
|
| 385 | + 'capability' => 'ee_edit_contacts', |
|
| 386 | + ), |
|
| 387 | + ), |
|
| 388 | + 'edit_attendee' => array( |
|
| 389 | + 'func' => '_edit_cpt_item', |
|
| 390 | + 'capability' => 'ee_edit_contacts', |
|
| 391 | + 'obj_id' => $att_id, |
|
| 392 | + ), |
|
| 393 | + 'duplicate_attendee' => array( |
|
| 394 | + 'func' => '_duplicate_attendee', |
|
| 395 | + 'noheader' => true, |
|
| 396 | + 'capability' => 'ee_edit_contacts', |
|
| 397 | + 'obj_id' => $att_id, |
|
| 398 | + ), |
|
| 399 | + 'insert_attendee' => array( |
|
| 400 | + 'func' => '_insert_or_update_attendee', |
|
| 401 | + 'args' => array( |
|
| 402 | + 'new_attendee' => true, |
|
| 403 | + ), |
|
| 404 | + 'noheader' => true, |
|
| 405 | + 'capability' => 'ee_edit_contacts', |
|
| 406 | + ), |
|
| 407 | + 'update_attendee' => array( |
|
| 408 | + 'func' => '_insert_or_update_attendee', |
|
| 409 | + 'args' => array( |
|
| 410 | + 'new_attendee' => false, |
|
| 411 | + ), |
|
| 412 | + 'noheader' => true, |
|
| 413 | + 'capability' => 'ee_edit_contacts', |
|
| 414 | + 'obj_id' => $att_id, |
|
| 415 | + ), |
|
| 416 | + 'trash_attendees' => array( |
|
| 417 | + 'func' => '_trash_or_restore_attendees', |
|
| 418 | + 'args' => array( |
|
| 419 | + 'trash' => 'true' |
|
| 420 | + ), |
|
| 421 | + 'noheader' => true, |
|
| 422 | + 'capability' => 'ee_delete_contacts' |
|
| 423 | + ), |
|
| 424 | + 'trash_attendee' => array( |
|
| 425 | + 'func' => '_trash_or_restore_attendees', |
|
| 426 | + 'args' => array( |
|
| 427 | + 'trash' => true, |
|
| 428 | + ), |
|
| 429 | + 'noheader' => true, |
|
| 430 | + 'capability' => 'ee_delete_contacts', |
|
| 431 | + 'obj_id' => $att_id, |
|
| 432 | + ), |
|
| 433 | + 'restore_attendees' => array( |
|
| 434 | + 'func' => '_trash_or_restore_attendees', |
|
| 435 | + 'args' => array( |
|
| 436 | + 'trash' => false, |
|
| 437 | + ), |
|
| 438 | + 'noheader' => true, |
|
| 439 | + 'capability' => 'ee_delete_contacts', |
|
| 440 | + 'obj_id' => $att_id, |
|
| 441 | + ), |
|
| 442 | + 'resend_registration' => array( |
|
| 443 | + 'func' => '_resend_registration', |
|
| 444 | + 'noheader' => true, |
|
| 445 | + 'capability' => 'ee_send_message', |
|
| 446 | + ), |
|
| 447 | + 'registrations_report' => array( |
|
| 448 | + 'func' => '_registrations_report', |
|
| 449 | + 'noheader' => true, |
|
| 450 | + 'capability' => 'ee_read_registrations', |
|
| 451 | + ), |
|
| 452 | + 'contact_list_export' => array( |
|
| 453 | + 'func' => '_contact_list_export', |
|
| 454 | + 'noheader' => true, |
|
| 455 | + 'capability' => 'export', |
|
| 456 | + ), |
|
| 457 | + 'contact_list_report' => array( |
|
| 458 | + 'func' => '_contact_list_report', |
|
| 459 | + 'noheader' => true, |
|
| 460 | + 'capability' => 'ee_read_contacts', |
|
| 461 | + ), |
|
| 462 | + ); |
|
| 463 | + } |
|
| 464 | + |
|
| 465 | + |
|
| 466 | + protected function _set_page_config() |
|
| 467 | + { |
|
| 468 | + $this->_page_config = array( |
|
| 469 | + 'default' => array( |
|
| 470 | + 'nav' => array( |
|
| 471 | + 'label' => esc_html__('Overview', 'event_espresso'), |
|
| 472 | + 'order' => 5, |
|
| 473 | + ), |
|
| 474 | + 'help_tabs' => array( |
|
| 475 | + 'registrations_overview_help_tab' => array( |
|
| 476 | + 'title' => esc_html__('Registrations Overview', 'event_espresso'), |
|
| 477 | + 'filename' => 'registrations_overview', |
|
| 478 | + ), |
|
| 479 | + 'registrations_overview_table_column_headings_help_tab' => array( |
|
| 480 | + 'title' => esc_html__('Registrations Table Column Headings', 'event_espresso'), |
|
| 481 | + 'filename' => 'registrations_overview_table_column_headings', |
|
| 482 | + ), |
|
| 483 | + 'registrations_overview_filters_help_tab' => array( |
|
| 484 | + 'title' => esc_html__('Registration Filters', 'event_espresso'), |
|
| 485 | + 'filename' => 'registrations_overview_filters', |
|
| 486 | + ), |
|
| 487 | + 'registrations_overview_views_help_tab' => array( |
|
| 488 | + 'title' => esc_html__('Registration Views', 'event_espresso'), |
|
| 489 | + 'filename' => 'registrations_overview_views', |
|
| 490 | + ), |
|
| 491 | + 'registrations_regoverview_other_help_tab' => array( |
|
| 492 | + 'title' => esc_html__('Registrations Other', 'event_espresso'), |
|
| 493 | + 'filename' => 'registrations_overview_other', |
|
| 494 | + ), |
|
| 495 | + ), |
|
| 496 | + 'help_tour' => array('Registration_Overview_Help_Tour'), |
|
| 497 | + 'qtips' => array('Registration_List_Table_Tips'), |
|
| 498 | + 'list_table' => 'EE_Registrations_List_Table', |
|
| 499 | + 'require_nonce' => false, |
|
| 500 | + ), |
|
| 501 | + 'view_registration' => array( |
|
| 502 | + 'nav' => array( |
|
| 503 | + 'label' => esc_html__('REG Details', 'event_espresso'), |
|
| 504 | + 'order' => 15, |
|
| 505 | + 'url' => isset($this->_req_data['_REG_ID']) |
|
| 506 | + ? add_query_arg(array('_REG_ID' => $this->_req_data['_REG_ID']), $this->_current_page_view_url) |
|
| 507 | + : $this->_admin_base_url, |
|
| 508 | + 'persistent' => false, |
|
| 509 | + ), |
|
| 510 | + 'help_tabs' => array( |
|
| 511 | + 'registrations_details_help_tab' => array( |
|
| 512 | + 'title' => esc_html__('Registration Details', 'event_espresso'), |
|
| 513 | + 'filename' => 'registrations_details', |
|
| 514 | + ), |
|
| 515 | + 'registrations_details_table_help_tab' => array( |
|
| 516 | + 'title' => esc_html__('Registration Details Table', 'event_espresso'), |
|
| 517 | + 'filename' => 'registrations_details_table', |
|
| 518 | + ), |
|
| 519 | + 'registrations_details_form_answers_help_tab' => array( |
|
| 520 | + 'title' => esc_html__('Registration Form Answers', 'event_espresso'), |
|
| 521 | + 'filename' => 'registrations_details_form_answers', |
|
| 522 | + ), |
|
| 523 | + 'registrations_details_registrant_details_help_tab' => array( |
|
| 524 | + 'title' => esc_html__('Contact Details', 'event_espresso'), |
|
| 525 | + 'filename' => 'registrations_details_registrant_details', |
|
| 526 | + ), |
|
| 527 | + ), |
|
| 528 | + 'help_tour' => array('Registration_Details_Help_Tour'), |
|
| 529 | + 'metaboxes' => array_merge( |
|
| 530 | + $this->_default_espresso_metaboxes, |
|
| 531 | + array('_registration_details_metaboxes') |
|
| 532 | + ), |
|
| 533 | + 'require_nonce' => false, |
|
| 534 | + ), |
|
| 535 | + 'new_registration' => array( |
|
| 536 | + 'nav' => array( |
|
| 537 | + 'label' => esc_html__('Add New Registration', 'event_espresso'), |
|
| 538 | + 'url' => '#', |
|
| 539 | + 'order' => 15, |
|
| 540 | + 'persistent' => false, |
|
| 541 | + ), |
|
| 542 | + 'metaboxes' => $this->_default_espresso_metaboxes, |
|
| 543 | + 'labels' => array( |
|
| 544 | + 'publishbox' => esc_html__('Save Registration', 'event_espresso'), |
|
| 545 | + ), |
|
| 546 | + 'require_nonce' => false, |
|
| 547 | + ), |
|
| 548 | + 'add_new_attendee' => array( |
|
| 549 | + 'nav' => array( |
|
| 550 | + 'label' => esc_html__('Add Contact', 'event_espresso'), |
|
| 551 | + 'order' => 15, |
|
| 552 | + 'persistent' => false, |
|
| 553 | + ), |
|
| 554 | + 'metaboxes' => array_merge( |
|
| 555 | + $this->_default_espresso_metaboxes, |
|
| 556 | + array('_publish_post_box', 'attendee_editor_metaboxes') |
|
| 557 | + ), |
|
| 558 | + 'require_nonce' => false, |
|
| 559 | + ), |
|
| 560 | + 'edit_attendee' => array( |
|
| 561 | + 'nav' => array( |
|
| 562 | + 'label' => esc_html__('Edit Contact', 'event_espresso'), |
|
| 563 | + 'order' => 15, |
|
| 564 | + 'persistent' => false, |
|
| 565 | + 'url' => isset($this->_req_data['ATT_ID']) |
|
| 566 | + ? add_query_arg(array('ATT_ID' => $this->_req_data['ATT_ID']), $this->_current_page_view_url) |
|
| 567 | + : $this->_admin_base_url, |
|
| 568 | + ), |
|
| 569 | + 'metaboxes' => array('attendee_editor_metaboxes'), |
|
| 570 | + 'require_nonce' => false, |
|
| 571 | + ), |
|
| 572 | + 'contact_list' => array( |
|
| 573 | + 'nav' => array( |
|
| 574 | + 'label' => esc_html__('Contact List', 'event_espresso'), |
|
| 575 | + 'order' => 20, |
|
| 576 | + ), |
|
| 577 | + 'list_table' => 'EE_Attendee_Contact_List_Table', |
|
| 578 | + 'help_tabs' => array( |
|
| 579 | + 'registrations_contact_list_help_tab' => array( |
|
| 580 | + 'title' => esc_html__('Registrations Contact List', 'event_espresso'), |
|
| 581 | + 'filename' => 'registrations_contact_list', |
|
| 582 | + ), |
|
| 583 | + 'registrations_contact-list_table_column_headings_help_tab' => array( |
|
| 584 | + 'title' => esc_html__('Contact List Table Column Headings', 'event_espresso'), |
|
| 585 | + 'filename' => 'registrations_contact_list_table_column_headings', |
|
| 586 | + ), |
|
| 587 | + 'registrations_contact_list_views_help_tab' => array( |
|
| 588 | + 'title' => esc_html__('Contact List Views', 'event_espresso'), |
|
| 589 | + 'filename' => 'registrations_contact_list_views', |
|
| 590 | + ), |
|
| 591 | + 'registrations_contact_list_other_help_tab' => array( |
|
| 592 | + 'title' => esc_html__('Contact List Other', 'event_espresso'), |
|
| 593 | + 'filename' => 'registrations_contact_list_other', |
|
| 594 | + ), |
|
| 595 | + ), |
|
| 596 | + 'help_tour' => array('Contact_List_Help_Tour'), |
|
| 597 | + 'metaboxes' => array(), |
|
| 598 | + 'require_nonce' => false, |
|
| 599 | + ), |
|
| 600 | + //override default cpt routes |
|
| 601 | + 'create_new' => '', |
|
| 602 | + 'edit' => '', |
|
| 603 | + ); |
|
| 604 | + } |
|
| 605 | + |
|
| 606 | + |
|
| 607 | + /** |
|
| 608 | + * The below methods aren't used by this class currently |
|
| 609 | + */ |
|
| 610 | + protected function _add_screen_options() |
|
| 611 | + { |
|
| 612 | + } |
|
| 613 | + |
|
| 614 | + |
|
| 615 | + protected function _add_feature_pointers() |
|
| 616 | + { |
|
| 617 | + } |
|
| 618 | + |
|
| 619 | + |
|
| 620 | + public function admin_init() |
|
| 621 | + { |
|
| 622 | + EE_Registry::$i18n_js_strings['update_att_qstns'] = esc_html__( |
|
| 623 | + 'click "Update Registration Questions" to save your changes', |
|
| 624 | + 'event_espresso' |
|
| 625 | + ); |
|
| 626 | + } |
|
| 627 | + |
|
| 628 | + |
|
| 629 | + public function admin_notices() |
|
| 630 | + { |
|
| 631 | + } |
|
| 632 | + |
|
| 633 | + |
|
| 634 | + public function admin_footer_scripts() |
|
| 635 | + { |
|
| 636 | + } |
|
| 637 | + |
|
| 638 | + |
|
| 639 | + /** |
|
| 640 | + * get list of registration statuses |
|
| 641 | + * |
|
| 642 | + * @access private |
|
| 643 | + * @return void |
|
| 644 | + * @throws EE_Error |
|
| 645 | + */ |
|
| 646 | + private function _get_registration_status_array() |
|
| 647 | + { |
|
| 648 | + self::$_reg_status = EEM_Registration::reg_status_array(array(), true); |
|
| 649 | + } |
|
| 650 | + |
|
| 651 | + |
|
| 652 | + protected function _add_screen_options_default() |
|
| 653 | + { |
|
| 654 | + $this->_per_page_screen_option(); |
|
| 655 | + } |
|
| 656 | + |
|
| 657 | + |
|
| 658 | + protected function _add_screen_options_contact_list() |
|
| 659 | + { |
|
| 660 | + $page_title = $this->_admin_page_title; |
|
| 661 | + $this->_admin_page_title = esc_html__("Contacts", 'event_espresso'); |
|
| 662 | + $this->_per_page_screen_option(); |
|
| 663 | + $this->_admin_page_title = $page_title; |
|
| 664 | + } |
|
| 665 | + |
|
| 666 | + |
|
| 667 | + public function load_scripts_styles() |
|
| 668 | + { |
|
| 669 | + //style |
|
| 670 | + wp_register_style( |
|
| 671 | + 'espresso_reg', |
|
| 672 | + REG_ASSETS_URL . 'espresso_registrations_admin.css', |
|
| 673 | + array('ee-admin-css'), |
|
| 674 | + EVENT_ESPRESSO_VERSION |
|
| 675 | + ); |
|
| 676 | + wp_enqueue_style('espresso_reg'); |
|
| 677 | + //script |
|
| 678 | + wp_register_script( |
|
| 679 | + 'espresso_reg', |
|
| 680 | + REG_ASSETS_URL . 'espresso_registrations_admin.js', |
|
| 681 | + array('jquery-ui-datepicker', 'jquery-ui-draggable', 'ee_admin_js'), |
|
| 682 | + EVENT_ESPRESSO_VERSION, |
|
| 683 | + true |
|
| 684 | + ); |
|
| 685 | + wp_enqueue_script('espresso_reg'); |
|
| 686 | + } |
|
| 687 | + |
|
| 688 | + |
|
| 689 | + public function load_scripts_styles_edit_attendee() |
|
| 690 | + { |
|
| 691 | + //stuff to only show up on our attendee edit details page. |
|
| 692 | + $attendee_details_translations = array( |
|
| 693 | + 'att_publish_text' => sprintf( |
|
| 694 | + esc_html__('Created on: <b>%1$s</b>', 'event_espresso'), |
|
| 695 | + $this->_cpt_model_obj->get_datetime('ATT_created') |
|
| 696 | + ), |
|
| 697 | + ); |
|
| 698 | + wp_localize_script('espresso_reg', 'ATTENDEE_DETAILS', $attendee_details_translations); |
|
| 699 | + wp_enqueue_script('jquery-validate'); |
|
| 700 | + } |
|
| 701 | + |
|
| 702 | + |
|
| 703 | + public function load_scripts_styles_view_registration() |
|
| 704 | + { |
|
| 705 | + //styles |
|
| 706 | + wp_enqueue_style('espresso-ui-theme'); |
|
| 707 | + //scripts |
|
| 708 | + $this->_get_reg_custom_questions_form($this->_registration->ID()); |
|
| 709 | + $this->_reg_custom_questions_form->wp_enqueue_scripts(true); |
|
| 710 | + } |
|
| 711 | + |
|
| 712 | + |
|
| 713 | + public function load_scripts_styles_contact_list() |
|
| 714 | + { |
|
| 715 | + wp_deregister_style('espresso_reg'); |
|
| 716 | + wp_register_style( |
|
| 717 | + 'espresso_att', |
|
| 718 | + REG_ASSETS_URL . 'espresso_attendees_admin.css', |
|
| 719 | + array('ee-admin-css'), |
|
| 720 | + EVENT_ESPRESSO_VERSION |
|
| 721 | + ); |
|
| 722 | + wp_enqueue_style('espresso_att'); |
|
| 723 | + } |
|
| 724 | + |
|
| 725 | + |
|
| 726 | + public function load_scripts_styles_new_registration() |
|
| 727 | + { |
|
| 728 | + wp_register_script( |
|
| 729 | + 'ee-spco-for-admin', |
|
| 730 | + REG_ASSETS_URL . 'spco_for_admin.js', |
|
| 731 | + array('underscore', 'jquery'), |
|
| 732 | + EVENT_ESPRESSO_VERSION, |
|
| 733 | + true |
|
| 734 | + ); |
|
| 735 | + wp_enqueue_script('ee-spco-for-admin'); |
|
| 736 | + add_filter('FHEE__EED_Ticket_Selector__load_tckt_slctr_assets', '__return_true'); |
|
| 737 | + EE_Form_Section_Proper::wp_enqueue_scripts(); |
|
| 738 | + EED_Ticket_Selector::load_tckt_slctr_assets(); |
|
| 739 | + EE_Datepicker_Input::enqueue_styles_and_scripts(); |
|
| 740 | + } |
|
| 741 | + |
|
| 742 | + |
|
| 743 | + public function AHEE__EE_Admin_Page__route_admin_request_resend_registration() |
|
| 744 | + { |
|
| 745 | + add_filter('FHEE_load_EE_messages', '__return_true'); |
|
| 746 | + } |
|
| 747 | + |
|
| 748 | + |
|
| 749 | + public function AHEE__EE_Admin_Page__route_admin_request_approve_registration() |
|
| 750 | + { |
|
| 751 | + add_filter('FHEE_load_EE_messages', '__return_true'); |
|
| 752 | + } |
|
| 753 | + |
|
| 754 | + |
|
| 755 | + protected function _set_list_table_views_default() |
|
| 756 | + { |
|
| 757 | + //for notification related bulk actions we need to make sure only active messengers have an option. |
|
| 758 | + EED_Messages::set_autoloaders(); |
|
| 759 | + /** @type EE_Message_Resource_Manager $message_resource_manager */ |
|
| 760 | + $message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager'); |
|
| 761 | + $active_mts = $message_resource_manager->list_of_active_message_types(); |
|
| 762 | + //key= bulk_action_slug, value= message type. |
|
| 763 | + $match_array = array( |
|
| 764 | + 'approve_registrations' => 'registration', |
|
| 765 | + 'decline_registrations' => 'declined_registration', |
|
| 766 | + 'pending_registrations' => 'pending_approval', |
|
| 767 | + 'no_approve_registrations' => 'not_approved_registration', |
|
| 768 | + 'cancel_registrations' => 'cancelled_registration', |
|
| 769 | + ); |
|
| 770 | + $can_send = EE_Registry::instance()->CAP->current_user_can( |
|
| 771 | + 'ee_send_message', |
|
| 772 | + 'batch_send_messages' |
|
| 773 | + ); |
|
| 774 | + /** setup reg status bulk actions **/ |
|
| 775 | + $def_reg_status_actions['approve_registrations'] = esc_html__('Approve Registrations', 'event_espresso'); |
|
| 776 | + if ($can_send && in_array($match_array['approve_registrations'], $active_mts, true)) { |
|
| 777 | + $def_reg_status_actions['approve_and_notify_registrations'] = esc_html__( |
|
| 778 | + 'Approve and Notify Registrations', |
|
| 779 | + 'event_espresso' |
|
| 780 | + ); |
|
| 781 | + } |
|
| 782 | + $def_reg_status_actions['decline_registrations'] = esc_html__('Decline Registrations', 'event_espresso'); |
|
| 783 | + if ($can_send && in_array($match_array['decline_registrations'], $active_mts, true)) { |
|
| 784 | + $def_reg_status_actions['decline_and_notify_registrations'] = esc_html__( |
|
| 785 | + 'Decline and Notify Registrations', |
|
| 786 | + 'event_espresso' |
|
| 787 | + ); |
|
| 788 | + } |
|
| 789 | + $def_reg_status_actions['pending_registrations'] = esc_html__( |
|
| 790 | + 'Set Registrations to Pending Payment', |
|
| 791 | + 'event_espresso' |
|
| 792 | + ); |
|
| 793 | + if ($can_send && in_array($match_array['pending_registrations'], $active_mts, true)) { |
|
| 794 | + $def_reg_status_actions['pending_and_notify_registrations'] = esc_html__( |
|
| 795 | + 'Set Registrations to Pending Payment and Notify', |
|
| 796 | + 'event_espresso' |
|
| 797 | + ); |
|
| 798 | + } |
|
| 799 | + $def_reg_status_actions['no_approve_registrations'] = esc_html__( |
|
| 800 | + 'Set Registrations to Not Approved', |
|
| 801 | + 'event_espresso' |
|
| 802 | + ); |
|
| 803 | + if ($can_send && in_array($match_array['no_approve_registrations'], $active_mts, true)) { |
|
| 804 | + $def_reg_status_actions['no_approve_and_notify_registrations'] = esc_html__( |
|
| 805 | + 'Set Registrations to Not Approved and Notify', |
|
| 806 | + 'event_espresso' |
|
| 807 | + ); |
|
| 808 | + } |
|
| 809 | + $def_reg_status_actions['cancel_registrations'] = esc_html__('Cancel Registrations', 'event_espresso'); |
|
| 810 | + if ($can_send && in_array($match_array['cancel_registrations'], $active_mts, true)) { |
|
| 811 | + $def_reg_status_actions['cancel_and_notify_registrations'] = esc_html__( |
|
| 812 | + 'Cancel Registrations and Notify', |
|
| 813 | + 'event_espresso' |
|
| 814 | + ); |
|
| 815 | + } |
|
| 816 | + $def_reg_status_actions = apply_filters( |
|
| 817 | + 'FHEE__Registrations_Admin_Page___set_list_table_views_default__def_reg_status_actions_array', |
|
| 818 | + $def_reg_status_actions, |
|
| 819 | + $active_mts, |
|
| 820 | + $can_send |
|
| 821 | + ); |
|
| 822 | + |
|
| 823 | + $this->_views = array( |
|
| 824 | + 'all' => array( |
|
| 825 | + 'slug' => 'all', |
|
| 826 | + 'label' => esc_html__('View All Registrations', 'event_espresso'), |
|
| 827 | + 'count' => 0, |
|
| 828 | + 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
| 829 | + 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
| 830 | + )), |
|
| 831 | + ), |
|
| 832 | + 'month' => array( |
|
| 833 | + 'slug' => 'month', |
|
| 834 | + 'label' => esc_html__('This Month', 'event_espresso'), |
|
| 835 | + 'count' => 0, |
|
| 836 | + 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
| 837 | + 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
| 838 | + )), |
|
| 839 | + ), |
|
| 840 | + 'today' => array( |
|
| 841 | + 'slug' => 'today', |
|
| 842 | + 'label' => sprintf( |
|
| 843 | + esc_html__('Today - %s', 'event_espresso'), |
|
| 844 | + date('M d, Y', current_time('timestamp')) |
|
| 845 | + ), |
|
| 846 | + 'count' => 0, |
|
| 847 | + 'bulk_action' => array_merge($def_reg_status_actions, array( |
|
| 848 | + 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
| 849 | + )), |
|
| 850 | + ), |
|
| 851 | + ); |
|
| 852 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 853 | + 'ee_delete_registrations', |
|
| 854 | + 'espresso_registrations_delete_registration' |
|
| 855 | + )) { |
|
| 856 | + $this->_views['incomplete'] = array( |
|
| 857 | + 'slug' => 'incomplete', |
|
| 858 | + 'label' => esc_html__('Incomplete', 'event_espresso'), |
|
| 859 | + 'count' => 0, |
|
| 860 | + 'bulk_action' => array( |
|
| 861 | + 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
|
| 862 | + ), |
|
| 863 | + ); |
|
| 864 | + $this->_views['trash'] = array( |
|
| 865 | + 'slug' => 'trash', |
|
| 866 | + 'label' => esc_html__('Trash', 'event_espresso'), |
|
| 867 | + 'count' => 0, |
|
| 868 | + 'bulk_action' => array( |
|
| 869 | + 'restore_registrations' => esc_html__('Restore Registrations', 'event_espresso'), |
|
| 870 | + 'delete_registrations' => esc_html__('Delete Registrations Permanently', 'event_espresso'), |
|
| 871 | + ), |
|
| 872 | + ); |
|
| 873 | + } |
|
| 874 | + } |
|
| 875 | + |
|
| 876 | + |
|
| 877 | + protected function _set_list_table_views_contact_list() |
|
| 878 | + { |
|
| 879 | + $this->_views = array( |
|
| 880 | + 'in_use' => array( |
|
| 881 | + 'slug' => 'in_use', |
|
| 882 | + 'label' => esc_html__('In Use', 'event_espresso'), |
|
| 883 | + 'count' => 0, |
|
| 884 | + 'bulk_action' => array( |
|
| 885 | + 'trash_attendees' => esc_html__('Move to Trash', 'event_espresso'), |
|
| 886 | + ), |
|
| 887 | + ), |
|
| 888 | + ); |
|
| 889 | + if (EE_Registry::instance()->CAP->current_user_can('ee_delete_contacts', |
|
| 890 | + 'espresso_registrations_trash_attendees') |
|
| 891 | + ) { |
|
| 892 | + $this->_views['trash'] = array( |
|
| 893 | + 'slug' => 'trash', |
|
| 894 | + 'label' => esc_html__('Trash', 'event_espresso'), |
|
| 895 | + 'count' => 0, |
|
| 896 | + 'bulk_action' => array( |
|
| 897 | + 'restore_attendees' => esc_html__('Restore from Trash', 'event_espresso'), |
|
| 898 | + ), |
|
| 899 | + ); |
|
| 900 | + } |
|
| 901 | + } |
|
| 902 | + |
|
| 903 | + |
|
| 904 | + protected function _registration_legend_items() |
|
| 905 | + { |
|
| 906 | + $fc_items = array( |
|
| 907 | + 'star-icon' => array( |
|
| 908 | + 'class' => 'dashicons dashicons-star-filled lt-blue-icon ee-icon-size-8', |
|
| 909 | + 'desc' => esc_html__('This is the Primary Registrant', 'event_espresso'), |
|
| 910 | + ), |
|
| 911 | + 'view_details' => array( |
|
| 912 | + 'class' => 'dashicons dashicons-clipboard', |
|
| 913 | + 'desc' => esc_html__('View Registration Details', 'event_espresso'), |
|
| 914 | + ), |
|
| 915 | + 'edit_attendee' => array( |
|
| 916 | + 'class' => 'ee-icon ee-icon-user-edit ee-icon-size-16', |
|
| 917 | + 'desc' => esc_html__('Edit Contact Details', 'event_espresso'), |
|
| 918 | + ), |
|
| 919 | + 'view_transaction' => array( |
|
| 920 | + 'class' => 'dashicons dashicons-cart', |
|
| 921 | + 'desc' => esc_html__('View Transaction Details', 'event_espresso'), |
|
| 922 | + ), |
|
| 923 | + 'view_invoice' => array( |
|
| 924 | + 'class' => 'dashicons dashicons-media-spreadsheet', |
|
| 925 | + 'desc' => esc_html__('View Transaction Invoice', 'event_espresso'), |
|
| 926 | + ), |
|
| 927 | + ); |
|
| 928 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 929 | + 'ee_send_message', |
|
| 930 | + 'espresso_registrations_resend_registration' |
|
| 931 | + )) { |
|
| 932 | + $fc_items['resend_registration'] = array( |
|
| 933 | + 'class' => 'dashicons dashicons-email-alt', |
|
| 934 | + 'desc' => esc_html__('Resend Registration Details', 'event_espresso'), |
|
| 935 | + ); |
|
| 936 | + } else { |
|
| 937 | + $fc_items['blank'] = array('class' => 'blank', 'desc' => ''); |
|
| 938 | + } |
|
| 939 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 940 | + 'ee_read_global_messages', |
|
| 941 | + 'view_filtered_messages' |
|
| 942 | + )) { |
|
| 943 | + $related_for_icon = EEH_MSG_Template::get_message_action_icon('see_notifications_for'); |
|
| 944 | + if (isset($related_for_icon['css_class']) && isset($related_for_icon['label'])) { |
|
| 945 | + $fc_items['view_related_messages'] = array( |
|
| 946 | + 'class' => $related_for_icon['css_class'], |
|
| 947 | + 'desc' => $related_for_icon['label'], |
|
| 948 | + ); |
|
| 949 | + } |
|
| 950 | + } |
|
| 951 | + $sc_items = array( |
|
| 952 | + 'approved_status' => array( |
|
| 953 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved, |
|
| 954 | + 'desc' => EEH_Template::pretty_status( |
|
| 955 | + EEM_Registration::status_id_approved, |
|
| 956 | + false, |
|
| 957 | + 'sentence' |
|
| 958 | + ), |
|
| 959 | + ), |
|
| 960 | + 'pending_status' => array( |
|
| 961 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment, |
|
| 962 | + 'desc' => EEH_Template::pretty_status( |
|
| 963 | + EEM_Registration::status_id_pending_payment, |
|
| 964 | + false, |
|
| 965 | + 'sentence' |
|
| 966 | + ), |
|
| 967 | + ), |
|
| 968 | + 'wait_list' => array( |
|
| 969 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list, |
|
| 970 | + 'desc' => EEH_Template::pretty_status( |
|
| 971 | + EEM_Registration::status_id_wait_list, |
|
| 972 | + false, |
|
| 973 | + 'sentence' |
|
| 974 | + ), |
|
| 975 | + ), |
|
| 976 | + 'incomplete_status' => array( |
|
| 977 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_incomplete, |
|
| 978 | + 'desc' => EEH_Template::pretty_status( |
|
| 979 | + EEM_Registration::status_id_incomplete, |
|
| 980 | + false, |
|
| 981 | + 'sentence' |
|
| 982 | + ), |
|
| 983 | + ), |
|
| 984 | + 'not_approved' => array( |
|
| 985 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved, |
|
| 986 | + 'desc' => EEH_Template::pretty_status( |
|
| 987 | + EEM_Registration::status_id_not_approved, |
|
| 988 | + false, |
|
| 989 | + 'sentence' |
|
| 990 | + ), |
|
| 991 | + ), |
|
| 992 | + 'declined_status' => array( |
|
| 993 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined, |
|
| 994 | + 'desc' => EEH_Template::pretty_status( |
|
| 995 | + EEM_Registration::status_id_declined, |
|
| 996 | + false, |
|
| 997 | + 'sentence' |
|
| 998 | + ), |
|
| 999 | + ), |
|
| 1000 | + 'cancelled_status' => array( |
|
| 1001 | + 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled, |
|
| 1002 | + 'desc' => EEH_Template::pretty_status( |
|
| 1003 | + EEM_Registration::status_id_cancelled, |
|
| 1004 | + false, |
|
| 1005 | + 'sentence' |
|
| 1006 | + ), |
|
| 1007 | + ), |
|
| 1008 | + ); |
|
| 1009 | + return array_merge($fc_items, $sc_items); |
|
| 1010 | + } |
|
| 1011 | + |
|
| 1012 | + |
|
| 1013 | + |
|
| 1014 | + /*************************************** REGISTRATION OVERVIEW **************************************/ |
|
| 1015 | + /** |
|
| 1016 | + * @throws \EE_Error |
|
| 1017 | + */ |
|
| 1018 | + protected function _registrations_overview_list_table() |
|
| 1019 | + { |
|
| 1020 | + $this->_template_args['admin_page_header'] = ''; |
|
| 1021 | + $EVT_ID = ! empty($this->_req_data['event_id']) |
|
| 1022 | + ? absint($this->_req_data['event_id']) |
|
| 1023 | + : 0; |
|
| 1024 | + $ATT_ID = !empty($this->_req_data['ATT_ID']) |
|
| 1025 | + ? absint($this->_req_data['ATT_ID']) |
|
| 1026 | + : 0; |
|
| 1027 | + if ($ATT_ID) { |
|
| 1028 | + $attendee = EEM_Attendee::instance()->get_one_by_ID($ATT_ID); |
|
| 1029 | + if ($attendee instanceof EE_Attendee) { |
|
| 1030 | + $this->_template_args['admin_page_header'] = sprintf( |
|
| 1031 | + esc_html__( |
|
| 1032 | + '%1$s Viewing registrations for %2$s%3$s', |
|
| 1033 | + 'event_espresso' |
|
| 1034 | + ), |
|
| 1035 | + '<h3 style="line-height:1.5em;">', |
|
| 1036 | + '<a href="' . EE_Admin_Page::add_query_args_and_nonce( |
|
| 1037 | + array( |
|
| 1038 | + 'action' => 'edit_attendee', |
|
| 1039 | + 'post' => $ATT_ID |
|
| 1040 | + ), |
|
| 1041 | + REG_ADMIN_URL |
|
| 1042 | + ) . '">' . $attendee->full_name() . '</a>', |
|
| 1043 | + '</h3>' |
|
| 1044 | + ); |
|
| 1045 | + } |
|
| 1046 | + } |
|
| 1047 | + if ($EVT_ID) { |
|
| 1048 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 1049 | + 'ee_edit_registrations', |
|
| 1050 | + 'espresso_registrations_new_registration', |
|
| 1051 | + $EVT_ID |
|
| 1052 | + )) { |
|
| 1053 | + $this->_admin_page_title .= ' ' . $this->get_action_link_or_button( |
|
| 1054 | + 'new_registration', |
|
| 1055 | + 'add-registrant', |
|
| 1056 | + array('event_id' => $EVT_ID), |
|
| 1057 | + 'add-new-h2' |
|
| 1058 | + ); |
|
| 1059 | + } |
|
| 1060 | + $event = EEM_Event::instance()->get_one_by_ID($EVT_ID); |
|
| 1061 | + if ($event instanceof EE_Event) { |
|
| 1062 | + $this->_template_args['admin_page_header'] = sprintf( |
|
| 1063 | + esc_html__( |
|
| 1064 | + '%s Viewing registrations for the event: %s%s', |
|
| 1065 | + 'event_espresso' |
|
| 1066 | + ), |
|
| 1067 | + '<h3 style="line-height:1.5em;">', |
|
| 1068 | + '<br /><a href="' |
|
| 1069 | + . EE_Admin_Page::add_query_args_and_nonce( |
|
| 1070 | + array( |
|
| 1071 | + 'action' => 'edit', |
|
| 1072 | + 'post' => $event->ID(), |
|
| 1073 | + ), |
|
| 1074 | + EVENTS_ADMIN_URL |
|
| 1075 | + ) |
|
| 1076 | + . '"> ' |
|
| 1077 | + . $event->get('EVT_name') |
|
| 1078 | + . ' </a> ', |
|
| 1079 | + '</h3>' |
|
| 1080 | + ); |
|
| 1081 | + } |
|
| 1082 | + $DTT_ID = ! empty($this->_req_data['datetime_id']) ? absint($this->_req_data['datetime_id']) : 0; |
|
| 1083 | + $datetime = EEM_Datetime::instance()->get_one_by_ID($DTT_ID); |
|
| 1084 | + if ($datetime instanceof EE_Datetime && $this->_template_args['admin_page_header'] !== '') { |
|
| 1085 | + $this->_template_args['admin_page_header'] = substr( |
|
| 1086 | + $this->_template_args['admin_page_header'], |
|
| 1087 | + 0, |
|
| 1088 | + -5 |
|
| 1089 | + ); |
|
| 1090 | + $this->_template_args['admin_page_header'] .= ' <span class="drk-grey-text">'; |
|
| 1091 | + $this->_template_args['admin_page_header'] .= '<span class="dashicons dashicons-calendar"></span>'; |
|
| 1092 | + $this->_template_args['admin_page_header'] .= $datetime->name(); |
|
| 1093 | + $this->_template_args['admin_page_header'] .= ' ( ' . $datetime->start_date() . ' )'; |
|
| 1094 | + $this->_template_args['admin_page_header'] .= '</span></h3>'; |
|
| 1095 | + } |
|
| 1096 | + } |
|
| 1097 | + $this->_template_args['after_list_table'] = $this->_display_legend($this->_registration_legend_items()); |
|
| 1098 | + $this->display_admin_list_table_page_with_no_sidebar(); |
|
| 1099 | + } |
|
| 1100 | + |
|
| 1101 | + |
|
| 1102 | + /** |
|
| 1103 | + * This sets the _registration property for the registration details screen |
|
| 1104 | + * |
|
| 1105 | + * @access private |
|
| 1106 | + * @return bool |
|
| 1107 | + * @throws EE_Error |
|
| 1108 | + * @throws InvalidArgumentException |
|
| 1109 | + * @throws InvalidDataTypeException |
|
| 1110 | + * @throws InvalidInterfaceException |
|
| 1111 | + */ |
|
| 1112 | + private function _set_registration_object() |
|
| 1113 | + { |
|
| 1114 | + //get out if we've already set the object |
|
| 1115 | + if ($this->_registration instanceof EE_Registration) { |
|
| 1116 | + return true; |
|
| 1117 | + } |
|
| 1118 | + $REG = EEM_Registration::instance(); |
|
| 1119 | + $REG_ID = ( ! empty($this->_req_data['_REG_ID'])) ? absint($this->_req_data['_REG_ID']) : false; |
|
| 1120 | + if ($this->_registration = $REG->get_one_by_ID($REG_ID)) { |
|
| 1121 | + return true; |
|
| 1122 | + } else { |
|
| 1123 | + $error_msg = sprintf( |
|
| 1124 | + esc_html__( |
|
| 1125 | + 'An error occurred and the details for Registration ID #%s could not be retrieved.', |
|
| 1126 | + 'event_espresso' |
|
| 1127 | + ), |
|
| 1128 | + $REG_ID |
|
| 1129 | + ); |
|
| 1130 | + EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__); |
|
| 1131 | + $this->_registration = null; |
|
| 1132 | + return false; |
|
| 1133 | + } |
|
| 1134 | + } |
|
| 1135 | + |
|
| 1136 | + |
|
| 1137 | + /** |
|
| 1138 | + * Used to retrieve registrations for the list table. |
|
| 1139 | + * |
|
| 1140 | + * @param int $per_page |
|
| 1141 | + * @param bool $count |
|
| 1142 | + * @param bool $this_month |
|
| 1143 | + * @param bool $today |
|
| 1144 | + * @return EE_Registration[]|int |
|
| 1145 | + * @throws EE_Error |
|
| 1146 | + * @throws InvalidArgumentException |
|
| 1147 | + * @throws InvalidDataTypeException |
|
| 1148 | + * @throws InvalidInterfaceException |
|
| 1149 | + */ |
|
| 1150 | + public function get_registrations( |
|
| 1151 | + $per_page = 10, |
|
| 1152 | + $count = false, |
|
| 1153 | + $this_month = false, |
|
| 1154 | + $today = false |
|
| 1155 | + ) { |
|
| 1156 | + if ($this_month) { |
|
| 1157 | + $this->_req_data['status'] = 'month'; |
|
| 1158 | + } |
|
| 1159 | + if ($today) { |
|
| 1160 | + $this->_req_data['status'] = 'today'; |
|
| 1161 | + } |
|
| 1162 | + $query_params = $this->_get_registration_query_parameters($this->_req_data, $per_page, $count); |
|
| 1163 | + /** |
|
| 1164 | + * Override the default groupby added by EEM_Base so that sorts with multiple order bys work as expected |
|
| 1165 | + * @link https://events.codebasehq.com/projects/event-espresso/tickets/10093 |
|
| 1166 | + * @see EEM_Base::get_all() |
|
| 1167 | + */ |
|
| 1168 | + $query_params['group_by'] = ''; |
|
| 1169 | + |
|
| 1170 | + return $count |
|
| 1171 | + ? EEM_Registration::instance()->count($query_params) |
|
| 1172 | + /** @type EE_Registration[] */ |
|
| 1173 | + : EEM_Registration::instance()->get_all($query_params); |
|
| 1174 | + } |
|
| 1175 | + |
|
| 1176 | + |
|
| 1177 | + /** |
|
| 1178 | + * Retrieves the query parameters to be used by the Registration model for getting registrations. |
|
| 1179 | + * Note: this listens to values on the request for some of the query parameters. |
|
| 1180 | + * |
|
| 1181 | + * @param array $request |
|
| 1182 | + * @param int $per_page |
|
| 1183 | + * @param bool $count |
|
| 1184 | + * @return array |
|
| 1185 | + * @throws EE_Error |
|
| 1186 | + */ |
|
| 1187 | + protected function _get_registration_query_parameters( |
|
| 1188 | + $request = array(), |
|
| 1189 | + $per_page = 10, |
|
| 1190 | + $count = false |
|
| 1191 | + ) { |
|
| 1192 | + |
|
| 1193 | + $query_params = array( |
|
| 1194 | + 0 => $this->_get_where_conditions_for_registrations_query( |
|
| 1195 | + $request |
|
| 1196 | + ), |
|
| 1197 | + 'caps' => EEM_Registration::caps_read_admin, |
|
| 1198 | + 'default_where_conditions' => 'this_model_only', |
|
| 1199 | + ); |
|
| 1200 | + if (! $count) { |
|
| 1201 | + $query_params = array_merge( |
|
| 1202 | + $query_params, |
|
| 1203 | + $this->_get_orderby_for_registrations_query(), |
|
| 1204 | + $this->_get_limit($per_page) |
|
| 1205 | + ); |
|
| 1206 | + } |
|
| 1207 | + |
|
| 1208 | + return $query_params; |
|
| 1209 | + } |
|
| 1210 | + |
|
| 1211 | + |
|
| 1212 | + /** |
|
| 1213 | + * This will add ATT_ID to the provided $where array for EE model query parameters. |
|
| 1214 | + * |
|
| 1215 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1216 | + * @return array |
|
| 1217 | + */ |
|
| 1218 | + protected function addAttendeeIdToWhereConditions(array $request) |
|
| 1219 | + { |
|
| 1220 | + $where = array(); |
|
| 1221 | + if (! empty($request['ATT_ID'])) { |
|
| 1222 | + $where['ATT_ID'] = absint($request['ATT_ID']); |
|
| 1223 | + } |
|
| 1224 | + return $where; |
|
| 1225 | + } |
|
| 1226 | + |
|
| 1227 | + |
|
| 1228 | + /** |
|
| 1229 | + * This will add EVT_ID to the provided $where array for EE model query parameters. |
|
| 1230 | + * |
|
| 1231 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1232 | + * @return array |
|
| 1233 | + */ |
|
| 1234 | + protected function _add_event_id_to_where_conditions(array $request) |
|
| 1235 | + { |
|
| 1236 | + $where = array(); |
|
| 1237 | + if (! empty($request['event_id'])) { |
|
| 1238 | + $where['EVT_ID'] = absint($request['event_id']); |
|
| 1239 | + } |
|
| 1240 | + return $where; |
|
| 1241 | + } |
|
| 1242 | + |
|
| 1243 | + |
|
| 1244 | + /** |
|
| 1245 | + * Adds category ID if it exists in the request to the where conditions for the registrations query. |
|
| 1246 | + * |
|
| 1247 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1248 | + * @return array |
|
| 1249 | + */ |
|
| 1250 | + protected function _add_category_id_to_where_conditions(array $request) |
|
| 1251 | + { |
|
| 1252 | + $where = array(); |
|
| 1253 | + if (! empty($request['EVT_CAT']) && (int)$request['EVT_CAT'] !== -1) { |
|
| 1254 | + $where['Event.Term_Taxonomy.term_id'] = absint($request['EVT_CAT']); |
|
| 1255 | + } |
|
| 1256 | + return $where; |
|
| 1257 | + } |
|
| 1258 | + |
|
| 1259 | + |
|
| 1260 | + /** |
|
| 1261 | + * Adds the datetime ID if it exists in the request to the where conditions for the registrations query. |
|
| 1262 | + * |
|
| 1263 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1264 | + * @return array |
|
| 1265 | + */ |
|
| 1266 | + protected function _add_datetime_id_to_where_conditions(array $request) |
|
| 1267 | + { |
|
| 1268 | + $where = array(); |
|
| 1269 | + if (! empty($request['datetime_id'])) { |
|
| 1270 | + $where['Ticket.Datetime.DTT_ID'] = absint($request['datetime_id']); |
|
| 1271 | + } |
|
| 1272 | + if (! empty($request['DTT_ID'])) { |
|
| 1273 | + $where['Ticket.Datetime.DTT_ID'] = absint($request['DTT_ID']); |
|
| 1274 | + } |
|
| 1275 | + return $where; |
|
| 1276 | + } |
|
| 1277 | + |
|
| 1278 | + |
|
| 1279 | + /** |
|
| 1280 | + * Adds the correct registration status to the where conditions for the registrations query. |
|
| 1281 | + * |
|
| 1282 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1283 | + * @return array |
|
| 1284 | + */ |
|
| 1285 | + protected function _add_registration_status_to_where_conditions(array $request) |
|
| 1286 | + { |
|
| 1287 | + $where = array(); |
|
| 1288 | + $view = EEH_Array::is_set($request, 'status', ''); |
|
| 1289 | + $registration_status = ! empty($request['_reg_status']) |
|
| 1290 | + ? sanitize_text_field($request['_reg_status']) |
|
| 1291 | + : ''; |
|
| 1292 | + |
|
| 1293 | + /* |
|
| 1294 | 1294 | * If filtering by registration status, then we show registrations matching that status. |
| 1295 | 1295 | * If not filtering by specified status, then we show all registrations excluding incomplete registrations |
| 1296 | 1296 | * UNLESS viewing trashed registrations. |
| 1297 | 1297 | */ |
| 1298 | - if (! empty($registration_status)) { |
|
| 1299 | - $where['STS_ID'] = $registration_status; |
|
| 1300 | - } else { |
|
| 1301 | - //make sure we exclude incomplete registrations, but only if not trashed. |
|
| 1302 | - if ($view === 'trash') { |
|
| 1303 | - $where['REG_deleted'] = true; |
|
| 1304 | - } elseif ($view === 'incomplete') { |
|
| 1305 | - $where['STS_ID'] = EEM_Registration::status_id_incomplete; |
|
| 1306 | - } else { |
|
| 1307 | - $where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete); |
|
| 1308 | - } |
|
| 1309 | - } |
|
| 1310 | - return $where; |
|
| 1311 | - } |
|
| 1312 | - |
|
| 1313 | - |
|
| 1314 | - /** |
|
| 1315 | - * Adds any provided date restraints to the where conditions for the registrations query. |
|
| 1316 | - * |
|
| 1317 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1318 | - * @return array |
|
| 1319 | - * @throws EE_Error |
|
| 1320 | - * @throws InvalidArgumentException |
|
| 1321 | - * @throws InvalidDataTypeException |
|
| 1322 | - * @throws InvalidInterfaceException |
|
| 1323 | - */ |
|
| 1324 | - protected function _add_date_to_where_conditions(array $request) |
|
| 1325 | - { |
|
| 1326 | - $where = array(); |
|
| 1327 | - $view = EEH_Array::is_set($request, 'status', ''); |
|
| 1328 | - $month_range = ! empty($request['month_range']) |
|
| 1329 | - ? sanitize_text_field($request['month_range']) |
|
| 1330 | - : ''; |
|
| 1331 | - $retrieve_for_today = $view === 'today'; |
|
| 1332 | - $retrieve_for_this_month = $view === 'month'; |
|
| 1333 | - |
|
| 1334 | - if ($retrieve_for_today) { |
|
| 1335 | - $now = date('Y-m-d', current_time('timestamp')); |
|
| 1336 | - $where['REG_date'] = array( |
|
| 1337 | - 'BETWEEN', |
|
| 1338 | - array( |
|
| 1339 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1340 | - 'REG_date', |
|
| 1341 | - $now . ' 00:00:00', |
|
| 1342 | - 'Y-m-d H:i:s' |
|
| 1343 | - ), |
|
| 1344 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1345 | - 'REG_date', |
|
| 1346 | - $now . ' 23:59:59', |
|
| 1347 | - 'Y-m-d H:i:s' |
|
| 1348 | - ), |
|
| 1349 | - ), |
|
| 1350 | - ); |
|
| 1351 | - } elseif ($retrieve_for_this_month) { |
|
| 1352 | - $current_year_and_month = date('Y-m', current_time('timestamp')); |
|
| 1353 | - $days_this_month = date('t', current_time('timestamp')); |
|
| 1354 | - $where['REG_date'] = array( |
|
| 1355 | - 'BETWEEN', |
|
| 1356 | - array( |
|
| 1357 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1358 | - 'REG_date', |
|
| 1359 | - $current_year_and_month . '-01 00:00:00', |
|
| 1360 | - 'Y-m-d H:i:s' |
|
| 1361 | - ), |
|
| 1362 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1363 | - 'REG_date', |
|
| 1364 | - $current_year_and_month . '-' . $days_this_month . ' 23:59:59', |
|
| 1365 | - 'Y-m-d H:i:s' |
|
| 1366 | - ), |
|
| 1367 | - ), |
|
| 1368 | - ); |
|
| 1369 | - } elseif ($month_range) { |
|
| 1370 | - $pieces = explode(' ', $month_range, 3); |
|
| 1371 | - $month_requested = ! empty($pieces[0]) |
|
| 1372 | - ? date('m', \EEH_DTT_Helper::first_of_month_timestamp($pieces[0])) |
|
| 1373 | - : ''; |
|
| 1374 | - $year_requested = ! empty($pieces[1]) |
|
| 1375 | - ? $pieces[1] |
|
| 1376 | - : ''; |
|
| 1377 | - //if there is not a month or year then we can't go further |
|
| 1378 | - if ($month_requested && $year_requested) { |
|
| 1379 | - $days_in_month = date('t', strtotime($year_requested . '-' . $month_requested . '-' . '01')); |
|
| 1380 | - $where['REG_date'] = array( |
|
| 1381 | - 'BETWEEN', |
|
| 1382 | - array( |
|
| 1383 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1384 | - 'REG_date', |
|
| 1385 | - $year_requested . '-' . $month_requested . '-01 00:00:00', |
|
| 1386 | - 'Y-m-d H:i:s' |
|
| 1387 | - ), |
|
| 1388 | - EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1389 | - 'REG_date', |
|
| 1390 | - $year_requested . '-' . $month_requested . '-' . $days_in_month . ' 23:59:59', |
|
| 1391 | - 'Y-m-d H:i:s' |
|
| 1392 | - ), |
|
| 1393 | - ), |
|
| 1394 | - ); |
|
| 1395 | - } |
|
| 1396 | - } |
|
| 1397 | - return $where; |
|
| 1398 | - } |
|
| 1399 | - |
|
| 1400 | - |
|
| 1401 | - /** |
|
| 1402 | - * Adds any provided search restraints to the where conditions for the registrations query |
|
| 1403 | - * |
|
| 1404 | - * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1405 | - * @return array |
|
| 1406 | - */ |
|
| 1407 | - protected function _add_search_to_where_conditions(array $request) |
|
| 1408 | - { |
|
| 1409 | - $where = array(); |
|
| 1410 | - if (! empty($request['s'])) { |
|
| 1411 | - $search_string = '%' . sanitize_text_field($request['s']) . '%'; |
|
| 1412 | - $where['OR*search_conditions'] = array( |
|
| 1413 | - 'Event.EVT_name' => array('LIKE', $search_string), |
|
| 1414 | - 'Event.EVT_desc' => array('LIKE', $search_string), |
|
| 1415 | - 'Event.EVT_short_desc' => array('LIKE', $search_string), |
|
| 1416 | - 'Attendee.ATT_full_name' => array('LIKE', $search_string), |
|
| 1417 | - 'Attendee.ATT_fname' => array('LIKE', $search_string), |
|
| 1418 | - 'Attendee.ATT_lname' => array('LIKE', $search_string), |
|
| 1419 | - 'Attendee.ATT_short_bio' => array('LIKE', $search_string), |
|
| 1420 | - 'Attendee.ATT_email' => array('LIKE', $search_string), |
|
| 1421 | - 'Attendee.ATT_address' => array('LIKE', $search_string), |
|
| 1422 | - 'Attendee.ATT_address2' => array('LIKE', $search_string), |
|
| 1423 | - 'Attendee.ATT_city' => array('LIKE', $search_string), |
|
| 1424 | - 'REG_final_price' => array('LIKE', $search_string), |
|
| 1425 | - 'REG_code' => array('LIKE', $search_string), |
|
| 1426 | - 'REG_count' => array('LIKE', $search_string), |
|
| 1427 | - 'REG_group_size' => array('LIKE', $search_string), |
|
| 1428 | - 'Ticket.TKT_name' => array('LIKE', $search_string), |
|
| 1429 | - 'Ticket.TKT_description' => array('LIKE', $search_string), |
|
| 1430 | - 'Transaction.Payment.PAY_txn_id_chq_nmbr' => array('LIKE', $search_string), |
|
| 1431 | - ); |
|
| 1432 | - } |
|
| 1433 | - return $where; |
|
| 1434 | - } |
|
| 1435 | - |
|
| 1436 | - |
|
| 1437 | - /** |
|
| 1438 | - * Sets up the where conditions for the registrations query. |
|
| 1439 | - * |
|
| 1440 | - * @param array $request |
|
| 1441 | - * @return array |
|
| 1442 | - * @throws EE_Error |
|
| 1443 | - */ |
|
| 1444 | - protected function _get_where_conditions_for_registrations_query($request) |
|
| 1445 | - { |
|
| 1446 | - return apply_filters( |
|
| 1447 | - 'FHEE__Registrations_Admin_Page___get_where_conditions_for_registrations_query', |
|
| 1448 | - array_merge( |
|
| 1449 | - $this->addAttendeeIdToWhereConditions($request), |
|
| 1450 | - $this->_add_event_id_to_where_conditions($request), |
|
| 1451 | - $this->_add_category_id_to_where_conditions($request), |
|
| 1452 | - $this->_add_datetime_id_to_where_conditions($request), |
|
| 1453 | - $this->_add_registration_status_to_where_conditions($request), |
|
| 1454 | - $this->_add_date_to_where_conditions($request), |
|
| 1455 | - $this->_add_search_to_where_conditions($request) |
|
| 1456 | - ), |
|
| 1457 | - $request |
|
| 1458 | - ); |
|
| 1459 | - } |
|
| 1460 | - |
|
| 1461 | - |
|
| 1462 | - /** |
|
| 1463 | - * Sets up the orderby for the registrations query. |
|
| 1464 | - * |
|
| 1465 | - * @return array |
|
| 1466 | - */ |
|
| 1467 | - protected function _get_orderby_for_registrations_query() |
|
| 1468 | - { |
|
| 1469 | - $orderby_field = ! empty($this->_req_data['orderby']) |
|
| 1470 | - ? sanitize_text_field($this->_req_data['orderby']) |
|
| 1471 | - : ''; |
|
| 1472 | - switch ($orderby_field) { |
|
| 1473 | - case '_REG_ID': |
|
| 1474 | - $orderby = array('REG_ID'); |
|
| 1475 | - break; |
|
| 1476 | - case '_Reg_status': |
|
| 1477 | - $orderby = array('STS_ID'); |
|
| 1478 | - break; |
|
| 1479 | - case 'ATT_fname': |
|
| 1480 | - $orderby = array('Attendee.ATT_fname', 'Attendee.ATT_lname'); |
|
| 1481 | - break; |
|
| 1482 | - case 'ATT_lname': |
|
| 1483 | - $orderby = array('Attendee.ATT_lname', 'Attendee.ATT_fname'); |
|
| 1484 | - break; |
|
| 1485 | - case 'event_name': |
|
| 1486 | - $orderby = array('Event.EVT_name'); |
|
| 1487 | - break; |
|
| 1488 | - case 'DTT_EVT_start': |
|
| 1489 | - $orderby = array('Event.Datetime.DTT_EVT_start'); |
|
| 1490 | - break; |
|
| 1491 | - default: //'REG_date' |
|
| 1492 | - $orderby = array('REG_date'); |
|
| 1493 | - } |
|
| 1494 | - |
|
| 1495 | - //order |
|
| 1496 | - $order = ! empty($this->_req_data['order']) |
|
| 1497 | - ? sanitize_text_field($this->_req_data['order']) |
|
| 1498 | - : 'DESC'; |
|
| 1499 | - $orderby = array_combine( |
|
| 1500 | - $orderby, |
|
| 1501 | - array_fill(0, count($orderby), $order) |
|
| 1502 | - ); |
|
| 1503 | - //because there are many registrations with the same date, define |
|
| 1504 | - //a secondary way to order them, otherwise MySQL seems to be a bit random |
|
| 1505 | - if (empty($orderby['REG_ID'])) { |
|
| 1506 | - $orderby['REG_ID'] = $order; |
|
| 1507 | - } |
|
| 1508 | - return array('order_by' => $orderby); |
|
| 1509 | - } |
|
| 1510 | - |
|
| 1511 | - |
|
| 1512 | - /** |
|
| 1513 | - * Sets up the limit for the registrations query. |
|
| 1514 | - * |
|
| 1515 | - * @param $per_page |
|
| 1516 | - * @return array |
|
| 1517 | - */ |
|
| 1518 | - protected function _get_limit($per_page) |
|
| 1519 | - { |
|
| 1520 | - $current_page = ! empty($this->_req_data['paged']) |
|
| 1521 | - ? absint($this->_req_data['paged']) |
|
| 1522 | - : 1; |
|
| 1523 | - $per_page = ! empty($this->_req_data['perpage']) |
|
| 1524 | - ? $this->_req_data['perpage'] |
|
| 1525 | - : $per_page; |
|
| 1526 | - |
|
| 1527 | - //-1 means return all results so get out if that's set. |
|
| 1528 | - if ((int)$per_page === -1) { |
|
| 1529 | - return array(); |
|
| 1530 | - } |
|
| 1531 | - $per_page = absint($per_page); |
|
| 1532 | - $offset = ($current_page - 1) * $per_page; |
|
| 1533 | - return array('limit' => array($offset, $per_page)); |
|
| 1534 | - } |
|
| 1535 | - |
|
| 1536 | - |
|
| 1537 | - public function get_registration_status_array() |
|
| 1538 | - { |
|
| 1539 | - return self::$_reg_status; |
|
| 1540 | - } |
|
| 1541 | - |
|
| 1542 | - |
|
| 1543 | - |
|
| 1544 | - |
|
| 1545 | - /*************************************** REGISTRATION DETAILS ***************************************/ |
|
| 1546 | - /** |
|
| 1547 | - * generates HTML for the View Registration Details Admin page |
|
| 1548 | - * |
|
| 1549 | - * @access protected |
|
| 1550 | - * @return void |
|
| 1551 | - * @throws DomainException |
|
| 1552 | - * @throws EE_Error |
|
| 1553 | - * @throws InvalidArgumentException |
|
| 1554 | - * @throws InvalidDataTypeException |
|
| 1555 | - * @throws InvalidInterfaceException |
|
| 1556 | - * @throws EntityNotFoundException |
|
| 1557 | - */ |
|
| 1558 | - protected function _registration_details() |
|
| 1559 | - { |
|
| 1560 | - $this->_template_args = array(); |
|
| 1561 | - $this->_set_registration_object(); |
|
| 1562 | - if (is_object($this->_registration)) { |
|
| 1563 | - $transaction = $this->_registration->transaction() |
|
| 1564 | - ? $this->_registration->transaction() |
|
| 1565 | - : EE_Transaction::new_instance(); |
|
| 1566 | - $this->_session = $transaction->session_data(); |
|
| 1567 | - $event_id = $this->_registration->event_ID(); |
|
| 1568 | - $this->_template_args['reg_nmbr']['value'] = $this->_registration->ID(); |
|
| 1569 | - $this->_template_args['reg_nmbr']['label'] = esc_html__('Registration Number', 'event_espresso'); |
|
| 1570 | - $this->_template_args['reg_datetime']['value'] = $this->_registration->get_i18n_datetime('REG_date'); |
|
| 1571 | - $this->_template_args['reg_datetime']['label'] = esc_html__('Date', 'event_espresso'); |
|
| 1572 | - $this->_template_args['grand_total'] = $transaction->total(); |
|
| 1573 | - $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
| 1574 | - // link back to overview |
|
| 1575 | - $this->_template_args['reg_overview_url'] = REG_ADMIN_URL; |
|
| 1576 | - $this->_template_args['registration'] = $this->_registration; |
|
| 1577 | - $this->_template_args['filtered_registrations_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1578 | - array( |
|
| 1579 | - 'action' => 'default', |
|
| 1580 | - 'event_id' => $event_id, |
|
| 1581 | - ), |
|
| 1582 | - REG_ADMIN_URL |
|
| 1583 | - ); |
|
| 1584 | - $this->_template_args['filtered_transactions_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1585 | - array( |
|
| 1586 | - 'action' => 'default', |
|
| 1587 | - 'EVT_ID' => $event_id, |
|
| 1588 | - 'page' => 'espresso_transactions', |
|
| 1589 | - ), |
|
| 1590 | - admin_url('admin.php') |
|
| 1591 | - ); |
|
| 1592 | - $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1593 | - array( |
|
| 1594 | - 'page' => 'espresso_events', |
|
| 1595 | - 'action' => 'edit', |
|
| 1596 | - 'post' => $event_id, |
|
| 1597 | - ), |
|
| 1598 | - admin_url('admin.php') |
|
| 1599 | - ); |
|
| 1600 | - //next and previous links |
|
| 1601 | - $next_reg = $this->_registration->next( |
|
| 1602 | - null, |
|
| 1603 | - array(), |
|
| 1604 | - 'REG_ID' |
|
| 1605 | - ); |
|
| 1606 | - $this->_template_args['next_registration'] = $next_reg |
|
| 1607 | - ? $this->_next_link( |
|
| 1608 | - EE_Admin_Page::add_query_args_and_nonce( |
|
| 1609 | - array( |
|
| 1610 | - 'action' => 'view_registration', |
|
| 1611 | - '_REG_ID' => $next_reg['REG_ID'], |
|
| 1612 | - ), |
|
| 1613 | - REG_ADMIN_URL |
|
| 1614 | - ), |
|
| 1615 | - 'dashicons dashicons-arrow-right ee-icon-size-22' |
|
| 1616 | - ) |
|
| 1617 | - : ''; |
|
| 1618 | - $previous_reg = $this->_registration->previous( |
|
| 1619 | - null, |
|
| 1620 | - array(), |
|
| 1621 | - 'REG_ID' |
|
| 1622 | - ); |
|
| 1623 | - $this->_template_args['previous_registration'] = $previous_reg |
|
| 1624 | - ? $this->_previous_link( |
|
| 1625 | - EE_Admin_Page::add_query_args_and_nonce( |
|
| 1626 | - array( |
|
| 1627 | - 'action' => 'view_registration', |
|
| 1628 | - '_REG_ID' => $previous_reg['REG_ID'], |
|
| 1629 | - ), |
|
| 1630 | - REG_ADMIN_URL |
|
| 1631 | - ), |
|
| 1632 | - 'dashicons dashicons-arrow-left ee-icon-size-22' |
|
| 1633 | - ) |
|
| 1634 | - : ''; |
|
| 1635 | - // grab header |
|
| 1636 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_header.template.php'; |
|
| 1637 | - $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
| 1638 | - $this->_template_args['admin_page_header'] = EEH_Template::display_template( |
|
| 1639 | - $template_path, |
|
| 1640 | - $this->_template_args, |
|
| 1641 | - true |
|
| 1642 | - ); |
|
| 1643 | - } else { |
|
| 1644 | - $this->_template_args['admin_page_header'] = $this->display_espresso_notices(); |
|
| 1645 | - } |
|
| 1646 | - // the details template wrapper |
|
| 1647 | - $this->display_admin_page_with_sidebar(); |
|
| 1648 | - } |
|
| 1649 | - |
|
| 1650 | - |
|
| 1651 | - protected function _registration_details_metaboxes() |
|
| 1652 | - { |
|
| 1653 | - do_action('AHEE__Registrations_Admin_Page___registration_details_metabox__start', $this); |
|
| 1654 | - $this->_set_registration_object(); |
|
| 1655 | - $attendee = $this->_registration instanceof EE_Registration ? $this->_registration->attendee() : null; |
|
| 1656 | - add_meta_box('edit-reg-status-mbox', esc_html__('Registration Status', 'event_espresso'), |
|
| 1657 | - array($this, 'set_reg_status_buttons_metabox'), $this->wp_page_slug, 'normal', 'high'); |
|
| 1658 | - add_meta_box('edit-reg-details-mbox', esc_html__('Registration Details', 'event_espresso'), |
|
| 1659 | - array($this, '_reg_details_meta_box'), $this->wp_page_slug, 'normal', 'high'); |
|
| 1660 | - if ($attendee instanceof EE_Attendee |
|
| 1661 | - && EE_Registry::instance()->CAP->current_user_can( |
|
| 1662 | - 'ee_edit_registration', |
|
| 1663 | - 'edit-reg-questions-mbox', |
|
| 1664 | - $this->_registration->ID() |
|
| 1665 | - ) |
|
| 1666 | - ) { |
|
| 1667 | - add_meta_box( |
|
| 1668 | - 'edit-reg-questions-mbox', |
|
| 1669 | - esc_html__('Registration Form Answers', 'event_espresso'), |
|
| 1670 | - array($this, '_reg_questions_meta_box'), |
|
| 1671 | - $this->wp_page_slug, |
|
| 1672 | - 'normal', |
|
| 1673 | - 'high' |
|
| 1674 | - ); |
|
| 1675 | - } |
|
| 1676 | - add_meta_box( |
|
| 1677 | - 'edit-reg-registrant-mbox', |
|
| 1678 | - esc_html__('Contact Details', 'event_espresso'), |
|
| 1679 | - array($this, '_reg_registrant_side_meta_box'), |
|
| 1680 | - $this->wp_page_slug, |
|
| 1681 | - 'side', |
|
| 1682 | - 'high' |
|
| 1683 | - ); |
|
| 1684 | - if ($this->_registration->group_size() > 1) { |
|
| 1685 | - add_meta_box( |
|
| 1686 | - 'edit-reg-attendees-mbox', |
|
| 1687 | - esc_html__('Other Registrations in this Transaction', 'event_espresso'), |
|
| 1688 | - array($this, '_reg_attendees_meta_box'), |
|
| 1689 | - $this->wp_page_slug, |
|
| 1690 | - 'normal', |
|
| 1691 | - 'high' |
|
| 1692 | - ); |
|
| 1693 | - } |
|
| 1694 | - } |
|
| 1695 | - |
|
| 1696 | - |
|
| 1697 | - /** |
|
| 1698 | - * set_reg_status_buttons_metabox |
|
| 1699 | - * |
|
| 1700 | - * @access protected |
|
| 1701 | - * @return string |
|
| 1702 | - * @throws \EE_Error |
|
| 1703 | - */ |
|
| 1704 | - public function set_reg_status_buttons_metabox() |
|
| 1705 | - { |
|
| 1706 | - $this->_set_registration_object(); |
|
| 1707 | - $change_reg_status_form = $this->_generate_reg_status_change_form(); |
|
| 1708 | - echo $change_reg_status_form->form_open( |
|
| 1709 | - self::add_query_args_and_nonce( |
|
| 1710 | - array( |
|
| 1711 | - 'action' => 'change_reg_status', |
|
| 1712 | - ), |
|
| 1713 | - REG_ADMIN_URL |
|
| 1714 | - ) |
|
| 1715 | - ); |
|
| 1716 | - echo $change_reg_status_form->get_html(); |
|
| 1717 | - echo $change_reg_status_form->form_close(); |
|
| 1718 | - } |
|
| 1719 | - |
|
| 1720 | - |
|
| 1721 | - /** |
|
| 1722 | - * @return EE_Form_Section_Proper |
|
| 1723 | - * @throws EE_Error |
|
| 1724 | - * @throws InvalidArgumentException |
|
| 1725 | - * @throws InvalidDataTypeException |
|
| 1726 | - * @throws InvalidInterfaceException |
|
| 1727 | - * @throws \EventEspresso\core\exceptions\EntityNotFoundException |
|
| 1728 | - */ |
|
| 1729 | - protected function _generate_reg_status_change_form() |
|
| 1730 | - { |
|
| 1731 | - return new EE_Form_Section_Proper(array( |
|
| 1732 | - 'name' => 'reg_status_change_form', |
|
| 1733 | - 'html_id' => 'reg-status-change-form', |
|
| 1734 | - 'layout_strategy' => new EE_Admin_Two_Column_Layout(), |
|
| 1735 | - 'subsections' => array( |
|
| 1736 | - 'return' => new EE_Hidden_Input(array( |
|
| 1737 | - 'name' => 'return', |
|
| 1738 | - 'default' => 'view_registration', |
|
| 1739 | - )), |
|
| 1740 | - 'REG_ID' => new EE_Hidden_Input(array( |
|
| 1741 | - 'name' => 'REG_ID', |
|
| 1742 | - 'default' => $this->_registration->ID(), |
|
| 1743 | - )), |
|
| 1744 | - 'current_status' => new EE_Form_Section_HTML( |
|
| 1745 | - EEH_HTML::tr( |
|
| 1746 | - EEH_HTML::th( |
|
| 1747 | - EEH_HTML::label( |
|
| 1748 | - EEH_HTML::strong(esc_html__('Current Registration Status', 'event_espresso') |
|
| 1749 | - ) |
|
| 1750 | - ) |
|
| 1751 | - ) |
|
| 1752 | - . EEH_HTML::td( |
|
| 1753 | - EEH_HTML::strong( |
|
| 1754 | - $this->_registration->pretty_status(), |
|
| 1755 | - '', |
|
| 1756 | - 'status-' . $this->_registration->status_ID(), |
|
| 1757 | - 'line-height: 1em; font-size: 1.5em; font-weight: bold;' |
|
| 1758 | - ) |
|
| 1759 | - ) |
|
| 1760 | - ) |
|
| 1761 | - ), |
|
| 1762 | - 'reg_status' => new EE_Select_Input( |
|
| 1763 | - $this->_get_reg_statuses(), |
|
| 1764 | - array( |
|
| 1765 | - 'html_label_text' => esc_html__('Change Registration Status to', 'event_espresso'), |
|
| 1766 | - 'default' => $this->_registration->status_ID(), |
|
| 1767 | - ) |
|
| 1768 | - ), |
|
| 1769 | - 'send_notifications' => new EE_Yes_No_Input( |
|
| 1770 | - array( |
|
| 1771 | - 'html_label_text' => esc_html__('Send Related Messages', 'event_espresso'), |
|
| 1772 | - 'default' => false, |
|
| 1773 | - 'html_help_text' => esc_html__( |
|
| 1774 | - 'If set to "Yes", then the related messages will be sent to the registrant.', |
|
| 1775 | - 'event_espresso' |
|
| 1776 | - ), |
|
| 1777 | - ) |
|
| 1778 | - ), |
|
| 1779 | - 'submit' => new EE_Submit_Input( |
|
| 1780 | - array( |
|
| 1781 | - 'html_class' => 'button-primary', |
|
| 1782 | - 'html_label_text' => ' ', |
|
| 1783 | - 'default' => esc_html__('Update Registration Status', 'event_espresso'), |
|
| 1784 | - ) |
|
| 1785 | - ), |
|
| 1786 | - ), |
|
| 1787 | - )); |
|
| 1788 | - } |
|
| 1789 | - |
|
| 1790 | - |
|
| 1791 | - /** |
|
| 1792 | - * Returns an array of all the buttons for the various statuses and switch status actions |
|
| 1793 | - * |
|
| 1794 | - * @return array |
|
| 1795 | - * @throws EE_Error |
|
| 1796 | - * @throws InvalidArgumentException |
|
| 1797 | - * @throws InvalidDataTypeException |
|
| 1798 | - * @throws InvalidInterfaceException |
|
| 1799 | - * @throws EntityNotFoundException |
|
| 1800 | - */ |
|
| 1801 | - protected function _get_reg_statuses() |
|
| 1802 | - { |
|
| 1803 | - $reg_status_array = EEM_Registration::instance()->reg_status_array(); |
|
| 1804 | - unset ($reg_status_array[EEM_Registration::status_id_incomplete]); |
|
| 1805 | - // get current reg status |
|
| 1806 | - $current_status = $this->_registration->status_ID(); |
|
| 1807 | - // is registration for free event? This will determine whether to display the pending payment option |
|
| 1808 | - if ( |
|
| 1809 | - $current_status !== EEM_Registration::status_id_pending_payment |
|
| 1810 | - && EEH_Money::compare_floats($this->_registration->ticket()->price(), 0.00) |
|
| 1811 | - ) { |
|
| 1812 | - unset($reg_status_array[EEM_Registration::status_id_pending_payment]); |
|
| 1813 | - } |
|
| 1814 | - return EEM_Status::instance()->localized_status($reg_status_array, false, 'sentence'); |
|
| 1815 | - } |
|
| 1816 | - |
|
| 1817 | - |
|
| 1818 | - /** |
|
| 1819 | - * This method is used when using _REG_ID from request which may or may not be an array of reg_ids. |
|
| 1820 | - * |
|
| 1821 | - * @param bool $status REG status given for changing registrations to. |
|
| 1822 | - * @param bool $notify Whether to send messages notifications or not. |
|
| 1823 | - * @return array (array with reg_id(s) updated and whether update was successful. |
|
| 1824 | - * @throws EE_Error |
|
| 1825 | - * @throws InvalidArgumentException |
|
| 1826 | - * @throws InvalidDataTypeException |
|
| 1827 | - * @throws InvalidInterfaceException |
|
| 1828 | - * @throws ReflectionException |
|
| 1829 | - * @throws RuntimeException |
|
| 1830 | - * @throws EntityNotFoundException |
|
| 1831 | - */ |
|
| 1832 | - protected function _set_registration_status_from_request($status = false, $notify = false) |
|
| 1833 | - { |
|
| 1834 | - if (isset($this->_req_data['reg_status_change_form'])) { |
|
| 1835 | - $REG_IDs = isset($this->_req_data['reg_status_change_form']['REG_ID']) |
|
| 1836 | - ? (array)$this->_req_data['reg_status_change_form']['REG_ID'] |
|
| 1837 | - : array(); |
|
| 1838 | - } else { |
|
| 1839 | - $REG_IDs = isset($this->_req_data['_REG_ID']) |
|
| 1840 | - ? (array)$this->_req_data['_REG_ID'] |
|
| 1841 | - : array(); |
|
| 1842 | - } |
|
| 1843 | - // sanitize $REG_IDs |
|
| 1844 | - $REG_IDs = array_map('absint', $REG_IDs); |
|
| 1845 | - // and remove empty entries |
|
| 1846 | - $REG_IDs = array_filter($REG_IDs); |
|
| 1847 | - |
|
| 1848 | - $result = $this->_set_registration_status($REG_IDs, $status, $notify); |
|
| 1849 | - |
|
| 1850 | - /** |
|
| 1851 | - * Set and filter $_req_data['_REG_ID'] for any potential future messages notifications. |
|
| 1852 | - * Currently this value is used downstream by the _process_resend_registration method. |
|
| 1853 | - * |
|
| 1854 | - * @param int|array $registration_ids The registration ids that have had their status changed successfully. |
|
| 1855 | - * @param bool $status The status registrations were changed to. |
|
| 1856 | - * @param bool $success If the status was changed successfully for all registrations. |
|
| 1857 | - * @param Registrations_Admin_Page $admin_page_object |
|
| 1858 | - */ |
|
| 1859 | - $this->_req_data['_REG_ID'] = apply_filters( |
|
| 1860 | - 'FHEE__Registrations_Admin_Page___set_registration_status_from_request__REG_IDs', |
|
| 1861 | - $result['REG_ID'], |
|
| 1862 | - $status, |
|
| 1863 | - $result['success'], |
|
| 1864 | - $this |
|
| 1865 | - ); |
|
| 1866 | - |
|
| 1867 | - //notify? |
|
| 1868 | - if ($notify |
|
| 1869 | - && $result['success'] |
|
| 1870 | - && ! empty($this->_req_data['_REG_ID']) |
|
| 1871 | - && EE_Registry::instance()->CAP->current_user_can( |
|
| 1872 | - 'ee_send_message', |
|
| 1873 | - 'espresso_registrations_resend_registration' |
|
| 1874 | - ) |
|
| 1875 | - ) { |
|
| 1876 | - $this->_process_resend_registration(); |
|
| 1877 | - } |
|
| 1878 | - return $result; |
|
| 1879 | - } |
|
| 1880 | - |
|
| 1881 | - |
|
| 1882 | - /** |
|
| 1883 | - * Set the registration status for the given reg_id (which may or may not be an array, it gets typecast to an |
|
| 1884 | - * array). Note, this method does NOT take care of possible notifications. That is required by calling code. |
|
| 1885 | - * |
|
| 1886 | - * @param array $REG_IDs |
|
| 1887 | - * @param string $status |
|
| 1888 | - * @param bool $notify Used to indicate whether notification was requested or not. This determines the context |
|
| 1889 | - * slug sent with setting the registration status. |
|
| 1890 | - * @return array (an array with 'success' key representing whether status change was successful, and 'REG_ID' as |
|
| 1891 | - * @throws EE_Error |
|
| 1892 | - * @throws InvalidArgumentException |
|
| 1893 | - * @throws InvalidDataTypeException |
|
| 1894 | - * @throws InvalidInterfaceException |
|
| 1895 | - * @throws ReflectionException |
|
| 1896 | - * @throws RuntimeException |
|
| 1897 | - * @throws EntityNotFoundException |
|
| 1898 | - */ |
|
| 1899 | - protected function _set_registration_status($REG_IDs = array(), $status = '', $notify = false) |
|
| 1900 | - { |
|
| 1901 | - $success = false; |
|
| 1902 | - // typecast $REG_IDs |
|
| 1903 | - $REG_IDs = (array)$REG_IDs; |
|
| 1904 | - if ( ! empty($REG_IDs)) { |
|
| 1905 | - $success = true; |
|
| 1906 | - // set default status if none is passed |
|
| 1907 | - $status = $status ? $status : EEM_Registration::status_id_pending_payment; |
|
| 1908 | - $status_context = $notify |
|
| 1909 | - ? Domain::CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN_NOTIFY |
|
| 1910 | - : Domain::CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN; |
|
| 1911 | - //loop through REG_ID's and change status |
|
| 1912 | - foreach ($REG_IDs as $REG_ID) { |
|
| 1913 | - $registration = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
|
| 1914 | - if ($registration instanceof EE_Registration) { |
|
| 1915 | - $registration->set_status( |
|
| 1916 | - $status, |
|
| 1917 | - false, |
|
| 1918 | - new Context( |
|
| 1919 | - $status_context, |
|
| 1920 | - esc_html__( |
|
| 1921 | - 'Manually triggered status change on a Registration Admin Page route.', |
|
| 1922 | - 'event_espresso' |
|
| 1923 | - ) |
|
| 1924 | - ) |
|
| 1925 | - ); |
|
| 1926 | - $result = $registration->save(); |
|
| 1927 | - // verifying explicit fails because update *may* just return 0 for 0 rows affected |
|
| 1928 | - $success = $result !== false ? $success : false; |
|
| 1929 | - } |
|
| 1930 | - } |
|
| 1931 | - } |
|
| 1932 | - |
|
| 1933 | - //return $success and processed registrations |
|
| 1934 | - return array('REG_ID' => $REG_IDs, 'success' => $success); |
|
| 1935 | - } |
|
| 1936 | - |
|
| 1937 | - |
|
| 1938 | - /** |
|
| 1939 | - * Common logic for setting up success message and redirecting to appropriate route |
|
| 1940 | - * |
|
| 1941 | - * @param string $STS_ID status id for the registration changed to |
|
| 1942 | - * @param bool $notify indicates whether the _set_registration_status_from_request does notifications or not. |
|
| 1943 | - * @return void |
|
| 1944 | - * @throws EE_Error |
|
| 1945 | - */ |
|
| 1946 | - protected function _reg_status_change_return($STS_ID, $notify = false) |
|
| 1947 | - { |
|
| 1948 | - $result = ! empty($STS_ID) ? $this->_set_registration_status_from_request($STS_ID, $notify) |
|
| 1949 | - : array('success' => false); |
|
| 1950 | - $success = isset($result['success']) && $result['success']; |
|
| 1951 | - //setup success message |
|
| 1952 | - if ($success) { |
|
| 1953 | - if (is_array($result['REG_ID']) && count($result['REG_ID']) === 1) { |
|
| 1954 | - $msg = sprintf(esc_html__('Registration status has been set to %s', 'event_espresso'), |
|
| 1955 | - EEH_Template::pretty_status($STS_ID, false, 'lower')); |
|
| 1956 | - } else { |
|
| 1957 | - $msg = sprintf(esc_html__('Registrations have been set to %s.', 'event_espresso'), |
|
| 1958 | - EEH_Template::pretty_status($STS_ID, false, 'lower')); |
|
| 1959 | - } |
|
| 1960 | - EE_Error::add_success($msg); |
|
| 1961 | - } else { |
|
| 1962 | - EE_Error::add_error( |
|
| 1963 | - esc_html__( |
|
| 1964 | - 'Something went wrong, and the status was not changed', |
|
| 1965 | - 'event_espresso' |
|
| 1966 | - ), __FILE__, __LINE__, __FUNCTION__ |
|
| 1967 | - ); |
|
| 1968 | - } |
|
| 1969 | - if (isset($this->_req_data['return']) && $this->_req_data['return'] == 'view_registration') { |
|
| 1970 | - $route = array('action' => 'view_registration', '_REG_ID' => reset($result['REG_ID'])); |
|
| 1971 | - } else { |
|
| 1972 | - $route = array('action' => 'default'); |
|
| 1973 | - } |
|
| 1974 | - //unset nonces |
|
| 1975 | - foreach ($this->_req_data as $ref => $value) { |
|
| 1976 | - if (strpos($ref, 'nonce') !== false) { |
|
| 1977 | - unset($this->_req_data[$ref]); |
|
| 1978 | - continue; |
|
| 1979 | - } |
|
| 1980 | - $value = is_array($value) ? array_map('urlencode', $value) : urlencode($value); |
|
| 1981 | - $this->_req_data[$ref] = $value; |
|
| 1982 | - } |
|
| 1983 | - //merge request vars so that the reloaded list table contains any existing filter query params |
|
| 1984 | - $route = array_merge($this->_req_data, $route); |
|
| 1985 | - $this->_redirect_after_action($success, '', '', $route, true); |
|
| 1986 | - } |
|
| 1987 | - |
|
| 1988 | - |
|
| 1989 | - /** |
|
| 1990 | - * incoming reg status change from reg details page. |
|
| 1991 | - * |
|
| 1992 | - * @return void |
|
| 1993 | - */ |
|
| 1994 | - protected function _change_reg_status() |
|
| 1995 | - { |
|
| 1996 | - $this->_req_data['return'] = 'view_registration'; |
|
| 1997 | - //set notify based on whether the send notifications toggle is set or not |
|
| 1998 | - $notify = ! empty($this->_req_data['reg_status_change_form']['send_notifications']); |
|
| 1999 | - //$notify = ! empty( $this->_req_data['txn_reg_status_change']['send_notifications'] ); |
|
| 2000 | - $this->_req_data['reg_status_change_form']['reg_status'] = isset($this->_req_data['reg_status_change_form']['reg_status']) |
|
| 2001 | - ? $this->_req_data['reg_status_change_form']['reg_status'] : ''; |
|
| 2002 | - switch ($this->_req_data['reg_status_change_form']['reg_status']) { |
|
| 2003 | - case EEM_Registration::status_id_approved : |
|
| 2004 | - case EEH_Template::pretty_status(EEM_Registration::status_id_approved, false, 'sentence') : |
|
| 2005 | - $this->approve_registration($notify); |
|
| 2006 | - break; |
|
| 2007 | - case EEM_Registration::status_id_pending_payment : |
|
| 2008 | - case EEH_Template::pretty_status(EEM_Registration::status_id_pending_payment, false, 'sentence') : |
|
| 2009 | - $this->pending_registration($notify); |
|
| 2010 | - break; |
|
| 2011 | - case EEM_Registration::status_id_not_approved : |
|
| 2012 | - case EEH_Template::pretty_status(EEM_Registration::status_id_not_approved, false, 'sentence') : |
|
| 2013 | - $this->not_approve_registration($notify); |
|
| 2014 | - break; |
|
| 2015 | - case EEM_Registration::status_id_declined : |
|
| 2016 | - case EEH_Template::pretty_status(EEM_Registration::status_id_declined, false, 'sentence') : |
|
| 2017 | - $this->decline_registration($notify); |
|
| 2018 | - break; |
|
| 2019 | - case EEM_Registration::status_id_cancelled : |
|
| 2020 | - case EEH_Template::pretty_status(EEM_Registration::status_id_cancelled, false, 'sentence') : |
|
| 2021 | - $this->cancel_registration($notify); |
|
| 2022 | - break; |
|
| 2023 | - case EEM_Registration::status_id_wait_list : |
|
| 2024 | - case EEH_Template::pretty_status(EEM_Registration::status_id_wait_list, false, 'sentence') : |
|
| 2025 | - $this->wait_list_registration($notify); |
|
| 2026 | - break; |
|
| 2027 | - case EEM_Registration::status_id_incomplete : |
|
| 2028 | - default : |
|
| 2029 | - $result['success'] = false; |
|
| 2030 | - unset($this->_req_data['return']); |
|
| 2031 | - $this->_reg_status_change_return('', false); |
|
| 2032 | - break; |
|
| 2033 | - } |
|
| 2034 | - } |
|
| 2035 | - |
|
| 2036 | - |
|
| 2037 | - /** |
|
| 2038 | - * Callback for bulk action routes. |
|
| 2039 | - * Note: although we could just register the singular route callbacks for each bulk action route as well, this |
|
| 2040 | - * method was chosen so there is one central place all the registration status bulk actions are going through. |
|
| 2041 | - * Potentially, this provides an easier place to locate logic that is specific to these bulk actions (as opposed to |
|
| 2042 | - * when an action is happening on just a single registration). |
|
| 2043 | - * @param $action |
|
| 2044 | - * @param bool $notify |
|
| 2045 | - */ |
|
| 2046 | - protected function bulk_action_on_registrations($action, $notify = false) { |
|
| 2047 | - do_action( |
|
| 2048 | - 'AHEE__Registrations_Admin_Page__bulk_action_on_registrations__before_execution', |
|
| 2049 | - $this, |
|
| 2050 | - $action, |
|
| 2051 | - $notify |
|
| 2052 | - ); |
|
| 2053 | - $method = $action . '_registration'; |
|
| 2054 | - if (method_exists($this, $method)) { |
|
| 2055 | - $this->$method($notify); |
|
| 2056 | - } |
|
| 2057 | - } |
|
| 2058 | - |
|
| 2059 | - |
|
| 2060 | - /** |
|
| 2061 | - * approve_registration |
|
| 2062 | - * |
|
| 2063 | - * @access protected |
|
| 2064 | - * @param bool $notify whether or not to notify the registrant about their approval. |
|
| 2065 | - * @return void |
|
| 2066 | - */ |
|
| 2067 | - protected function approve_registration($notify = false) |
|
| 2068 | - { |
|
| 2069 | - $this->_reg_status_change_return(EEM_Registration::status_id_approved, $notify); |
|
| 2070 | - } |
|
| 2071 | - |
|
| 2072 | - |
|
| 2073 | - /** |
|
| 2074 | - * decline_registration |
|
| 2075 | - * |
|
| 2076 | - * @access protected |
|
| 2077 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2078 | - * @return void |
|
| 2079 | - */ |
|
| 2080 | - protected function decline_registration($notify = false) |
|
| 2081 | - { |
|
| 2082 | - $this->_reg_status_change_return(EEM_Registration::status_id_declined, $notify); |
|
| 2083 | - } |
|
| 2084 | - |
|
| 2085 | - |
|
| 2086 | - /** |
|
| 2087 | - * cancel_registration |
|
| 2088 | - * |
|
| 2089 | - * @access protected |
|
| 2090 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2091 | - * @return void |
|
| 2092 | - */ |
|
| 2093 | - protected function cancel_registration($notify = false) |
|
| 2094 | - { |
|
| 2095 | - $this->_reg_status_change_return(EEM_Registration::status_id_cancelled, $notify); |
|
| 2096 | - } |
|
| 2097 | - |
|
| 2098 | - |
|
| 2099 | - /** |
|
| 2100 | - * not_approve_registration |
|
| 2101 | - * |
|
| 2102 | - * @access protected |
|
| 2103 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2104 | - * @return void |
|
| 2105 | - */ |
|
| 2106 | - protected function not_approve_registration($notify = false) |
|
| 2107 | - { |
|
| 2108 | - $this->_reg_status_change_return(EEM_Registration::status_id_not_approved, $notify); |
|
| 2109 | - } |
|
| 2110 | - |
|
| 2111 | - |
|
| 2112 | - /** |
|
| 2113 | - * decline_registration |
|
| 2114 | - * |
|
| 2115 | - * @access protected |
|
| 2116 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2117 | - * @return void |
|
| 2118 | - */ |
|
| 2119 | - protected function pending_registration($notify = false) |
|
| 2120 | - { |
|
| 2121 | - $this->_reg_status_change_return(EEM_Registration::status_id_pending_payment, $notify); |
|
| 2122 | - } |
|
| 2123 | - |
|
| 2124 | - |
|
| 2125 | - /** |
|
| 2126 | - * waitlist_registration |
|
| 2127 | - * |
|
| 2128 | - * @access protected |
|
| 2129 | - * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2130 | - * @return void |
|
| 2131 | - */ |
|
| 2132 | - protected function wait_list_registration($notify = false) |
|
| 2133 | - { |
|
| 2134 | - $this->_reg_status_change_return(EEM_Registration::status_id_wait_list, $notify); |
|
| 2135 | - } |
|
| 2136 | - |
|
| 2137 | - |
|
| 2138 | - /** |
|
| 2139 | - * generates HTML for the Registration main meta box |
|
| 2140 | - * |
|
| 2141 | - * @access public |
|
| 2142 | - * @return void |
|
| 2143 | - * @throws DomainException |
|
| 2144 | - * @throws EE_Error |
|
| 2145 | - * @throws InvalidArgumentException |
|
| 2146 | - * @throws InvalidDataTypeException |
|
| 2147 | - * @throws InvalidInterfaceException |
|
| 2148 | - * @throws ReflectionException |
|
| 2149 | - * @throws EntityNotFoundException |
|
| 2150 | - */ |
|
| 2151 | - public function _reg_details_meta_box() |
|
| 2152 | - { |
|
| 2153 | - EEH_Autoloader::register_line_item_display_autoloaders(); |
|
| 2154 | - EEH_Autoloader::register_line_item_filter_autoloaders(); |
|
| 2155 | - EE_Registry::instance()->load_helper('Line_Item'); |
|
| 2156 | - $transaction = $this->_registration->transaction() ? $this->_registration->transaction() |
|
| 2157 | - : EE_Transaction::new_instance(); |
|
| 2158 | - $this->_session = $transaction->session_data(); |
|
| 2159 | - $filters = new EE_Line_Item_Filter_Collection(); |
|
| 2160 | - //$filters->add( new EE_Non_Zero_Line_Item_Filter() ); |
|
| 2161 | - $filters->add(new EE_Single_Registration_Line_Item_Filter($this->_registration)); |
|
| 2162 | - $line_item_filter_processor = new EE_Line_Item_Filter_Processor($filters, |
|
| 2163 | - $transaction->total_line_item()); |
|
| 2164 | - $filtered_line_item_tree = $line_item_filter_processor->process(); |
|
| 2165 | - $line_item_display = new EE_Line_Item_Display('reg_admin_table', |
|
| 2166 | - 'EE_Admin_Table_Registration_Line_Item_Display_Strategy'); |
|
| 2167 | - $this->_template_args['line_item_table'] = $line_item_display->display_line_item( |
|
| 2168 | - $filtered_line_item_tree, |
|
| 2169 | - array('EE_Registration' => $this->_registration) |
|
| 2170 | - ); |
|
| 2171 | - $attendee = $this->_registration->attendee(); |
|
| 2172 | - if (EE_Registry::instance()->CAP->current_user_can( |
|
| 2173 | - 'ee_read_transaction', |
|
| 2174 | - 'espresso_transactions_view_transaction' |
|
| 2175 | - )) { |
|
| 2176 | - $this->_template_args['view_transaction_button'] = EEH_Template::get_button_or_link( |
|
| 2177 | - EE_Admin_Page::add_query_args_and_nonce( |
|
| 2178 | - array( |
|
| 2179 | - 'action' => 'view_transaction', |
|
| 2180 | - 'TXN_ID' => $transaction->ID(), |
|
| 2181 | - ), |
|
| 2182 | - TXN_ADMIN_URL |
|
| 2183 | - ), |
|
| 2184 | - esc_html__(' View Transaction', 'event_espresso'), |
|
| 2185 | - 'button secondary-button right', |
|
| 2186 | - 'dashicons dashicons-cart' |
|
| 2187 | - ); |
|
| 2188 | - } else { |
|
| 2189 | - $this->_template_args['view_transaction_button'] = ''; |
|
| 2190 | - } |
|
| 2191 | - if ($attendee instanceof EE_Attendee |
|
| 2192 | - && EE_Registry::instance()->CAP->current_user_can( |
|
| 2193 | - 'ee_send_message', |
|
| 2194 | - 'espresso_registrations_resend_registration' |
|
| 2195 | - ) |
|
| 2196 | - ) { |
|
| 2197 | - $this->_template_args['resend_registration_button'] = EEH_Template::get_button_or_link( |
|
| 2198 | - EE_Admin_Page::add_query_args_and_nonce( |
|
| 2199 | - array( |
|
| 2200 | - 'action' => 'resend_registration', |
|
| 2201 | - '_REG_ID' => $this->_registration->ID(), |
|
| 2202 | - 'redirect_to' => 'view_registration', |
|
| 2203 | - ), |
|
| 2204 | - REG_ADMIN_URL |
|
| 2205 | - ), |
|
| 2206 | - esc_html__(' Resend Registration', 'event_espresso'), |
|
| 2207 | - 'button secondary-button right', |
|
| 2208 | - 'dashicons dashicons-email-alt' |
|
| 2209 | - ); |
|
| 2210 | - } else { |
|
| 2211 | - $this->_template_args['resend_registration_button'] = ''; |
|
| 2212 | - } |
|
| 2213 | - $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
| 2214 | - $payment = $transaction->get_first_related('Payment'); |
|
| 2215 | - $payment = ! $payment instanceof EE_Payment |
|
| 2216 | - ? EE_Payment::new_instance() |
|
| 2217 | - : $payment; |
|
| 2218 | - $payment_method = $payment->get_first_related('Payment_Method'); |
|
| 2219 | - $payment_method = ! $payment_method instanceof EE_Payment_Method |
|
| 2220 | - ? EE_Payment_Method::new_instance() |
|
| 2221 | - : $payment_method; |
|
| 2222 | - $reg_details = array( |
|
| 2223 | - 'payment_method' => $payment_method->name(), |
|
| 2224 | - 'response_msg' => $payment->gateway_response(), |
|
| 2225 | - 'registration_id' => $this->_registration->get('REG_code'), |
|
| 2226 | - 'registration_session' => $this->_registration->session_ID(), |
|
| 2227 | - 'ip_address' => isset($this->_session['ip_address']) ? $this->_session['ip_address'] : '', |
|
| 2228 | - 'user_agent' => isset($this->_session['user_agent']) ? $this->_session['user_agent'] : '', |
|
| 2229 | - ); |
|
| 2230 | - if (isset($reg_details['registration_id'])) { |
|
| 2231 | - $this->_template_args['reg_details']['registration_id']['value'] = $reg_details['registration_id']; |
|
| 2232 | - $this->_template_args['reg_details']['registration_id']['label'] = esc_html__( |
|
| 2233 | - 'Registration ID', |
|
| 2234 | - 'event_espresso' |
|
| 2235 | - ); |
|
| 2236 | - $this->_template_args['reg_details']['registration_id']['class'] = 'regular-text'; |
|
| 2237 | - } |
|
| 2238 | - if (isset($reg_details['payment_method'])) { |
|
| 2239 | - $this->_template_args['reg_details']['payment_method']['value'] = $reg_details['payment_method']; |
|
| 2240 | - $this->_template_args['reg_details']['payment_method']['label'] = esc_html__( |
|
| 2241 | - 'Most Recent Payment Method', |
|
| 2242 | - 'event_espresso' |
|
| 2243 | - ); |
|
| 2244 | - $this->_template_args['reg_details']['payment_method']['class'] = 'regular-text'; |
|
| 2245 | - $this->_template_args['reg_details']['response_msg']['value'] = $reg_details['response_msg']; |
|
| 2246 | - $this->_template_args['reg_details']['response_msg']['label'] = esc_html__( |
|
| 2247 | - 'Payment method response', |
|
| 2248 | - 'event_espresso' |
|
| 2249 | - ); |
|
| 2250 | - $this->_template_args['reg_details']['response_msg']['class'] = 'regular-text'; |
|
| 2251 | - } |
|
| 2252 | - $this->_template_args['reg_details']['registration_session']['value'] = $reg_details['registration_session']; |
|
| 2253 | - $this->_template_args['reg_details']['registration_session']['label'] = esc_html__( |
|
| 2254 | - 'Registration Session', |
|
| 2255 | - 'event_espresso' |
|
| 2256 | - ); |
|
| 2257 | - $this->_template_args['reg_details']['registration_session']['class'] = 'regular-text'; |
|
| 2258 | - $this->_template_args['reg_details']['ip_address']['value'] = $reg_details['ip_address']; |
|
| 2259 | - $this->_template_args['reg_details']['ip_address']['label'] = esc_html__( |
|
| 2260 | - 'Registration placed from IP', |
|
| 2261 | - 'event_espresso' |
|
| 2262 | - ); |
|
| 2263 | - $this->_template_args['reg_details']['ip_address']['class'] = 'regular-text'; |
|
| 2264 | - $this->_template_args['reg_details']['user_agent']['value'] = $reg_details['user_agent']; |
|
| 2265 | - $this->_template_args['reg_details']['user_agent']['label'] = esc_html__('Registrant User Agent', |
|
| 2266 | - 'event_espresso'); |
|
| 2267 | - $this->_template_args['reg_details']['user_agent']['class'] = 'large-text'; |
|
| 2268 | - $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 2269 | - array( |
|
| 2270 | - 'action' => 'default', |
|
| 2271 | - 'event_id' => $this->_registration->event_ID(), |
|
| 2272 | - ), |
|
| 2273 | - REG_ADMIN_URL |
|
| 2274 | - ); |
|
| 2275 | - $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
| 2276 | - $this->_template_args['event_id'] = $this->_registration->event_ID(); |
|
| 2277 | - $template_path = |
|
| 2278 | - REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_details.template.php'; |
|
| 2279 | - echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
| 2280 | - } |
|
| 2281 | - |
|
| 2282 | - |
|
| 2283 | - /** |
|
| 2284 | - * generates HTML for the Registration Questions meta box. |
|
| 2285 | - * If pre-4.8.32.rc.000 hooks are used, uses old methods (with its filters), |
|
| 2286 | - * otherwise uses new forms system |
|
| 2287 | - * |
|
| 2288 | - * @access public |
|
| 2289 | - * @return void |
|
| 2290 | - * @throws DomainException |
|
| 2291 | - * @throws EE_Error |
|
| 2292 | - */ |
|
| 2293 | - public function _reg_questions_meta_box() |
|
| 2294 | - { |
|
| 2295 | - //allow someone to override this method entirely |
|
| 2296 | - if (apply_filters('FHEE__Registrations_Admin_Page___reg_questions_meta_box__do_default', true, $this, |
|
| 2297 | - $this->_registration)) { |
|
| 2298 | - $form = $this->_get_reg_custom_questions_form( |
|
| 2299 | - $this->_registration->ID() |
|
| 2300 | - ); |
|
| 2301 | - $this->_template_args['att_questions'] = count($form->subforms()) > 0 |
|
| 2302 | - ? $form->get_html_and_js() |
|
| 2303 | - : ''; |
|
| 2304 | - $this->_template_args['reg_questions_form_action'] = 'edit_registration'; |
|
| 2305 | - $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
| 2306 | - $template_path = |
|
| 2307 | - REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_questions.template.php'; |
|
| 2308 | - echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
| 2309 | - } |
|
| 2310 | - } |
|
| 2311 | - |
|
| 2312 | - |
|
| 2313 | - /** |
|
| 2314 | - * form_before_question_group |
|
| 2315 | - * |
|
| 2316 | - * @deprecated as of 4.8.32.rc.000 |
|
| 2317 | - * @access public |
|
| 2318 | - * @param string $output |
|
| 2319 | - * @return string |
|
| 2320 | - */ |
|
| 2321 | - public function form_before_question_group($output) |
|
| 2322 | - { |
|
| 2323 | - EE_Error::doing_it_wrong( |
|
| 2324 | - __CLASS__ . '::' . __FUNCTION__, |
|
| 2325 | - esc_html__( |
|
| 2326 | - '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.', |
|
| 2327 | - 'event_espresso' |
|
| 2328 | - ), |
|
| 2329 | - '4.8.32.rc.000' |
|
| 2330 | - ); |
|
| 2331 | - return ' |
|
| 1298 | + if (! empty($registration_status)) { |
|
| 1299 | + $where['STS_ID'] = $registration_status; |
|
| 1300 | + } else { |
|
| 1301 | + //make sure we exclude incomplete registrations, but only if not trashed. |
|
| 1302 | + if ($view === 'trash') { |
|
| 1303 | + $where['REG_deleted'] = true; |
|
| 1304 | + } elseif ($view === 'incomplete') { |
|
| 1305 | + $where['STS_ID'] = EEM_Registration::status_id_incomplete; |
|
| 1306 | + } else { |
|
| 1307 | + $where['STS_ID'] = array('!=', EEM_Registration::status_id_incomplete); |
|
| 1308 | + } |
|
| 1309 | + } |
|
| 1310 | + return $where; |
|
| 1311 | + } |
|
| 1312 | + |
|
| 1313 | + |
|
| 1314 | + /** |
|
| 1315 | + * Adds any provided date restraints to the where conditions for the registrations query. |
|
| 1316 | + * |
|
| 1317 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1318 | + * @return array |
|
| 1319 | + * @throws EE_Error |
|
| 1320 | + * @throws InvalidArgumentException |
|
| 1321 | + * @throws InvalidDataTypeException |
|
| 1322 | + * @throws InvalidInterfaceException |
|
| 1323 | + */ |
|
| 1324 | + protected function _add_date_to_where_conditions(array $request) |
|
| 1325 | + { |
|
| 1326 | + $where = array(); |
|
| 1327 | + $view = EEH_Array::is_set($request, 'status', ''); |
|
| 1328 | + $month_range = ! empty($request['month_range']) |
|
| 1329 | + ? sanitize_text_field($request['month_range']) |
|
| 1330 | + : ''; |
|
| 1331 | + $retrieve_for_today = $view === 'today'; |
|
| 1332 | + $retrieve_for_this_month = $view === 'month'; |
|
| 1333 | + |
|
| 1334 | + if ($retrieve_for_today) { |
|
| 1335 | + $now = date('Y-m-d', current_time('timestamp')); |
|
| 1336 | + $where['REG_date'] = array( |
|
| 1337 | + 'BETWEEN', |
|
| 1338 | + array( |
|
| 1339 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1340 | + 'REG_date', |
|
| 1341 | + $now . ' 00:00:00', |
|
| 1342 | + 'Y-m-d H:i:s' |
|
| 1343 | + ), |
|
| 1344 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1345 | + 'REG_date', |
|
| 1346 | + $now . ' 23:59:59', |
|
| 1347 | + 'Y-m-d H:i:s' |
|
| 1348 | + ), |
|
| 1349 | + ), |
|
| 1350 | + ); |
|
| 1351 | + } elseif ($retrieve_for_this_month) { |
|
| 1352 | + $current_year_and_month = date('Y-m', current_time('timestamp')); |
|
| 1353 | + $days_this_month = date('t', current_time('timestamp')); |
|
| 1354 | + $where['REG_date'] = array( |
|
| 1355 | + 'BETWEEN', |
|
| 1356 | + array( |
|
| 1357 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1358 | + 'REG_date', |
|
| 1359 | + $current_year_and_month . '-01 00:00:00', |
|
| 1360 | + 'Y-m-d H:i:s' |
|
| 1361 | + ), |
|
| 1362 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1363 | + 'REG_date', |
|
| 1364 | + $current_year_and_month . '-' . $days_this_month . ' 23:59:59', |
|
| 1365 | + 'Y-m-d H:i:s' |
|
| 1366 | + ), |
|
| 1367 | + ), |
|
| 1368 | + ); |
|
| 1369 | + } elseif ($month_range) { |
|
| 1370 | + $pieces = explode(' ', $month_range, 3); |
|
| 1371 | + $month_requested = ! empty($pieces[0]) |
|
| 1372 | + ? date('m', \EEH_DTT_Helper::first_of_month_timestamp($pieces[0])) |
|
| 1373 | + : ''; |
|
| 1374 | + $year_requested = ! empty($pieces[1]) |
|
| 1375 | + ? $pieces[1] |
|
| 1376 | + : ''; |
|
| 1377 | + //if there is not a month or year then we can't go further |
|
| 1378 | + if ($month_requested && $year_requested) { |
|
| 1379 | + $days_in_month = date('t', strtotime($year_requested . '-' . $month_requested . '-' . '01')); |
|
| 1380 | + $where['REG_date'] = array( |
|
| 1381 | + 'BETWEEN', |
|
| 1382 | + array( |
|
| 1383 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1384 | + 'REG_date', |
|
| 1385 | + $year_requested . '-' . $month_requested . '-01 00:00:00', |
|
| 1386 | + 'Y-m-d H:i:s' |
|
| 1387 | + ), |
|
| 1388 | + EEM_Registration::instance()->convert_datetime_for_query( |
|
| 1389 | + 'REG_date', |
|
| 1390 | + $year_requested . '-' . $month_requested . '-' . $days_in_month . ' 23:59:59', |
|
| 1391 | + 'Y-m-d H:i:s' |
|
| 1392 | + ), |
|
| 1393 | + ), |
|
| 1394 | + ); |
|
| 1395 | + } |
|
| 1396 | + } |
|
| 1397 | + return $where; |
|
| 1398 | + } |
|
| 1399 | + |
|
| 1400 | + |
|
| 1401 | + /** |
|
| 1402 | + * Adds any provided search restraints to the where conditions for the registrations query |
|
| 1403 | + * |
|
| 1404 | + * @param array $request usually the same as $this->_req_data but not necessarily |
|
| 1405 | + * @return array |
|
| 1406 | + */ |
|
| 1407 | + protected function _add_search_to_where_conditions(array $request) |
|
| 1408 | + { |
|
| 1409 | + $where = array(); |
|
| 1410 | + if (! empty($request['s'])) { |
|
| 1411 | + $search_string = '%' . sanitize_text_field($request['s']) . '%'; |
|
| 1412 | + $where['OR*search_conditions'] = array( |
|
| 1413 | + 'Event.EVT_name' => array('LIKE', $search_string), |
|
| 1414 | + 'Event.EVT_desc' => array('LIKE', $search_string), |
|
| 1415 | + 'Event.EVT_short_desc' => array('LIKE', $search_string), |
|
| 1416 | + 'Attendee.ATT_full_name' => array('LIKE', $search_string), |
|
| 1417 | + 'Attendee.ATT_fname' => array('LIKE', $search_string), |
|
| 1418 | + 'Attendee.ATT_lname' => array('LIKE', $search_string), |
|
| 1419 | + 'Attendee.ATT_short_bio' => array('LIKE', $search_string), |
|
| 1420 | + 'Attendee.ATT_email' => array('LIKE', $search_string), |
|
| 1421 | + 'Attendee.ATT_address' => array('LIKE', $search_string), |
|
| 1422 | + 'Attendee.ATT_address2' => array('LIKE', $search_string), |
|
| 1423 | + 'Attendee.ATT_city' => array('LIKE', $search_string), |
|
| 1424 | + 'REG_final_price' => array('LIKE', $search_string), |
|
| 1425 | + 'REG_code' => array('LIKE', $search_string), |
|
| 1426 | + 'REG_count' => array('LIKE', $search_string), |
|
| 1427 | + 'REG_group_size' => array('LIKE', $search_string), |
|
| 1428 | + 'Ticket.TKT_name' => array('LIKE', $search_string), |
|
| 1429 | + 'Ticket.TKT_description' => array('LIKE', $search_string), |
|
| 1430 | + 'Transaction.Payment.PAY_txn_id_chq_nmbr' => array('LIKE', $search_string), |
|
| 1431 | + ); |
|
| 1432 | + } |
|
| 1433 | + return $where; |
|
| 1434 | + } |
|
| 1435 | + |
|
| 1436 | + |
|
| 1437 | + /** |
|
| 1438 | + * Sets up the where conditions for the registrations query. |
|
| 1439 | + * |
|
| 1440 | + * @param array $request |
|
| 1441 | + * @return array |
|
| 1442 | + * @throws EE_Error |
|
| 1443 | + */ |
|
| 1444 | + protected function _get_where_conditions_for_registrations_query($request) |
|
| 1445 | + { |
|
| 1446 | + return apply_filters( |
|
| 1447 | + 'FHEE__Registrations_Admin_Page___get_where_conditions_for_registrations_query', |
|
| 1448 | + array_merge( |
|
| 1449 | + $this->addAttendeeIdToWhereConditions($request), |
|
| 1450 | + $this->_add_event_id_to_where_conditions($request), |
|
| 1451 | + $this->_add_category_id_to_where_conditions($request), |
|
| 1452 | + $this->_add_datetime_id_to_where_conditions($request), |
|
| 1453 | + $this->_add_registration_status_to_where_conditions($request), |
|
| 1454 | + $this->_add_date_to_where_conditions($request), |
|
| 1455 | + $this->_add_search_to_where_conditions($request) |
|
| 1456 | + ), |
|
| 1457 | + $request |
|
| 1458 | + ); |
|
| 1459 | + } |
|
| 1460 | + |
|
| 1461 | + |
|
| 1462 | + /** |
|
| 1463 | + * Sets up the orderby for the registrations query. |
|
| 1464 | + * |
|
| 1465 | + * @return array |
|
| 1466 | + */ |
|
| 1467 | + protected function _get_orderby_for_registrations_query() |
|
| 1468 | + { |
|
| 1469 | + $orderby_field = ! empty($this->_req_data['orderby']) |
|
| 1470 | + ? sanitize_text_field($this->_req_data['orderby']) |
|
| 1471 | + : ''; |
|
| 1472 | + switch ($orderby_field) { |
|
| 1473 | + case '_REG_ID': |
|
| 1474 | + $orderby = array('REG_ID'); |
|
| 1475 | + break; |
|
| 1476 | + case '_Reg_status': |
|
| 1477 | + $orderby = array('STS_ID'); |
|
| 1478 | + break; |
|
| 1479 | + case 'ATT_fname': |
|
| 1480 | + $orderby = array('Attendee.ATT_fname', 'Attendee.ATT_lname'); |
|
| 1481 | + break; |
|
| 1482 | + case 'ATT_lname': |
|
| 1483 | + $orderby = array('Attendee.ATT_lname', 'Attendee.ATT_fname'); |
|
| 1484 | + break; |
|
| 1485 | + case 'event_name': |
|
| 1486 | + $orderby = array('Event.EVT_name'); |
|
| 1487 | + break; |
|
| 1488 | + case 'DTT_EVT_start': |
|
| 1489 | + $orderby = array('Event.Datetime.DTT_EVT_start'); |
|
| 1490 | + break; |
|
| 1491 | + default: //'REG_date' |
|
| 1492 | + $orderby = array('REG_date'); |
|
| 1493 | + } |
|
| 1494 | + |
|
| 1495 | + //order |
|
| 1496 | + $order = ! empty($this->_req_data['order']) |
|
| 1497 | + ? sanitize_text_field($this->_req_data['order']) |
|
| 1498 | + : 'DESC'; |
|
| 1499 | + $orderby = array_combine( |
|
| 1500 | + $orderby, |
|
| 1501 | + array_fill(0, count($orderby), $order) |
|
| 1502 | + ); |
|
| 1503 | + //because there are many registrations with the same date, define |
|
| 1504 | + //a secondary way to order them, otherwise MySQL seems to be a bit random |
|
| 1505 | + if (empty($orderby['REG_ID'])) { |
|
| 1506 | + $orderby['REG_ID'] = $order; |
|
| 1507 | + } |
|
| 1508 | + return array('order_by' => $orderby); |
|
| 1509 | + } |
|
| 1510 | + |
|
| 1511 | + |
|
| 1512 | + /** |
|
| 1513 | + * Sets up the limit for the registrations query. |
|
| 1514 | + * |
|
| 1515 | + * @param $per_page |
|
| 1516 | + * @return array |
|
| 1517 | + */ |
|
| 1518 | + protected function _get_limit($per_page) |
|
| 1519 | + { |
|
| 1520 | + $current_page = ! empty($this->_req_data['paged']) |
|
| 1521 | + ? absint($this->_req_data['paged']) |
|
| 1522 | + : 1; |
|
| 1523 | + $per_page = ! empty($this->_req_data['perpage']) |
|
| 1524 | + ? $this->_req_data['perpage'] |
|
| 1525 | + : $per_page; |
|
| 1526 | + |
|
| 1527 | + //-1 means return all results so get out if that's set. |
|
| 1528 | + if ((int)$per_page === -1) { |
|
| 1529 | + return array(); |
|
| 1530 | + } |
|
| 1531 | + $per_page = absint($per_page); |
|
| 1532 | + $offset = ($current_page - 1) * $per_page; |
|
| 1533 | + return array('limit' => array($offset, $per_page)); |
|
| 1534 | + } |
|
| 1535 | + |
|
| 1536 | + |
|
| 1537 | + public function get_registration_status_array() |
|
| 1538 | + { |
|
| 1539 | + return self::$_reg_status; |
|
| 1540 | + } |
|
| 1541 | + |
|
| 1542 | + |
|
| 1543 | + |
|
| 1544 | + |
|
| 1545 | + /*************************************** REGISTRATION DETAILS ***************************************/ |
|
| 1546 | + /** |
|
| 1547 | + * generates HTML for the View Registration Details Admin page |
|
| 1548 | + * |
|
| 1549 | + * @access protected |
|
| 1550 | + * @return void |
|
| 1551 | + * @throws DomainException |
|
| 1552 | + * @throws EE_Error |
|
| 1553 | + * @throws InvalidArgumentException |
|
| 1554 | + * @throws InvalidDataTypeException |
|
| 1555 | + * @throws InvalidInterfaceException |
|
| 1556 | + * @throws EntityNotFoundException |
|
| 1557 | + */ |
|
| 1558 | + protected function _registration_details() |
|
| 1559 | + { |
|
| 1560 | + $this->_template_args = array(); |
|
| 1561 | + $this->_set_registration_object(); |
|
| 1562 | + if (is_object($this->_registration)) { |
|
| 1563 | + $transaction = $this->_registration->transaction() |
|
| 1564 | + ? $this->_registration->transaction() |
|
| 1565 | + : EE_Transaction::new_instance(); |
|
| 1566 | + $this->_session = $transaction->session_data(); |
|
| 1567 | + $event_id = $this->_registration->event_ID(); |
|
| 1568 | + $this->_template_args['reg_nmbr']['value'] = $this->_registration->ID(); |
|
| 1569 | + $this->_template_args['reg_nmbr']['label'] = esc_html__('Registration Number', 'event_espresso'); |
|
| 1570 | + $this->_template_args['reg_datetime']['value'] = $this->_registration->get_i18n_datetime('REG_date'); |
|
| 1571 | + $this->_template_args['reg_datetime']['label'] = esc_html__('Date', 'event_espresso'); |
|
| 1572 | + $this->_template_args['grand_total'] = $transaction->total(); |
|
| 1573 | + $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
| 1574 | + // link back to overview |
|
| 1575 | + $this->_template_args['reg_overview_url'] = REG_ADMIN_URL; |
|
| 1576 | + $this->_template_args['registration'] = $this->_registration; |
|
| 1577 | + $this->_template_args['filtered_registrations_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1578 | + array( |
|
| 1579 | + 'action' => 'default', |
|
| 1580 | + 'event_id' => $event_id, |
|
| 1581 | + ), |
|
| 1582 | + REG_ADMIN_URL |
|
| 1583 | + ); |
|
| 1584 | + $this->_template_args['filtered_transactions_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1585 | + array( |
|
| 1586 | + 'action' => 'default', |
|
| 1587 | + 'EVT_ID' => $event_id, |
|
| 1588 | + 'page' => 'espresso_transactions', |
|
| 1589 | + ), |
|
| 1590 | + admin_url('admin.php') |
|
| 1591 | + ); |
|
| 1592 | + $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1593 | + array( |
|
| 1594 | + 'page' => 'espresso_events', |
|
| 1595 | + 'action' => 'edit', |
|
| 1596 | + 'post' => $event_id, |
|
| 1597 | + ), |
|
| 1598 | + admin_url('admin.php') |
|
| 1599 | + ); |
|
| 1600 | + //next and previous links |
|
| 1601 | + $next_reg = $this->_registration->next( |
|
| 1602 | + null, |
|
| 1603 | + array(), |
|
| 1604 | + 'REG_ID' |
|
| 1605 | + ); |
|
| 1606 | + $this->_template_args['next_registration'] = $next_reg |
|
| 1607 | + ? $this->_next_link( |
|
| 1608 | + EE_Admin_Page::add_query_args_and_nonce( |
|
| 1609 | + array( |
|
| 1610 | + 'action' => 'view_registration', |
|
| 1611 | + '_REG_ID' => $next_reg['REG_ID'], |
|
| 1612 | + ), |
|
| 1613 | + REG_ADMIN_URL |
|
| 1614 | + ), |
|
| 1615 | + 'dashicons dashicons-arrow-right ee-icon-size-22' |
|
| 1616 | + ) |
|
| 1617 | + : ''; |
|
| 1618 | + $previous_reg = $this->_registration->previous( |
|
| 1619 | + null, |
|
| 1620 | + array(), |
|
| 1621 | + 'REG_ID' |
|
| 1622 | + ); |
|
| 1623 | + $this->_template_args['previous_registration'] = $previous_reg |
|
| 1624 | + ? $this->_previous_link( |
|
| 1625 | + EE_Admin_Page::add_query_args_and_nonce( |
|
| 1626 | + array( |
|
| 1627 | + 'action' => 'view_registration', |
|
| 1628 | + '_REG_ID' => $previous_reg['REG_ID'], |
|
| 1629 | + ), |
|
| 1630 | + REG_ADMIN_URL |
|
| 1631 | + ), |
|
| 1632 | + 'dashicons dashicons-arrow-left ee-icon-size-22' |
|
| 1633 | + ) |
|
| 1634 | + : ''; |
|
| 1635 | + // grab header |
|
| 1636 | + $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_header.template.php'; |
|
| 1637 | + $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
| 1638 | + $this->_template_args['admin_page_header'] = EEH_Template::display_template( |
|
| 1639 | + $template_path, |
|
| 1640 | + $this->_template_args, |
|
| 1641 | + true |
|
| 1642 | + ); |
|
| 1643 | + } else { |
|
| 1644 | + $this->_template_args['admin_page_header'] = $this->display_espresso_notices(); |
|
| 1645 | + } |
|
| 1646 | + // the details template wrapper |
|
| 1647 | + $this->display_admin_page_with_sidebar(); |
|
| 1648 | + } |
|
| 1649 | + |
|
| 1650 | + |
|
| 1651 | + protected function _registration_details_metaboxes() |
|
| 1652 | + { |
|
| 1653 | + do_action('AHEE__Registrations_Admin_Page___registration_details_metabox__start', $this); |
|
| 1654 | + $this->_set_registration_object(); |
|
| 1655 | + $attendee = $this->_registration instanceof EE_Registration ? $this->_registration->attendee() : null; |
|
| 1656 | + add_meta_box('edit-reg-status-mbox', esc_html__('Registration Status', 'event_espresso'), |
|
| 1657 | + array($this, 'set_reg_status_buttons_metabox'), $this->wp_page_slug, 'normal', 'high'); |
|
| 1658 | + add_meta_box('edit-reg-details-mbox', esc_html__('Registration Details', 'event_espresso'), |
|
| 1659 | + array($this, '_reg_details_meta_box'), $this->wp_page_slug, 'normal', 'high'); |
|
| 1660 | + if ($attendee instanceof EE_Attendee |
|
| 1661 | + && EE_Registry::instance()->CAP->current_user_can( |
|
| 1662 | + 'ee_edit_registration', |
|
| 1663 | + 'edit-reg-questions-mbox', |
|
| 1664 | + $this->_registration->ID() |
|
| 1665 | + ) |
|
| 1666 | + ) { |
|
| 1667 | + add_meta_box( |
|
| 1668 | + 'edit-reg-questions-mbox', |
|
| 1669 | + esc_html__('Registration Form Answers', 'event_espresso'), |
|
| 1670 | + array($this, '_reg_questions_meta_box'), |
|
| 1671 | + $this->wp_page_slug, |
|
| 1672 | + 'normal', |
|
| 1673 | + 'high' |
|
| 1674 | + ); |
|
| 1675 | + } |
|
| 1676 | + add_meta_box( |
|
| 1677 | + 'edit-reg-registrant-mbox', |
|
| 1678 | + esc_html__('Contact Details', 'event_espresso'), |
|
| 1679 | + array($this, '_reg_registrant_side_meta_box'), |
|
| 1680 | + $this->wp_page_slug, |
|
| 1681 | + 'side', |
|
| 1682 | + 'high' |
|
| 1683 | + ); |
|
| 1684 | + if ($this->_registration->group_size() > 1) { |
|
| 1685 | + add_meta_box( |
|
| 1686 | + 'edit-reg-attendees-mbox', |
|
| 1687 | + esc_html__('Other Registrations in this Transaction', 'event_espresso'), |
|
| 1688 | + array($this, '_reg_attendees_meta_box'), |
|
| 1689 | + $this->wp_page_slug, |
|
| 1690 | + 'normal', |
|
| 1691 | + 'high' |
|
| 1692 | + ); |
|
| 1693 | + } |
|
| 1694 | + } |
|
| 1695 | + |
|
| 1696 | + |
|
| 1697 | + /** |
|
| 1698 | + * set_reg_status_buttons_metabox |
|
| 1699 | + * |
|
| 1700 | + * @access protected |
|
| 1701 | + * @return string |
|
| 1702 | + * @throws \EE_Error |
|
| 1703 | + */ |
|
| 1704 | + public function set_reg_status_buttons_metabox() |
|
| 1705 | + { |
|
| 1706 | + $this->_set_registration_object(); |
|
| 1707 | + $change_reg_status_form = $this->_generate_reg_status_change_form(); |
|
| 1708 | + echo $change_reg_status_form->form_open( |
|
| 1709 | + self::add_query_args_and_nonce( |
|
| 1710 | + array( |
|
| 1711 | + 'action' => 'change_reg_status', |
|
| 1712 | + ), |
|
| 1713 | + REG_ADMIN_URL |
|
| 1714 | + ) |
|
| 1715 | + ); |
|
| 1716 | + echo $change_reg_status_form->get_html(); |
|
| 1717 | + echo $change_reg_status_form->form_close(); |
|
| 1718 | + } |
|
| 1719 | + |
|
| 1720 | + |
|
| 1721 | + /** |
|
| 1722 | + * @return EE_Form_Section_Proper |
|
| 1723 | + * @throws EE_Error |
|
| 1724 | + * @throws InvalidArgumentException |
|
| 1725 | + * @throws InvalidDataTypeException |
|
| 1726 | + * @throws InvalidInterfaceException |
|
| 1727 | + * @throws \EventEspresso\core\exceptions\EntityNotFoundException |
|
| 1728 | + */ |
|
| 1729 | + protected function _generate_reg_status_change_form() |
|
| 1730 | + { |
|
| 1731 | + return new EE_Form_Section_Proper(array( |
|
| 1732 | + 'name' => 'reg_status_change_form', |
|
| 1733 | + 'html_id' => 'reg-status-change-form', |
|
| 1734 | + 'layout_strategy' => new EE_Admin_Two_Column_Layout(), |
|
| 1735 | + 'subsections' => array( |
|
| 1736 | + 'return' => new EE_Hidden_Input(array( |
|
| 1737 | + 'name' => 'return', |
|
| 1738 | + 'default' => 'view_registration', |
|
| 1739 | + )), |
|
| 1740 | + 'REG_ID' => new EE_Hidden_Input(array( |
|
| 1741 | + 'name' => 'REG_ID', |
|
| 1742 | + 'default' => $this->_registration->ID(), |
|
| 1743 | + )), |
|
| 1744 | + 'current_status' => new EE_Form_Section_HTML( |
|
| 1745 | + EEH_HTML::tr( |
|
| 1746 | + EEH_HTML::th( |
|
| 1747 | + EEH_HTML::label( |
|
| 1748 | + EEH_HTML::strong(esc_html__('Current Registration Status', 'event_espresso') |
|
| 1749 | + ) |
|
| 1750 | + ) |
|
| 1751 | + ) |
|
| 1752 | + . EEH_HTML::td( |
|
| 1753 | + EEH_HTML::strong( |
|
| 1754 | + $this->_registration->pretty_status(), |
|
| 1755 | + '', |
|
| 1756 | + 'status-' . $this->_registration->status_ID(), |
|
| 1757 | + 'line-height: 1em; font-size: 1.5em; font-weight: bold;' |
|
| 1758 | + ) |
|
| 1759 | + ) |
|
| 1760 | + ) |
|
| 1761 | + ), |
|
| 1762 | + 'reg_status' => new EE_Select_Input( |
|
| 1763 | + $this->_get_reg_statuses(), |
|
| 1764 | + array( |
|
| 1765 | + 'html_label_text' => esc_html__('Change Registration Status to', 'event_espresso'), |
|
| 1766 | + 'default' => $this->_registration->status_ID(), |
|
| 1767 | + ) |
|
| 1768 | + ), |
|
| 1769 | + 'send_notifications' => new EE_Yes_No_Input( |
|
| 1770 | + array( |
|
| 1771 | + 'html_label_text' => esc_html__('Send Related Messages', 'event_espresso'), |
|
| 1772 | + 'default' => false, |
|
| 1773 | + 'html_help_text' => esc_html__( |
|
| 1774 | + 'If set to "Yes", then the related messages will be sent to the registrant.', |
|
| 1775 | + 'event_espresso' |
|
| 1776 | + ), |
|
| 1777 | + ) |
|
| 1778 | + ), |
|
| 1779 | + 'submit' => new EE_Submit_Input( |
|
| 1780 | + array( |
|
| 1781 | + 'html_class' => 'button-primary', |
|
| 1782 | + 'html_label_text' => ' ', |
|
| 1783 | + 'default' => esc_html__('Update Registration Status', 'event_espresso'), |
|
| 1784 | + ) |
|
| 1785 | + ), |
|
| 1786 | + ), |
|
| 1787 | + )); |
|
| 1788 | + } |
|
| 1789 | + |
|
| 1790 | + |
|
| 1791 | + /** |
|
| 1792 | + * Returns an array of all the buttons for the various statuses and switch status actions |
|
| 1793 | + * |
|
| 1794 | + * @return array |
|
| 1795 | + * @throws EE_Error |
|
| 1796 | + * @throws InvalidArgumentException |
|
| 1797 | + * @throws InvalidDataTypeException |
|
| 1798 | + * @throws InvalidInterfaceException |
|
| 1799 | + * @throws EntityNotFoundException |
|
| 1800 | + */ |
|
| 1801 | + protected function _get_reg_statuses() |
|
| 1802 | + { |
|
| 1803 | + $reg_status_array = EEM_Registration::instance()->reg_status_array(); |
|
| 1804 | + unset ($reg_status_array[EEM_Registration::status_id_incomplete]); |
|
| 1805 | + // get current reg status |
|
| 1806 | + $current_status = $this->_registration->status_ID(); |
|
| 1807 | + // is registration for free event? This will determine whether to display the pending payment option |
|
| 1808 | + if ( |
|
| 1809 | + $current_status !== EEM_Registration::status_id_pending_payment |
|
| 1810 | + && EEH_Money::compare_floats($this->_registration->ticket()->price(), 0.00) |
|
| 1811 | + ) { |
|
| 1812 | + unset($reg_status_array[EEM_Registration::status_id_pending_payment]); |
|
| 1813 | + } |
|
| 1814 | + return EEM_Status::instance()->localized_status($reg_status_array, false, 'sentence'); |
|
| 1815 | + } |
|
| 1816 | + |
|
| 1817 | + |
|
| 1818 | + /** |
|
| 1819 | + * This method is used when using _REG_ID from request which may or may not be an array of reg_ids. |
|
| 1820 | + * |
|
| 1821 | + * @param bool $status REG status given for changing registrations to. |
|
| 1822 | + * @param bool $notify Whether to send messages notifications or not. |
|
| 1823 | + * @return array (array with reg_id(s) updated and whether update was successful. |
|
| 1824 | + * @throws EE_Error |
|
| 1825 | + * @throws InvalidArgumentException |
|
| 1826 | + * @throws InvalidDataTypeException |
|
| 1827 | + * @throws InvalidInterfaceException |
|
| 1828 | + * @throws ReflectionException |
|
| 1829 | + * @throws RuntimeException |
|
| 1830 | + * @throws EntityNotFoundException |
|
| 1831 | + */ |
|
| 1832 | + protected function _set_registration_status_from_request($status = false, $notify = false) |
|
| 1833 | + { |
|
| 1834 | + if (isset($this->_req_data['reg_status_change_form'])) { |
|
| 1835 | + $REG_IDs = isset($this->_req_data['reg_status_change_form']['REG_ID']) |
|
| 1836 | + ? (array)$this->_req_data['reg_status_change_form']['REG_ID'] |
|
| 1837 | + : array(); |
|
| 1838 | + } else { |
|
| 1839 | + $REG_IDs = isset($this->_req_data['_REG_ID']) |
|
| 1840 | + ? (array)$this->_req_data['_REG_ID'] |
|
| 1841 | + : array(); |
|
| 1842 | + } |
|
| 1843 | + // sanitize $REG_IDs |
|
| 1844 | + $REG_IDs = array_map('absint', $REG_IDs); |
|
| 1845 | + // and remove empty entries |
|
| 1846 | + $REG_IDs = array_filter($REG_IDs); |
|
| 1847 | + |
|
| 1848 | + $result = $this->_set_registration_status($REG_IDs, $status, $notify); |
|
| 1849 | + |
|
| 1850 | + /** |
|
| 1851 | + * Set and filter $_req_data['_REG_ID'] for any potential future messages notifications. |
|
| 1852 | + * Currently this value is used downstream by the _process_resend_registration method. |
|
| 1853 | + * |
|
| 1854 | + * @param int|array $registration_ids The registration ids that have had their status changed successfully. |
|
| 1855 | + * @param bool $status The status registrations were changed to. |
|
| 1856 | + * @param bool $success If the status was changed successfully for all registrations. |
|
| 1857 | + * @param Registrations_Admin_Page $admin_page_object |
|
| 1858 | + */ |
|
| 1859 | + $this->_req_data['_REG_ID'] = apply_filters( |
|
| 1860 | + 'FHEE__Registrations_Admin_Page___set_registration_status_from_request__REG_IDs', |
|
| 1861 | + $result['REG_ID'], |
|
| 1862 | + $status, |
|
| 1863 | + $result['success'], |
|
| 1864 | + $this |
|
| 1865 | + ); |
|
| 1866 | + |
|
| 1867 | + //notify? |
|
| 1868 | + if ($notify |
|
| 1869 | + && $result['success'] |
|
| 1870 | + && ! empty($this->_req_data['_REG_ID']) |
|
| 1871 | + && EE_Registry::instance()->CAP->current_user_can( |
|
| 1872 | + 'ee_send_message', |
|
| 1873 | + 'espresso_registrations_resend_registration' |
|
| 1874 | + ) |
|
| 1875 | + ) { |
|
| 1876 | + $this->_process_resend_registration(); |
|
| 1877 | + } |
|
| 1878 | + return $result; |
|
| 1879 | + } |
|
| 1880 | + |
|
| 1881 | + |
|
| 1882 | + /** |
|
| 1883 | + * Set the registration status for the given reg_id (which may or may not be an array, it gets typecast to an |
|
| 1884 | + * array). Note, this method does NOT take care of possible notifications. That is required by calling code. |
|
| 1885 | + * |
|
| 1886 | + * @param array $REG_IDs |
|
| 1887 | + * @param string $status |
|
| 1888 | + * @param bool $notify Used to indicate whether notification was requested or not. This determines the context |
|
| 1889 | + * slug sent with setting the registration status. |
|
| 1890 | + * @return array (an array with 'success' key representing whether status change was successful, and 'REG_ID' as |
|
| 1891 | + * @throws EE_Error |
|
| 1892 | + * @throws InvalidArgumentException |
|
| 1893 | + * @throws InvalidDataTypeException |
|
| 1894 | + * @throws InvalidInterfaceException |
|
| 1895 | + * @throws ReflectionException |
|
| 1896 | + * @throws RuntimeException |
|
| 1897 | + * @throws EntityNotFoundException |
|
| 1898 | + */ |
|
| 1899 | + protected function _set_registration_status($REG_IDs = array(), $status = '', $notify = false) |
|
| 1900 | + { |
|
| 1901 | + $success = false; |
|
| 1902 | + // typecast $REG_IDs |
|
| 1903 | + $REG_IDs = (array)$REG_IDs; |
|
| 1904 | + if ( ! empty($REG_IDs)) { |
|
| 1905 | + $success = true; |
|
| 1906 | + // set default status if none is passed |
|
| 1907 | + $status = $status ? $status : EEM_Registration::status_id_pending_payment; |
|
| 1908 | + $status_context = $notify |
|
| 1909 | + ? Domain::CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN_NOTIFY |
|
| 1910 | + : Domain::CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN; |
|
| 1911 | + //loop through REG_ID's and change status |
|
| 1912 | + foreach ($REG_IDs as $REG_ID) { |
|
| 1913 | + $registration = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
|
| 1914 | + if ($registration instanceof EE_Registration) { |
|
| 1915 | + $registration->set_status( |
|
| 1916 | + $status, |
|
| 1917 | + false, |
|
| 1918 | + new Context( |
|
| 1919 | + $status_context, |
|
| 1920 | + esc_html__( |
|
| 1921 | + 'Manually triggered status change on a Registration Admin Page route.', |
|
| 1922 | + 'event_espresso' |
|
| 1923 | + ) |
|
| 1924 | + ) |
|
| 1925 | + ); |
|
| 1926 | + $result = $registration->save(); |
|
| 1927 | + // verifying explicit fails because update *may* just return 0 for 0 rows affected |
|
| 1928 | + $success = $result !== false ? $success : false; |
|
| 1929 | + } |
|
| 1930 | + } |
|
| 1931 | + } |
|
| 1932 | + |
|
| 1933 | + //return $success and processed registrations |
|
| 1934 | + return array('REG_ID' => $REG_IDs, 'success' => $success); |
|
| 1935 | + } |
|
| 1936 | + |
|
| 1937 | + |
|
| 1938 | + /** |
|
| 1939 | + * Common logic for setting up success message and redirecting to appropriate route |
|
| 1940 | + * |
|
| 1941 | + * @param string $STS_ID status id for the registration changed to |
|
| 1942 | + * @param bool $notify indicates whether the _set_registration_status_from_request does notifications or not. |
|
| 1943 | + * @return void |
|
| 1944 | + * @throws EE_Error |
|
| 1945 | + */ |
|
| 1946 | + protected function _reg_status_change_return($STS_ID, $notify = false) |
|
| 1947 | + { |
|
| 1948 | + $result = ! empty($STS_ID) ? $this->_set_registration_status_from_request($STS_ID, $notify) |
|
| 1949 | + : array('success' => false); |
|
| 1950 | + $success = isset($result['success']) && $result['success']; |
|
| 1951 | + //setup success message |
|
| 1952 | + if ($success) { |
|
| 1953 | + if (is_array($result['REG_ID']) && count($result['REG_ID']) === 1) { |
|
| 1954 | + $msg = sprintf(esc_html__('Registration status has been set to %s', 'event_espresso'), |
|
| 1955 | + EEH_Template::pretty_status($STS_ID, false, 'lower')); |
|
| 1956 | + } else { |
|
| 1957 | + $msg = sprintf(esc_html__('Registrations have been set to %s.', 'event_espresso'), |
|
| 1958 | + EEH_Template::pretty_status($STS_ID, false, 'lower')); |
|
| 1959 | + } |
|
| 1960 | + EE_Error::add_success($msg); |
|
| 1961 | + } else { |
|
| 1962 | + EE_Error::add_error( |
|
| 1963 | + esc_html__( |
|
| 1964 | + 'Something went wrong, and the status was not changed', |
|
| 1965 | + 'event_espresso' |
|
| 1966 | + ), __FILE__, __LINE__, __FUNCTION__ |
|
| 1967 | + ); |
|
| 1968 | + } |
|
| 1969 | + if (isset($this->_req_data['return']) && $this->_req_data['return'] == 'view_registration') { |
|
| 1970 | + $route = array('action' => 'view_registration', '_REG_ID' => reset($result['REG_ID'])); |
|
| 1971 | + } else { |
|
| 1972 | + $route = array('action' => 'default'); |
|
| 1973 | + } |
|
| 1974 | + //unset nonces |
|
| 1975 | + foreach ($this->_req_data as $ref => $value) { |
|
| 1976 | + if (strpos($ref, 'nonce') !== false) { |
|
| 1977 | + unset($this->_req_data[$ref]); |
|
| 1978 | + continue; |
|
| 1979 | + } |
|
| 1980 | + $value = is_array($value) ? array_map('urlencode', $value) : urlencode($value); |
|
| 1981 | + $this->_req_data[$ref] = $value; |
|
| 1982 | + } |
|
| 1983 | + //merge request vars so that the reloaded list table contains any existing filter query params |
|
| 1984 | + $route = array_merge($this->_req_data, $route); |
|
| 1985 | + $this->_redirect_after_action($success, '', '', $route, true); |
|
| 1986 | + } |
|
| 1987 | + |
|
| 1988 | + |
|
| 1989 | + /** |
|
| 1990 | + * incoming reg status change from reg details page. |
|
| 1991 | + * |
|
| 1992 | + * @return void |
|
| 1993 | + */ |
|
| 1994 | + protected function _change_reg_status() |
|
| 1995 | + { |
|
| 1996 | + $this->_req_data['return'] = 'view_registration'; |
|
| 1997 | + //set notify based on whether the send notifications toggle is set or not |
|
| 1998 | + $notify = ! empty($this->_req_data['reg_status_change_form']['send_notifications']); |
|
| 1999 | + //$notify = ! empty( $this->_req_data['txn_reg_status_change']['send_notifications'] ); |
|
| 2000 | + $this->_req_data['reg_status_change_form']['reg_status'] = isset($this->_req_data['reg_status_change_form']['reg_status']) |
|
| 2001 | + ? $this->_req_data['reg_status_change_form']['reg_status'] : ''; |
|
| 2002 | + switch ($this->_req_data['reg_status_change_form']['reg_status']) { |
|
| 2003 | + case EEM_Registration::status_id_approved : |
|
| 2004 | + case EEH_Template::pretty_status(EEM_Registration::status_id_approved, false, 'sentence') : |
|
| 2005 | + $this->approve_registration($notify); |
|
| 2006 | + break; |
|
| 2007 | + case EEM_Registration::status_id_pending_payment : |
|
| 2008 | + case EEH_Template::pretty_status(EEM_Registration::status_id_pending_payment, false, 'sentence') : |
|
| 2009 | + $this->pending_registration($notify); |
|
| 2010 | + break; |
|
| 2011 | + case EEM_Registration::status_id_not_approved : |
|
| 2012 | + case EEH_Template::pretty_status(EEM_Registration::status_id_not_approved, false, 'sentence') : |
|
| 2013 | + $this->not_approve_registration($notify); |
|
| 2014 | + break; |
|
| 2015 | + case EEM_Registration::status_id_declined : |
|
| 2016 | + case EEH_Template::pretty_status(EEM_Registration::status_id_declined, false, 'sentence') : |
|
| 2017 | + $this->decline_registration($notify); |
|
| 2018 | + break; |
|
| 2019 | + case EEM_Registration::status_id_cancelled : |
|
| 2020 | + case EEH_Template::pretty_status(EEM_Registration::status_id_cancelled, false, 'sentence') : |
|
| 2021 | + $this->cancel_registration($notify); |
|
| 2022 | + break; |
|
| 2023 | + case EEM_Registration::status_id_wait_list : |
|
| 2024 | + case EEH_Template::pretty_status(EEM_Registration::status_id_wait_list, false, 'sentence') : |
|
| 2025 | + $this->wait_list_registration($notify); |
|
| 2026 | + break; |
|
| 2027 | + case EEM_Registration::status_id_incomplete : |
|
| 2028 | + default : |
|
| 2029 | + $result['success'] = false; |
|
| 2030 | + unset($this->_req_data['return']); |
|
| 2031 | + $this->_reg_status_change_return('', false); |
|
| 2032 | + break; |
|
| 2033 | + } |
|
| 2034 | + } |
|
| 2035 | + |
|
| 2036 | + |
|
| 2037 | + /** |
|
| 2038 | + * Callback for bulk action routes. |
|
| 2039 | + * Note: although we could just register the singular route callbacks for each bulk action route as well, this |
|
| 2040 | + * method was chosen so there is one central place all the registration status bulk actions are going through. |
|
| 2041 | + * Potentially, this provides an easier place to locate logic that is specific to these bulk actions (as opposed to |
|
| 2042 | + * when an action is happening on just a single registration). |
|
| 2043 | + * @param $action |
|
| 2044 | + * @param bool $notify |
|
| 2045 | + */ |
|
| 2046 | + protected function bulk_action_on_registrations($action, $notify = false) { |
|
| 2047 | + do_action( |
|
| 2048 | + 'AHEE__Registrations_Admin_Page__bulk_action_on_registrations__before_execution', |
|
| 2049 | + $this, |
|
| 2050 | + $action, |
|
| 2051 | + $notify |
|
| 2052 | + ); |
|
| 2053 | + $method = $action . '_registration'; |
|
| 2054 | + if (method_exists($this, $method)) { |
|
| 2055 | + $this->$method($notify); |
|
| 2056 | + } |
|
| 2057 | + } |
|
| 2058 | + |
|
| 2059 | + |
|
| 2060 | + /** |
|
| 2061 | + * approve_registration |
|
| 2062 | + * |
|
| 2063 | + * @access protected |
|
| 2064 | + * @param bool $notify whether or not to notify the registrant about their approval. |
|
| 2065 | + * @return void |
|
| 2066 | + */ |
|
| 2067 | + protected function approve_registration($notify = false) |
|
| 2068 | + { |
|
| 2069 | + $this->_reg_status_change_return(EEM_Registration::status_id_approved, $notify); |
|
| 2070 | + } |
|
| 2071 | + |
|
| 2072 | + |
|
| 2073 | + /** |
|
| 2074 | + * decline_registration |
|
| 2075 | + * |
|
| 2076 | + * @access protected |
|
| 2077 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2078 | + * @return void |
|
| 2079 | + */ |
|
| 2080 | + protected function decline_registration($notify = false) |
|
| 2081 | + { |
|
| 2082 | + $this->_reg_status_change_return(EEM_Registration::status_id_declined, $notify); |
|
| 2083 | + } |
|
| 2084 | + |
|
| 2085 | + |
|
| 2086 | + /** |
|
| 2087 | + * cancel_registration |
|
| 2088 | + * |
|
| 2089 | + * @access protected |
|
| 2090 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2091 | + * @return void |
|
| 2092 | + */ |
|
| 2093 | + protected function cancel_registration($notify = false) |
|
| 2094 | + { |
|
| 2095 | + $this->_reg_status_change_return(EEM_Registration::status_id_cancelled, $notify); |
|
| 2096 | + } |
|
| 2097 | + |
|
| 2098 | + |
|
| 2099 | + /** |
|
| 2100 | + * not_approve_registration |
|
| 2101 | + * |
|
| 2102 | + * @access protected |
|
| 2103 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2104 | + * @return void |
|
| 2105 | + */ |
|
| 2106 | + protected function not_approve_registration($notify = false) |
|
| 2107 | + { |
|
| 2108 | + $this->_reg_status_change_return(EEM_Registration::status_id_not_approved, $notify); |
|
| 2109 | + } |
|
| 2110 | + |
|
| 2111 | + |
|
| 2112 | + /** |
|
| 2113 | + * decline_registration |
|
| 2114 | + * |
|
| 2115 | + * @access protected |
|
| 2116 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2117 | + * @return void |
|
| 2118 | + */ |
|
| 2119 | + protected function pending_registration($notify = false) |
|
| 2120 | + { |
|
| 2121 | + $this->_reg_status_change_return(EEM_Registration::status_id_pending_payment, $notify); |
|
| 2122 | + } |
|
| 2123 | + |
|
| 2124 | + |
|
| 2125 | + /** |
|
| 2126 | + * waitlist_registration |
|
| 2127 | + * |
|
| 2128 | + * @access protected |
|
| 2129 | + * @param bool $notify whether or not to notify the registrant about their status change. |
|
| 2130 | + * @return void |
|
| 2131 | + */ |
|
| 2132 | + protected function wait_list_registration($notify = false) |
|
| 2133 | + { |
|
| 2134 | + $this->_reg_status_change_return(EEM_Registration::status_id_wait_list, $notify); |
|
| 2135 | + } |
|
| 2136 | + |
|
| 2137 | + |
|
| 2138 | + /** |
|
| 2139 | + * generates HTML for the Registration main meta box |
|
| 2140 | + * |
|
| 2141 | + * @access public |
|
| 2142 | + * @return void |
|
| 2143 | + * @throws DomainException |
|
| 2144 | + * @throws EE_Error |
|
| 2145 | + * @throws InvalidArgumentException |
|
| 2146 | + * @throws InvalidDataTypeException |
|
| 2147 | + * @throws InvalidInterfaceException |
|
| 2148 | + * @throws ReflectionException |
|
| 2149 | + * @throws EntityNotFoundException |
|
| 2150 | + */ |
|
| 2151 | + public function _reg_details_meta_box() |
|
| 2152 | + { |
|
| 2153 | + EEH_Autoloader::register_line_item_display_autoloaders(); |
|
| 2154 | + EEH_Autoloader::register_line_item_filter_autoloaders(); |
|
| 2155 | + EE_Registry::instance()->load_helper('Line_Item'); |
|
| 2156 | + $transaction = $this->_registration->transaction() ? $this->_registration->transaction() |
|
| 2157 | + : EE_Transaction::new_instance(); |
|
| 2158 | + $this->_session = $transaction->session_data(); |
|
| 2159 | + $filters = new EE_Line_Item_Filter_Collection(); |
|
| 2160 | + //$filters->add( new EE_Non_Zero_Line_Item_Filter() ); |
|
| 2161 | + $filters->add(new EE_Single_Registration_Line_Item_Filter($this->_registration)); |
|
| 2162 | + $line_item_filter_processor = new EE_Line_Item_Filter_Processor($filters, |
|
| 2163 | + $transaction->total_line_item()); |
|
| 2164 | + $filtered_line_item_tree = $line_item_filter_processor->process(); |
|
| 2165 | + $line_item_display = new EE_Line_Item_Display('reg_admin_table', |
|
| 2166 | + 'EE_Admin_Table_Registration_Line_Item_Display_Strategy'); |
|
| 2167 | + $this->_template_args['line_item_table'] = $line_item_display->display_line_item( |
|
| 2168 | + $filtered_line_item_tree, |
|
| 2169 | + array('EE_Registration' => $this->_registration) |
|
| 2170 | + ); |
|
| 2171 | + $attendee = $this->_registration->attendee(); |
|
| 2172 | + if (EE_Registry::instance()->CAP->current_user_can( |
|
| 2173 | + 'ee_read_transaction', |
|
| 2174 | + 'espresso_transactions_view_transaction' |
|
| 2175 | + )) { |
|
| 2176 | + $this->_template_args['view_transaction_button'] = EEH_Template::get_button_or_link( |
|
| 2177 | + EE_Admin_Page::add_query_args_and_nonce( |
|
| 2178 | + array( |
|
| 2179 | + 'action' => 'view_transaction', |
|
| 2180 | + 'TXN_ID' => $transaction->ID(), |
|
| 2181 | + ), |
|
| 2182 | + TXN_ADMIN_URL |
|
| 2183 | + ), |
|
| 2184 | + esc_html__(' View Transaction', 'event_espresso'), |
|
| 2185 | + 'button secondary-button right', |
|
| 2186 | + 'dashicons dashicons-cart' |
|
| 2187 | + ); |
|
| 2188 | + } else { |
|
| 2189 | + $this->_template_args['view_transaction_button'] = ''; |
|
| 2190 | + } |
|
| 2191 | + if ($attendee instanceof EE_Attendee |
|
| 2192 | + && EE_Registry::instance()->CAP->current_user_can( |
|
| 2193 | + 'ee_send_message', |
|
| 2194 | + 'espresso_registrations_resend_registration' |
|
| 2195 | + ) |
|
| 2196 | + ) { |
|
| 2197 | + $this->_template_args['resend_registration_button'] = EEH_Template::get_button_or_link( |
|
| 2198 | + EE_Admin_Page::add_query_args_and_nonce( |
|
| 2199 | + array( |
|
| 2200 | + 'action' => 'resend_registration', |
|
| 2201 | + '_REG_ID' => $this->_registration->ID(), |
|
| 2202 | + 'redirect_to' => 'view_registration', |
|
| 2203 | + ), |
|
| 2204 | + REG_ADMIN_URL |
|
| 2205 | + ), |
|
| 2206 | + esc_html__(' Resend Registration', 'event_espresso'), |
|
| 2207 | + 'button secondary-button right', |
|
| 2208 | + 'dashicons dashicons-email-alt' |
|
| 2209 | + ); |
|
| 2210 | + } else { |
|
| 2211 | + $this->_template_args['resend_registration_button'] = ''; |
|
| 2212 | + } |
|
| 2213 | + $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
| 2214 | + $payment = $transaction->get_first_related('Payment'); |
|
| 2215 | + $payment = ! $payment instanceof EE_Payment |
|
| 2216 | + ? EE_Payment::new_instance() |
|
| 2217 | + : $payment; |
|
| 2218 | + $payment_method = $payment->get_first_related('Payment_Method'); |
|
| 2219 | + $payment_method = ! $payment_method instanceof EE_Payment_Method |
|
| 2220 | + ? EE_Payment_Method::new_instance() |
|
| 2221 | + : $payment_method; |
|
| 2222 | + $reg_details = array( |
|
| 2223 | + 'payment_method' => $payment_method->name(), |
|
| 2224 | + 'response_msg' => $payment->gateway_response(), |
|
| 2225 | + 'registration_id' => $this->_registration->get('REG_code'), |
|
| 2226 | + 'registration_session' => $this->_registration->session_ID(), |
|
| 2227 | + 'ip_address' => isset($this->_session['ip_address']) ? $this->_session['ip_address'] : '', |
|
| 2228 | + 'user_agent' => isset($this->_session['user_agent']) ? $this->_session['user_agent'] : '', |
|
| 2229 | + ); |
|
| 2230 | + if (isset($reg_details['registration_id'])) { |
|
| 2231 | + $this->_template_args['reg_details']['registration_id']['value'] = $reg_details['registration_id']; |
|
| 2232 | + $this->_template_args['reg_details']['registration_id']['label'] = esc_html__( |
|
| 2233 | + 'Registration ID', |
|
| 2234 | + 'event_espresso' |
|
| 2235 | + ); |
|
| 2236 | + $this->_template_args['reg_details']['registration_id']['class'] = 'regular-text'; |
|
| 2237 | + } |
|
| 2238 | + if (isset($reg_details['payment_method'])) { |
|
| 2239 | + $this->_template_args['reg_details']['payment_method']['value'] = $reg_details['payment_method']; |
|
| 2240 | + $this->_template_args['reg_details']['payment_method']['label'] = esc_html__( |
|
| 2241 | + 'Most Recent Payment Method', |
|
| 2242 | + 'event_espresso' |
|
| 2243 | + ); |
|
| 2244 | + $this->_template_args['reg_details']['payment_method']['class'] = 'regular-text'; |
|
| 2245 | + $this->_template_args['reg_details']['response_msg']['value'] = $reg_details['response_msg']; |
|
| 2246 | + $this->_template_args['reg_details']['response_msg']['label'] = esc_html__( |
|
| 2247 | + 'Payment method response', |
|
| 2248 | + 'event_espresso' |
|
| 2249 | + ); |
|
| 2250 | + $this->_template_args['reg_details']['response_msg']['class'] = 'regular-text'; |
|
| 2251 | + } |
|
| 2252 | + $this->_template_args['reg_details']['registration_session']['value'] = $reg_details['registration_session']; |
|
| 2253 | + $this->_template_args['reg_details']['registration_session']['label'] = esc_html__( |
|
| 2254 | + 'Registration Session', |
|
| 2255 | + 'event_espresso' |
|
| 2256 | + ); |
|
| 2257 | + $this->_template_args['reg_details']['registration_session']['class'] = 'regular-text'; |
|
| 2258 | + $this->_template_args['reg_details']['ip_address']['value'] = $reg_details['ip_address']; |
|
| 2259 | + $this->_template_args['reg_details']['ip_address']['label'] = esc_html__( |
|
| 2260 | + 'Registration placed from IP', |
|
| 2261 | + 'event_espresso' |
|
| 2262 | + ); |
|
| 2263 | + $this->_template_args['reg_details']['ip_address']['class'] = 'regular-text'; |
|
| 2264 | + $this->_template_args['reg_details']['user_agent']['value'] = $reg_details['user_agent']; |
|
| 2265 | + $this->_template_args['reg_details']['user_agent']['label'] = esc_html__('Registrant User Agent', |
|
| 2266 | + 'event_espresso'); |
|
| 2267 | + $this->_template_args['reg_details']['user_agent']['class'] = 'large-text'; |
|
| 2268 | + $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 2269 | + array( |
|
| 2270 | + 'action' => 'default', |
|
| 2271 | + 'event_id' => $this->_registration->event_ID(), |
|
| 2272 | + ), |
|
| 2273 | + REG_ADMIN_URL |
|
| 2274 | + ); |
|
| 2275 | + $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
| 2276 | + $this->_template_args['event_id'] = $this->_registration->event_ID(); |
|
| 2277 | + $template_path = |
|
| 2278 | + REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_details.template.php'; |
|
| 2279 | + echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
| 2280 | + } |
|
| 2281 | + |
|
| 2282 | + |
|
| 2283 | + /** |
|
| 2284 | + * generates HTML for the Registration Questions meta box. |
|
| 2285 | + * If pre-4.8.32.rc.000 hooks are used, uses old methods (with its filters), |
|
| 2286 | + * otherwise uses new forms system |
|
| 2287 | + * |
|
| 2288 | + * @access public |
|
| 2289 | + * @return void |
|
| 2290 | + * @throws DomainException |
|
| 2291 | + * @throws EE_Error |
|
| 2292 | + */ |
|
| 2293 | + public function _reg_questions_meta_box() |
|
| 2294 | + { |
|
| 2295 | + //allow someone to override this method entirely |
|
| 2296 | + if (apply_filters('FHEE__Registrations_Admin_Page___reg_questions_meta_box__do_default', true, $this, |
|
| 2297 | + $this->_registration)) { |
|
| 2298 | + $form = $this->_get_reg_custom_questions_form( |
|
| 2299 | + $this->_registration->ID() |
|
| 2300 | + ); |
|
| 2301 | + $this->_template_args['att_questions'] = count($form->subforms()) > 0 |
|
| 2302 | + ? $form->get_html_and_js() |
|
| 2303 | + : ''; |
|
| 2304 | + $this->_template_args['reg_questions_form_action'] = 'edit_registration'; |
|
| 2305 | + $this->_template_args['REG_ID'] = $this->_registration->ID(); |
|
| 2306 | + $template_path = |
|
| 2307 | + REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_questions.template.php'; |
|
| 2308 | + echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
| 2309 | + } |
|
| 2310 | + } |
|
| 2311 | + |
|
| 2312 | + |
|
| 2313 | + /** |
|
| 2314 | + * form_before_question_group |
|
| 2315 | + * |
|
| 2316 | + * @deprecated as of 4.8.32.rc.000 |
|
| 2317 | + * @access public |
|
| 2318 | + * @param string $output |
|
| 2319 | + * @return string |
|
| 2320 | + */ |
|
| 2321 | + public function form_before_question_group($output) |
|
| 2322 | + { |
|
| 2323 | + EE_Error::doing_it_wrong( |
|
| 2324 | + __CLASS__ . '::' . __FUNCTION__, |
|
| 2325 | + esc_html__( |
|
| 2326 | + '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.', |
|
| 2327 | + 'event_espresso' |
|
| 2328 | + ), |
|
| 2329 | + '4.8.32.rc.000' |
|
| 2330 | + ); |
|
| 2331 | + return ' |
|
| 2332 | 2332 | <table class="form-table ee-width-100"> |
| 2333 | 2333 | <tbody> |
| 2334 | 2334 | '; |
| 2335 | - } |
|
| 2336 | - |
|
| 2337 | - |
|
| 2338 | - /** |
|
| 2339 | - * form_after_question_group |
|
| 2340 | - * |
|
| 2341 | - * @deprecated as of 4.8.32.rc.000 |
|
| 2342 | - * @access public |
|
| 2343 | - * @param string $output |
|
| 2344 | - * @return string |
|
| 2345 | - */ |
|
| 2346 | - public function form_after_question_group($output) |
|
| 2347 | - { |
|
| 2348 | - EE_Error::doing_it_wrong( |
|
| 2349 | - __CLASS__ . '::' . __FUNCTION__, |
|
| 2350 | - esc_html__( |
|
| 2351 | - '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.', |
|
| 2352 | - 'event_espresso' |
|
| 2353 | - ), |
|
| 2354 | - '4.8.32.rc.000' |
|
| 2355 | - ); |
|
| 2356 | - return ' |
|
| 2335 | + } |
|
| 2336 | + |
|
| 2337 | + |
|
| 2338 | + /** |
|
| 2339 | + * form_after_question_group |
|
| 2340 | + * |
|
| 2341 | + * @deprecated as of 4.8.32.rc.000 |
|
| 2342 | + * @access public |
|
| 2343 | + * @param string $output |
|
| 2344 | + * @return string |
|
| 2345 | + */ |
|
| 2346 | + public function form_after_question_group($output) |
|
| 2347 | + { |
|
| 2348 | + EE_Error::doing_it_wrong( |
|
| 2349 | + __CLASS__ . '::' . __FUNCTION__, |
|
| 2350 | + esc_html__( |
|
| 2351 | + '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.', |
|
| 2352 | + 'event_espresso' |
|
| 2353 | + ), |
|
| 2354 | + '4.8.32.rc.000' |
|
| 2355 | + ); |
|
| 2356 | + return ' |
|
| 2357 | 2357 | <tr class="hide-if-no-js"> |
| 2358 | 2358 | <th> </th> |
| 2359 | 2359 | <td class="reg-admin-edit-attendee-question-td"> |
| 2360 | 2360 | <a class="reg-admin-edit-attendee-question-lnk" href="#" title="' |
| 2361 | - . esc_attr__('click to edit question', 'event_espresso') |
|
| 2362 | - . '"> |
|
| 2361 | + . esc_attr__('click to edit question', 'event_espresso') |
|
| 2362 | + . '"> |
|
| 2363 | 2363 | <span class="reg-admin-edit-question-group-spn lt-grey-txt">' |
| 2364 | - . esc_html__('edit the above question group', 'event_espresso') |
|
| 2365 | - . '</span> |
|
| 2364 | + . esc_html__('edit the above question group', 'event_espresso') |
|
| 2365 | + . '</span> |
|
| 2366 | 2366 | <div class="dashicons dashicons-edit"></div> |
| 2367 | 2367 | </a> |
| 2368 | 2368 | </td> |
@@ -2370,579 +2370,579 @@ discard block |
||
| 2370 | 2370 | </tbody> |
| 2371 | 2371 | </table> |
| 2372 | 2372 | '; |
| 2373 | - } |
|
| 2374 | - |
|
| 2375 | - |
|
| 2376 | - /** |
|
| 2377 | - * form_form_field_label_wrap |
|
| 2378 | - * |
|
| 2379 | - * @deprecated as of 4.8.32.rc.000 |
|
| 2380 | - * @access public |
|
| 2381 | - * @param string $label |
|
| 2382 | - * @return string |
|
| 2383 | - */ |
|
| 2384 | - public function form_form_field_label_wrap($label) |
|
| 2385 | - { |
|
| 2386 | - EE_Error::doing_it_wrong( |
|
| 2387 | - __CLASS__ . '::' . __FUNCTION__, |
|
| 2388 | - esc_html__( |
|
| 2389 | - '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.', |
|
| 2390 | - 'event_espresso' |
|
| 2391 | - ), |
|
| 2392 | - '4.8.32.rc.000' |
|
| 2393 | - ); |
|
| 2394 | - return ' |
|
| 2373 | + } |
|
| 2374 | + |
|
| 2375 | + |
|
| 2376 | + /** |
|
| 2377 | + * form_form_field_label_wrap |
|
| 2378 | + * |
|
| 2379 | + * @deprecated as of 4.8.32.rc.000 |
|
| 2380 | + * @access public |
|
| 2381 | + * @param string $label |
|
| 2382 | + * @return string |
|
| 2383 | + */ |
|
| 2384 | + public function form_form_field_label_wrap($label) |
|
| 2385 | + { |
|
| 2386 | + EE_Error::doing_it_wrong( |
|
| 2387 | + __CLASS__ . '::' . __FUNCTION__, |
|
| 2388 | + esc_html__( |
|
| 2389 | + '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.', |
|
| 2390 | + 'event_espresso' |
|
| 2391 | + ), |
|
| 2392 | + '4.8.32.rc.000' |
|
| 2393 | + ); |
|
| 2394 | + return ' |
|
| 2395 | 2395 | <tr> |
| 2396 | 2396 | <th> |
| 2397 | 2397 | ' . $label . ' |
| 2398 | 2398 | </th>'; |
| 2399 | - } |
|
| 2400 | - |
|
| 2401 | - |
|
| 2402 | - /** |
|
| 2403 | - * form_form_field_input__wrap |
|
| 2404 | - * |
|
| 2405 | - * @deprecated as of 4.8.32.rc.000 |
|
| 2406 | - * @access public |
|
| 2407 | - * @param string $input |
|
| 2408 | - * @return string |
|
| 2409 | - */ |
|
| 2410 | - public function form_form_field_input__wrap($input) |
|
| 2411 | - { |
|
| 2412 | - EE_Error::doing_it_wrong( |
|
| 2413 | - __CLASS__ . '::' . __FUNCTION__, |
|
| 2414 | - esc_html__( |
|
| 2415 | - '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.', |
|
| 2416 | - 'event_espresso' |
|
| 2417 | - ), |
|
| 2418 | - '4.8.32.rc.000' |
|
| 2419 | - ); |
|
| 2420 | - return ' |
|
| 2399 | + } |
|
| 2400 | + |
|
| 2401 | + |
|
| 2402 | + /** |
|
| 2403 | + * form_form_field_input__wrap |
|
| 2404 | + * |
|
| 2405 | + * @deprecated as of 4.8.32.rc.000 |
|
| 2406 | + * @access public |
|
| 2407 | + * @param string $input |
|
| 2408 | + * @return string |
|
| 2409 | + */ |
|
| 2410 | + public function form_form_field_input__wrap($input) |
|
| 2411 | + { |
|
| 2412 | + EE_Error::doing_it_wrong( |
|
| 2413 | + __CLASS__ . '::' . __FUNCTION__, |
|
| 2414 | + esc_html__( |
|
| 2415 | + '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.', |
|
| 2416 | + 'event_espresso' |
|
| 2417 | + ), |
|
| 2418 | + '4.8.32.rc.000' |
|
| 2419 | + ); |
|
| 2420 | + return ' |
|
| 2421 | 2421 | <td class="reg-admin-attendee-questions-input-td disabled-input"> |
| 2422 | 2422 | ' . $input . ' |
| 2423 | 2423 | </td> |
| 2424 | 2424 | </tr>'; |
| 2425 | - } |
|
| 2426 | - |
|
| 2427 | - |
|
| 2428 | - /** |
|
| 2429 | - * Updates the registration's custom questions according to the form info, if the form is submitted. |
|
| 2430 | - * If it's not a post, the "view_registrations" route will be called next on the SAME request |
|
| 2431 | - * to display the page |
|
| 2432 | - * |
|
| 2433 | - * @access protected |
|
| 2434 | - * @return void |
|
| 2435 | - * @throws EE_Error |
|
| 2436 | - */ |
|
| 2437 | - protected function _update_attendee_registration_form() |
|
| 2438 | - { |
|
| 2439 | - do_action('AHEE__Registrations_Admin_Page___update_attendee_registration_form__start', $this); |
|
| 2440 | - if ($_SERVER['REQUEST_METHOD'] == 'POST') { |
|
| 2441 | - $REG_ID = isset($this->_req_data['_REG_ID']) ? absint($this->_req_data['_REG_ID']) : false; |
|
| 2442 | - $success = $this->_save_reg_custom_questions_form($REG_ID); |
|
| 2443 | - if ($success) { |
|
| 2444 | - $what = esc_html__('Registration Form', 'event_espresso'); |
|
| 2445 | - $route = $REG_ID ? array('action' => 'view_registration', '_REG_ID' => $REG_ID) |
|
| 2446 | - : array('action' => 'default'); |
|
| 2447 | - $this->_redirect_after_action($success, $what, esc_html__('updated', 'event_espresso'), $route); |
|
| 2448 | - } |
|
| 2449 | - } |
|
| 2450 | - } |
|
| 2451 | - |
|
| 2452 | - |
|
| 2453 | - /** |
|
| 2454 | - * Gets the form for saving registrations custom questions (if done |
|
| 2455 | - * previously retrieves the cached form object, which may have validation errors in it) |
|
| 2456 | - * |
|
| 2457 | - * @param int $REG_ID |
|
| 2458 | - * @return EE_Registration_Custom_Questions_Form |
|
| 2459 | - * @throws EE_Error |
|
| 2460 | - * @throws InvalidArgumentException |
|
| 2461 | - * @throws InvalidDataTypeException |
|
| 2462 | - * @throws InvalidInterfaceException |
|
| 2463 | - */ |
|
| 2464 | - protected function _get_reg_custom_questions_form($REG_ID) |
|
| 2465 | - { |
|
| 2466 | - if ( ! $this->_reg_custom_questions_form) { |
|
| 2467 | - require_once(REG_ADMIN . 'form_sections' . DS . 'EE_Registration_Custom_Questions_Form.form.php'); |
|
| 2468 | - $this->_reg_custom_questions_form = new EE_Registration_Custom_Questions_Form( |
|
| 2469 | - EEM_Registration::instance()->get_one_by_ID($REG_ID) |
|
| 2470 | - ); |
|
| 2471 | - $this->_reg_custom_questions_form->_construct_finalize(null, null); |
|
| 2472 | - } |
|
| 2473 | - return $this->_reg_custom_questions_form; |
|
| 2474 | - } |
|
| 2475 | - |
|
| 2476 | - |
|
| 2477 | - /** |
|
| 2478 | - * Saves |
|
| 2479 | - * |
|
| 2480 | - * @access private |
|
| 2481 | - * @param bool $REG_ID |
|
| 2482 | - * @return bool |
|
| 2483 | - * @throws EE_Error |
|
| 2484 | - * @throws InvalidArgumentException |
|
| 2485 | - * @throws InvalidDataTypeException |
|
| 2486 | - * @throws InvalidInterfaceException |
|
| 2487 | - */ |
|
| 2488 | - private function _save_reg_custom_questions_form($REG_ID = false) |
|
| 2489 | - { |
|
| 2490 | - if ( ! $REG_ID) { |
|
| 2491 | - EE_Error::add_error( |
|
| 2492 | - esc_html__( |
|
| 2493 | - 'An error occurred. No registration ID was received.', 'event_espresso'), |
|
| 2494 | - __FILE__, __FUNCTION__, __LINE__ |
|
| 2495 | - ); |
|
| 2496 | - } |
|
| 2497 | - $form = $this->_get_reg_custom_questions_form($REG_ID); |
|
| 2498 | - $form->receive_form_submission($this->_req_data); |
|
| 2499 | - $success = false; |
|
| 2500 | - if ($form->is_valid()) { |
|
| 2501 | - foreach ($form->subforms() as $question_group_id => $question_group_form) { |
|
| 2502 | - foreach ($question_group_form->inputs() as $question_id => $input) { |
|
| 2503 | - $where_conditions = array( |
|
| 2504 | - 'QST_ID' => $question_id, |
|
| 2505 | - 'REG_ID' => $REG_ID, |
|
| 2506 | - ); |
|
| 2507 | - $possibly_new_values = array( |
|
| 2508 | - 'ANS_value' => $input->normalized_value(), |
|
| 2509 | - ); |
|
| 2510 | - $answer = EEM_Answer::instance()->get_one(array($where_conditions)); |
|
| 2511 | - if ($answer instanceof EE_Answer) { |
|
| 2512 | - $success = $answer->save($possibly_new_values); |
|
| 2513 | - } else { |
|
| 2514 | - //insert it then |
|
| 2515 | - $cols_n_vals = array_merge($where_conditions, $possibly_new_values); |
|
| 2516 | - $answer = EE_Answer::new_instance($cols_n_vals); |
|
| 2517 | - $success = $answer->save(); |
|
| 2518 | - } |
|
| 2519 | - } |
|
| 2520 | - } |
|
| 2521 | - } else { |
|
| 2522 | - EE_Error::add_error($form->get_validation_error_string(), __FILE__, __FUNCTION__, __LINE__); |
|
| 2523 | - } |
|
| 2524 | - return $success; |
|
| 2525 | - } |
|
| 2526 | - |
|
| 2527 | - |
|
| 2528 | - /** |
|
| 2529 | - * generates HTML for the Registration main meta box |
|
| 2530 | - * |
|
| 2531 | - * @access public |
|
| 2532 | - * @return void |
|
| 2533 | - * @throws DomainException |
|
| 2534 | - * @throws EE_Error |
|
| 2535 | - * @throws InvalidArgumentException |
|
| 2536 | - * @throws InvalidDataTypeException |
|
| 2537 | - * @throws InvalidInterfaceException |
|
| 2538 | - */ |
|
| 2539 | - public function _reg_attendees_meta_box() |
|
| 2540 | - { |
|
| 2541 | - $REG = EEM_Registration::instance(); |
|
| 2542 | - //get all other registrations on this transaction, and cache |
|
| 2543 | - //the attendees for them so we don't have to run another query using force_join |
|
| 2544 | - $registrations = $REG->get_all(array( |
|
| 2545 | - array( |
|
| 2546 | - 'TXN_ID' => $this->_registration->transaction_ID(), |
|
| 2547 | - 'REG_ID' => array('!=', $this->_registration->ID()), |
|
| 2548 | - ), |
|
| 2549 | - 'force_join' => array('Attendee'), |
|
| 2550 | - )); |
|
| 2551 | - $this->_template_args['attendees'] = array(); |
|
| 2552 | - $this->_template_args['attendee_notice'] = ''; |
|
| 2553 | - if (empty($registrations) |
|
| 2554 | - || (is_array($registrations) |
|
| 2555 | - && ! EEH_Array::get_one_item_from_array($registrations)) |
|
| 2556 | - ) { |
|
| 2557 | - EE_Error::add_error( |
|
| 2558 | - esc_html__( |
|
| 2559 | - 'There are no records attached to this registration. Something may have gone wrong with the registration', |
|
| 2560 | - 'event_espresso' |
|
| 2561 | - ), __FILE__, __FUNCTION__, __LINE__ |
|
| 2562 | - ); |
|
| 2563 | - $this->_template_args['attendee_notice'] = EE_Error::get_notices(); |
|
| 2564 | - } else { |
|
| 2565 | - $att_nmbr = 1; |
|
| 2566 | - foreach ($registrations as $registration) { |
|
| 2567 | - /* @var $registration EE_Registration */ |
|
| 2568 | - $attendee = $registration->attendee() |
|
| 2569 | - ? $registration->attendee() |
|
| 2570 | - : EEM_Attendee::instance() |
|
| 2571 | - ->create_default_object(); |
|
| 2572 | - $this->_template_args['attendees'][$att_nmbr]['STS_ID'] = $registration->status_ID(); |
|
| 2573 | - $this->_template_args['attendees'][$att_nmbr]['fname'] = $attendee->fname(); |
|
| 2574 | - $this->_template_args['attendees'][$att_nmbr]['lname'] = $attendee->lname(); |
|
| 2575 | - $this->_template_args['attendees'][$att_nmbr]['email'] = $attendee->email(); |
|
| 2576 | - $this->_template_args['attendees'][$att_nmbr]['final_price'] = $registration->final_price(); |
|
| 2577 | - $this->_template_args['attendees'][$att_nmbr]['address'] = implode( |
|
| 2578 | - ', ', |
|
| 2579 | - $attendee->full_address_as_array() |
|
| 2580 | - ); |
|
| 2581 | - $this->_template_args['attendees'][$att_nmbr]['att_link'] = self::add_query_args_and_nonce( |
|
| 2582 | - array( |
|
| 2583 | - 'action' => 'edit_attendee', |
|
| 2584 | - 'post' => $attendee->ID(), |
|
| 2585 | - ), |
|
| 2586 | - REG_ADMIN_URL |
|
| 2587 | - ); |
|
| 2588 | - $this->_template_args['attendees'][$att_nmbr]['event_name'] = $registration->event_obj()->name(); |
|
| 2589 | - $att_nmbr++; |
|
| 2590 | - } |
|
| 2591 | - $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
| 2592 | - } |
|
| 2593 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_attendees.template.php'; |
|
| 2594 | - echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
| 2595 | - } |
|
| 2596 | - |
|
| 2597 | - |
|
| 2598 | - /** |
|
| 2599 | - * generates HTML for the Edit Registration side meta box |
|
| 2600 | - * |
|
| 2601 | - * @access public |
|
| 2602 | - * @return void |
|
| 2603 | - * @throws DomainException |
|
| 2604 | - * @throws EE_Error |
|
| 2605 | - * @throws InvalidArgumentException |
|
| 2606 | - * @throws InvalidDataTypeException |
|
| 2607 | - * @throws InvalidInterfaceException |
|
| 2608 | - */ |
|
| 2609 | - public function _reg_registrant_side_meta_box() |
|
| 2610 | - { |
|
| 2611 | - /*@var $attendee EE_Attendee */ |
|
| 2612 | - $att_check = $this->_registration->attendee(); |
|
| 2613 | - $attendee = $att_check instanceof EE_Attendee ? $att_check : EEM_Attendee::instance()->create_default_object(); |
|
| 2614 | - //now let's determine if this is not the primary registration. If it isn't then we set the |
|
| 2615 | - //primary_registration object for reference BUT ONLY if the Attendee object loaded is not the same as the |
|
| 2616 | - //primary registration object (that way we know if we need to show create button or not) |
|
| 2617 | - if ( ! $this->_registration->is_primary_registrant()) { |
|
| 2618 | - $primary_registration = $this->_registration->get_primary_registration(); |
|
| 2619 | - $primary_attendee = $primary_registration instanceof EE_Registration ? $primary_registration->attendee() |
|
| 2620 | - : null; |
|
| 2621 | - if ( ! $primary_attendee instanceof EE_Attendee || $attendee->ID() !== $primary_attendee->ID()) { |
|
| 2622 | - //in here? This means the displayed registration is not the primary registrant but ALREADY HAS its own |
|
| 2623 | - //custom attendee object so let's not worry about the primary reg. |
|
| 2624 | - $primary_registration = null; |
|
| 2625 | - } |
|
| 2626 | - } else { |
|
| 2627 | - $primary_registration = null; |
|
| 2628 | - } |
|
| 2629 | - $this->_template_args['ATT_ID'] = $attendee->ID(); |
|
| 2630 | - $this->_template_args['fname'] = $attendee->fname(); |
|
| 2631 | - $this->_template_args['lname'] = $attendee->lname(); |
|
| 2632 | - $this->_template_args['email'] = $attendee->email(); |
|
| 2633 | - $this->_template_args['phone'] = $attendee->phone(); |
|
| 2634 | - $this->_template_args['formatted_address'] = EEH_Address::format($attendee); |
|
| 2635 | - //edit link |
|
| 2636 | - $this->_template_args['att_edit_link'] = EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 2637 | - 'action' => 'edit_attendee', |
|
| 2638 | - 'post' => $attendee->ID(), |
|
| 2639 | - ), REG_ADMIN_URL); |
|
| 2640 | - $this->_template_args['att_edit_label'] = esc_html__('View/Edit Contact', 'event_espresso'); |
|
| 2641 | - //create link |
|
| 2642 | - $this->_template_args['create_link'] = $primary_registration instanceof EE_Registration |
|
| 2643 | - ? EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 2644 | - 'action' => 'duplicate_attendee', |
|
| 2645 | - '_REG_ID' => $this->_registration->ID(), |
|
| 2646 | - ), REG_ADMIN_URL) : ''; |
|
| 2647 | - $this->_template_args['create_label'] = esc_html__('Create Contact', 'event_espresso'); |
|
| 2648 | - $this->_template_args['att_check'] = $att_check; |
|
| 2649 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_side_meta_box_registrant.template.php'; |
|
| 2650 | - echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
| 2651 | - } |
|
| 2652 | - |
|
| 2653 | - |
|
| 2654 | - /** |
|
| 2655 | - * trash or restore registrations |
|
| 2656 | - * |
|
| 2657 | - * @param boolean $trash whether to archive or restore |
|
| 2658 | - * @return void |
|
| 2659 | - * @throws EE_Error |
|
| 2660 | - * @throws InvalidArgumentException |
|
| 2661 | - * @throws InvalidDataTypeException |
|
| 2662 | - * @throws InvalidInterfaceException |
|
| 2663 | - * @throws RuntimeException |
|
| 2664 | - * @access protected |
|
| 2665 | - */ |
|
| 2666 | - protected function _trash_or_restore_registrations($trash = true) |
|
| 2667 | - { |
|
| 2668 | - //if empty _REG_ID then get out because there's nothing to do |
|
| 2669 | - if (empty($this->_req_data['_REG_ID'])) { |
|
| 2670 | - EE_Error::add_error( |
|
| 2671 | - sprintf( |
|
| 2672 | - esc_html__( |
|
| 2673 | - 'In order to %1$s registrations you must select which ones you wish to %1$s by clicking the checkboxes.', |
|
| 2674 | - 'event_espresso' |
|
| 2675 | - ), |
|
| 2676 | - $trash ? 'trash' : 'restore' |
|
| 2677 | - ), |
|
| 2678 | - __FILE__, __LINE__, __FUNCTION__ |
|
| 2679 | - ); |
|
| 2680 | - $this->_redirect_after_action(false, '', '', array(), true); |
|
| 2681 | - } |
|
| 2682 | - $success = 0; |
|
| 2683 | - $overwrite_msgs = false; |
|
| 2684 | - //Checkboxes |
|
| 2685 | - if ( ! is_array($this->_req_data['_REG_ID'])) { |
|
| 2686 | - $this->_req_data['_REG_ID'] = array($this->_req_data['_REG_ID']); |
|
| 2687 | - } |
|
| 2688 | - $reg_count = count($this->_req_data['_REG_ID']); |
|
| 2689 | - // cycle thru checkboxes |
|
| 2690 | - foreach ($this->_req_data['_REG_ID'] as $REG_ID) { |
|
| 2691 | - /** @var EE_Registration $REG */ |
|
| 2692 | - $REG = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
|
| 2693 | - $payments = $REG->registration_payments(); |
|
| 2694 | - if (! empty($payments)) { |
|
| 2695 | - $name = $REG->attendee() instanceof EE_Attendee |
|
| 2696 | - ? $REG->attendee()->full_name() |
|
| 2697 | - : esc_html__('Unknown Attendee', 'event_espresso'); |
|
| 2698 | - $overwrite_msgs = true; |
|
| 2699 | - EE_Error::add_error( |
|
| 2700 | - sprintf( |
|
| 2701 | - esc_html__( |
|
| 2702 | - '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.', |
|
| 2703 | - 'event_espresso' |
|
| 2704 | - ), |
|
| 2705 | - $name |
|
| 2706 | - ), |
|
| 2707 | - __FILE__, __FUNCTION__, __LINE__ |
|
| 2708 | - ); |
|
| 2709 | - //can't trash this registration because it has payments. |
|
| 2710 | - continue; |
|
| 2711 | - } |
|
| 2712 | - $updated = $trash ? $REG->delete() : $REG->restore(); |
|
| 2713 | - if ($updated) { |
|
| 2714 | - $success++; |
|
| 2715 | - } |
|
| 2716 | - } |
|
| 2717 | - $this->_redirect_after_action( |
|
| 2718 | - $success === $reg_count, // were ALL registrations affected? |
|
| 2719 | - $success > 1 |
|
| 2720 | - ? esc_html__('Registrations', 'event_espresso') |
|
| 2721 | - : esc_html__('Registration', 'event_espresso'), |
|
| 2722 | - $trash |
|
| 2723 | - ? esc_html__('moved to the trash', 'event_espresso') |
|
| 2724 | - : esc_html__('restored', 'event_espresso'), |
|
| 2725 | - array('action' => 'default'), |
|
| 2726 | - $overwrite_msgs |
|
| 2727 | - ); |
|
| 2728 | - } |
|
| 2729 | - |
|
| 2730 | - |
|
| 2731 | - /** |
|
| 2732 | - * This is used to permanently delete registrations. Note, this will handle not only deleting permanently the |
|
| 2733 | - * registration but also. |
|
| 2734 | - * 1. Removing relations to EE_Attendee |
|
| 2735 | - * 2. Deleting permanently the related transaction, but ONLY if all related registrations to the transaction are |
|
| 2736 | - * ALSO trashed. |
|
| 2737 | - * 3. Deleting permanently any related Line items but only if the above conditions are met. |
|
| 2738 | - * 4. Removing relationships between all tickets and the related registrations |
|
| 2739 | - * 5. Deleting permanently any related Answers (and the answers for other related registrations that were deleted.) |
|
| 2740 | - * 6. Deleting permanently any related Checkins. |
|
| 2741 | - * |
|
| 2742 | - * @return void |
|
| 2743 | - * @throws EE_Error |
|
| 2744 | - * @throws InvalidArgumentException |
|
| 2745 | - * @throws InvalidDataTypeException |
|
| 2746 | - * @throws InvalidInterfaceException |
|
| 2747 | - */ |
|
| 2748 | - protected function _delete_registrations() |
|
| 2749 | - { |
|
| 2750 | - $REG_MDL = EEM_Registration::instance(); |
|
| 2751 | - $success = 1; |
|
| 2752 | - //Checkboxes |
|
| 2753 | - if ( ! empty($this->_req_data['_REG_ID']) && is_array($this->_req_data['_REG_ID'])) { |
|
| 2754 | - // if array has more than one element than success message should be plural |
|
| 2755 | - $success = count($this->_req_data['_REG_ID']) > 1 ? 2 : 1; |
|
| 2756 | - // cycle thru checkboxes |
|
| 2757 | - while (list($ind, $REG_ID) = each($this->_req_data['_REG_ID'])) { |
|
| 2758 | - $REG = $REG_MDL->get_one_by_ID($REG_ID); |
|
| 2759 | - if ( ! $REG instanceof EE_Registration) { |
|
| 2760 | - continue; |
|
| 2761 | - } |
|
| 2762 | - $deleted = $this->_delete_registration($REG); |
|
| 2763 | - if ( ! $deleted) { |
|
| 2764 | - $success = 0; |
|
| 2765 | - } |
|
| 2766 | - } |
|
| 2767 | - } else { |
|
| 2768 | - // grab single id and delete |
|
| 2769 | - $REG_ID = $this->_req_data['_REG_ID']; |
|
| 2770 | - $REG = $REG_MDL->get_one_by_ID($REG_ID); |
|
| 2771 | - $deleted = $this->_delete_registration($REG); |
|
| 2772 | - if ( ! $deleted) { |
|
| 2773 | - $success = 0; |
|
| 2774 | - } |
|
| 2775 | - } |
|
| 2776 | - $what = $success > 1 |
|
| 2777 | - ? esc_html__('Registrations', 'event_espresso') |
|
| 2778 | - : esc_html__('Registration', 'event_espresso'); |
|
| 2779 | - $action_desc = esc_html__('permanently deleted.', 'event_espresso'); |
|
| 2780 | - $this->_redirect_after_action( |
|
| 2781 | - $success, |
|
| 2782 | - $what, |
|
| 2783 | - $action_desc, |
|
| 2784 | - array('action' => 'default'), |
|
| 2785 | - true |
|
| 2786 | - ); |
|
| 2787 | - } |
|
| 2788 | - |
|
| 2789 | - |
|
| 2790 | - /** |
|
| 2791 | - * handles the permanent deletion of a registration. See comments with _delete_registrations() for details on what |
|
| 2792 | - * models get affected. |
|
| 2793 | - * |
|
| 2794 | - * @param EE_Registration $REG registration to be deleted permenantly |
|
| 2795 | - * @return bool true = successful deletion, false = fail. |
|
| 2796 | - * @throws EE_Error |
|
| 2797 | - */ |
|
| 2798 | - protected function _delete_registration(EE_Registration $REG) |
|
| 2799 | - { |
|
| 2800 | - //first we start with the transaction... ultimately, we WILL not delete permanently if there are any related |
|
| 2801 | - //registrations on the transaction that are NOT trashed. |
|
| 2802 | - $TXN = $REG->get_first_related('Transaction'); |
|
| 2803 | - $REGS = $TXN->get_many_related('Registration'); |
|
| 2804 | - $all_trashed = true; |
|
| 2805 | - foreach ($REGS as $registration) { |
|
| 2806 | - if ( ! $registration->get('REG_deleted')) { |
|
| 2807 | - $all_trashed = false; |
|
| 2808 | - } |
|
| 2809 | - } |
|
| 2810 | - if ( ! $all_trashed) { |
|
| 2811 | - EE_Error::add_error( |
|
| 2812 | - esc_html__( |
|
| 2813 | - '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.', |
|
| 2814 | - 'event_espresso' |
|
| 2815 | - ), |
|
| 2816 | - __FILE__, __FUNCTION__, __LINE__ |
|
| 2817 | - ); |
|
| 2818 | - return false; |
|
| 2819 | - } |
|
| 2820 | - //k made it here so that means we can delete all the related transactions and their answers (but let's do them |
|
| 2821 | - //separately from THIS one). |
|
| 2822 | - foreach ($REGS as $registration) { |
|
| 2823 | - //delete related answers |
|
| 2824 | - $registration->delete_related_permanently('Answer'); |
|
| 2825 | - //remove relationship to EE_Attendee (but we ALWAYS leave the contact record intact) |
|
| 2826 | - $attendee = $registration->get_first_related('Attendee'); |
|
| 2827 | - if ($attendee instanceof EE_Attendee) { |
|
| 2828 | - $registration->_remove_relation_to($attendee, 'Attendee'); |
|
| 2829 | - } |
|
| 2830 | - //now remove relationships to tickets on this registration. |
|
| 2831 | - $registration->_remove_relations('Ticket'); |
|
| 2832 | - //now delete permanently the checkins related to this registration. |
|
| 2833 | - $registration->delete_related_permanently('Checkin'); |
|
| 2834 | - if ($registration->ID() === $REG->ID()) { |
|
| 2835 | - continue; |
|
| 2836 | - } //we don't want to delete permanently the existing registration just yet. |
|
| 2837 | - //remove relation to transaction for these registrations if NOT the existing registrations |
|
| 2838 | - $registration->_remove_relations('Transaction'); |
|
| 2839 | - //delete permanently any related messages. |
|
| 2840 | - $registration->delete_related_permanently('Message'); |
|
| 2841 | - //now delete this registration permanently |
|
| 2842 | - $registration->delete_permanently(); |
|
| 2843 | - } |
|
| 2844 | - //now all related registrations on the transaction are handled. So let's just handle this registration itself |
|
| 2845 | - // (the transaction and line items should be all that's left). |
|
| 2846 | - // delete the line items related to the transaction for this registration. |
|
| 2847 | - $TXN->delete_related_permanently('Line_Item'); |
|
| 2848 | - //we need to remove all the relationships on the transaction |
|
| 2849 | - $TXN->delete_related_permanently('Payment'); |
|
| 2850 | - $TXN->delete_related_permanently('Extra_Meta'); |
|
| 2851 | - $TXN->delete_related_permanently('Message'); |
|
| 2852 | - //now we can delete this REG permanently (and the transaction of course) |
|
| 2853 | - $REG->delete_related_permanently('Transaction'); |
|
| 2854 | - return $REG->delete_permanently(); |
|
| 2855 | - } |
|
| 2856 | - |
|
| 2857 | - |
|
| 2858 | - /** |
|
| 2859 | - * generates HTML for the Register New Attendee Admin page |
|
| 2860 | - * |
|
| 2861 | - * @access private |
|
| 2862 | - * @throws DomainException |
|
| 2863 | - * @throws EE_Error |
|
| 2864 | - */ |
|
| 2865 | - public function new_registration() |
|
| 2866 | - { |
|
| 2867 | - if ( ! $this->_set_reg_event()) { |
|
| 2868 | - throw new EE_Error( |
|
| 2869 | - esc_html__( |
|
| 2870 | - 'Unable to continue with registering because there is no Event ID in the request', |
|
| 2871 | - 'event_espresso' |
|
| 2872 | - ) |
|
| 2873 | - ); |
|
| 2874 | - } |
|
| 2875 | - EE_Registry::instance()->REQ->set_espresso_page(true); |
|
| 2876 | - // gotta start with a clean slate if we're not coming here via ajax |
|
| 2877 | - if ( ! defined('DOING_AJAX') |
|
| 2878 | - && ( ! isset($this->_req_data['processing_registration']) || isset($this->_req_data['step_error'])) |
|
| 2879 | - ) { |
|
| 2880 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
| 2881 | - } |
|
| 2882 | - $this->_template_args['event_name'] = ''; |
|
| 2883 | - // event name |
|
| 2884 | - if ($this->_reg_event) { |
|
| 2885 | - $this->_template_args['event_name'] = $this->_reg_event->name(); |
|
| 2886 | - $edit_event_url = self::add_query_args_and_nonce(array( |
|
| 2887 | - 'action' => 'edit', |
|
| 2888 | - 'post' => $this->_reg_event->ID(), |
|
| 2889 | - ), EVENTS_ADMIN_URL); |
|
| 2890 | - $edit_event_lnk = '<a href="' |
|
| 2891 | - . $edit_event_url |
|
| 2892 | - . '" title="' |
|
| 2893 | - . esc_attr__('Edit ', 'event_espresso') |
|
| 2894 | - . $this->_reg_event->name() |
|
| 2895 | - . '">' |
|
| 2896 | - . esc_html__('Edit Event', 'event_espresso') |
|
| 2897 | - . '</a>'; |
|
| 2898 | - $this->_template_args['event_name'] .= ' <span class="admin-page-header-edit-lnk not-bold">' |
|
| 2899 | - . $edit_event_lnk |
|
| 2900 | - . '</span>'; |
|
| 2901 | - } |
|
| 2902 | - $this->_template_args['step_content'] = $this->_get_registration_step_content(); |
|
| 2903 | - if (defined('DOING_AJAX')) { |
|
| 2904 | - $this->_return_json(); |
|
| 2905 | - } |
|
| 2906 | - // grab header |
|
| 2907 | - $template_path = |
|
| 2908 | - REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee.template.php'; |
|
| 2909 | - $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
|
| 2910 | - $this->_template_args, true); |
|
| 2911 | - //$this->_set_publish_post_box_vars( NULL, FALSE, FALSE, NULL, FALSE ); |
|
| 2912 | - // the details template wrapper |
|
| 2913 | - $this->display_admin_page_with_sidebar(); |
|
| 2914 | - } |
|
| 2915 | - |
|
| 2916 | - |
|
| 2917 | - /** |
|
| 2918 | - * This returns the content for a registration step |
|
| 2919 | - * |
|
| 2920 | - * @access protected |
|
| 2921 | - * @return string html |
|
| 2922 | - * @throws DomainException |
|
| 2923 | - * @throws EE_Error |
|
| 2924 | - * @throws InvalidArgumentException |
|
| 2925 | - * @throws InvalidDataTypeException |
|
| 2926 | - * @throws InvalidInterfaceException |
|
| 2927 | - */ |
|
| 2928 | - protected function _get_registration_step_content() |
|
| 2929 | - { |
|
| 2930 | - if (isset($_COOKIE['ee_registration_added']) && $_COOKIE['ee_registration_added']) { |
|
| 2931 | - $warning_msg = sprintf( |
|
| 2932 | - esc_html__( |
|
| 2933 | - '%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', |
|
| 2934 | - 'event_espresso' |
|
| 2935 | - ), |
|
| 2936 | - '<br />', |
|
| 2937 | - '<h3 class="important-notice">', |
|
| 2938 | - '</h3>', |
|
| 2939 | - '<div class="float-right">', |
|
| 2940 | - '<span id="redirect_timer" class="important-notice">30</span>', |
|
| 2941 | - '</div>', |
|
| 2942 | - '<b>', |
|
| 2943 | - '</b>' |
|
| 2944 | - ); |
|
| 2945 | - return ' |
|
| 2425 | + } |
|
| 2426 | + |
|
| 2427 | + |
|
| 2428 | + /** |
|
| 2429 | + * Updates the registration's custom questions according to the form info, if the form is submitted. |
|
| 2430 | + * If it's not a post, the "view_registrations" route will be called next on the SAME request |
|
| 2431 | + * to display the page |
|
| 2432 | + * |
|
| 2433 | + * @access protected |
|
| 2434 | + * @return void |
|
| 2435 | + * @throws EE_Error |
|
| 2436 | + */ |
|
| 2437 | + protected function _update_attendee_registration_form() |
|
| 2438 | + { |
|
| 2439 | + do_action('AHEE__Registrations_Admin_Page___update_attendee_registration_form__start', $this); |
|
| 2440 | + if ($_SERVER['REQUEST_METHOD'] == 'POST') { |
|
| 2441 | + $REG_ID = isset($this->_req_data['_REG_ID']) ? absint($this->_req_data['_REG_ID']) : false; |
|
| 2442 | + $success = $this->_save_reg_custom_questions_form($REG_ID); |
|
| 2443 | + if ($success) { |
|
| 2444 | + $what = esc_html__('Registration Form', 'event_espresso'); |
|
| 2445 | + $route = $REG_ID ? array('action' => 'view_registration', '_REG_ID' => $REG_ID) |
|
| 2446 | + : array('action' => 'default'); |
|
| 2447 | + $this->_redirect_after_action($success, $what, esc_html__('updated', 'event_espresso'), $route); |
|
| 2448 | + } |
|
| 2449 | + } |
|
| 2450 | + } |
|
| 2451 | + |
|
| 2452 | + |
|
| 2453 | + /** |
|
| 2454 | + * Gets the form for saving registrations custom questions (if done |
|
| 2455 | + * previously retrieves the cached form object, which may have validation errors in it) |
|
| 2456 | + * |
|
| 2457 | + * @param int $REG_ID |
|
| 2458 | + * @return EE_Registration_Custom_Questions_Form |
|
| 2459 | + * @throws EE_Error |
|
| 2460 | + * @throws InvalidArgumentException |
|
| 2461 | + * @throws InvalidDataTypeException |
|
| 2462 | + * @throws InvalidInterfaceException |
|
| 2463 | + */ |
|
| 2464 | + protected function _get_reg_custom_questions_form($REG_ID) |
|
| 2465 | + { |
|
| 2466 | + if ( ! $this->_reg_custom_questions_form) { |
|
| 2467 | + require_once(REG_ADMIN . 'form_sections' . DS . 'EE_Registration_Custom_Questions_Form.form.php'); |
|
| 2468 | + $this->_reg_custom_questions_form = new EE_Registration_Custom_Questions_Form( |
|
| 2469 | + EEM_Registration::instance()->get_one_by_ID($REG_ID) |
|
| 2470 | + ); |
|
| 2471 | + $this->_reg_custom_questions_form->_construct_finalize(null, null); |
|
| 2472 | + } |
|
| 2473 | + return $this->_reg_custom_questions_form; |
|
| 2474 | + } |
|
| 2475 | + |
|
| 2476 | + |
|
| 2477 | + /** |
|
| 2478 | + * Saves |
|
| 2479 | + * |
|
| 2480 | + * @access private |
|
| 2481 | + * @param bool $REG_ID |
|
| 2482 | + * @return bool |
|
| 2483 | + * @throws EE_Error |
|
| 2484 | + * @throws InvalidArgumentException |
|
| 2485 | + * @throws InvalidDataTypeException |
|
| 2486 | + * @throws InvalidInterfaceException |
|
| 2487 | + */ |
|
| 2488 | + private function _save_reg_custom_questions_form($REG_ID = false) |
|
| 2489 | + { |
|
| 2490 | + if ( ! $REG_ID) { |
|
| 2491 | + EE_Error::add_error( |
|
| 2492 | + esc_html__( |
|
| 2493 | + 'An error occurred. No registration ID was received.', 'event_espresso'), |
|
| 2494 | + __FILE__, __FUNCTION__, __LINE__ |
|
| 2495 | + ); |
|
| 2496 | + } |
|
| 2497 | + $form = $this->_get_reg_custom_questions_form($REG_ID); |
|
| 2498 | + $form->receive_form_submission($this->_req_data); |
|
| 2499 | + $success = false; |
|
| 2500 | + if ($form->is_valid()) { |
|
| 2501 | + foreach ($form->subforms() as $question_group_id => $question_group_form) { |
|
| 2502 | + foreach ($question_group_form->inputs() as $question_id => $input) { |
|
| 2503 | + $where_conditions = array( |
|
| 2504 | + 'QST_ID' => $question_id, |
|
| 2505 | + 'REG_ID' => $REG_ID, |
|
| 2506 | + ); |
|
| 2507 | + $possibly_new_values = array( |
|
| 2508 | + 'ANS_value' => $input->normalized_value(), |
|
| 2509 | + ); |
|
| 2510 | + $answer = EEM_Answer::instance()->get_one(array($where_conditions)); |
|
| 2511 | + if ($answer instanceof EE_Answer) { |
|
| 2512 | + $success = $answer->save($possibly_new_values); |
|
| 2513 | + } else { |
|
| 2514 | + //insert it then |
|
| 2515 | + $cols_n_vals = array_merge($where_conditions, $possibly_new_values); |
|
| 2516 | + $answer = EE_Answer::new_instance($cols_n_vals); |
|
| 2517 | + $success = $answer->save(); |
|
| 2518 | + } |
|
| 2519 | + } |
|
| 2520 | + } |
|
| 2521 | + } else { |
|
| 2522 | + EE_Error::add_error($form->get_validation_error_string(), __FILE__, __FUNCTION__, __LINE__); |
|
| 2523 | + } |
|
| 2524 | + return $success; |
|
| 2525 | + } |
|
| 2526 | + |
|
| 2527 | + |
|
| 2528 | + /** |
|
| 2529 | + * generates HTML for the Registration main meta box |
|
| 2530 | + * |
|
| 2531 | + * @access public |
|
| 2532 | + * @return void |
|
| 2533 | + * @throws DomainException |
|
| 2534 | + * @throws EE_Error |
|
| 2535 | + * @throws InvalidArgumentException |
|
| 2536 | + * @throws InvalidDataTypeException |
|
| 2537 | + * @throws InvalidInterfaceException |
|
| 2538 | + */ |
|
| 2539 | + public function _reg_attendees_meta_box() |
|
| 2540 | + { |
|
| 2541 | + $REG = EEM_Registration::instance(); |
|
| 2542 | + //get all other registrations on this transaction, and cache |
|
| 2543 | + //the attendees for them so we don't have to run another query using force_join |
|
| 2544 | + $registrations = $REG->get_all(array( |
|
| 2545 | + array( |
|
| 2546 | + 'TXN_ID' => $this->_registration->transaction_ID(), |
|
| 2547 | + 'REG_ID' => array('!=', $this->_registration->ID()), |
|
| 2548 | + ), |
|
| 2549 | + 'force_join' => array('Attendee'), |
|
| 2550 | + )); |
|
| 2551 | + $this->_template_args['attendees'] = array(); |
|
| 2552 | + $this->_template_args['attendee_notice'] = ''; |
|
| 2553 | + if (empty($registrations) |
|
| 2554 | + || (is_array($registrations) |
|
| 2555 | + && ! EEH_Array::get_one_item_from_array($registrations)) |
|
| 2556 | + ) { |
|
| 2557 | + EE_Error::add_error( |
|
| 2558 | + esc_html__( |
|
| 2559 | + 'There are no records attached to this registration. Something may have gone wrong with the registration', |
|
| 2560 | + 'event_espresso' |
|
| 2561 | + ), __FILE__, __FUNCTION__, __LINE__ |
|
| 2562 | + ); |
|
| 2563 | + $this->_template_args['attendee_notice'] = EE_Error::get_notices(); |
|
| 2564 | + } else { |
|
| 2565 | + $att_nmbr = 1; |
|
| 2566 | + foreach ($registrations as $registration) { |
|
| 2567 | + /* @var $registration EE_Registration */ |
|
| 2568 | + $attendee = $registration->attendee() |
|
| 2569 | + ? $registration->attendee() |
|
| 2570 | + : EEM_Attendee::instance() |
|
| 2571 | + ->create_default_object(); |
|
| 2572 | + $this->_template_args['attendees'][$att_nmbr]['STS_ID'] = $registration->status_ID(); |
|
| 2573 | + $this->_template_args['attendees'][$att_nmbr]['fname'] = $attendee->fname(); |
|
| 2574 | + $this->_template_args['attendees'][$att_nmbr]['lname'] = $attendee->lname(); |
|
| 2575 | + $this->_template_args['attendees'][$att_nmbr]['email'] = $attendee->email(); |
|
| 2576 | + $this->_template_args['attendees'][$att_nmbr]['final_price'] = $registration->final_price(); |
|
| 2577 | + $this->_template_args['attendees'][$att_nmbr]['address'] = implode( |
|
| 2578 | + ', ', |
|
| 2579 | + $attendee->full_address_as_array() |
|
| 2580 | + ); |
|
| 2581 | + $this->_template_args['attendees'][$att_nmbr]['att_link'] = self::add_query_args_and_nonce( |
|
| 2582 | + array( |
|
| 2583 | + 'action' => 'edit_attendee', |
|
| 2584 | + 'post' => $attendee->ID(), |
|
| 2585 | + ), |
|
| 2586 | + REG_ADMIN_URL |
|
| 2587 | + ); |
|
| 2588 | + $this->_template_args['attendees'][$att_nmbr]['event_name'] = $registration->event_obj()->name(); |
|
| 2589 | + $att_nmbr++; |
|
| 2590 | + } |
|
| 2591 | + $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
|
| 2592 | + } |
|
| 2593 | + $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_attendees.template.php'; |
|
| 2594 | + echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
| 2595 | + } |
|
| 2596 | + |
|
| 2597 | + |
|
| 2598 | + /** |
|
| 2599 | + * generates HTML for the Edit Registration side meta box |
|
| 2600 | + * |
|
| 2601 | + * @access public |
|
| 2602 | + * @return void |
|
| 2603 | + * @throws DomainException |
|
| 2604 | + * @throws EE_Error |
|
| 2605 | + * @throws InvalidArgumentException |
|
| 2606 | + * @throws InvalidDataTypeException |
|
| 2607 | + * @throws InvalidInterfaceException |
|
| 2608 | + */ |
|
| 2609 | + public function _reg_registrant_side_meta_box() |
|
| 2610 | + { |
|
| 2611 | + /*@var $attendee EE_Attendee */ |
|
| 2612 | + $att_check = $this->_registration->attendee(); |
|
| 2613 | + $attendee = $att_check instanceof EE_Attendee ? $att_check : EEM_Attendee::instance()->create_default_object(); |
|
| 2614 | + //now let's determine if this is not the primary registration. If it isn't then we set the |
|
| 2615 | + //primary_registration object for reference BUT ONLY if the Attendee object loaded is not the same as the |
|
| 2616 | + //primary registration object (that way we know if we need to show create button or not) |
|
| 2617 | + if ( ! $this->_registration->is_primary_registrant()) { |
|
| 2618 | + $primary_registration = $this->_registration->get_primary_registration(); |
|
| 2619 | + $primary_attendee = $primary_registration instanceof EE_Registration ? $primary_registration->attendee() |
|
| 2620 | + : null; |
|
| 2621 | + if ( ! $primary_attendee instanceof EE_Attendee || $attendee->ID() !== $primary_attendee->ID()) { |
|
| 2622 | + //in here? This means the displayed registration is not the primary registrant but ALREADY HAS its own |
|
| 2623 | + //custom attendee object so let's not worry about the primary reg. |
|
| 2624 | + $primary_registration = null; |
|
| 2625 | + } |
|
| 2626 | + } else { |
|
| 2627 | + $primary_registration = null; |
|
| 2628 | + } |
|
| 2629 | + $this->_template_args['ATT_ID'] = $attendee->ID(); |
|
| 2630 | + $this->_template_args['fname'] = $attendee->fname(); |
|
| 2631 | + $this->_template_args['lname'] = $attendee->lname(); |
|
| 2632 | + $this->_template_args['email'] = $attendee->email(); |
|
| 2633 | + $this->_template_args['phone'] = $attendee->phone(); |
|
| 2634 | + $this->_template_args['formatted_address'] = EEH_Address::format($attendee); |
|
| 2635 | + //edit link |
|
| 2636 | + $this->_template_args['att_edit_link'] = EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 2637 | + 'action' => 'edit_attendee', |
|
| 2638 | + 'post' => $attendee->ID(), |
|
| 2639 | + ), REG_ADMIN_URL); |
|
| 2640 | + $this->_template_args['att_edit_label'] = esc_html__('View/Edit Contact', 'event_espresso'); |
|
| 2641 | + //create link |
|
| 2642 | + $this->_template_args['create_link'] = $primary_registration instanceof EE_Registration |
|
| 2643 | + ? EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 2644 | + 'action' => 'duplicate_attendee', |
|
| 2645 | + '_REG_ID' => $this->_registration->ID(), |
|
| 2646 | + ), REG_ADMIN_URL) : ''; |
|
| 2647 | + $this->_template_args['create_label'] = esc_html__('Create Contact', 'event_espresso'); |
|
| 2648 | + $this->_template_args['att_check'] = $att_check; |
|
| 2649 | + $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_side_meta_box_registrant.template.php'; |
|
| 2650 | + echo EEH_Template::display_template($template_path, $this->_template_args, true); |
|
| 2651 | + } |
|
| 2652 | + |
|
| 2653 | + |
|
| 2654 | + /** |
|
| 2655 | + * trash or restore registrations |
|
| 2656 | + * |
|
| 2657 | + * @param boolean $trash whether to archive or restore |
|
| 2658 | + * @return void |
|
| 2659 | + * @throws EE_Error |
|
| 2660 | + * @throws InvalidArgumentException |
|
| 2661 | + * @throws InvalidDataTypeException |
|
| 2662 | + * @throws InvalidInterfaceException |
|
| 2663 | + * @throws RuntimeException |
|
| 2664 | + * @access protected |
|
| 2665 | + */ |
|
| 2666 | + protected function _trash_or_restore_registrations($trash = true) |
|
| 2667 | + { |
|
| 2668 | + //if empty _REG_ID then get out because there's nothing to do |
|
| 2669 | + if (empty($this->_req_data['_REG_ID'])) { |
|
| 2670 | + EE_Error::add_error( |
|
| 2671 | + sprintf( |
|
| 2672 | + esc_html__( |
|
| 2673 | + 'In order to %1$s registrations you must select which ones you wish to %1$s by clicking the checkboxes.', |
|
| 2674 | + 'event_espresso' |
|
| 2675 | + ), |
|
| 2676 | + $trash ? 'trash' : 'restore' |
|
| 2677 | + ), |
|
| 2678 | + __FILE__, __LINE__, __FUNCTION__ |
|
| 2679 | + ); |
|
| 2680 | + $this->_redirect_after_action(false, '', '', array(), true); |
|
| 2681 | + } |
|
| 2682 | + $success = 0; |
|
| 2683 | + $overwrite_msgs = false; |
|
| 2684 | + //Checkboxes |
|
| 2685 | + if ( ! is_array($this->_req_data['_REG_ID'])) { |
|
| 2686 | + $this->_req_data['_REG_ID'] = array($this->_req_data['_REG_ID']); |
|
| 2687 | + } |
|
| 2688 | + $reg_count = count($this->_req_data['_REG_ID']); |
|
| 2689 | + // cycle thru checkboxes |
|
| 2690 | + foreach ($this->_req_data['_REG_ID'] as $REG_ID) { |
|
| 2691 | + /** @var EE_Registration $REG */ |
|
| 2692 | + $REG = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
|
| 2693 | + $payments = $REG->registration_payments(); |
|
| 2694 | + if (! empty($payments)) { |
|
| 2695 | + $name = $REG->attendee() instanceof EE_Attendee |
|
| 2696 | + ? $REG->attendee()->full_name() |
|
| 2697 | + : esc_html__('Unknown Attendee', 'event_espresso'); |
|
| 2698 | + $overwrite_msgs = true; |
|
| 2699 | + EE_Error::add_error( |
|
| 2700 | + sprintf( |
|
| 2701 | + esc_html__( |
|
| 2702 | + '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.', |
|
| 2703 | + 'event_espresso' |
|
| 2704 | + ), |
|
| 2705 | + $name |
|
| 2706 | + ), |
|
| 2707 | + __FILE__, __FUNCTION__, __LINE__ |
|
| 2708 | + ); |
|
| 2709 | + //can't trash this registration because it has payments. |
|
| 2710 | + continue; |
|
| 2711 | + } |
|
| 2712 | + $updated = $trash ? $REG->delete() : $REG->restore(); |
|
| 2713 | + if ($updated) { |
|
| 2714 | + $success++; |
|
| 2715 | + } |
|
| 2716 | + } |
|
| 2717 | + $this->_redirect_after_action( |
|
| 2718 | + $success === $reg_count, // were ALL registrations affected? |
|
| 2719 | + $success > 1 |
|
| 2720 | + ? esc_html__('Registrations', 'event_espresso') |
|
| 2721 | + : esc_html__('Registration', 'event_espresso'), |
|
| 2722 | + $trash |
|
| 2723 | + ? esc_html__('moved to the trash', 'event_espresso') |
|
| 2724 | + : esc_html__('restored', 'event_espresso'), |
|
| 2725 | + array('action' => 'default'), |
|
| 2726 | + $overwrite_msgs |
|
| 2727 | + ); |
|
| 2728 | + } |
|
| 2729 | + |
|
| 2730 | + |
|
| 2731 | + /** |
|
| 2732 | + * This is used to permanently delete registrations. Note, this will handle not only deleting permanently the |
|
| 2733 | + * registration but also. |
|
| 2734 | + * 1. Removing relations to EE_Attendee |
|
| 2735 | + * 2. Deleting permanently the related transaction, but ONLY if all related registrations to the transaction are |
|
| 2736 | + * ALSO trashed. |
|
| 2737 | + * 3. Deleting permanently any related Line items but only if the above conditions are met. |
|
| 2738 | + * 4. Removing relationships between all tickets and the related registrations |
|
| 2739 | + * 5. Deleting permanently any related Answers (and the answers for other related registrations that were deleted.) |
|
| 2740 | + * 6. Deleting permanently any related Checkins. |
|
| 2741 | + * |
|
| 2742 | + * @return void |
|
| 2743 | + * @throws EE_Error |
|
| 2744 | + * @throws InvalidArgumentException |
|
| 2745 | + * @throws InvalidDataTypeException |
|
| 2746 | + * @throws InvalidInterfaceException |
|
| 2747 | + */ |
|
| 2748 | + protected function _delete_registrations() |
|
| 2749 | + { |
|
| 2750 | + $REG_MDL = EEM_Registration::instance(); |
|
| 2751 | + $success = 1; |
|
| 2752 | + //Checkboxes |
|
| 2753 | + if ( ! empty($this->_req_data['_REG_ID']) && is_array($this->_req_data['_REG_ID'])) { |
|
| 2754 | + // if array has more than one element than success message should be plural |
|
| 2755 | + $success = count($this->_req_data['_REG_ID']) > 1 ? 2 : 1; |
|
| 2756 | + // cycle thru checkboxes |
|
| 2757 | + while (list($ind, $REG_ID) = each($this->_req_data['_REG_ID'])) { |
|
| 2758 | + $REG = $REG_MDL->get_one_by_ID($REG_ID); |
|
| 2759 | + if ( ! $REG instanceof EE_Registration) { |
|
| 2760 | + continue; |
|
| 2761 | + } |
|
| 2762 | + $deleted = $this->_delete_registration($REG); |
|
| 2763 | + if ( ! $deleted) { |
|
| 2764 | + $success = 0; |
|
| 2765 | + } |
|
| 2766 | + } |
|
| 2767 | + } else { |
|
| 2768 | + // grab single id and delete |
|
| 2769 | + $REG_ID = $this->_req_data['_REG_ID']; |
|
| 2770 | + $REG = $REG_MDL->get_one_by_ID($REG_ID); |
|
| 2771 | + $deleted = $this->_delete_registration($REG); |
|
| 2772 | + if ( ! $deleted) { |
|
| 2773 | + $success = 0; |
|
| 2774 | + } |
|
| 2775 | + } |
|
| 2776 | + $what = $success > 1 |
|
| 2777 | + ? esc_html__('Registrations', 'event_espresso') |
|
| 2778 | + : esc_html__('Registration', 'event_espresso'); |
|
| 2779 | + $action_desc = esc_html__('permanently deleted.', 'event_espresso'); |
|
| 2780 | + $this->_redirect_after_action( |
|
| 2781 | + $success, |
|
| 2782 | + $what, |
|
| 2783 | + $action_desc, |
|
| 2784 | + array('action' => 'default'), |
|
| 2785 | + true |
|
| 2786 | + ); |
|
| 2787 | + } |
|
| 2788 | + |
|
| 2789 | + |
|
| 2790 | + /** |
|
| 2791 | + * handles the permanent deletion of a registration. See comments with _delete_registrations() for details on what |
|
| 2792 | + * models get affected. |
|
| 2793 | + * |
|
| 2794 | + * @param EE_Registration $REG registration to be deleted permenantly |
|
| 2795 | + * @return bool true = successful deletion, false = fail. |
|
| 2796 | + * @throws EE_Error |
|
| 2797 | + */ |
|
| 2798 | + protected function _delete_registration(EE_Registration $REG) |
|
| 2799 | + { |
|
| 2800 | + //first we start with the transaction... ultimately, we WILL not delete permanently if there are any related |
|
| 2801 | + //registrations on the transaction that are NOT trashed. |
|
| 2802 | + $TXN = $REG->get_first_related('Transaction'); |
|
| 2803 | + $REGS = $TXN->get_many_related('Registration'); |
|
| 2804 | + $all_trashed = true; |
|
| 2805 | + foreach ($REGS as $registration) { |
|
| 2806 | + if ( ! $registration->get('REG_deleted')) { |
|
| 2807 | + $all_trashed = false; |
|
| 2808 | + } |
|
| 2809 | + } |
|
| 2810 | + if ( ! $all_trashed) { |
|
| 2811 | + EE_Error::add_error( |
|
| 2812 | + esc_html__( |
|
| 2813 | + '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.', |
|
| 2814 | + 'event_espresso' |
|
| 2815 | + ), |
|
| 2816 | + __FILE__, __FUNCTION__, __LINE__ |
|
| 2817 | + ); |
|
| 2818 | + return false; |
|
| 2819 | + } |
|
| 2820 | + //k made it here so that means we can delete all the related transactions and their answers (but let's do them |
|
| 2821 | + //separately from THIS one). |
|
| 2822 | + foreach ($REGS as $registration) { |
|
| 2823 | + //delete related answers |
|
| 2824 | + $registration->delete_related_permanently('Answer'); |
|
| 2825 | + //remove relationship to EE_Attendee (but we ALWAYS leave the contact record intact) |
|
| 2826 | + $attendee = $registration->get_first_related('Attendee'); |
|
| 2827 | + if ($attendee instanceof EE_Attendee) { |
|
| 2828 | + $registration->_remove_relation_to($attendee, 'Attendee'); |
|
| 2829 | + } |
|
| 2830 | + //now remove relationships to tickets on this registration. |
|
| 2831 | + $registration->_remove_relations('Ticket'); |
|
| 2832 | + //now delete permanently the checkins related to this registration. |
|
| 2833 | + $registration->delete_related_permanently('Checkin'); |
|
| 2834 | + if ($registration->ID() === $REG->ID()) { |
|
| 2835 | + continue; |
|
| 2836 | + } //we don't want to delete permanently the existing registration just yet. |
|
| 2837 | + //remove relation to transaction for these registrations if NOT the existing registrations |
|
| 2838 | + $registration->_remove_relations('Transaction'); |
|
| 2839 | + //delete permanently any related messages. |
|
| 2840 | + $registration->delete_related_permanently('Message'); |
|
| 2841 | + //now delete this registration permanently |
|
| 2842 | + $registration->delete_permanently(); |
|
| 2843 | + } |
|
| 2844 | + //now all related registrations on the transaction are handled. So let's just handle this registration itself |
|
| 2845 | + // (the transaction and line items should be all that's left). |
|
| 2846 | + // delete the line items related to the transaction for this registration. |
|
| 2847 | + $TXN->delete_related_permanently('Line_Item'); |
|
| 2848 | + //we need to remove all the relationships on the transaction |
|
| 2849 | + $TXN->delete_related_permanently('Payment'); |
|
| 2850 | + $TXN->delete_related_permanently('Extra_Meta'); |
|
| 2851 | + $TXN->delete_related_permanently('Message'); |
|
| 2852 | + //now we can delete this REG permanently (and the transaction of course) |
|
| 2853 | + $REG->delete_related_permanently('Transaction'); |
|
| 2854 | + return $REG->delete_permanently(); |
|
| 2855 | + } |
|
| 2856 | + |
|
| 2857 | + |
|
| 2858 | + /** |
|
| 2859 | + * generates HTML for the Register New Attendee Admin page |
|
| 2860 | + * |
|
| 2861 | + * @access private |
|
| 2862 | + * @throws DomainException |
|
| 2863 | + * @throws EE_Error |
|
| 2864 | + */ |
|
| 2865 | + public function new_registration() |
|
| 2866 | + { |
|
| 2867 | + if ( ! $this->_set_reg_event()) { |
|
| 2868 | + throw new EE_Error( |
|
| 2869 | + esc_html__( |
|
| 2870 | + 'Unable to continue with registering because there is no Event ID in the request', |
|
| 2871 | + 'event_espresso' |
|
| 2872 | + ) |
|
| 2873 | + ); |
|
| 2874 | + } |
|
| 2875 | + EE_Registry::instance()->REQ->set_espresso_page(true); |
|
| 2876 | + // gotta start with a clean slate if we're not coming here via ajax |
|
| 2877 | + if ( ! defined('DOING_AJAX') |
|
| 2878 | + && ( ! isset($this->_req_data['processing_registration']) || isset($this->_req_data['step_error'])) |
|
| 2879 | + ) { |
|
| 2880 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
| 2881 | + } |
|
| 2882 | + $this->_template_args['event_name'] = ''; |
|
| 2883 | + // event name |
|
| 2884 | + if ($this->_reg_event) { |
|
| 2885 | + $this->_template_args['event_name'] = $this->_reg_event->name(); |
|
| 2886 | + $edit_event_url = self::add_query_args_and_nonce(array( |
|
| 2887 | + 'action' => 'edit', |
|
| 2888 | + 'post' => $this->_reg_event->ID(), |
|
| 2889 | + ), EVENTS_ADMIN_URL); |
|
| 2890 | + $edit_event_lnk = '<a href="' |
|
| 2891 | + . $edit_event_url |
|
| 2892 | + . '" title="' |
|
| 2893 | + . esc_attr__('Edit ', 'event_espresso') |
|
| 2894 | + . $this->_reg_event->name() |
|
| 2895 | + . '">' |
|
| 2896 | + . esc_html__('Edit Event', 'event_espresso') |
|
| 2897 | + . '</a>'; |
|
| 2898 | + $this->_template_args['event_name'] .= ' <span class="admin-page-header-edit-lnk not-bold">' |
|
| 2899 | + . $edit_event_lnk |
|
| 2900 | + . '</span>'; |
|
| 2901 | + } |
|
| 2902 | + $this->_template_args['step_content'] = $this->_get_registration_step_content(); |
|
| 2903 | + if (defined('DOING_AJAX')) { |
|
| 2904 | + $this->_return_json(); |
|
| 2905 | + } |
|
| 2906 | + // grab header |
|
| 2907 | + $template_path = |
|
| 2908 | + REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee.template.php'; |
|
| 2909 | + $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
|
| 2910 | + $this->_template_args, true); |
|
| 2911 | + //$this->_set_publish_post_box_vars( NULL, FALSE, FALSE, NULL, FALSE ); |
|
| 2912 | + // the details template wrapper |
|
| 2913 | + $this->display_admin_page_with_sidebar(); |
|
| 2914 | + } |
|
| 2915 | + |
|
| 2916 | + |
|
| 2917 | + /** |
|
| 2918 | + * This returns the content for a registration step |
|
| 2919 | + * |
|
| 2920 | + * @access protected |
|
| 2921 | + * @return string html |
|
| 2922 | + * @throws DomainException |
|
| 2923 | + * @throws EE_Error |
|
| 2924 | + * @throws InvalidArgumentException |
|
| 2925 | + * @throws InvalidDataTypeException |
|
| 2926 | + * @throws InvalidInterfaceException |
|
| 2927 | + */ |
|
| 2928 | + protected function _get_registration_step_content() |
|
| 2929 | + { |
|
| 2930 | + if (isset($_COOKIE['ee_registration_added']) && $_COOKIE['ee_registration_added']) { |
|
| 2931 | + $warning_msg = sprintf( |
|
| 2932 | + esc_html__( |
|
| 2933 | + '%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', |
|
| 2934 | + 'event_espresso' |
|
| 2935 | + ), |
|
| 2936 | + '<br />', |
|
| 2937 | + '<h3 class="important-notice">', |
|
| 2938 | + '</h3>', |
|
| 2939 | + '<div class="float-right">', |
|
| 2940 | + '<span id="redirect_timer" class="important-notice">30</span>', |
|
| 2941 | + '</div>', |
|
| 2942 | + '<b>', |
|
| 2943 | + '</b>' |
|
| 2944 | + ); |
|
| 2945 | + return ' |
|
| 2946 | 2946 | <div id="ee-add-reg-back-button-dv"><p>' . $warning_msg . '</p></div> |
| 2947 | 2947 | <script > |
| 2948 | 2948 | // WHOAH !!! it appears that someone is using the back button from the Transaction admin page |
@@ -2955,841 +2955,841 @@ discard block |
||
| 2955 | 2955 | } |
| 2956 | 2956 | }, 800 ); |
| 2957 | 2957 | </script >'; |
| 2958 | - } |
|
| 2959 | - $template_args = array( |
|
| 2960 | - 'title' => '', |
|
| 2961 | - 'content' => '', |
|
| 2962 | - 'step_button_text' => '', |
|
| 2963 | - 'show_notification_toggle' => false, |
|
| 2964 | - ); |
|
| 2965 | - //to indicate we're processing a new registration |
|
| 2966 | - $hidden_fields = array( |
|
| 2967 | - 'processing_registration' => array( |
|
| 2968 | - 'type' => 'hidden', |
|
| 2969 | - 'value' => 0, |
|
| 2970 | - ), |
|
| 2971 | - 'event_id' => array( |
|
| 2972 | - 'type' => 'hidden', |
|
| 2973 | - 'value' => $this->_reg_event->ID(), |
|
| 2974 | - ), |
|
| 2975 | - ); |
|
| 2976 | - //if the cart is empty then we know we're at step one so we'll display ticket selector |
|
| 2977 | - $cart = EE_Registry::instance()->SSN->cart(); |
|
| 2978 | - $step = ! $cart instanceof EE_Cart ? 'ticket' : 'questions'; |
|
| 2979 | - switch ($step) { |
|
| 2980 | - case 'ticket' : |
|
| 2981 | - $hidden_fields['processing_registration']['value'] = 1; |
|
| 2982 | - $template_args['title'] = esc_html__( |
|
| 2983 | - 'Step One: Select the Ticket for this registration', |
|
| 2984 | - 'event_espresso' |
|
| 2985 | - ); |
|
| 2986 | - $template_args['content'] = |
|
| 2987 | - EED_Ticket_Selector::instance()->display_ticket_selector($this->_reg_event); |
|
| 2988 | - $template_args['step_button_text'] = esc_html__( |
|
| 2989 | - 'Add Tickets and Continue to Registrant Details', |
|
| 2990 | - 'event_espresso' |
|
| 2991 | - ); |
|
| 2992 | - $template_args['show_notification_toggle'] = false; |
|
| 2993 | - break; |
|
| 2994 | - case 'questions' : |
|
| 2995 | - $hidden_fields['processing_registration']['value'] = 2; |
|
| 2996 | - $template_args['title'] = esc_html__( |
|
| 2997 | - 'Step Two: Add Registrant Details for this Registration', |
|
| 2998 | - 'event_espresso' |
|
| 2999 | - ); |
|
| 3000 | - //in theory we should be able to run EED_SPCO at this point because the cart should have been setup |
|
| 3001 | - // properly by the first process_reg_step run. |
|
| 3002 | - $template_args['content'] = |
|
| 3003 | - EED_Single_Page_Checkout::registration_checkout_for_admin(); |
|
| 3004 | - $template_args['step_button_text'] = esc_html__( |
|
| 3005 | - 'Save Registration and Continue to Details', |
|
| 3006 | - 'event_espresso' |
|
| 3007 | - ); |
|
| 3008 | - $template_args['show_notification_toggle'] = true; |
|
| 3009 | - break; |
|
| 3010 | - } |
|
| 3011 | - //we come back to the process_registration_step route. |
|
| 3012 | - $this->_set_add_edit_form_tags('process_reg_step', $hidden_fields); |
|
| 3013 | - return EEH_Template::display_template( |
|
| 3014 | - REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee_step_content.template.php', |
|
| 3015 | - $template_args, |
|
| 3016 | - true |
|
| 3017 | - ); |
|
| 3018 | - } |
|
| 3019 | - |
|
| 3020 | - |
|
| 3021 | - /** |
|
| 3022 | - * set_reg_event |
|
| 3023 | - * |
|
| 3024 | - * @access private |
|
| 3025 | - * @return bool |
|
| 3026 | - * @throws EE_Error |
|
| 3027 | - * @throws InvalidArgumentException |
|
| 3028 | - * @throws InvalidDataTypeException |
|
| 3029 | - * @throws InvalidInterfaceException |
|
| 3030 | - */ |
|
| 3031 | - private function _set_reg_event() |
|
| 3032 | - { |
|
| 3033 | - if (is_object($this->_reg_event)) { |
|
| 3034 | - return true; |
|
| 3035 | - } |
|
| 3036 | - $EVT_ID = (! empty($this->_req_data['event_id'])) ? absint($this->_req_data['event_id']) : false; |
|
| 3037 | - if ( ! $EVT_ID) { |
|
| 3038 | - return false; |
|
| 3039 | - } |
|
| 3040 | - $this->_reg_event = EEM_Event::instance()->get_one_by_ID($EVT_ID); |
|
| 3041 | - return true; |
|
| 3042 | - } |
|
| 3043 | - |
|
| 3044 | - |
|
| 3045 | - /** |
|
| 3046 | - * process_reg_step |
|
| 3047 | - * |
|
| 3048 | - * @access public |
|
| 3049 | - * @return string |
|
| 3050 | - * @throws DomainException |
|
| 3051 | - * @throws EE_Error |
|
| 3052 | - * @throws InvalidArgumentException |
|
| 3053 | - * @throws InvalidDataTypeException |
|
| 3054 | - * @throws InvalidInterfaceException |
|
| 3055 | - * @throws ReflectionException |
|
| 3056 | - * @throws RuntimeException |
|
| 3057 | - */ |
|
| 3058 | - public function process_reg_step() |
|
| 3059 | - { |
|
| 3060 | - EE_System::do_not_cache(); |
|
| 3061 | - $this->_set_reg_event(); |
|
| 3062 | - EE_Registry::instance()->REQ->set_espresso_page(true); |
|
| 3063 | - EE_Registry::instance()->REQ->set('uts', time()); |
|
| 3064 | - //what step are we on? |
|
| 3065 | - $cart = EE_Registry::instance()->SSN->cart(); |
|
| 3066 | - $step = ! $cart instanceof EE_Cart ? 'ticket' : 'questions'; |
|
| 3067 | - //if doing ajax then we need to verify the nonce |
|
| 3068 | - if (defined('DOING_AJAX')) { |
|
| 3069 | - $nonce = isset($this->_req_data[$this->_req_nonce]) |
|
| 3070 | - ? sanitize_text_field($this->_req_data[$this->_req_nonce]) : ''; |
|
| 3071 | - $this->_verify_nonce($nonce, $this->_req_nonce); |
|
| 3072 | - } |
|
| 3073 | - switch ($step) { |
|
| 3074 | - case 'ticket' : |
|
| 3075 | - //process ticket selection |
|
| 3076 | - $success = EED_Ticket_Selector::instance()->process_ticket_selections(); |
|
| 3077 | - if ($success) { |
|
| 3078 | - EE_Error::add_success( |
|
| 3079 | - esc_html__( |
|
| 3080 | - 'Tickets Selected. Now complete the registration.', |
|
| 3081 | - 'event_espresso' |
|
| 3082 | - ) |
|
| 3083 | - ); |
|
| 3084 | - } else { |
|
| 3085 | - $query_args['step_error'] = $this->_req_data['step_error'] = true; |
|
| 3086 | - } |
|
| 3087 | - if (defined('DOING_AJAX')) { |
|
| 3088 | - $this->new_registration(); //display next step |
|
| 3089 | - } else { |
|
| 3090 | - $query_args = array( |
|
| 3091 | - 'action' => 'new_registration', |
|
| 3092 | - 'processing_registration' => 1, |
|
| 3093 | - 'event_id' => $this->_reg_event->ID(), |
|
| 3094 | - 'uts' => time(), |
|
| 3095 | - ); |
|
| 3096 | - $this->_redirect_after_action( |
|
| 3097 | - false, |
|
| 3098 | - '', |
|
| 3099 | - '', |
|
| 3100 | - $query_args, |
|
| 3101 | - true |
|
| 3102 | - ); |
|
| 3103 | - } |
|
| 3104 | - break; |
|
| 3105 | - case 'questions' : |
|
| 3106 | - if (! isset( |
|
| 3107 | - $this->_req_data['txn_reg_status_change'], |
|
| 3108 | - $this->_req_data['txn_reg_status_change']['send_notifications']) |
|
| 3109 | - ) { |
|
| 3110 | - add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_false', 15); |
|
| 3111 | - } |
|
| 3112 | - //process registration |
|
| 3113 | - $transaction = EED_Single_Page_Checkout::instance()->process_registration_from_admin(); |
|
| 3114 | - if ($cart instanceof EE_Cart) { |
|
| 3115 | - $grand_total = $cart->get_cart_grand_total(); |
|
| 3116 | - if ($grand_total instanceof EE_Line_Item) { |
|
| 3117 | - $grand_total->save_this_and_descendants_to_txn(); |
|
| 3118 | - } |
|
| 3119 | - } |
|
| 3120 | - if ( ! $transaction instanceof EE_Transaction) { |
|
| 3121 | - $query_args = array( |
|
| 3122 | - 'action' => 'new_registration', |
|
| 3123 | - 'processing_registration' => 2, |
|
| 3124 | - 'event_id' => $this->_reg_event->ID(), |
|
| 3125 | - 'uts' => time(), |
|
| 3126 | - ); |
|
| 3127 | - if (defined('DOING_AJAX')) { |
|
| 3128 | - //display registration form again because there are errors (maybe validation?) |
|
| 3129 | - $this->new_registration(); |
|
| 3130 | - return; |
|
| 3131 | - } else { |
|
| 3132 | - $this->_redirect_after_action( |
|
| 3133 | - false, |
|
| 3134 | - '', |
|
| 3135 | - '', |
|
| 3136 | - $query_args, |
|
| 3137 | - true |
|
| 3138 | - ); |
|
| 3139 | - return; |
|
| 3140 | - } |
|
| 3141 | - } |
|
| 3142 | - // maybe update status, and make sure to save transaction if not done already |
|
| 3143 | - if ( ! $transaction->update_status_based_on_total_paid()) { |
|
| 3144 | - $transaction->save(); |
|
| 3145 | - } |
|
| 3146 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
| 3147 | - $this->_req_data = array(); |
|
| 3148 | - $query_args = array( |
|
| 3149 | - 'action' => 'redirect_to_txn', |
|
| 3150 | - 'TXN_ID' => $transaction->ID(), |
|
| 3151 | - 'EVT_ID' => $this->_reg_event->ID(), |
|
| 3152 | - 'event_name' => urlencode($this->_reg_event->name()), |
|
| 3153 | - 'redirect_from' => 'new_registration', |
|
| 3154 | - ); |
|
| 3155 | - $this->_redirect_after_action(false, '', '', $query_args, true); |
|
| 3156 | - break; |
|
| 3157 | - } |
|
| 3158 | - //what are you looking here for? Should be nothing to do at this point. |
|
| 3159 | - } |
|
| 3160 | - |
|
| 3161 | - |
|
| 3162 | - /** |
|
| 3163 | - * redirect_to_txn |
|
| 3164 | - * |
|
| 3165 | - * @access public |
|
| 3166 | - * @return void |
|
| 3167 | - * @throws EE_Error |
|
| 3168 | - * @throws InvalidArgumentException |
|
| 3169 | - * @throws InvalidDataTypeException |
|
| 3170 | - * @throws InvalidInterfaceException |
|
| 3171 | - */ |
|
| 3172 | - public function redirect_to_txn() |
|
| 3173 | - { |
|
| 3174 | - EE_System::do_not_cache(); |
|
| 3175 | - EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
| 3176 | - $query_args = array( |
|
| 3177 | - 'action' => 'view_transaction', |
|
| 3178 | - 'TXN_ID' => isset($this->_req_data['TXN_ID']) ? absint($this->_req_data['TXN_ID']) : 0, |
|
| 3179 | - 'page' => 'espresso_transactions', |
|
| 3180 | - ); |
|
| 3181 | - if (isset($this->_req_data['EVT_ID'], $this->_req_data['redirect_from'])) { |
|
| 3182 | - $query_args['EVT_ID'] = $this->_req_data['EVT_ID']; |
|
| 3183 | - $query_args['event_name'] = urlencode($this->_req_data['event_name']); |
|
| 3184 | - $query_args['redirect_from'] = $this->_req_data['redirect_from']; |
|
| 3185 | - } |
|
| 3186 | - EE_Error::add_success( |
|
| 3187 | - esc_html__( |
|
| 3188 | - 'Registration Created. Please review the transaction and add any payments as necessary', |
|
| 3189 | - 'event_espresso' |
|
| 3190 | - ) |
|
| 3191 | - ); |
|
| 3192 | - $this->_redirect_after_action(false, '', '', $query_args, true); |
|
| 3193 | - } |
|
| 3194 | - |
|
| 3195 | - |
|
| 3196 | - /** |
|
| 3197 | - * generates HTML for the Attendee Contact List |
|
| 3198 | - * |
|
| 3199 | - * @access protected |
|
| 3200 | - * @return void |
|
| 3201 | - */ |
|
| 3202 | - protected function _attendee_contact_list_table() |
|
| 3203 | - { |
|
| 3204 | - do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
| 3205 | - $this->_search_btn_label = esc_html__('Contacts', 'event_espresso'); |
|
| 3206 | - $this->display_admin_list_table_page_with_no_sidebar(); |
|
| 3207 | - } |
|
| 3208 | - |
|
| 3209 | - |
|
| 3210 | - /** |
|
| 3211 | - * get_attendees |
|
| 3212 | - * |
|
| 3213 | - * @param $per_page |
|
| 3214 | - * @param bool $count whether to return count or data. |
|
| 3215 | - * @param bool $trash |
|
| 3216 | - * @return array |
|
| 3217 | - * @throws EE_Error |
|
| 3218 | - * @throws InvalidArgumentException |
|
| 3219 | - * @throws InvalidDataTypeException |
|
| 3220 | - * @throws InvalidInterfaceException |
|
| 3221 | - * @access public |
|
| 3222 | - */ |
|
| 3223 | - public function get_attendees($per_page, $count = false, $trash = false) |
|
| 3224 | - { |
|
| 3225 | - do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
| 3226 | - require_once(REG_ADMIN . 'EE_Attendee_Contact_List_Table.class.php'); |
|
| 3227 | - $ATT_MDL = EEM_Attendee::instance(); |
|
| 3228 | - $this->_req_data['orderby'] = ! empty($this->_req_data['orderby']) ? $this->_req_data['orderby'] : ''; |
|
| 3229 | - switch ($this->_req_data['orderby']) { |
|
| 3230 | - case 'ATT_ID': |
|
| 3231 | - $orderby = 'ATT_ID'; |
|
| 3232 | - break; |
|
| 3233 | - case 'ATT_fname': |
|
| 3234 | - $orderby = 'ATT_fname'; |
|
| 3235 | - break; |
|
| 3236 | - case 'ATT_email': |
|
| 3237 | - $orderby = 'ATT_email'; |
|
| 3238 | - break; |
|
| 3239 | - case 'ATT_city': |
|
| 3240 | - $orderby = 'ATT_city'; |
|
| 3241 | - break; |
|
| 3242 | - case 'STA_ID': |
|
| 3243 | - $orderby = 'STA_ID'; |
|
| 3244 | - break; |
|
| 3245 | - case 'CNT_ID': |
|
| 3246 | - $orderby = 'CNT_ID'; |
|
| 3247 | - break; |
|
| 3248 | - case 'Registration_Count': |
|
| 3249 | - $orderby = 'Registration_Count'; |
|
| 3250 | - break; |
|
| 3251 | - default: |
|
| 3252 | - $orderby = 'ATT_lname'; |
|
| 3253 | - } |
|
| 3254 | - $sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) |
|
| 3255 | - ? $this->_req_data['order'] |
|
| 3256 | - : 'ASC'; |
|
| 3257 | - $current_page = isset($this->_req_data['paged']) && ! empty($this->_req_data['paged']) |
|
| 3258 | - ? $this->_req_data['paged'] |
|
| 3259 | - : 1; |
|
| 3260 | - $per_page = isset($per_page) && ! empty($per_page) ? $per_page : 10; |
|
| 3261 | - $per_page = isset($this->_req_data['perpage']) && ! empty($this->_req_data['perpage']) |
|
| 3262 | - ? $this->_req_data['perpage'] |
|
| 3263 | - : $per_page; |
|
| 3264 | - $_where = array(); |
|
| 3265 | - if ( ! empty($this->_req_data['s'])) { |
|
| 3266 | - $sstr = '%' . $this->_req_data['s'] . '%'; |
|
| 3267 | - $_where['OR'] = array( |
|
| 3268 | - 'Registration.Event.EVT_name' => array('LIKE', $sstr), |
|
| 3269 | - 'Registration.Event.EVT_desc' => array('LIKE', $sstr), |
|
| 3270 | - 'Registration.Event.EVT_short_desc' => array('LIKE', $sstr), |
|
| 3271 | - 'ATT_fname' => array('LIKE', $sstr), |
|
| 3272 | - 'ATT_lname' => array('LIKE', $sstr), |
|
| 3273 | - 'ATT_short_bio' => array('LIKE', $sstr), |
|
| 3274 | - 'ATT_email' => array('LIKE', $sstr), |
|
| 3275 | - 'ATT_address' => array('LIKE', $sstr), |
|
| 3276 | - 'ATT_address2' => array('LIKE', $sstr), |
|
| 3277 | - 'ATT_city' => array('LIKE', $sstr), |
|
| 3278 | - 'Country.CNT_name' => array('LIKE', $sstr), |
|
| 3279 | - 'State.STA_name' => array('LIKE', $sstr), |
|
| 3280 | - 'ATT_phone' => array('LIKE', $sstr), |
|
| 3281 | - 'Registration.REG_final_price' => array('LIKE', $sstr), |
|
| 3282 | - 'Registration.REG_code' => array('LIKE', $sstr), |
|
| 3283 | - 'Registration.REG_group_size' => array('LIKE', $sstr), |
|
| 3284 | - ); |
|
| 3285 | - } |
|
| 3286 | - $offset = ($current_page - 1) * $per_page; |
|
| 3287 | - $limit = $count ? null : array($offset, $per_page); |
|
| 3288 | - $query_args = array( |
|
| 3289 | - $_where, |
|
| 3290 | - 'extra_selects' => array('Registration_Count' => array('Registration.REG_ID', 'count', '%d')), |
|
| 3291 | - 'limit' => $limit |
|
| 3292 | - ); |
|
| 3293 | - if (! $count) { |
|
| 3294 | - $query_args['order_by'] = array($orderby => $sort); |
|
| 3295 | - } |
|
| 3296 | - if ($trash) { |
|
| 3297 | - $query_args[0]['status'] = array('!=', 'publish'); |
|
| 3298 | - $all_attendees = $count |
|
| 3299 | - ? $ATT_MDL->count($query_args, 'ATT_ID', true) |
|
| 3300 | - : $ATT_MDL->get_all($query_args); |
|
| 3301 | - } else { |
|
| 3302 | - $query_args[0]['status'] = array('IN', array('publish')); |
|
| 3303 | - $all_attendees = $count |
|
| 3304 | - ? $ATT_MDL->count($query_args, 'ATT_ID', true) |
|
| 3305 | - : $ATT_MDL->get_all($query_args); |
|
| 3306 | - } |
|
| 3307 | - return $all_attendees; |
|
| 3308 | - } |
|
| 3309 | - |
|
| 3310 | - |
|
| 3311 | - /** |
|
| 3312 | - * This is just taking care of resending the registration confirmation |
|
| 3313 | - * |
|
| 3314 | - * @access protected |
|
| 3315 | - * @return void |
|
| 3316 | - */ |
|
| 3317 | - protected function _resend_registration() |
|
| 3318 | - { |
|
| 3319 | - $this->_process_resend_registration(); |
|
| 3320 | - $query_args = isset($this->_req_data['redirect_to']) |
|
| 3321 | - ? array('action' => $this->_req_data['redirect_to'], '_REG_ID' => $this->_req_data['_REG_ID']) |
|
| 3322 | - : array('action' => 'default'); |
|
| 3323 | - $this->_redirect_after_action(false, '', '', $query_args, true); |
|
| 3324 | - } |
|
| 3325 | - |
|
| 3326 | - /** |
|
| 3327 | - * Creates a registration report, but accepts the name of a method to use for preparing the query parameters |
|
| 3328 | - * to use when selecting registrations |
|
| 3329 | - * @param string $method_name_for_getting_query_params the name of the method (on this class) to use for preparing |
|
| 3330 | - * the query parameters from the request |
|
| 3331 | - * @return void ends the request with a redirect or download |
|
| 3332 | - */ |
|
| 3333 | - public function _registrations_report_base( $method_name_for_getting_query_params ) |
|
| 3334 | - { |
|
| 3335 | - if (! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
| 3336 | - wp_redirect(EE_Admin_Page::add_query_args_and_nonce( |
|
| 3337 | - array( |
|
| 3338 | - 'page' => 'espresso_batch', |
|
| 3339 | - 'batch' => 'file', |
|
| 3340 | - 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
|
| 3341 | - 'filters' => urlencode( |
|
| 3342 | - serialize( |
|
| 3343 | - call_user_func( |
|
| 3344 | - array( $this, $method_name_for_getting_query_params ), |
|
| 3345 | - EEH_Array::is_set( |
|
| 3346 | - $this->_req_data, |
|
| 3347 | - 'filters', |
|
| 3348 | - array() |
|
| 3349 | - ) |
|
| 3350 | - ) |
|
| 3351 | - ) |
|
| 3352 | - ), |
|
| 3353 | - 'use_filters' => EEH_Array::is_set($this->_req_data, 'use_filters', false), |
|
| 3354 | - 'job_handler' => urlencode('EventEspressoBatchRequest\JobHandlers\RegistrationsReport'), |
|
| 3355 | - 'return_url' => urlencode($this->_req_data['return_url']), |
|
| 3356 | - ))); |
|
| 3357 | - } else { |
|
| 3358 | - $new_request_args = array( |
|
| 3359 | - 'export' => 'report', |
|
| 3360 | - 'action' => 'registrations_report_for_event', |
|
| 3361 | - 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
|
| 3362 | - ); |
|
| 3363 | - $this->_req_data = array_merge($this->_req_data, $new_request_args); |
|
| 3364 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3365 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3366 | - $EE_Export = EE_Export::instance($this->_req_data); |
|
| 3367 | - $EE_Export->export(); |
|
| 3368 | - } |
|
| 3369 | - } |
|
| 3370 | - } |
|
| 3371 | - |
|
| 3372 | - |
|
| 3373 | - |
|
| 3374 | - /** |
|
| 3375 | - * Creates a registration report using only query parameters in the request |
|
| 3376 | - * @return void |
|
| 3377 | - */ |
|
| 3378 | - public function _registrations_report() |
|
| 3379 | - { |
|
| 3380 | - $this->_registrations_report_base('_get_registration_query_parameters'); |
|
| 3381 | - } |
|
| 3382 | - |
|
| 3383 | - |
|
| 3384 | - public function _contact_list_export() |
|
| 3385 | - { |
|
| 3386 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3387 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3388 | - $EE_Export = EE_Export::instance($this->_req_data); |
|
| 3389 | - $EE_Export->export_attendees(); |
|
| 3390 | - } |
|
| 3391 | - } |
|
| 3392 | - |
|
| 3393 | - |
|
| 3394 | - public function _contact_list_report() |
|
| 3395 | - { |
|
| 3396 | - if ( ! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
| 3397 | - wp_redirect(EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 3398 | - 'page' => 'espresso_batch', |
|
| 3399 | - 'batch' => 'file', |
|
| 3400 | - 'job_handler' => urlencode('EventEspressoBatchRequest\JobHandlers\AttendeesReport'), |
|
| 3401 | - 'return_url' => urlencode($this->_req_data['return_url']), |
|
| 3402 | - ))); |
|
| 3403 | - } else { |
|
| 3404 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3405 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3406 | - $EE_Export = EE_Export::instance($this->_req_data); |
|
| 3407 | - $EE_Export->report_attendees(); |
|
| 3408 | - } |
|
| 3409 | - } |
|
| 3410 | - } |
|
| 3411 | - |
|
| 3412 | - |
|
| 3413 | - |
|
| 3414 | - |
|
| 3415 | - |
|
| 3416 | - /*************************************** ATTENDEE DETAILS ***************************************/ |
|
| 3417 | - /** |
|
| 3418 | - * This duplicates the attendee object for the given incoming registration id and attendee_id. |
|
| 3419 | - * |
|
| 3420 | - * @return void |
|
| 3421 | - * @throws EE_Error |
|
| 3422 | - * @throws InvalidArgumentException |
|
| 3423 | - * @throws InvalidDataTypeException |
|
| 3424 | - * @throws InvalidInterfaceException |
|
| 3425 | - */ |
|
| 3426 | - protected function _duplicate_attendee() |
|
| 3427 | - { |
|
| 3428 | - $action = ! empty($this->_req_data['return']) ? $this->_req_data['return'] : 'default'; |
|
| 3429 | - //verify we have necessary info |
|
| 3430 | - if (empty($this->_req_data['_REG_ID'])) { |
|
| 3431 | - EE_Error::add_error( |
|
| 3432 | - esc_html__( |
|
| 3433 | - 'Unable to create the contact for the registration because the required parameters are not present (_REG_ID )', |
|
| 3434 | - 'event_espresso' |
|
| 3435 | - ), __FILE__, __LINE__, __FUNCTION__ |
|
| 3436 | - ); |
|
| 3437 | - $query_args = array('action' => $action); |
|
| 3438 | - $this->_redirect_after_action('', '', '', $query_args, true); |
|
| 3439 | - } |
|
| 3440 | - //okay necessary deets present... let's dupe the incoming attendee and attach to incoming registration. |
|
| 3441 | - $registration = EEM_Registration::instance()->get_one_by_ID($this->_req_data['_REG_ID']); |
|
| 3442 | - $attendee = $registration->attendee(); |
|
| 3443 | - //remove relation of existing attendee on registration |
|
| 3444 | - $registration->_remove_relation_to($attendee, 'Attendee'); |
|
| 3445 | - //new attendee |
|
| 3446 | - $new_attendee = clone $attendee; |
|
| 3447 | - $new_attendee->set('ATT_ID', 0); |
|
| 3448 | - $new_attendee->save(); |
|
| 3449 | - //add new attendee to reg |
|
| 3450 | - $registration->_add_relation_to($new_attendee, 'Attendee'); |
|
| 3451 | - EE_Error::add_success( |
|
| 3452 | - esc_html__( |
|
| 3453 | - 'New Contact record created. Now make any edits you wish to make for this contact.', |
|
| 3454 | - 'event_espresso' |
|
| 3455 | - ) |
|
| 3456 | - ); |
|
| 3457 | - //redirect to edit page for attendee |
|
| 3458 | - $query_args = array('post' => $new_attendee->ID(), 'action' => 'edit_attendee'); |
|
| 3459 | - $this->_redirect_after_action('', '', '', $query_args, true); |
|
| 3460 | - } |
|
| 3461 | - |
|
| 3462 | - |
|
| 3463 | - /** |
|
| 3464 | - * Callback invoked by parent EE_Admin_CPT class hooked in on `save_post` wp hook. |
|
| 3465 | - * @param int $post_id |
|
| 3466 | - * @param WP_POST $post |
|
| 3467 | - * @throws DomainException |
|
| 3468 | - * @throws EE_Error |
|
| 3469 | - * @throws InvalidArgumentException |
|
| 3470 | - * @throws InvalidDataTypeException |
|
| 3471 | - * @throws InvalidInterfaceException |
|
| 3472 | - * @throws LogicException |
|
| 3473 | - * @throws InvalidFormSubmissionException |
|
| 3474 | - */ |
|
| 3475 | - protected function _insert_update_cpt_item($post_id, $post) |
|
| 3476 | - { |
|
| 3477 | - $success = true; |
|
| 3478 | - $attendee = $post instanceof WP_Post && $post->post_type === 'espresso_attendees' |
|
| 3479 | - ? EEM_Attendee::instance()->get_one_by_ID($post_id) |
|
| 3480 | - : null; |
|
| 3481 | - //for attendee updates |
|
| 3482 | - if ($attendee instanceof EE_Attendee) { |
|
| 3483 | - //note we should only be UPDATING attendees at this point. |
|
| 3484 | - $updated_fields = array( |
|
| 3485 | - 'ATT_fname' => $this->_req_data['ATT_fname'], |
|
| 3486 | - 'ATT_lname' => $this->_req_data['ATT_lname'], |
|
| 3487 | - 'ATT_full_name' => $this->_req_data['ATT_fname'] . ' ' . $this->_req_data['ATT_lname'], |
|
| 3488 | - 'ATT_address' => isset($this->_req_data['ATT_address']) ? $this->_req_data['ATT_address'] : '', |
|
| 3489 | - 'ATT_address2' => isset($this->_req_data['ATT_address2']) ? $this->_req_data['ATT_address2'] : '', |
|
| 3490 | - 'ATT_city' => isset($this->_req_data['ATT_city']) ? $this->_req_data['ATT_city'] : '', |
|
| 3491 | - 'STA_ID' => isset($this->_req_data['STA_ID']) ? $this->_req_data['STA_ID'] : '', |
|
| 3492 | - 'CNT_ISO' => isset($this->_req_data['CNT_ISO']) ? $this->_req_data['CNT_ISO'] : '', |
|
| 3493 | - 'ATT_zip' => isset($this->_req_data['ATT_zip']) ? $this->_req_data['ATT_zip'] : '', |
|
| 3494 | - ); |
|
| 3495 | - foreach ($updated_fields as $field => $value) { |
|
| 3496 | - $attendee->set($field, $value); |
|
| 3497 | - } |
|
| 3498 | - |
|
| 3499 | - //process contact details metabox form handler (which will also save the attendee) |
|
| 3500 | - $contact_details_form = $this->getAttendeeContactDetailsMetaboxFormHandler($attendee); |
|
| 3501 | - $success = $contact_details_form->process($this->_req_data); |
|
| 3502 | - |
|
| 3503 | - $attendee_update_callbacks = apply_filters( |
|
| 3504 | - 'FHEE__Registrations_Admin_Page__insert_update_cpt_item__attendee_update', |
|
| 3505 | - array() |
|
| 3506 | - ); |
|
| 3507 | - foreach ($attendee_update_callbacks as $a_callback) { |
|
| 3508 | - if (false === call_user_func_array($a_callback, array($attendee, $this->_req_data))) { |
|
| 3509 | - throw new EE_Error( |
|
| 3510 | - sprintf( |
|
| 3511 | - esc_html__( |
|
| 3512 | - '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.', |
|
| 3513 | - 'event_espresso' |
|
| 3514 | - ), |
|
| 3515 | - $a_callback |
|
| 3516 | - ) |
|
| 3517 | - ); |
|
| 3518 | - } |
|
| 3519 | - } |
|
| 3520 | - } |
|
| 3521 | - |
|
| 3522 | - if ($success === false) { |
|
| 3523 | - EE_Error::add_error( |
|
| 3524 | - esc_html__( |
|
| 3525 | - 'Something went wrong with updating the meta table data for the registration.', |
|
| 3526 | - 'event_espresso' |
|
| 3527 | - ), |
|
| 3528 | - __FILE__, __FUNCTION__, __LINE__ |
|
| 3529 | - ); |
|
| 3530 | - } |
|
| 3531 | - } |
|
| 3532 | - |
|
| 3533 | - |
|
| 3534 | - public function trash_cpt_item($post_id) |
|
| 3535 | - { |
|
| 3536 | - } |
|
| 3537 | - |
|
| 3538 | - |
|
| 3539 | - public function delete_cpt_item($post_id) |
|
| 3540 | - { |
|
| 3541 | - } |
|
| 3542 | - |
|
| 3543 | - |
|
| 3544 | - public function restore_cpt_item($post_id) |
|
| 3545 | - { |
|
| 3546 | - } |
|
| 3547 | - |
|
| 3548 | - |
|
| 3549 | - protected function _restore_cpt_item($post_id, $revision_id) |
|
| 3550 | - { |
|
| 3551 | - } |
|
| 3552 | - |
|
| 3553 | - |
|
| 3554 | - public function attendee_editor_metaboxes() |
|
| 3555 | - { |
|
| 3556 | - $this->verify_cpt_object(); |
|
| 3557 | - remove_meta_box( |
|
| 3558 | - 'postexcerpt', |
|
| 3559 | - esc_html__('Excerpt', 'event_espresso'), |
|
| 3560 | - 'post_excerpt_meta_box', |
|
| 3561 | - $this->_cpt_routes[$this->_req_action], |
|
| 3562 | - 'normal', |
|
| 3563 | - 'core' |
|
| 3564 | - ); |
|
| 3565 | - remove_meta_box('commentstatusdiv', $this->_cpt_routes[$this->_req_action], 'normal', 'core'); |
|
| 3566 | - if (post_type_supports('espresso_attendees', 'excerpt')) { |
|
| 3567 | - add_meta_box( |
|
| 3568 | - 'postexcerpt', |
|
| 3569 | - esc_html__('Short Biography', 'event_espresso'), |
|
| 3570 | - 'post_excerpt_meta_box', |
|
| 3571 | - $this->_cpt_routes[$this->_req_action], |
|
| 3572 | - 'normal' |
|
| 3573 | - ); |
|
| 3574 | - } |
|
| 3575 | - if (post_type_supports('espresso_attendees', 'comments')) { |
|
| 3576 | - add_meta_box( |
|
| 3577 | - 'commentsdiv', |
|
| 3578 | - esc_html__('Notes on the Contact', 'event_espresso'), |
|
| 3579 | - 'post_comment_meta_box', |
|
| 3580 | - $this->_cpt_routes[$this->_req_action], |
|
| 3581 | - 'normal', |
|
| 3582 | - 'core' |
|
| 3583 | - ); |
|
| 3584 | - } |
|
| 3585 | - add_meta_box( |
|
| 3586 | - 'attendee_contact_info', |
|
| 3587 | - esc_html__('Contact Info', 'event_espresso'), |
|
| 3588 | - array($this, 'attendee_contact_info'), |
|
| 3589 | - $this->_cpt_routes[$this->_req_action], |
|
| 3590 | - 'side', |
|
| 3591 | - 'core' |
|
| 3592 | - ); |
|
| 3593 | - add_meta_box( |
|
| 3594 | - 'attendee_details_address', |
|
| 3595 | - esc_html__('Address Details', 'event_espresso'), |
|
| 3596 | - array($this, 'attendee_address_details'), |
|
| 3597 | - $this->_cpt_routes[$this->_req_action], |
|
| 3598 | - 'normal', |
|
| 3599 | - 'core' |
|
| 3600 | - ); |
|
| 3601 | - add_meta_box( |
|
| 3602 | - 'attendee_registrations', |
|
| 3603 | - esc_html__('Registrations for this Contact', 'event_espresso'), |
|
| 3604 | - array($this, 'attendee_registrations_meta_box'), |
|
| 3605 | - $this->_cpt_routes[$this->_req_action], |
|
| 3606 | - 'normal', |
|
| 3607 | - 'high' |
|
| 3608 | - ); |
|
| 3609 | - } |
|
| 3610 | - |
|
| 3611 | - |
|
| 3612 | - /** |
|
| 3613 | - * Metabox for attendee contact info |
|
| 3614 | - * |
|
| 3615 | - * @param WP_Post $post wp post object |
|
| 3616 | - * @return string attendee contact info ( and form ) |
|
| 3617 | - * @throws EE_Error |
|
| 3618 | - * @throws InvalidArgumentException |
|
| 3619 | - * @throws InvalidDataTypeException |
|
| 3620 | - * @throws InvalidInterfaceException |
|
| 3621 | - * @throws LogicException |
|
| 3622 | - * @throws DomainException |
|
| 3623 | - */ |
|
| 3624 | - public function attendee_contact_info($post) |
|
| 3625 | - { |
|
| 3626 | - //get attendee object ( should already have it ) |
|
| 3627 | - $form = $this->getAttendeeContactDetailsMetaboxFormHandler($this->_cpt_model_obj); |
|
| 3628 | - $form->enqueueStylesAndScripts(); |
|
| 3629 | - echo $form->display(); |
|
| 3630 | - } |
|
| 3631 | - |
|
| 3632 | - |
|
| 3633 | - /** |
|
| 3634 | - * Return form handler for the contact details metabox |
|
| 3635 | - * |
|
| 3636 | - * @param EE_Attendee $attendee |
|
| 3637 | - * @return AttendeeContactDetailsMetaboxFormHandler |
|
| 3638 | - * @throws DomainException |
|
| 3639 | - * @throws InvalidArgumentException |
|
| 3640 | - * @throws InvalidDataTypeException |
|
| 3641 | - * @throws InvalidInterfaceException |
|
| 3642 | - */ |
|
| 3643 | - protected function getAttendeeContactDetailsMetaboxFormHandler(EE_Attendee $attendee) |
|
| 3644 | - { |
|
| 3645 | - return new AttendeeContactDetailsMetaboxFormHandler($attendee, EE_Registry::instance()); |
|
| 3646 | - } |
|
| 3647 | - |
|
| 3648 | - |
|
| 3649 | - /** |
|
| 3650 | - * Metabox for attendee details |
|
| 3651 | - * |
|
| 3652 | - * @param WP_Post $post wp post object |
|
| 3653 | - * @throws DomainException |
|
| 3654 | - */ |
|
| 3655 | - public function attendee_address_details($post) |
|
| 3656 | - { |
|
| 3657 | - //get attendee object (should already have it) |
|
| 3658 | - $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
| 3659 | - $this->_template_args['state_html'] = EEH_Form_Fields::generate_form_input( |
|
| 3660 | - new EE_Question_Form_Input( |
|
| 3661 | - EE_Question::new_instance( |
|
| 3662 | - array( |
|
| 3663 | - 'QST_ID' => 0, |
|
| 3664 | - 'QST_display_text' => esc_html__('State/Province', 'event_espresso'), |
|
| 3665 | - 'QST_system' => 'admin-state', |
|
| 3666 | - ) |
|
| 3667 | - ), |
|
| 3668 | - EE_Answer::new_instance( |
|
| 3669 | - array( |
|
| 3670 | - 'ANS_ID' => 0, |
|
| 3671 | - 'ANS_value' => $this->_cpt_model_obj->state_ID(), |
|
| 3672 | - ) |
|
| 3673 | - ), |
|
| 3674 | - array( |
|
| 3675 | - 'input_id' => 'STA_ID', |
|
| 3676 | - 'input_name' => 'STA_ID', |
|
| 3677 | - 'input_prefix' => '', |
|
| 3678 | - 'append_qstn_id' => false, |
|
| 3679 | - ) |
|
| 3680 | - ) |
|
| 3681 | - ); |
|
| 3682 | - $this->_template_args['country_html'] = EEH_Form_Fields::generate_form_input( |
|
| 3683 | - new EE_Question_Form_Input( |
|
| 3684 | - EE_Question::new_instance( |
|
| 3685 | - array( |
|
| 3686 | - 'QST_ID' => 0, |
|
| 3687 | - 'QST_display_text' => esc_html__('Country', 'event_espresso'), |
|
| 3688 | - 'QST_system' => 'admin-country', |
|
| 3689 | - ) |
|
| 3690 | - ), |
|
| 3691 | - EE_Answer::new_instance( |
|
| 3692 | - array( |
|
| 3693 | - 'ANS_ID' => 0, |
|
| 3694 | - 'ANS_value' => $this->_cpt_model_obj->country_ID(), |
|
| 3695 | - ) |
|
| 3696 | - ), |
|
| 3697 | - array( |
|
| 3698 | - 'input_id' => 'CNT_ISO', |
|
| 3699 | - 'input_name' => 'CNT_ISO', |
|
| 3700 | - 'input_prefix' => '', |
|
| 3701 | - 'append_qstn_id' => false, |
|
| 3702 | - ) |
|
| 3703 | - ) |
|
| 3704 | - ); |
|
| 3705 | - $template = |
|
| 3706 | - REG_TEMPLATE_PATH . 'attendee_address_details_metabox_content.template.php'; |
|
| 3707 | - EEH_Template::display_template($template, $this->_template_args); |
|
| 3708 | - } |
|
| 3709 | - |
|
| 3710 | - |
|
| 3711 | - /** |
|
| 3712 | - * _attendee_details |
|
| 3713 | - * |
|
| 3714 | - * @access protected |
|
| 3715 | - * @param $post |
|
| 3716 | - * @return void |
|
| 3717 | - * @throws DomainException |
|
| 3718 | - * @throws EE_Error |
|
| 3719 | - */ |
|
| 3720 | - public function attendee_registrations_meta_box($post) |
|
| 3721 | - { |
|
| 3722 | - $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
| 3723 | - $this->_template_args['registrations'] = $this->_cpt_model_obj->get_many_related('Registration'); |
|
| 3724 | - $template = |
|
| 3725 | - REG_TEMPLATE_PATH . 'attendee_registrations_main_meta_box.template.php'; |
|
| 3726 | - EEH_Template::display_template($template, $this->_template_args); |
|
| 3727 | - } |
|
| 3728 | - |
|
| 3729 | - |
|
| 3730 | - /** |
|
| 3731 | - * add in the form fields for the attendee edit |
|
| 3732 | - * |
|
| 3733 | - * @param WP_Post $post wp post object |
|
| 3734 | - * @return string html for new form. |
|
| 3735 | - * @throws DomainException |
|
| 3736 | - */ |
|
| 3737 | - public function after_title_form_fields($post) |
|
| 3738 | - { |
|
| 3739 | - if ($post->post_type == 'espresso_attendees') { |
|
| 3740 | - $template = REG_TEMPLATE_PATH . 'attendee_details_after_title_form_fields.template.php'; |
|
| 3741 | - $template_args['attendee'] = $this->_cpt_model_obj; |
|
| 3742 | - EEH_Template::display_template($template, $template_args); |
|
| 3743 | - } |
|
| 3744 | - } |
|
| 3745 | - |
|
| 3746 | - |
|
| 3747 | - /** |
|
| 3748 | - * _trash_or_restore_attendee |
|
| 3749 | - * |
|
| 3750 | - * @param boolean $trash - whether to move item to trash (TRUE) or restore it (FALSE) |
|
| 3751 | - * @return void |
|
| 3752 | - * @throws EE_Error |
|
| 3753 | - * @throws InvalidArgumentException |
|
| 3754 | - * @throws InvalidDataTypeException |
|
| 3755 | - * @throws InvalidInterfaceException |
|
| 3756 | - * @access protected |
|
| 3757 | - */ |
|
| 3758 | - protected function _trash_or_restore_attendees($trash = true) |
|
| 3759 | - { |
|
| 3760 | - do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
| 3761 | - $ATT_MDL = EEM_Attendee::instance(); |
|
| 3762 | - $success = 1; |
|
| 3763 | - //Checkboxes |
|
| 3764 | - if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) { |
|
| 3765 | - // if array has more than one element than success message should be plural |
|
| 3766 | - $success = count($this->_req_data['checkbox']) > 1 ? 2 : 1; |
|
| 3767 | - // cycle thru checkboxes |
|
| 3768 | - while (list($ATT_ID, $value) = each($this->_req_data['checkbox'])) { |
|
| 3769 | - $updated = $trash ? $ATT_MDL->update_by_ID(array('status' => 'trash'), $ATT_ID) |
|
| 3770 | - : $ATT_MDL->update_by_ID(array('status' => 'publish'), $ATT_ID); |
|
| 3771 | - if ( ! $updated) { |
|
| 3772 | - $success = 0; |
|
| 3773 | - } |
|
| 3774 | - } |
|
| 3775 | - } else { |
|
| 3776 | - // grab single id and delete |
|
| 3777 | - $ATT_ID = absint($this->_req_data['ATT_ID']); |
|
| 3778 | - //get attendee |
|
| 3779 | - $att = $ATT_MDL->get_one_by_ID($ATT_ID); |
|
| 3780 | - $updated = $trash ? $att->set_status('trash') : $att->set_status('publish'); |
|
| 3781 | - $updated = $att->save(); |
|
| 3782 | - if ( ! $updated) { |
|
| 3783 | - $success = 0; |
|
| 3784 | - } |
|
| 3785 | - } |
|
| 3786 | - $what = $success > 1 |
|
| 3787 | - ? esc_html__('Contacts', 'event_espresso') |
|
| 3788 | - : esc_html__('Contact', 'event_espresso'); |
|
| 3789 | - $action_desc = $trash |
|
| 3790 | - ? esc_html__('moved to the trash', 'event_espresso') |
|
| 3791 | - : esc_html__('restored', 'event_espresso'); |
|
| 3792 | - $this->_redirect_after_action($success, $what, $action_desc, array('action' => 'contact_list')); |
|
| 3793 | - } |
|
| 2958 | + } |
|
| 2959 | + $template_args = array( |
|
| 2960 | + 'title' => '', |
|
| 2961 | + 'content' => '', |
|
| 2962 | + 'step_button_text' => '', |
|
| 2963 | + 'show_notification_toggle' => false, |
|
| 2964 | + ); |
|
| 2965 | + //to indicate we're processing a new registration |
|
| 2966 | + $hidden_fields = array( |
|
| 2967 | + 'processing_registration' => array( |
|
| 2968 | + 'type' => 'hidden', |
|
| 2969 | + 'value' => 0, |
|
| 2970 | + ), |
|
| 2971 | + 'event_id' => array( |
|
| 2972 | + 'type' => 'hidden', |
|
| 2973 | + 'value' => $this->_reg_event->ID(), |
|
| 2974 | + ), |
|
| 2975 | + ); |
|
| 2976 | + //if the cart is empty then we know we're at step one so we'll display ticket selector |
|
| 2977 | + $cart = EE_Registry::instance()->SSN->cart(); |
|
| 2978 | + $step = ! $cart instanceof EE_Cart ? 'ticket' : 'questions'; |
|
| 2979 | + switch ($step) { |
|
| 2980 | + case 'ticket' : |
|
| 2981 | + $hidden_fields['processing_registration']['value'] = 1; |
|
| 2982 | + $template_args['title'] = esc_html__( |
|
| 2983 | + 'Step One: Select the Ticket for this registration', |
|
| 2984 | + 'event_espresso' |
|
| 2985 | + ); |
|
| 2986 | + $template_args['content'] = |
|
| 2987 | + EED_Ticket_Selector::instance()->display_ticket_selector($this->_reg_event); |
|
| 2988 | + $template_args['step_button_text'] = esc_html__( |
|
| 2989 | + 'Add Tickets and Continue to Registrant Details', |
|
| 2990 | + 'event_espresso' |
|
| 2991 | + ); |
|
| 2992 | + $template_args['show_notification_toggle'] = false; |
|
| 2993 | + break; |
|
| 2994 | + case 'questions' : |
|
| 2995 | + $hidden_fields['processing_registration']['value'] = 2; |
|
| 2996 | + $template_args['title'] = esc_html__( |
|
| 2997 | + 'Step Two: Add Registrant Details for this Registration', |
|
| 2998 | + 'event_espresso' |
|
| 2999 | + ); |
|
| 3000 | + //in theory we should be able to run EED_SPCO at this point because the cart should have been setup |
|
| 3001 | + // properly by the first process_reg_step run. |
|
| 3002 | + $template_args['content'] = |
|
| 3003 | + EED_Single_Page_Checkout::registration_checkout_for_admin(); |
|
| 3004 | + $template_args['step_button_text'] = esc_html__( |
|
| 3005 | + 'Save Registration and Continue to Details', |
|
| 3006 | + 'event_espresso' |
|
| 3007 | + ); |
|
| 3008 | + $template_args['show_notification_toggle'] = true; |
|
| 3009 | + break; |
|
| 3010 | + } |
|
| 3011 | + //we come back to the process_registration_step route. |
|
| 3012 | + $this->_set_add_edit_form_tags('process_reg_step', $hidden_fields); |
|
| 3013 | + return EEH_Template::display_template( |
|
| 3014 | + REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee_step_content.template.php', |
|
| 3015 | + $template_args, |
|
| 3016 | + true |
|
| 3017 | + ); |
|
| 3018 | + } |
|
| 3019 | + |
|
| 3020 | + |
|
| 3021 | + /** |
|
| 3022 | + * set_reg_event |
|
| 3023 | + * |
|
| 3024 | + * @access private |
|
| 3025 | + * @return bool |
|
| 3026 | + * @throws EE_Error |
|
| 3027 | + * @throws InvalidArgumentException |
|
| 3028 | + * @throws InvalidDataTypeException |
|
| 3029 | + * @throws InvalidInterfaceException |
|
| 3030 | + */ |
|
| 3031 | + private function _set_reg_event() |
|
| 3032 | + { |
|
| 3033 | + if (is_object($this->_reg_event)) { |
|
| 3034 | + return true; |
|
| 3035 | + } |
|
| 3036 | + $EVT_ID = (! empty($this->_req_data['event_id'])) ? absint($this->_req_data['event_id']) : false; |
|
| 3037 | + if ( ! $EVT_ID) { |
|
| 3038 | + return false; |
|
| 3039 | + } |
|
| 3040 | + $this->_reg_event = EEM_Event::instance()->get_one_by_ID($EVT_ID); |
|
| 3041 | + return true; |
|
| 3042 | + } |
|
| 3043 | + |
|
| 3044 | + |
|
| 3045 | + /** |
|
| 3046 | + * process_reg_step |
|
| 3047 | + * |
|
| 3048 | + * @access public |
|
| 3049 | + * @return string |
|
| 3050 | + * @throws DomainException |
|
| 3051 | + * @throws EE_Error |
|
| 3052 | + * @throws InvalidArgumentException |
|
| 3053 | + * @throws InvalidDataTypeException |
|
| 3054 | + * @throws InvalidInterfaceException |
|
| 3055 | + * @throws ReflectionException |
|
| 3056 | + * @throws RuntimeException |
|
| 3057 | + */ |
|
| 3058 | + public function process_reg_step() |
|
| 3059 | + { |
|
| 3060 | + EE_System::do_not_cache(); |
|
| 3061 | + $this->_set_reg_event(); |
|
| 3062 | + EE_Registry::instance()->REQ->set_espresso_page(true); |
|
| 3063 | + EE_Registry::instance()->REQ->set('uts', time()); |
|
| 3064 | + //what step are we on? |
|
| 3065 | + $cart = EE_Registry::instance()->SSN->cart(); |
|
| 3066 | + $step = ! $cart instanceof EE_Cart ? 'ticket' : 'questions'; |
|
| 3067 | + //if doing ajax then we need to verify the nonce |
|
| 3068 | + if (defined('DOING_AJAX')) { |
|
| 3069 | + $nonce = isset($this->_req_data[$this->_req_nonce]) |
|
| 3070 | + ? sanitize_text_field($this->_req_data[$this->_req_nonce]) : ''; |
|
| 3071 | + $this->_verify_nonce($nonce, $this->_req_nonce); |
|
| 3072 | + } |
|
| 3073 | + switch ($step) { |
|
| 3074 | + case 'ticket' : |
|
| 3075 | + //process ticket selection |
|
| 3076 | + $success = EED_Ticket_Selector::instance()->process_ticket_selections(); |
|
| 3077 | + if ($success) { |
|
| 3078 | + EE_Error::add_success( |
|
| 3079 | + esc_html__( |
|
| 3080 | + 'Tickets Selected. Now complete the registration.', |
|
| 3081 | + 'event_espresso' |
|
| 3082 | + ) |
|
| 3083 | + ); |
|
| 3084 | + } else { |
|
| 3085 | + $query_args['step_error'] = $this->_req_data['step_error'] = true; |
|
| 3086 | + } |
|
| 3087 | + if (defined('DOING_AJAX')) { |
|
| 3088 | + $this->new_registration(); //display next step |
|
| 3089 | + } else { |
|
| 3090 | + $query_args = array( |
|
| 3091 | + 'action' => 'new_registration', |
|
| 3092 | + 'processing_registration' => 1, |
|
| 3093 | + 'event_id' => $this->_reg_event->ID(), |
|
| 3094 | + 'uts' => time(), |
|
| 3095 | + ); |
|
| 3096 | + $this->_redirect_after_action( |
|
| 3097 | + false, |
|
| 3098 | + '', |
|
| 3099 | + '', |
|
| 3100 | + $query_args, |
|
| 3101 | + true |
|
| 3102 | + ); |
|
| 3103 | + } |
|
| 3104 | + break; |
|
| 3105 | + case 'questions' : |
|
| 3106 | + if (! isset( |
|
| 3107 | + $this->_req_data['txn_reg_status_change'], |
|
| 3108 | + $this->_req_data['txn_reg_status_change']['send_notifications']) |
|
| 3109 | + ) { |
|
| 3110 | + add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_false', 15); |
|
| 3111 | + } |
|
| 3112 | + //process registration |
|
| 3113 | + $transaction = EED_Single_Page_Checkout::instance()->process_registration_from_admin(); |
|
| 3114 | + if ($cart instanceof EE_Cart) { |
|
| 3115 | + $grand_total = $cart->get_cart_grand_total(); |
|
| 3116 | + if ($grand_total instanceof EE_Line_Item) { |
|
| 3117 | + $grand_total->save_this_and_descendants_to_txn(); |
|
| 3118 | + } |
|
| 3119 | + } |
|
| 3120 | + if ( ! $transaction instanceof EE_Transaction) { |
|
| 3121 | + $query_args = array( |
|
| 3122 | + 'action' => 'new_registration', |
|
| 3123 | + 'processing_registration' => 2, |
|
| 3124 | + 'event_id' => $this->_reg_event->ID(), |
|
| 3125 | + 'uts' => time(), |
|
| 3126 | + ); |
|
| 3127 | + if (defined('DOING_AJAX')) { |
|
| 3128 | + //display registration form again because there are errors (maybe validation?) |
|
| 3129 | + $this->new_registration(); |
|
| 3130 | + return; |
|
| 3131 | + } else { |
|
| 3132 | + $this->_redirect_after_action( |
|
| 3133 | + false, |
|
| 3134 | + '', |
|
| 3135 | + '', |
|
| 3136 | + $query_args, |
|
| 3137 | + true |
|
| 3138 | + ); |
|
| 3139 | + return; |
|
| 3140 | + } |
|
| 3141 | + } |
|
| 3142 | + // maybe update status, and make sure to save transaction if not done already |
|
| 3143 | + if ( ! $transaction->update_status_based_on_total_paid()) { |
|
| 3144 | + $transaction->save(); |
|
| 3145 | + } |
|
| 3146 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
| 3147 | + $this->_req_data = array(); |
|
| 3148 | + $query_args = array( |
|
| 3149 | + 'action' => 'redirect_to_txn', |
|
| 3150 | + 'TXN_ID' => $transaction->ID(), |
|
| 3151 | + 'EVT_ID' => $this->_reg_event->ID(), |
|
| 3152 | + 'event_name' => urlencode($this->_reg_event->name()), |
|
| 3153 | + 'redirect_from' => 'new_registration', |
|
| 3154 | + ); |
|
| 3155 | + $this->_redirect_after_action(false, '', '', $query_args, true); |
|
| 3156 | + break; |
|
| 3157 | + } |
|
| 3158 | + //what are you looking here for? Should be nothing to do at this point. |
|
| 3159 | + } |
|
| 3160 | + |
|
| 3161 | + |
|
| 3162 | + /** |
|
| 3163 | + * redirect_to_txn |
|
| 3164 | + * |
|
| 3165 | + * @access public |
|
| 3166 | + * @return void |
|
| 3167 | + * @throws EE_Error |
|
| 3168 | + * @throws InvalidArgumentException |
|
| 3169 | + * @throws InvalidDataTypeException |
|
| 3170 | + * @throws InvalidInterfaceException |
|
| 3171 | + */ |
|
| 3172 | + public function redirect_to_txn() |
|
| 3173 | + { |
|
| 3174 | + EE_System::do_not_cache(); |
|
| 3175 | + EE_Registry::instance()->SSN->clear_session(__CLASS__, __FUNCTION__); |
|
| 3176 | + $query_args = array( |
|
| 3177 | + 'action' => 'view_transaction', |
|
| 3178 | + 'TXN_ID' => isset($this->_req_data['TXN_ID']) ? absint($this->_req_data['TXN_ID']) : 0, |
|
| 3179 | + 'page' => 'espresso_transactions', |
|
| 3180 | + ); |
|
| 3181 | + if (isset($this->_req_data['EVT_ID'], $this->_req_data['redirect_from'])) { |
|
| 3182 | + $query_args['EVT_ID'] = $this->_req_data['EVT_ID']; |
|
| 3183 | + $query_args['event_name'] = urlencode($this->_req_data['event_name']); |
|
| 3184 | + $query_args['redirect_from'] = $this->_req_data['redirect_from']; |
|
| 3185 | + } |
|
| 3186 | + EE_Error::add_success( |
|
| 3187 | + esc_html__( |
|
| 3188 | + 'Registration Created. Please review the transaction and add any payments as necessary', |
|
| 3189 | + 'event_espresso' |
|
| 3190 | + ) |
|
| 3191 | + ); |
|
| 3192 | + $this->_redirect_after_action(false, '', '', $query_args, true); |
|
| 3193 | + } |
|
| 3194 | + |
|
| 3195 | + |
|
| 3196 | + /** |
|
| 3197 | + * generates HTML for the Attendee Contact List |
|
| 3198 | + * |
|
| 3199 | + * @access protected |
|
| 3200 | + * @return void |
|
| 3201 | + */ |
|
| 3202 | + protected function _attendee_contact_list_table() |
|
| 3203 | + { |
|
| 3204 | + do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
| 3205 | + $this->_search_btn_label = esc_html__('Contacts', 'event_espresso'); |
|
| 3206 | + $this->display_admin_list_table_page_with_no_sidebar(); |
|
| 3207 | + } |
|
| 3208 | + |
|
| 3209 | + |
|
| 3210 | + /** |
|
| 3211 | + * get_attendees |
|
| 3212 | + * |
|
| 3213 | + * @param $per_page |
|
| 3214 | + * @param bool $count whether to return count or data. |
|
| 3215 | + * @param bool $trash |
|
| 3216 | + * @return array |
|
| 3217 | + * @throws EE_Error |
|
| 3218 | + * @throws InvalidArgumentException |
|
| 3219 | + * @throws InvalidDataTypeException |
|
| 3220 | + * @throws InvalidInterfaceException |
|
| 3221 | + * @access public |
|
| 3222 | + */ |
|
| 3223 | + public function get_attendees($per_page, $count = false, $trash = false) |
|
| 3224 | + { |
|
| 3225 | + do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
| 3226 | + require_once(REG_ADMIN . 'EE_Attendee_Contact_List_Table.class.php'); |
|
| 3227 | + $ATT_MDL = EEM_Attendee::instance(); |
|
| 3228 | + $this->_req_data['orderby'] = ! empty($this->_req_data['orderby']) ? $this->_req_data['orderby'] : ''; |
|
| 3229 | + switch ($this->_req_data['orderby']) { |
|
| 3230 | + case 'ATT_ID': |
|
| 3231 | + $orderby = 'ATT_ID'; |
|
| 3232 | + break; |
|
| 3233 | + case 'ATT_fname': |
|
| 3234 | + $orderby = 'ATT_fname'; |
|
| 3235 | + break; |
|
| 3236 | + case 'ATT_email': |
|
| 3237 | + $orderby = 'ATT_email'; |
|
| 3238 | + break; |
|
| 3239 | + case 'ATT_city': |
|
| 3240 | + $orderby = 'ATT_city'; |
|
| 3241 | + break; |
|
| 3242 | + case 'STA_ID': |
|
| 3243 | + $orderby = 'STA_ID'; |
|
| 3244 | + break; |
|
| 3245 | + case 'CNT_ID': |
|
| 3246 | + $orderby = 'CNT_ID'; |
|
| 3247 | + break; |
|
| 3248 | + case 'Registration_Count': |
|
| 3249 | + $orderby = 'Registration_Count'; |
|
| 3250 | + break; |
|
| 3251 | + default: |
|
| 3252 | + $orderby = 'ATT_lname'; |
|
| 3253 | + } |
|
| 3254 | + $sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) |
|
| 3255 | + ? $this->_req_data['order'] |
|
| 3256 | + : 'ASC'; |
|
| 3257 | + $current_page = isset($this->_req_data['paged']) && ! empty($this->_req_data['paged']) |
|
| 3258 | + ? $this->_req_data['paged'] |
|
| 3259 | + : 1; |
|
| 3260 | + $per_page = isset($per_page) && ! empty($per_page) ? $per_page : 10; |
|
| 3261 | + $per_page = isset($this->_req_data['perpage']) && ! empty($this->_req_data['perpage']) |
|
| 3262 | + ? $this->_req_data['perpage'] |
|
| 3263 | + : $per_page; |
|
| 3264 | + $_where = array(); |
|
| 3265 | + if ( ! empty($this->_req_data['s'])) { |
|
| 3266 | + $sstr = '%' . $this->_req_data['s'] . '%'; |
|
| 3267 | + $_where['OR'] = array( |
|
| 3268 | + 'Registration.Event.EVT_name' => array('LIKE', $sstr), |
|
| 3269 | + 'Registration.Event.EVT_desc' => array('LIKE', $sstr), |
|
| 3270 | + 'Registration.Event.EVT_short_desc' => array('LIKE', $sstr), |
|
| 3271 | + 'ATT_fname' => array('LIKE', $sstr), |
|
| 3272 | + 'ATT_lname' => array('LIKE', $sstr), |
|
| 3273 | + 'ATT_short_bio' => array('LIKE', $sstr), |
|
| 3274 | + 'ATT_email' => array('LIKE', $sstr), |
|
| 3275 | + 'ATT_address' => array('LIKE', $sstr), |
|
| 3276 | + 'ATT_address2' => array('LIKE', $sstr), |
|
| 3277 | + 'ATT_city' => array('LIKE', $sstr), |
|
| 3278 | + 'Country.CNT_name' => array('LIKE', $sstr), |
|
| 3279 | + 'State.STA_name' => array('LIKE', $sstr), |
|
| 3280 | + 'ATT_phone' => array('LIKE', $sstr), |
|
| 3281 | + 'Registration.REG_final_price' => array('LIKE', $sstr), |
|
| 3282 | + 'Registration.REG_code' => array('LIKE', $sstr), |
|
| 3283 | + 'Registration.REG_group_size' => array('LIKE', $sstr), |
|
| 3284 | + ); |
|
| 3285 | + } |
|
| 3286 | + $offset = ($current_page - 1) * $per_page; |
|
| 3287 | + $limit = $count ? null : array($offset, $per_page); |
|
| 3288 | + $query_args = array( |
|
| 3289 | + $_where, |
|
| 3290 | + 'extra_selects' => array('Registration_Count' => array('Registration.REG_ID', 'count', '%d')), |
|
| 3291 | + 'limit' => $limit |
|
| 3292 | + ); |
|
| 3293 | + if (! $count) { |
|
| 3294 | + $query_args['order_by'] = array($orderby => $sort); |
|
| 3295 | + } |
|
| 3296 | + if ($trash) { |
|
| 3297 | + $query_args[0]['status'] = array('!=', 'publish'); |
|
| 3298 | + $all_attendees = $count |
|
| 3299 | + ? $ATT_MDL->count($query_args, 'ATT_ID', true) |
|
| 3300 | + : $ATT_MDL->get_all($query_args); |
|
| 3301 | + } else { |
|
| 3302 | + $query_args[0]['status'] = array('IN', array('publish')); |
|
| 3303 | + $all_attendees = $count |
|
| 3304 | + ? $ATT_MDL->count($query_args, 'ATT_ID', true) |
|
| 3305 | + : $ATT_MDL->get_all($query_args); |
|
| 3306 | + } |
|
| 3307 | + return $all_attendees; |
|
| 3308 | + } |
|
| 3309 | + |
|
| 3310 | + |
|
| 3311 | + /** |
|
| 3312 | + * This is just taking care of resending the registration confirmation |
|
| 3313 | + * |
|
| 3314 | + * @access protected |
|
| 3315 | + * @return void |
|
| 3316 | + */ |
|
| 3317 | + protected function _resend_registration() |
|
| 3318 | + { |
|
| 3319 | + $this->_process_resend_registration(); |
|
| 3320 | + $query_args = isset($this->_req_data['redirect_to']) |
|
| 3321 | + ? array('action' => $this->_req_data['redirect_to'], '_REG_ID' => $this->_req_data['_REG_ID']) |
|
| 3322 | + : array('action' => 'default'); |
|
| 3323 | + $this->_redirect_after_action(false, '', '', $query_args, true); |
|
| 3324 | + } |
|
| 3325 | + |
|
| 3326 | + /** |
|
| 3327 | + * Creates a registration report, but accepts the name of a method to use for preparing the query parameters |
|
| 3328 | + * to use when selecting registrations |
|
| 3329 | + * @param string $method_name_for_getting_query_params the name of the method (on this class) to use for preparing |
|
| 3330 | + * the query parameters from the request |
|
| 3331 | + * @return void ends the request with a redirect or download |
|
| 3332 | + */ |
|
| 3333 | + public function _registrations_report_base( $method_name_for_getting_query_params ) |
|
| 3334 | + { |
|
| 3335 | + if (! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
| 3336 | + wp_redirect(EE_Admin_Page::add_query_args_and_nonce( |
|
| 3337 | + array( |
|
| 3338 | + 'page' => 'espresso_batch', |
|
| 3339 | + 'batch' => 'file', |
|
| 3340 | + 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
|
| 3341 | + 'filters' => urlencode( |
|
| 3342 | + serialize( |
|
| 3343 | + call_user_func( |
|
| 3344 | + array( $this, $method_name_for_getting_query_params ), |
|
| 3345 | + EEH_Array::is_set( |
|
| 3346 | + $this->_req_data, |
|
| 3347 | + 'filters', |
|
| 3348 | + array() |
|
| 3349 | + ) |
|
| 3350 | + ) |
|
| 3351 | + ) |
|
| 3352 | + ), |
|
| 3353 | + 'use_filters' => EEH_Array::is_set($this->_req_data, 'use_filters', false), |
|
| 3354 | + 'job_handler' => urlencode('EventEspressoBatchRequest\JobHandlers\RegistrationsReport'), |
|
| 3355 | + 'return_url' => urlencode($this->_req_data['return_url']), |
|
| 3356 | + ))); |
|
| 3357 | + } else { |
|
| 3358 | + $new_request_args = array( |
|
| 3359 | + 'export' => 'report', |
|
| 3360 | + 'action' => 'registrations_report_for_event', |
|
| 3361 | + 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
|
| 3362 | + ); |
|
| 3363 | + $this->_req_data = array_merge($this->_req_data, $new_request_args); |
|
| 3364 | + if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3365 | + require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3366 | + $EE_Export = EE_Export::instance($this->_req_data); |
|
| 3367 | + $EE_Export->export(); |
|
| 3368 | + } |
|
| 3369 | + } |
|
| 3370 | + } |
|
| 3371 | + |
|
| 3372 | + |
|
| 3373 | + |
|
| 3374 | + /** |
|
| 3375 | + * Creates a registration report using only query parameters in the request |
|
| 3376 | + * @return void |
|
| 3377 | + */ |
|
| 3378 | + public function _registrations_report() |
|
| 3379 | + { |
|
| 3380 | + $this->_registrations_report_base('_get_registration_query_parameters'); |
|
| 3381 | + } |
|
| 3382 | + |
|
| 3383 | + |
|
| 3384 | + public function _contact_list_export() |
|
| 3385 | + { |
|
| 3386 | + if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3387 | + require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3388 | + $EE_Export = EE_Export::instance($this->_req_data); |
|
| 3389 | + $EE_Export->export_attendees(); |
|
| 3390 | + } |
|
| 3391 | + } |
|
| 3392 | + |
|
| 3393 | + |
|
| 3394 | + public function _contact_list_report() |
|
| 3395 | + { |
|
| 3396 | + if ( ! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
| 3397 | + wp_redirect(EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 3398 | + 'page' => 'espresso_batch', |
|
| 3399 | + 'batch' => 'file', |
|
| 3400 | + 'job_handler' => urlencode('EventEspressoBatchRequest\JobHandlers\AttendeesReport'), |
|
| 3401 | + 'return_url' => urlencode($this->_req_data['return_url']), |
|
| 3402 | + ))); |
|
| 3403 | + } else { |
|
| 3404 | + if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3405 | + require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3406 | + $EE_Export = EE_Export::instance($this->_req_data); |
|
| 3407 | + $EE_Export->report_attendees(); |
|
| 3408 | + } |
|
| 3409 | + } |
|
| 3410 | + } |
|
| 3411 | + |
|
| 3412 | + |
|
| 3413 | + |
|
| 3414 | + |
|
| 3415 | + |
|
| 3416 | + /*************************************** ATTENDEE DETAILS ***************************************/ |
|
| 3417 | + /** |
|
| 3418 | + * This duplicates the attendee object for the given incoming registration id and attendee_id. |
|
| 3419 | + * |
|
| 3420 | + * @return void |
|
| 3421 | + * @throws EE_Error |
|
| 3422 | + * @throws InvalidArgumentException |
|
| 3423 | + * @throws InvalidDataTypeException |
|
| 3424 | + * @throws InvalidInterfaceException |
|
| 3425 | + */ |
|
| 3426 | + protected function _duplicate_attendee() |
|
| 3427 | + { |
|
| 3428 | + $action = ! empty($this->_req_data['return']) ? $this->_req_data['return'] : 'default'; |
|
| 3429 | + //verify we have necessary info |
|
| 3430 | + if (empty($this->_req_data['_REG_ID'])) { |
|
| 3431 | + EE_Error::add_error( |
|
| 3432 | + esc_html__( |
|
| 3433 | + 'Unable to create the contact for the registration because the required parameters are not present (_REG_ID )', |
|
| 3434 | + 'event_espresso' |
|
| 3435 | + ), __FILE__, __LINE__, __FUNCTION__ |
|
| 3436 | + ); |
|
| 3437 | + $query_args = array('action' => $action); |
|
| 3438 | + $this->_redirect_after_action('', '', '', $query_args, true); |
|
| 3439 | + } |
|
| 3440 | + //okay necessary deets present... let's dupe the incoming attendee and attach to incoming registration. |
|
| 3441 | + $registration = EEM_Registration::instance()->get_one_by_ID($this->_req_data['_REG_ID']); |
|
| 3442 | + $attendee = $registration->attendee(); |
|
| 3443 | + //remove relation of existing attendee on registration |
|
| 3444 | + $registration->_remove_relation_to($attendee, 'Attendee'); |
|
| 3445 | + //new attendee |
|
| 3446 | + $new_attendee = clone $attendee; |
|
| 3447 | + $new_attendee->set('ATT_ID', 0); |
|
| 3448 | + $new_attendee->save(); |
|
| 3449 | + //add new attendee to reg |
|
| 3450 | + $registration->_add_relation_to($new_attendee, 'Attendee'); |
|
| 3451 | + EE_Error::add_success( |
|
| 3452 | + esc_html__( |
|
| 3453 | + 'New Contact record created. Now make any edits you wish to make for this contact.', |
|
| 3454 | + 'event_espresso' |
|
| 3455 | + ) |
|
| 3456 | + ); |
|
| 3457 | + //redirect to edit page for attendee |
|
| 3458 | + $query_args = array('post' => $new_attendee->ID(), 'action' => 'edit_attendee'); |
|
| 3459 | + $this->_redirect_after_action('', '', '', $query_args, true); |
|
| 3460 | + } |
|
| 3461 | + |
|
| 3462 | + |
|
| 3463 | + /** |
|
| 3464 | + * Callback invoked by parent EE_Admin_CPT class hooked in on `save_post` wp hook. |
|
| 3465 | + * @param int $post_id |
|
| 3466 | + * @param WP_POST $post |
|
| 3467 | + * @throws DomainException |
|
| 3468 | + * @throws EE_Error |
|
| 3469 | + * @throws InvalidArgumentException |
|
| 3470 | + * @throws InvalidDataTypeException |
|
| 3471 | + * @throws InvalidInterfaceException |
|
| 3472 | + * @throws LogicException |
|
| 3473 | + * @throws InvalidFormSubmissionException |
|
| 3474 | + */ |
|
| 3475 | + protected function _insert_update_cpt_item($post_id, $post) |
|
| 3476 | + { |
|
| 3477 | + $success = true; |
|
| 3478 | + $attendee = $post instanceof WP_Post && $post->post_type === 'espresso_attendees' |
|
| 3479 | + ? EEM_Attendee::instance()->get_one_by_ID($post_id) |
|
| 3480 | + : null; |
|
| 3481 | + //for attendee updates |
|
| 3482 | + if ($attendee instanceof EE_Attendee) { |
|
| 3483 | + //note we should only be UPDATING attendees at this point. |
|
| 3484 | + $updated_fields = array( |
|
| 3485 | + 'ATT_fname' => $this->_req_data['ATT_fname'], |
|
| 3486 | + 'ATT_lname' => $this->_req_data['ATT_lname'], |
|
| 3487 | + 'ATT_full_name' => $this->_req_data['ATT_fname'] . ' ' . $this->_req_data['ATT_lname'], |
|
| 3488 | + 'ATT_address' => isset($this->_req_data['ATT_address']) ? $this->_req_data['ATT_address'] : '', |
|
| 3489 | + 'ATT_address2' => isset($this->_req_data['ATT_address2']) ? $this->_req_data['ATT_address2'] : '', |
|
| 3490 | + 'ATT_city' => isset($this->_req_data['ATT_city']) ? $this->_req_data['ATT_city'] : '', |
|
| 3491 | + 'STA_ID' => isset($this->_req_data['STA_ID']) ? $this->_req_data['STA_ID'] : '', |
|
| 3492 | + 'CNT_ISO' => isset($this->_req_data['CNT_ISO']) ? $this->_req_data['CNT_ISO'] : '', |
|
| 3493 | + 'ATT_zip' => isset($this->_req_data['ATT_zip']) ? $this->_req_data['ATT_zip'] : '', |
|
| 3494 | + ); |
|
| 3495 | + foreach ($updated_fields as $field => $value) { |
|
| 3496 | + $attendee->set($field, $value); |
|
| 3497 | + } |
|
| 3498 | + |
|
| 3499 | + //process contact details metabox form handler (which will also save the attendee) |
|
| 3500 | + $contact_details_form = $this->getAttendeeContactDetailsMetaboxFormHandler($attendee); |
|
| 3501 | + $success = $contact_details_form->process($this->_req_data); |
|
| 3502 | + |
|
| 3503 | + $attendee_update_callbacks = apply_filters( |
|
| 3504 | + 'FHEE__Registrations_Admin_Page__insert_update_cpt_item__attendee_update', |
|
| 3505 | + array() |
|
| 3506 | + ); |
|
| 3507 | + foreach ($attendee_update_callbacks as $a_callback) { |
|
| 3508 | + if (false === call_user_func_array($a_callback, array($attendee, $this->_req_data))) { |
|
| 3509 | + throw new EE_Error( |
|
| 3510 | + sprintf( |
|
| 3511 | + esc_html__( |
|
| 3512 | + '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.', |
|
| 3513 | + 'event_espresso' |
|
| 3514 | + ), |
|
| 3515 | + $a_callback |
|
| 3516 | + ) |
|
| 3517 | + ); |
|
| 3518 | + } |
|
| 3519 | + } |
|
| 3520 | + } |
|
| 3521 | + |
|
| 3522 | + if ($success === false) { |
|
| 3523 | + EE_Error::add_error( |
|
| 3524 | + esc_html__( |
|
| 3525 | + 'Something went wrong with updating the meta table data for the registration.', |
|
| 3526 | + 'event_espresso' |
|
| 3527 | + ), |
|
| 3528 | + __FILE__, __FUNCTION__, __LINE__ |
|
| 3529 | + ); |
|
| 3530 | + } |
|
| 3531 | + } |
|
| 3532 | + |
|
| 3533 | + |
|
| 3534 | + public function trash_cpt_item($post_id) |
|
| 3535 | + { |
|
| 3536 | + } |
|
| 3537 | + |
|
| 3538 | + |
|
| 3539 | + public function delete_cpt_item($post_id) |
|
| 3540 | + { |
|
| 3541 | + } |
|
| 3542 | + |
|
| 3543 | + |
|
| 3544 | + public function restore_cpt_item($post_id) |
|
| 3545 | + { |
|
| 3546 | + } |
|
| 3547 | + |
|
| 3548 | + |
|
| 3549 | + protected function _restore_cpt_item($post_id, $revision_id) |
|
| 3550 | + { |
|
| 3551 | + } |
|
| 3552 | + |
|
| 3553 | + |
|
| 3554 | + public function attendee_editor_metaboxes() |
|
| 3555 | + { |
|
| 3556 | + $this->verify_cpt_object(); |
|
| 3557 | + remove_meta_box( |
|
| 3558 | + 'postexcerpt', |
|
| 3559 | + esc_html__('Excerpt', 'event_espresso'), |
|
| 3560 | + 'post_excerpt_meta_box', |
|
| 3561 | + $this->_cpt_routes[$this->_req_action], |
|
| 3562 | + 'normal', |
|
| 3563 | + 'core' |
|
| 3564 | + ); |
|
| 3565 | + remove_meta_box('commentstatusdiv', $this->_cpt_routes[$this->_req_action], 'normal', 'core'); |
|
| 3566 | + if (post_type_supports('espresso_attendees', 'excerpt')) { |
|
| 3567 | + add_meta_box( |
|
| 3568 | + 'postexcerpt', |
|
| 3569 | + esc_html__('Short Biography', 'event_espresso'), |
|
| 3570 | + 'post_excerpt_meta_box', |
|
| 3571 | + $this->_cpt_routes[$this->_req_action], |
|
| 3572 | + 'normal' |
|
| 3573 | + ); |
|
| 3574 | + } |
|
| 3575 | + if (post_type_supports('espresso_attendees', 'comments')) { |
|
| 3576 | + add_meta_box( |
|
| 3577 | + 'commentsdiv', |
|
| 3578 | + esc_html__('Notes on the Contact', 'event_espresso'), |
|
| 3579 | + 'post_comment_meta_box', |
|
| 3580 | + $this->_cpt_routes[$this->_req_action], |
|
| 3581 | + 'normal', |
|
| 3582 | + 'core' |
|
| 3583 | + ); |
|
| 3584 | + } |
|
| 3585 | + add_meta_box( |
|
| 3586 | + 'attendee_contact_info', |
|
| 3587 | + esc_html__('Contact Info', 'event_espresso'), |
|
| 3588 | + array($this, 'attendee_contact_info'), |
|
| 3589 | + $this->_cpt_routes[$this->_req_action], |
|
| 3590 | + 'side', |
|
| 3591 | + 'core' |
|
| 3592 | + ); |
|
| 3593 | + add_meta_box( |
|
| 3594 | + 'attendee_details_address', |
|
| 3595 | + esc_html__('Address Details', 'event_espresso'), |
|
| 3596 | + array($this, 'attendee_address_details'), |
|
| 3597 | + $this->_cpt_routes[$this->_req_action], |
|
| 3598 | + 'normal', |
|
| 3599 | + 'core' |
|
| 3600 | + ); |
|
| 3601 | + add_meta_box( |
|
| 3602 | + 'attendee_registrations', |
|
| 3603 | + esc_html__('Registrations for this Contact', 'event_espresso'), |
|
| 3604 | + array($this, 'attendee_registrations_meta_box'), |
|
| 3605 | + $this->_cpt_routes[$this->_req_action], |
|
| 3606 | + 'normal', |
|
| 3607 | + 'high' |
|
| 3608 | + ); |
|
| 3609 | + } |
|
| 3610 | + |
|
| 3611 | + |
|
| 3612 | + /** |
|
| 3613 | + * Metabox for attendee contact info |
|
| 3614 | + * |
|
| 3615 | + * @param WP_Post $post wp post object |
|
| 3616 | + * @return string attendee contact info ( and form ) |
|
| 3617 | + * @throws EE_Error |
|
| 3618 | + * @throws InvalidArgumentException |
|
| 3619 | + * @throws InvalidDataTypeException |
|
| 3620 | + * @throws InvalidInterfaceException |
|
| 3621 | + * @throws LogicException |
|
| 3622 | + * @throws DomainException |
|
| 3623 | + */ |
|
| 3624 | + public function attendee_contact_info($post) |
|
| 3625 | + { |
|
| 3626 | + //get attendee object ( should already have it ) |
|
| 3627 | + $form = $this->getAttendeeContactDetailsMetaboxFormHandler($this->_cpt_model_obj); |
|
| 3628 | + $form->enqueueStylesAndScripts(); |
|
| 3629 | + echo $form->display(); |
|
| 3630 | + } |
|
| 3631 | + |
|
| 3632 | + |
|
| 3633 | + /** |
|
| 3634 | + * Return form handler for the contact details metabox |
|
| 3635 | + * |
|
| 3636 | + * @param EE_Attendee $attendee |
|
| 3637 | + * @return AttendeeContactDetailsMetaboxFormHandler |
|
| 3638 | + * @throws DomainException |
|
| 3639 | + * @throws InvalidArgumentException |
|
| 3640 | + * @throws InvalidDataTypeException |
|
| 3641 | + * @throws InvalidInterfaceException |
|
| 3642 | + */ |
|
| 3643 | + protected function getAttendeeContactDetailsMetaboxFormHandler(EE_Attendee $attendee) |
|
| 3644 | + { |
|
| 3645 | + return new AttendeeContactDetailsMetaboxFormHandler($attendee, EE_Registry::instance()); |
|
| 3646 | + } |
|
| 3647 | + |
|
| 3648 | + |
|
| 3649 | + /** |
|
| 3650 | + * Metabox for attendee details |
|
| 3651 | + * |
|
| 3652 | + * @param WP_Post $post wp post object |
|
| 3653 | + * @throws DomainException |
|
| 3654 | + */ |
|
| 3655 | + public function attendee_address_details($post) |
|
| 3656 | + { |
|
| 3657 | + //get attendee object (should already have it) |
|
| 3658 | + $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
| 3659 | + $this->_template_args['state_html'] = EEH_Form_Fields::generate_form_input( |
|
| 3660 | + new EE_Question_Form_Input( |
|
| 3661 | + EE_Question::new_instance( |
|
| 3662 | + array( |
|
| 3663 | + 'QST_ID' => 0, |
|
| 3664 | + 'QST_display_text' => esc_html__('State/Province', 'event_espresso'), |
|
| 3665 | + 'QST_system' => 'admin-state', |
|
| 3666 | + ) |
|
| 3667 | + ), |
|
| 3668 | + EE_Answer::new_instance( |
|
| 3669 | + array( |
|
| 3670 | + 'ANS_ID' => 0, |
|
| 3671 | + 'ANS_value' => $this->_cpt_model_obj->state_ID(), |
|
| 3672 | + ) |
|
| 3673 | + ), |
|
| 3674 | + array( |
|
| 3675 | + 'input_id' => 'STA_ID', |
|
| 3676 | + 'input_name' => 'STA_ID', |
|
| 3677 | + 'input_prefix' => '', |
|
| 3678 | + 'append_qstn_id' => false, |
|
| 3679 | + ) |
|
| 3680 | + ) |
|
| 3681 | + ); |
|
| 3682 | + $this->_template_args['country_html'] = EEH_Form_Fields::generate_form_input( |
|
| 3683 | + new EE_Question_Form_Input( |
|
| 3684 | + EE_Question::new_instance( |
|
| 3685 | + array( |
|
| 3686 | + 'QST_ID' => 0, |
|
| 3687 | + 'QST_display_text' => esc_html__('Country', 'event_espresso'), |
|
| 3688 | + 'QST_system' => 'admin-country', |
|
| 3689 | + ) |
|
| 3690 | + ), |
|
| 3691 | + EE_Answer::new_instance( |
|
| 3692 | + array( |
|
| 3693 | + 'ANS_ID' => 0, |
|
| 3694 | + 'ANS_value' => $this->_cpt_model_obj->country_ID(), |
|
| 3695 | + ) |
|
| 3696 | + ), |
|
| 3697 | + array( |
|
| 3698 | + 'input_id' => 'CNT_ISO', |
|
| 3699 | + 'input_name' => 'CNT_ISO', |
|
| 3700 | + 'input_prefix' => '', |
|
| 3701 | + 'append_qstn_id' => false, |
|
| 3702 | + ) |
|
| 3703 | + ) |
|
| 3704 | + ); |
|
| 3705 | + $template = |
|
| 3706 | + REG_TEMPLATE_PATH . 'attendee_address_details_metabox_content.template.php'; |
|
| 3707 | + EEH_Template::display_template($template, $this->_template_args); |
|
| 3708 | + } |
|
| 3709 | + |
|
| 3710 | + |
|
| 3711 | + /** |
|
| 3712 | + * _attendee_details |
|
| 3713 | + * |
|
| 3714 | + * @access protected |
|
| 3715 | + * @param $post |
|
| 3716 | + * @return void |
|
| 3717 | + * @throws DomainException |
|
| 3718 | + * @throws EE_Error |
|
| 3719 | + */ |
|
| 3720 | + public function attendee_registrations_meta_box($post) |
|
| 3721 | + { |
|
| 3722 | + $this->_template_args['attendee'] = $this->_cpt_model_obj; |
|
| 3723 | + $this->_template_args['registrations'] = $this->_cpt_model_obj->get_many_related('Registration'); |
|
| 3724 | + $template = |
|
| 3725 | + REG_TEMPLATE_PATH . 'attendee_registrations_main_meta_box.template.php'; |
|
| 3726 | + EEH_Template::display_template($template, $this->_template_args); |
|
| 3727 | + } |
|
| 3728 | + |
|
| 3729 | + |
|
| 3730 | + /** |
|
| 3731 | + * add in the form fields for the attendee edit |
|
| 3732 | + * |
|
| 3733 | + * @param WP_Post $post wp post object |
|
| 3734 | + * @return string html for new form. |
|
| 3735 | + * @throws DomainException |
|
| 3736 | + */ |
|
| 3737 | + public function after_title_form_fields($post) |
|
| 3738 | + { |
|
| 3739 | + if ($post->post_type == 'espresso_attendees') { |
|
| 3740 | + $template = REG_TEMPLATE_PATH . 'attendee_details_after_title_form_fields.template.php'; |
|
| 3741 | + $template_args['attendee'] = $this->_cpt_model_obj; |
|
| 3742 | + EEH_Template::display_template($template, $template_args); |
|
| 3743 | + } |
|
| 3744 | + } |
|
| 3745 | + |
|
| 3746 | + |
|
| 3747 | + /** |
|
| 3748 | + * _trash_or_restore_attendee |
|
| 3749 | + * |
|
| 3750 | + * @param boolean $trash - whether to move item to trash (TRUE) or restore it (FALSE) |
|
| 3751 | + * @return void |
|
| 3752 | + * @throws EE_Error |
|
| 3753 | + * @throws InvalidArgumentException |
|
| 3754 | + * @throws InvalidDataTypeException |
|
| 3755 | + * @throws InvalidInterfaceException |
|
| 3756 | + * @access protected |
|
| 3757 | + */ |
|
| 3758 | + protected function _trash_or_restore_attendees($trash = true) |
|
| 3759 | + { |
|
| 3760 | + do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
|
| 3761 | + $ATT_MDL = EEM_Attendee::instance(); |
|
| 3762 | + $success = 1; |
|
| 3763 | + //Checkboxes |
|
| 3764 | + if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) { |
|
| 3765 | + // if array has more than one element than success message should be plural |
|
| 3766 | + $success = count($this->_req_data['checkbox']) > 1 ? 2 : 1; |
|
| 3767 | + // cycle thru checkboxes |
|
| 3768 | + while (list($ATT_ID, $value) = each($this->_req_data['checkbox'])) { |
|
| 3769 | + $updated = $trash ? $ATT_MDL->update_by_ID(array('status' => 'trash'), $ATT_ID) |
|
| 3770 | + : $ATT_MDL->update_by_ID(array('status' => 'publish'), $ATT_ID); |
|
| 3771 | + if ( ! $updated) { |
|
| 3772 | + $success = 0; |
|
| 3773 | + } |
|
| 3774 | + } |
|
| 3775 | + } else { |
|
| 3776 | + // grab single id and delete |
|
| 3777 | + $ATT_ID = absint($this->_req_data['ATT_ID']); |
|
| 3778 | + //get attendee |
|
| 3779 | + $att = $ATT_MDL->get_one_by_ID($ATT_ID); |
|
| 3780 | + $updated = $trash ? $att->set_status('trash') : $att->set_status('publish'); |
|
| 3781 | + $updated = $att->save(); |
|
| 3782 | + if ( ! $updated) { |
|
| 3783 | + $success = 0; |
|
| 3784 | + } |
|
| 3785 | + } |
|
| 3786 | + $what = $success > 1 |
|
| 3787 | + ? esc_html__('Contacts', 'event_espresso') |
|
| 3788 | + : esc_html__('Contact', 'event_espresso'); |
|
| 3789 | + $action_desc = $trash |
|
| 3790 | + ? esc_html__('moved to the trash', 'event_espresso') |
|
| 3791 | + : esc_html__('restored', 'event_espresso'); |
|
| 3792 | + $this->_redirect_after_action($success, $what, $action_desc, array('action' => 'contact_list')); |
|
| 3793 | + } |
|
| 3794 | 3794 | |
| 3795 | 3795 | } |
@@ -76,7 +76,7 @@ discard block |
||
| 76 | 76 | // when adding a new registration... |
| 77 | 77 | if (isset($this->_req_data['action']) && $this->_req_data['action'] === 'new_registration') { |
| 78 | 78 | EE_System::do_not_cache(); |
| 79 | - if (! isset($this->_req_data['processing_registration']) |
|
| 79 | + if ( ! isset($this->_req_data['processing_registration']) |
|
| 80 | 80 | || absint($this->_req_data['processing_registration']) !== 1 |
| 81 | 81 | ) { |
| 82 | 82 | // and it's NOT the attendee information reg step |
@@ -171,7 +171,7 @@ discard block |
||
| 171 | 171 | public function _set_page_routes() |
| 172 | 172 | { |
| 173 | 173 | $this->_get_registration_status_array(); |
| 174 | - $reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID']) |
|
| 174 | + $reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID']) |
|
| 175 | 175 | ? $this->_req_data['_REG_ID'] : 0; |
| 176 | 176 | $reg_id = empty($reg_id) && ! empty($this->_req_data['reg_status_change_form']['REG_ID']) |
| 177 | 177 | ? $this->_req_data['reg_status_change_form']['REG_ID'] |
@@ -669,7 +669,7 @@ discard block |
||
| 669 | 669 | //style |
| 670 | 670 | wp_register_style( |
| 671 | 671 | 'espresso_reg', |
| 672 | - REG_ASSETS_URL . 'espresso_registrations_admin.css', |
|
| 672 | + REG_ASSETS_URL.'espresso_registrations_admin.css', |
|
| 673 | 673 | array('ee-admin-css'), |
| 674 | 674 | EVENT_ESPRESSO_VERSION |
| 675 | 675 | ); |
@@ -677,7 +677,7 @@ discard block |
||
| 677 | 677 | //script |
| 678 | 678 | wp_register_script( |
| 679 | 679 | 'espresso_reg', |
| 680 | - REG_ASSETS_URL . 'espresso_registrations_admin.js', |
|
| 680 | + REG_ASSETS_URL.'espresso_registrations_admin.js', |
|
| 681 | 681 | array('jquery-ui-datepicker', 'jquery-ui-draggable', 'ee_admin_js'), |
| 682 | 682 | EVENT_ESPRESSO_VERSION, |
| 683 | 683 | true |
@@ -715,7 +715,7 @@ discard block |
||
| 715 | 715 | wp_deregister_style('espresso_reg'); |
| 716 | 716 | wp_register_style( |
| 717 | 717 | 'espresso_att', |
| 718 | - REG_ASSETS_URL . 'espresso_attendees_admin.css', |
|
| 718 | + REG_ASSETS_URL.'espresso_attendees_admin.css', |
|
| 719 | 719 | array('ee-admin-css'), |
| 720 | 720 | EVENT_ESPRESSO_VERSION |
| 721 | 721 | ); |
@@ -727,7 +727,7 @@ discard block |
||
| 727 | 727 | { |
| 728 | 728 | wp_register_script( |
| 729 | 729 | 'ee-spco-for-admin', |
| 730 | - REG_ASSETS_URL . 'spco_for_admin.js', |
|
| 730 | + REG_ASSETS_URL.'spco_for_admin.js', |
|
| 731 | 731 | array('underscore', 'jquery'), |
| 732 | 732 | EVENT_ESPRESSO_VERSION, |
| 733 | 733 | true |
@@ -861,7 +861,7 @@ discard block |
||
| 861 | 861 | 'trash_registrations' => esc_html__('Trash Registrations', 'event_espresso'), |
| 862 | 862 | ), |
| 863 | 863 | ); |
| 864 | - $this->_views['trash'] = array( |
|
| 864 | + $this->_views['trash'] = array( |
|
| 865 | 865 | 'slug' => 'trash', |
| 866 | 866 | 'label' => esc_html__('Trash', 'event_espresso'), |
| 867 | 867 | 'count' => 0, |
@@ -950,7 +950,7 @@ discard block |
||
| 950 | 950 | } |
| 951 | 951 | $sc_items = array( |
| 952 | 952 | 'approved_status' => array( |
| 953 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved, |
|
| 953 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_approved, |
|
| 954 | 954 | 'desc' => EEH_Template::pretty_status( |
| 955 | 955 | EEM_Registration::status_id_approved, |
| 956 | 956 | false, |
@@ -958,7 +958,7 @@ discard block |
||
| 958 | 958 | ), |
| 959 | 959 | ), |
| 960 | 960 | 'pending_status' => array( |
| 961 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment, |
|
| 961 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_pending_payment, |
|
| 962 | 962 | 'desc' => EEH_Template::pretty_status( |
| 963 | 963 | EEM_Registration::status_id_pending_payment, |
| 964 | 964 | false, |
@@ -966,7 +966,7 @@ discard block |
||
| 966 | 966 | ), |
| 967 | 967 | ), |
| 968 | 968 | 'wait_list' => array( |
| 969 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list, |
|
| 969 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_wait_list, |
|
| 970 | 970 | 'desc' => EEH_Template::pretty_status( |
| 971 | 971 | EEM_Registration::status_id_wait_list, |
| 972 | 972 | false, |
@@ -974,7 +974,7 @@ discard block |
||
| 974 | 974 | ), |
| 975 | 975 | ), |
| 976 | 976 | 'incomplete_status' => array( |
| 977 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_incomplete, |
|
| 977 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_incomplete, |
|
| 978 | 978 | 'desc' => EEH_Template::pretty_status( |
| 979 | 979 | EEM_Registration::status_id_incomplete, |
| 980 | 980 | false, |
@@ -982,7 +982,7 @@ discard block |
||
| 982 | 982 | ), |
| 983 | 983 | ), |
| 984 | 984 | 'not_approved' => array( |
| 985 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved, |
|
| 985 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_not_approved, |
|
| 986 | 986 | 'desc' => EEH_Template::pretty_status( |
| 987 | 987 | EEM_Registration::status_id_not_approved, |
| 988 | 988 | false, |
@@ -990,7 +990,7 @@ discard block |
||
| 990 | 990 | ), |
| 991 | 991 | ), |
| 992 | 992 | 'declined_status' => array( |
| 993 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined, |
|
| 993 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_declined, |
|
| 994 | 994 | 'desc' => EEH_Template::pretty_status( |
| 995 | 995 | EEM_Registration::status_id_declined, |
| 996 | 996 | false, |
@@ -998,7 +998,7 @@ discard block |
||
| 998 | 998 | ), |
| 999 | 999 | ), |
| 1000 | 1000 | 'cancelled_status' => array( |
| 1001 | - 'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled, |
|
| 1001 | + 'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_cancelled, |
|
| 1002 | 1002 | 'desc' => EEH_Template::pretty_status( |
| 1003 | 1003 | EEM_Registration::status_id_cancelled, |
| 1004 | 1004 | false, |
@@ -1021,7 +1021,7 @@ discard block |
||
| 1021 | 1021 | $EVT_ID = ! empty($this->_req_data['event_id']) |
| 1022 | 1022 | ? absint($this->_req_data['event_id']) |
| 1023 | 1023 | : 0; |
| 1024 | - $ATT_ID = !empty($this->_req_data['ATT_ID']) |
|
| 1024 | + $ATT_ID = ! empty($this->_req_data['ATT_ID']) |
|
| 1025 | 1025 | ? absint($this->_req_data['ATT_ID']) |
| 1026 | 1026 | : 0; |
| 1027 | 1027 | if ($ATT_ID) { |
@@ -1033,13 +1033,13 @@ discard block |
||
| 1033 | 1033 | 'event_espresso' |
| 1034 | 1034 | ), |
| 1035 | 1035 | '<h3 style="line-height:1.5em;">', |
| 1036 | - '<a href="' . EE_Admin_Page::add_query_args_and_nonce( |
|
| 1036 | + '<a href="'.EE_Admin_Page::add_query_args_and_nonce( |
|
| 1037 | 1037 | array( |
| 1038 | 1038 | 'action' => 'edit_attendee', |
| 1039 | 1039 | 'post' => $ATT_ID |
| 1040 | 1040 | ), |
| 1041 | 1041 | REG_ADMIN_URL |
| 1042 | - ) . '">' . $attendee->full_name() . '</a>', |
|
| 1042 | + ).'">'.$attendee->full_name().'</a>', |
|
| 1043 | 1043 | '</h3>' |
| 1044 | 1044 | ); |
| 1045 | 1045 | } |
@@ -1050,7 +1050,7 @@ discard block |
||
| 1050 | 1050 | 'espresso_registrations_new_registration', |
| 1051 | 1051 | $EVT_ID |
| 1052 | 1052 | )) { |
| 1053 | - $this->_admin_page_title .= ' ' . $this->get_action_link_or_button( |
|
| 1053 | + $this->_admin_page_title .= ' '.$this->get_action_link_or_button( |
|
| 1054 | 1054 | 'new_registration', |
| 1055 | 1055 | 'add-registrant', |
| 1056 | 1056 | array('event_id' => $EVT_ID), |
@@ -1090,7 +1090,7 @@ discard block |
||
| 1090 | 1090 | $this->_template_args['admin_page_header'] .= ' <span class="drk-grey-text">'; |
| 1091 | 1091 | $this->_template_args['admin_page_header'] .= '<span class="dashicons dashicons-calendar"></span>'; |
| 1092 | 1092 | $this->_template_args['admin_page_header'] .= $datetime->name(); |
| 1093 | - $this->_template_args['admin_page_header'] .= ' ( ' . $datetime->start_date() . ' )'; |
|
| 1093 | + $this->_template_args['admin_page_header'] .= ' ( '.$datetime->start_date().' )'; |
|
| 1094 | 1094 | $this->_template_args['admin_page_header'] .= '</span></h3>'; |
| 1095 | 1095 | } |
| 1096 | 1096 | } |
@@ -1197,7 +1197,7 @@ discard block |
||
| 1197 | 1197 | 'caps' => EEM_Registration::caps_read_admin, |
| 1198 | 1198 | 'default_where_conditions' => 'this_model_only', |
| 1199 | 1199 | ); |
| 1200 | - if (! $count) { |
|
| 1200 | + if ( ! $count) { |
|
| 1201 | 1201 | $query_params = array_merge( |
| 1202 | 1202 | $query_params, |
| 1203 | 1203 | $this->_get_orderby_for_registrations_query(), |
@@ -1218,7 +1218,7 @@ discard block |
||
| 1218 | 1218 | protected function addAttendeeIdToWhereConditions(array $request) |
| 1219 | 1219 | { |
| 1220 | 1220 | $where = array(); |
| 1221 | - if (! empty($request['ATT_ID'])) { |
|
| 1221 | + if ( ! empty($request['ATT_ID'])) { |
|
| 1222 | 1222 | $where['ATT_ID'] = absint($request['ATT_ID']); |
| 1223 | 1223 | } |
| 1224 | 1224 | return $where; |
@@ -1234,7 +1234,7 @@ discard block |
||
| 1234 | 1234 | protected function _add_event_id_to_where_conditions(array $request) |
| 1235 | 1235 | { |
| 1236 | 1236 | $where = array(); |
| 1237 | - if (! empty($request['event_id'])) { |
|
| 1237 | + if ( ! empty($request['event_id'])) { |
|
| 1238 | 1238 | $where['EVT_ID'] = absint($request['event_id']); |
| 1239 | 1239 | } |
| 1240 | 1240 | return $where; |
@@ -1250,7 +1250,7 @@ discard block |
||
| 1250 | 1250 | protected function _add_category_id_to_where_conditions(array $request) |
| 1251 | 1251 | { |
| 1252 | 1252 | $where = array(); |
| 1253 | - if (! empty($request['EVT_CAT']) && (int)$request['EVT_CAT'] !== -1) { |
|
| 1253 | + if ( ! empty($request['EVT_CAT']) && (int) $request['EVT_CAT'] !== -1) { |
|
| 1254 | 1254 | $where['Event.Term_Taxonomy.term_id'] = absint($request['EVT_CAT']); |
| 1255 | 1255 | } |
| 1256 | 1256 | return $where; |
@@ -1266,10 +1266,10 @@ discard block |
||
| 1266 | 1266 | protected function _add_datetime_id_to_where_conditions(array $request) |
| 1267 | 1267 | { |
| 1268 | 1268 | $where = array(); |
| 1269 | - if (! empty($request['datetime_id'])) { |
|
| 1269 | + if ( ! empty($request['datetime_id'])) { |
|
| 1270 | 1270 | $where['Ticket.Datetime.DTT_ID'] = absint($request['datetime_id']); |
| 1271 | 1271 | } |
| 1272 | - if (! empty($request['DTT_ID'])) { |
|
| 1272 | + if ( ! empty($request['DTT_ID'])) { |
|
| 1273 | 1273 | $where['Ticket.Datetime.DTT_ID'] = absint($request['DTT_ID']); |
| 1274 | 1274 | } |
| 1275 | 1275 | return $where; |
@@ -1295,7 +1295,7 @@ discard block |
||
| 1295 | 1295 | * If not filtering by specified status, then we show all registrations excluding incomplete registrations |
| 1296 | 1296 | * UNLESS viewing trashed registrations. |
| 1297 | 1297 | */ |
| 1298 | - if (! empty($registration_status)) { |
|
| 1298 | + if ( ! empty($registration_status)) { |
|
| 1299 | 1299 | $where['STS_ID'] = $registration_status; |
| 1300 | 1300 | } else { |
| 1301 | 1301 | //make sure we exclude incomplete registrations, but only if not trashed. |
@@ -1338,12 +1338,12 @@ discard block |
||
| 1338 | 1338 | array( |
| 1339 | 1339 | EEM_Registration::instance()->convert_datetime_for_query( |
| 1340 | 1340 | 'REG_date', |
| 1341 | - $now . ' 00:00:00', |
|
| 1341 | + $now.' 00:00:00', |
|
| 1342 | 1342 | 'Y-m-d H:i:s' |
| 1343 | 1343 | ), |
| 1344 | 1344 | EEM_Registration::instance()->convert_datetime_for_query( |
| 1345 | 1345 | 'REG_date', |
| 1346 | - $now . ' 23:59:59', |
|
| 1346 | + $now.' 23:59:59', |
|
| 1347 | 1347 | 'Y-m-d H:i:s' |
| 1348 | 1348 | ), |
| 1349 | 1349 | ), |
@@ -1356,12 +1356,12 @@ discard block |
||
| 1356 | 1356 | array( |
| 1357 | 1357 | EEM_Registration::instance()->convert_datetime_for_query( |
| 1358 | 1358 | 'REG_date', |
| 1359 | - $current_year_and_month . '-01 00:00:00', |
|
| 1359 | + $current_year_and_month.'-01 00:00:00', |
|
| 1360 | 1360 | 'Y-m-d H:i:s' |
| 1361 | 1361 | ), |
| 1362 | 1362 | EEM_Registration::instance()->convert_datetime_for_query( |
| 1363 | 1363 | 'REG_date', |
| 1364 | - $current_year_and_month . '-' . $days_this_month . ' 23:59:59', |
|
| 1364 | + $current_year_and_month.'-'.$days_this_month.' 23:59:59', |
|
| 1365 | 1365 | 'Y-m-d H:i:s' |
| 1366 | 1366 | ), |
| 1367 | 1367 | ), |
@@ -1376,18 +1376,18 @@ discard block |
||
| 1376 | 1376 | : ''; |
| 1377 | 1377 | //if there is not a month or year then we can't go further |
| 1378 | 1378 | if ($month_requested && $year_requested) { |
| 1379 | - $days_in_month = date('t', strtotime($year_requested . '-' . $month_requested . '-' . '01')); |
|
| 1379 | + $days_in_month = date('t', strtotime($year_requested.'-'.$month_requested.'-'.'01')); |
|
| 1380 | 1380 | $where['REG_date'] = array( |
| 1381 | 1381 | 'BETWEEN', |
| 1382 | 1382 | array( |
| 1383 | 1383 | EEM_Registration::instance()->convert_datetime_for_query( |
| 1384 | 1384 | 'REG_date', |
| 1385 | - $year_requested . '-' . $month_requested . '-01 00:00:00', |
|
| 1385 | + $year_requested.'-'.$month_requested.'-01 00:00:00', |
|
| 1386 | 1386 | 'Y-m-d H:i:s' |
| 1387 | 1387 | ), |
| 1388 | 1388 | EEM_Registration::instance()->convert_datetime_for_query( |
| 1389 | 1389 | 'REG_date', |
| 1390 | - $year_requested . '-' . $month_requested . '-' . $days_in_month . ' 23:59:59', |
|
| 1390 | + $year_requested.'-'.$month_requested.'-'.$days_in_month.' 23:59:59', |
|
| 1391 | 1391 | 'Y-m-d H:i:s' |
| 1392 | 1392 | ), |
| 1393 | 1393 | ), |
@@ -1407,8 +1407,8 @@ discard block |
||
| 1407 | 1407 | protected function _add_search_to_where_conditions(array $request) |
| 1408 | 1408 | { |
| 1409 | 1409 | $where = array(); |
| 1410 | - if (! empty($request['s'])) { |
|
| 1411 | - $search_string = '%' . sanitize_text_field($request['s']) . '%'; |
|
| 1410 | + if ( ! empty($request['s'])) { |
|
| 1411 | + $search_string = '%'.sanitize_text_field($request['s']).'%'; |
|
| 1412 | 1412 | $where['OR*search_conditions'] = array( |
| 1413 | 1413 | 'Event.EVT_name' => array('LIKE', $search_string), |
| 1414 | 1414 | 'Event.EVT_desc' => array('LIKE', $search_string), |
@@ -1525,7 +1525,7 @@ discard block |
||
| 1525 | 1525 | : $per_page; |
| 1526 | 1526 | |
| 1527 | 1527 | //-1 means return all results so get out if that's set. |
| 1528 | - if ((int)$per_page === -1) { |
|
| 1528 | + if ((int) $per_page === -1) { |
|
| 1529 | 1529 | return array(); |
| 1530 | 1530 | } |
| 1531 | 1531 | $per_page = absint($per_page); |
@@ -1581,7 +1581,7 @@ discard block |
||
| 1581 | 1581 | ), |
| 1582 | 1582 | REG_ADMIN_URL |
| 1583 | 1583 | ); |
| 1584 | - $this->_template_args['filtered_transactions_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1584 | + $this->_template_args['filtered_transactions_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1585 | 1585 | array( |
| 1586 | 1586 | 'action' => 'default', |
| 1587 | 1587 | 'EVT_ID' => $event_id, |
@@ -1589,7 +1589,7 @@ discard block |
||
| 1589 | 1589 | ), |
| 1590 | 1590 | admin_url('admin.php') |
| 1591 | 1591 | ); |
| 1592 | - $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1592 | + $this->_template_args['event_link'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 1593 | 1593 | array( |
| 1594 | 1594 | 'page' => 'espresso_events', |
| 1595 | 1595 | 'action' => 'edit', |
@@ -1598,12 +1598,12 @@ discard block |
||
| 1598 | 1598 | admin_url('admin.php') |
| 1599 | 1599 | ); |
| 1600 | 1600 | //next and previous links |
| 1601 | - $next_reg = $this->_registration->next( |
|
| 1601 | + $next_reg = $this->_registration->next( |
|
| 1602 | 1602 | null, |
| 1603 | 1603 | array(), |
| 1604 | 1604 | 'REG_ID' |
| 1605 | 1605 | ); |
| 1606 | - $this->_template_args['next_registration'] = $next_reg |
|
| 1606 | + $this->_template_args['next_registration'] = $next_reg |
|
| 1607 | 1607 | ? $this->_next_link( |
| 1608 | 1608 | EE_Admin_Page::add_query_args_and_nonce( |
| 1609 | 1609 | array( |
@@ -1615,7 +1615,7 @@ discard block |
||
| 1615 | 1615 | 'dashicons dashicons-arrow-right ee-icon-size-22' |
| 1616 | 1616 | ) |
| 1617 | 1617 | : ''; |
| 1618 | - $previous_reg = $this->_registration->previous( |
|
| 1618 | + $previous_reg = $this->_registration->previous( |
|
| 1619 | 1619 | null, |
| 1620 | 1620 | array(), |
| 1621 | 1621 | 'REG_ID' |
@@ -1633,7 +1633,7 @@ discard block |
||
| 1633 | 1633 | ) |
| 1634 | 1634 | : ''; |
| 1635 | 1635 | // grab header |
| 1636 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_header.template.php'; |
|
| 1636 | + $template_path = REG_TEMPLATE_PATH.'reg_admin_details_header.template.php'; |
|
| 1637 | 1637 | $this->_template_args['REG_ID'] = $this->_registration->ID(); |
| 1638 | 1638 | $this->_template_args['admin_page_header'] = EEH_Template::display_template( |
| 1639 | 1639 | $template_path, |
@@ -1753,7 +1753,7 @@ discard block |
||
| 1753 | 1753 | EEH_HTML::strong( |
| 1754 | 1754 | $this->_registration->pretty_status(), |
| 1755 | 1755 | '', |
| 1756 | - 'status-' . $this->_registration->status_ID(), |
|
| 1756 | + 'status-'.$this->_registration->status_ID(), |
|
| 1757 | 1757 | 'line-height: 1em; font-size: 1.5em; font-weight: bold;' |
| 1758 | 1758 | ) |
| 1759 | 1759 | ) |
@@ -1833,11 +1833,11 @@ discard block |
||
| 1833 | 1833 | { |
| 1834 | 1834 | if (isset($this->_req_data['reg_status_change_form'])) { |
| 1835 | 1835 | $REG_IDs = isset($this->_req_data['reg_status_change_form']['REG_ID']) |
| 1836 | - ? (array)$this->_req_data['reg_status_change_form']['REG_ID'] |
|
| 1836 | + ? (array) $this->_req_data['reg_status_change_form']['REG_ID'] |
|
| 1837 | 1837 | : array(); |
| 1838 | 1838 | } else { |
| 1839 | 1839 | $REG_IDs = isset($this->_req_data['_REG_ID']) |
| 1840 | - ? (array)$this->_req_data['_REG_ID'] |
|
| 1840 | + ? (array) $this->_req_data['_REG_ID'] |
|
| 1841 | 1841 | : array(); |
| 1842 | 1842 | } |
| 1843 | 1843 | // sanitize $REG_IDs |
@@ -1900,7 +1900,7 @@ discard block |
||
| 1900 | 1900 | { |
| 1901 | 1901 | $success = false; |
| 1902 | 1902 | // typecast $REG_IDs |
| 1903 | - $REG_IDs = (array)$REG_IDs; |
|
| 1903 | + $REG_IDs = (array) $REG_IDs; |
|
| 1904 | 1904 | if ( ! empty($REG_IDs)) { |
| 1905 | 1905 | $success = true; |
| 1906 | 1906 | // set default status if none is passed |
@@ -2050,7 +2050,7 @@ discard block |
||
| 2050 | 2050 | $action, |
| 2051 | 2051 | $notify |
| 2052 | 2052 | ); |
| 2053 | - $method = $action . '_registration'; |
|
| 2053 | + $method = $action.'_registration'; |
|
| 2054 | 2054 | if (method_exists($this, $method)) { |
| 2055 | 2055 | $this->$method($notify); |
| 2056 | 2056 | } |
@@ -2168,7 +2168,7 @@ discard block |
||
| 2168 | 2168 | $filtered_line_item_tree, |
| 2169 | 2169 | array('EE_Registration' => $this->_registration) |
| 2170 | 2170 | ); |
| 2171 | - $attendee = $this->_registration->attendee(); |
|
| 2171 | + $attendee = $this->_registration->attendee(); |
|
| 2172 | 2172 | if (EE_Registry::instance()->CAP->current_user_can( |
| 2173 | 2173 | 'ee_read_transaction', |
| 2174 | 2174 | 'espresso_transactions_view_transaction' |
@@ -2247,7 +2247,7 @@ discard block |
||
| 2247 | 2247 | 'Payment method response', |
| 2248 | 2248 | 'event_espresso' |
| 2249 | 2249 | ); |
| 2250 | - $this->_template_args['reg_details']['response_msg']['class'] = 'regular-text'; |
|
| 2250 | + $this->_template_args['reg_details']['response_msg']['class'] = 'regular-text'; |
|
| 2251 | 2251 | } |
| 2252 | 2252 | $this->_template_args['reg_details']['registration_session']['value'] = $reg_details['registration_session']; |
| 2253 | 2253 | $this->_template_args['reg_details']['registration_session']['label'] = esc_html__( |
@@ -2275,7 +2275,7 @@ discard block |
||
| 2275 | 2275 | $this->_template_args['REG_ID'] = $this->_registration->ID(); |
| 2276 | 2276 | $this->_template_args['event_id'] = $this->_registration->event_ID(); |
| 2277 | 2277 | $template_path = |
| 2278 | - REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_details.template.php'; |
|
| 2278 | + REG_TEMPLATE_PATH.'reg_admin_details_main_meta_box_reg_details.template.php'; |
|
| 2279 | 2279 | echo EEH_Template::display_template($template_path, $this->_template_args, true); |
| 2280 | 2280 | } |
| 2281 | 2281 | |
@@ -2304,7 +2304,7 @@ discard block |
||
| 2304 | 2304 | $this->_template_args['reg_questions_form_action'] = 'edit_registration'; |
| 2305 | 2305 | $this->_template_args['REG_ID'] = $this->_registration->ID(); |
| 2306 | 2306 | $template_path = |
| 2307 | - REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_reg_questions.template.php'; |
|
| 2307 | + REG_TEMPLATE_PATH.'reg_admin_details_main_meta_box_reg_questions.template.php'; |
|
| 2308 | 2308 | echo EEH_Template::display_template($template_path, $this->_template_args, true); |
| 2309 | 2309 | } |
| 2310 | 2310 | } |
@@ -2321,7 +2321,7 @@ discard block |
||
| 2321 | 2321 | public function form_before_question_group($output) |
| 2322 | 2322 | { |
| 2323 | 2323 | EE_Error::doing_it_wrong( |
| 2324 | - __CLASS__ . '::' . __FUNCTION__, |
|
| 2324 | + __CLASS__.'::'.__FUNCTION__, |
|
| 2325 | 2325 | esc_html__( |
| 2326 | 2326 | '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.', |
| 2327 | 2327 | 'event_espresso' |
@@ -2346,7 +2346,7 @@ discard block |
||
| 2346 | 2346 | public function form_after_question_group($output) |
| 2347 | 2347 | { |
| 2348 | 2348 | EE_Error::doing_it_wrong( |
| 2349 | - __CLASS__ . '::' . __FUNCTION__, |
|
| 2349 | + __CLASS__.'::'.__FUNCTION__, |
|
| 2350 | 2350 | esc_html__( |
| 2351 | 2351 | '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.', |
| 2352 | 2352 | 'event_espresso' |
@@ -2384,7 +2384,7 @@ discard block |
||
| 2384 | 2384 | public function form_form_field_label_wrap($label) |
| 2385 | 2385 | { |
| 2386 | 2386 | EE_Error::doing_it_wrong( |
| 2387 | - __CLASS__ . '::' . __FUNCTION__, |
|
| 2387 | + __CLASS__.'::'.__FUNCTION__, |
|
| 2388 | 2388 | esc_html__( |
| 2389 | 2389 | '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.', |
| 2390 | 2390 | 'event_espresso' |
@@ -2394,7 +2394,7 @@ discard block |
||
| 2394 | 2394 | return ' |
| 2395 | 2395 | <tr> |
| 2396 | 2396 | <th> |
| 2397 | - ' . $label . ' |
|
| 2397 | + ' . $label.' |
|
| 2398 | 2398 | </th>'; |
| 2399 | 2399 | } |
| 2400 | 2400 | |
@@ -2410,7 +2410,7 @@ discard block |
||
| 2410 | 2410 | public function form_form_field_input__wrap($input) |
| 2411 | 2411 | { |
| 2412 | 2412 | EE_Error::doing_it_wrong( |
| 2413 | - __CLASS__ . '::' . __FUNCTION__, |
|
| 2413 | + __CLASS__.'::'.__FUNCTION__, |
|
| 2414 | 2414 | esc_html__( |
| 2415 | 2415 | '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.', |
| 2416 | 2416 | 'event_espresso' |
@@ -2419,7 +2419,7 @@ discard block |
||
| 2419 | 2419 | ); |
| 2420 | 2420 | return ' |
| 2421 | 2421 | <td class="reg-admin-attendee-questions-input-td disabled-input"> |
| 2422 | - ' . $input . ' |
|
| 2422 | + ' . $input.' |
|
| 2423 | 2423 | </td> |
| 2424 | 2424 | </tr>'; |
| 2425 | 2425 | } |
@@ -2464,7 +2464,7 @@ discard block |
||
| 2464 | 2464 | protected function _get_reg_custom_questions_form($REG_ID) |
| 2465 | 2465 | { |
| 2466 | 2466 | if ( ! $this->_reg_custom_questions_form) { |
| 2467 | - require_once(REG_ADMIN . 'form_sections' . DS . 'EE_Registration_Custom_Questions_Form.form.php'); |
|
| 2467 | + require_once(REG_ADMIN.'form_sections'.DS.'EE_Registration_Custom_Questions_Form.form.php'); |
|
| 2468 | 2468 | $this->_reg_custom_questions_form = new EE_Registration_Custom_Questions_Form( |
| 2469 | 2469 | EEM_Registration::instance()->get_one_by_ID($REG_ID) |
| 2470 | 2470 | ); |
@@ -2500,7 +2500,7 @@ discard block |
||
| 2500 | 2500 | if ($form->is_valid()) { |
| 2501 | 2501 | foreach ($form->subforms() as $question_group_id => $question_group_form) { |
| 2502 | 2502 | foreach ($question_group_form->inputs() as $question_id => $input) { |
| 2503 | - $where_conditions = array( |
|
| 2503 | + $where_conditions = array( |
|
| 2504 | 2504 | 'QST_ID' => $question_id, |
| 2505 | 2505 | 'REG_ID' => $REG_ID, |
| 2506 | 2506 | ); |
@@ -2541,7 +2541,7 @@ discard block |
||
| 2541 | 2541 | $REG = EEM_Registration::instance(); |
| 2542 | 2542 | //get all other registrations on this transaction, and cache |
| 2543 | 2543 | //the attendees for them so we don't have to run another query using force_join |
| 2544 | - $registrations = $REG->get_all(array( |
|
| 2544 | + $registrations = $REG->get_all(array( |
|
| 2545 | 2545 | array( |
| 2546 | 2546 | 'TXN_ID' => $this->_registration->transaction_ID(), |
| 2547 | 2547 | 'REG_ID' => array('!=', $this->_registration->ID()), |
@@ -2565,7 +2565,7 @@ discard block |
||
| 2565 | 2565 | $att_nmbr = 1; |
| 2566 | 2566 | foreach ($registrations as $registration) { |
| 2567 | 2567 | /* @var $registration EE_Registration */ |
| 2568 | - $attendee = $registration->attendee() |
|
| 2568 | + $attendee = $registration->attendee() |
|
| 2569 | 2569 | ? $registration->attendee() |
| 2570 | 2570 | : EEM_Attendee::instance() |
| 2571 | 2571 | ->create_default_object(); |
@@ -2578,19 +2578,19 @@ discard block |
||
| 2578 | 2578 | ', ', |
| 2579 | 2579 | $attendee->full_address_as_array() |
| 2580 | 2580 | ); |
| 2581 | - $this->_template_args['attendees'][$att_nmbr]['att_link'] = self::add_query_args_and_nonce( |
|
| 2581 | + $this->_template_args['attendees'][$att_nmbr]['att_link'] = self::add_query_args_and_nonce( |
|
| 2582 | 2582 | array( |
| 2583 | 2583 | 'action' => 'edit_attendee', |
| 2584 | 2584 | 'post' => $attendee->ID(), |
| 2585 | 2585 | ), |
| 2586 | 2586 | REG_ADMIN_URL |
| 2587 | 2587 | ); |
| 2588 | - $this->_template_args['attendees'][$att_nmbr]['event_name'] = $registration->event_obj()->name(); |
|
| 2588 | + $this->_template_args['attendees'][$att_nmbr]['event_name'] = $registration->event_obj()->name(); |
|
| 2589 | 2589 | $att_nmbr++; |
| 2590 | 2590 | } |
| 2591 | 2591 | $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
| 2592 | 2592 | } |
| 2593 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_main_meta_box_attendees.template.php'; |
|
| 2593 | + $template_path = REG_TEMPLATE_PATH.'reg_admin_details_main_meta_box_attendees.template.php'; |
|
| 2594 | 2594 | echo EEH_Template::display_template($template_path, $this->_template_args, true); |
| 2595 | 2595 | } |
| 2596 | 2596 | |
@@ -2633,20 +2633,20 @@ discard block |
||
| 2633 | 2633 | $this->_template_args['phone'] = $attendee->phone(); |
| 2634 | 2634 | $this->_template_args['formatted_address'] = EEH_Address::format($attendee); |
| 2635 | 2635 | //edit link |
| 2636 | - $this->_template_args['att_edit_link'] = EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 2636 | + $this->_template_args['att_edit_link'] = EE_Admin_Page::add_query_args_and_nonce(array( |
|
| 2637 | 2637 | 'action' => 'edit_attendee', |
| 2638 | 2638 | 'post' => $attendee->ID(), |
| 2639 | 2639 | ), REG_ADMIN_URL); |
| 2640 | 2640 | $this->_template_args['att_edit_label'] = esc_html__('View/Edit Contact', 'event_espresso'); |
| 2641 | 2641 | //create link |
| 2642 | - $this->_template_args['create_link'] = $primary_registration instanceof EE_Registration |
|
| 2642 | + $this->_template_args['create_link'] = $primary_registration instanceof EE_Registration |
|
| 2643 | 2643 | ? EE_Admin_Page::add_query_args_and_nonce(array( |
| 2644 | 2644 | 'action' => 'duplicate_attendee', |
| 2645 | 2645 | '_REG_ID' => $this->_registration->ID(), |
| 2646 | 2646 | ), REG_ADMIN_URL) : ''; |
| 2647 | 2647 | $this->_template_args['create_label'] = esc_html__('Create Contact', 'event_espresso'); |
| 2648 | 2648 | $this->_template_args['att_check'] = $att_check; |
| 2649 | - $template_path = REG_TEMPLATE_PATH . 'reg_admin_details_side_meta_box_registrant.template.php'; |
|
| 2649 | + $template_path = REG_TEMPLATE_PATH.'reg_admin_details_side_meta_box_registrant.template.php'; |
|
| 2650 | 2650 | echo EEH_Template::display_template($template_path, $this->_template_args, true); |
| 2651 | 2651 | } |
| 2652 | 2652 | |
@@ -2691,7 +2691,7 @@ discard block |
||
| 2691 | 2691 | /** @var EE_Registration $REG */ |
| 2692 | 2692 | $REG = EEM_Registration::instance()->get_one_by_ID($REG_ID); |
| 2693 | 2693 | $payments = $REG->registration_payments(); |
| 2694 | - if (! empty($payments)) { |
|
| 2694 | + if ( ! empty($payments)) { |
|
| 2695 | 2695 | $name = $REG->attendee() instanceof EE_Attendee |
| 2696 | 2696 | ? $REG->attendee()->full_name() |
| 2697 | 2697 | : esc_html__('Unknown Attendee', 'event_espresso'); |
@@ -2887,7 +2887,7 @@ discard block |
||
| 2887 | 2887 | 'action' => 'edit', |
| 2888 | 2888 | 'post' => $this->_reg_event->ID(), |
| 2889 | 2889 | ), EVENTS_ADMIN_URL); |
| 2890 | - $edit_event_lnk = '<a href="' |
|
| 2890 | + $edit_event_lnk = '<a href="' |
|
| 2891 | 2891 | . $edit_event_url |
| 2892 | 2892 | . '" title="' |
| 2893 | 2893 | . esc_attr__('Edit ', 'event_espresso') |
@@ -2905,7 +2905,7 @@ discard block |
||
| 2905 | 2905 | } |
| 2906 | 2906 | // grab header |
| 2907 | 2907 | $template_path = |
| 2908 | - REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee.template.php'; |
|
| 2908 | + REG_TEMPLATE_PATH.'reg_admin_register_new_attendee.template.php'; |
|
| 2909 | 2909 | $this->_template_args['admin_page_content'] = EEH_Template::display_template($template_path, |
| 2910 | 2910 | $this->_template_args, true); |
| 2911 | 2911 | //$this->_set_publish_post_box_vars( NULL, FALSE, FALSE, NULL, FALSE ); |
@@ -2943,7 +2943,7 @@ discard block |
||
| 2943 | 2943 | '</b>' |
| 2944 | 2944 | ); |
| 2945 | 2945 | return ' |
| 2946 | - <div id="ee-add-reg-back-button-dv"><p>' . $warning_msg . '</p></div> |
|
| 2946 | + <div id="ee-add-reg-back-button-dv"><p>' . $warning_msg.'</p></div> |
|
| 2947 | 2947 | <script > |
| 2948 | 2948 | // WHOAH !!! it appears that someone is using the back button from the Transaction admin page |
| 2949 | 2949 | // after just adding a new registration... we gotta try to put a stop to that !!! |
@@ -3011,7 +3011,7 @@ discard block |
||
| 3011 | 3011 | //we come back to the process_registration_step route. |
| 3012 | 3012 | $this->_set_add_edit_form_tags('process_reg_step', $hidden_fields); |
| 3013 | 3013 | return EEH_Template::display_template( |
| 3014 | - REG_TEMPLATE_PATH . 'reg_admin_register_new_attendee_step_content.template.php', |
|
| 3014 | + REG_TEMPLATE_PATH.'reg_admin_register_new_attendee_step_content.template.php', |
|
| 3015 | 3015 | $template_args, |
| 3016 | 3016 | true |
| 3017 | 3017 | ); |
@@ -3033,7 +3033,7 @@ discard block |
||
| 3033 | 3033 | if (is_object($this->_reg_event)) { |
| 3034 | 3034 | return true; |
| 3035 | 3035 | } |
| 3036 | - $EVT_ID = (! empty($this->_req_data['event_id'])) ? absint($this->_req_data['event_id']) : false; |
|
| 3036 | + $EVT_ID = ( ! empty($this->_req_data['event_id'])) ? absint($this->_req_data['event_id']) : false; |
|
| 3037 | 3037 | if ( ! $EVT_ID) { |
| 3038 | 3038 | return false; |
| 3039 | 3039 | } |
@@ -3103,7 +3103,7 @@ discard block |
||
| 3103 | 3103 | } |
| 3104 | 3104 | break; |
| 3105 | 3105 | case 'questions' : |
| 3106 | - if (! isset( |
|
| 3106 | + if ( ! isset( |
|
| 3107 | 3107 | $this->_req_data['txn_reg_status_change'], |
| 3108 | 3108 | $this->_req_data['txn_reg_status_change']['send_notifications']) |
| 3109 | 3109 | ) { |
@@ -3223,7 +3223,7 @@ discard block |
||
| 3223 | 3223 | public function get_attendees($per_page, $count = false, $trash = false) |
| 3224 | 3224 | { |
| 3225 | 3225 | do_action('AHEE_log', __FILE__, __FUNCTION__, ''); |
| 3226 | - require_once(REG_ADMIN . 'EE_Attendee_Contact_List_Table.class.php'); |
|
| 3226 | + require_once(REG_ADMIN.'EE_Attendee_Contact_List_Table.class.php'); |
|
| 3227 | 3227 | $ATT_MDL = EEM_Attendee::instance(); |
| 3228 | 3228 | $this->_req_data['orderby'] = ! empty($this->_req_data['orderby']) ? $this->_req_data['orderby'] : ''; |
| 3229 | 3229 | switch ($this->_req_data['orderby']) { |
@@ -3263,7 +3263,7 @@ discard block |
||
| 3263 | 3263 | : $per_page; |
| 3264 | 3264 | $_where = array(); |
| 3265 | 3265 | if ( ! empty($this->_req_data['s'])) { |
| 3266 | - $sstr = '%' . $this->_req_data['s'] . '%'; |
|
| 3266 | + $sstr = '%'.$this->_req_data['s'].'%'; |
|
| 3267 | 3267 | $_where['OR'] = array( |
| 3268 | 3268 | 'Registration.Event.EVT_name' => array('LIKE', $sstr), |
| 3269 | 3269 | 'Registration.Event.EVT_desc' => array('LIKE', $sstr), |
@@ -3290,17 +3290,17 @@ discard block |
||
| 3290 | 3290 | 'extra_selects' => array('Registration_Count' => array('Registration.REG_ID', 'count', '%d')), |
| 3291 | 3291 | 'limit' => $limit |
| 3292 | 3292 | ); |
| 3293 | - if (! $count) { |
|
| 3293 | + if ( ! $count) { |
|
| 3294 | 3294 | $query_args['order_by'] = array($orderby => $sort); |
| 3295 | 3295 | } |
| 3296 | 3296 | if ($trash) { |
| 3297 | 3297 | $query_args[0]['status'] = array('!=', 'publish'); |
| 3298 | - $all_attendees = $count |
|
| 3298 | + $all_attendees = $count |
|
| 3299 | 3299 | ? $ATT_MDL->count($query_args, 'ATT_ID', true) |
| 3300 | 3300 | : $ATT_MDL->get_all($query_args); |
| 3301 | 3301 | } else { |
| 3302 | 3302 | $query_args[0]['status'] = array('IN', array('publish')); |
| 3303 | - $all_attendees = $count |
|
| 3303 | + $all_attendees = $count |
|
| 3304 | 3304 | ? $ATT_MDL->count($query_args, 'ATT_ID', true) |
| 3305 | 3305 | : $ATT_MDL->get_all($query_args); |
| 3306 | 3306 | } |
@@ -3330,9 +3330,9 @@ discard block |
||
| 3330 | 3330 | * the query parameters from the request |
| 3331 | 3331 | * @return void ends the request with a redirect or download |
| 3332 | 3332 | */ |
| 3333 | - public function _registrations_report_base( $method_name_for_getting_query_params ) |
|
| 3333 | + public function _registrations_report_base($method_name_for_getting_query_params) |
|
| 3334 | 3334 | { |
| 3335 | - if (! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
| 3335 | + if ( ! defined('EE_USE_OLD_CSV_REPORT_CLASS')) { |
|
| 3336 | 3336 | wp_redirect(EE_Admin_Page::add_query_args_and_nonce( |
| 3337 | 3337 | array( |
| 3338 | 3338 | 'page' => 'espresso_batch', |
@@ -3341,7 +3341,7 @@ discard block |
||
| 3341 | 3341 | 'filters' => urlencode( |
| 3342 | 3342 | serialize( |
| 3343 | 3343 | call_user_func( |
| 3344 | - array( $this, $method_name_for_getting_query_params ), |
|
| 3344 | + array($this, $method_name_for_getting_query_params), |
|
| 3345 | 3345 | EEH_Array::is_set( |
| 3346 | 3346 | $this->_req_data, |
| 3347 | 3347 | 'filters', |
@@ -3361,8 +3361,8 @@ discard block |
||
| 3361 | 3361 | 'EVT_ID' => isset($this->_req_data['EVT_ID']) ? $this->_req_data['EVT_ID'] : null, |
| 3362 | 3362 | ); |
| 3363 | 3363 | $this->_req_data = array_merge($this->_req_data, $new_request_args); |
| 3364 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3365 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3364 | + if (is_readable(EE_CLASSES.'EE_Export.class.php')) { |
|
| 3365 | + require_once(EE_CLASSES.'EE_Export.class.php'); |
|
| 3366 | 3366 | $EE_Export = EE_Export::instance($this->_req_data); |
| 3367 | 3367 | $EE_Export->export(); |
| 3368 | 3368 | } |
@@ -3383,8 +3383,8 @@ discard block |
||
| 3383 | 3383 | |
| 3384 | 3384 | public function _contact_list_export() |
| 3385 | 3385 | { |
| 3386 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3387 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3386 | + if (is_readable(EE_CLASSES.'EE_Export.class.php')) { |
|
| 3387 | + require_once(EE_CLASSES.'EE_Export.class.php'); |
|
| 3388 | 3388 | $EE_Export = EE_Export::instance($this->_req_data); |
| 3389 | 3389 | $EE_Export->export_attendees(); |
| 3390 | 3390 | } |
@@ -3401,8 +3401,8 @@ discard block |
||
| 3401 | 3401 | 'return_url' => urlencode($this->_req_data['return_url']), |
| 3402 | 3402 | ))); |
| 3403 | 3403 | } else { |
| 3404 | - if (is_readable(EE_CLASSES . 'EE_Export.class.php')) { |
|
| 3405 | - require_once(EE_CLASSES . 'EE_Export.class.php'); |
|
| 3404 | + if (is_readable(EE_CLASSES.'EE_Export.class.php')) { |
|
| 3405 | + require_once(EE_CLASSES.'EE_Export.class.php'); |
|
| 3406 | 3406 | $EE_Export = EE_Export::instance($this->_req_data); |
| 3407 | 3407 | $EE_Export->report_attendees(); |
| 3408 | 3408 | } |
@@ -3484,7 +3484,7 @@ discard block |
||
| 3484 | 3484 | $updated_fields = array( |
| 3485 | 3485 | 'ATT_fname' => $this->_req_data['ATT_fname'], |
| 3486 | 3486 | 'ATT_lname' => $this->_req_data['ATT_lname'], |
| 3487 | - 'ATT_full_name' => $this->_req_data['ATT_fname'] . ' ' . $this->_req_data['ATT_lname'], |
|
| 3487 | + 'ATT_full_name' => $this->_req_data['ATT_fname'].' '.$this->_req_data['ATT_lname'], |
|
| 3488 | 3488 | 'ATT_address' => isset($this->_req_data['ATT_address']) ? $this->_req_data['ATT_address'] : '', |
| 3489 | 3489 | 'ATT_address2' => isset($this->_req_data['ATT_address2']) ? $this->_req_data['ATT_address2'] : '', |
| 3490 | 3490 | 'ATT_city' => isset($this->_req_data['ATT_city']) ? $this->_req_data['ATT_city'] : '', |
@@ -3702,8 +3702,8 @@ discard block |
||
| 3702 | 3702 | ) |
| 3703 | 3703 | ) |
| 3704 | 3704 | ); |
| 3705 | - $template = |
|
| 3706 | - REG_TEMPLATE_PATH . 'attendee_address_details_metabox_content.template.php'; |
|
| 3705 | + $template = |
|
| 3706 | + REG_TEMPLATE_PATH.'attendee_address_details_metabox_content.template.php'; |
|
| 3707 | 3707 | EEH_Template::display_template($template, $this->_template_args); |
| 3708 | 3708 | } |
| 3709 | 3709 | |
@@ -3722,7 +3722,7 @@ discard block |
||
| 3722 | 3722 | $this->_template_args['attendee'] = $this->_cpt_model_obj; |
| 3723 | 3723 | $this->_template_args['registrations'] = $this->_cpt_model_obj->get_many_related('Registration'); |
| 3724 | 3724 | $template = |
| 3725 | - REG_TEMPLATE_PATH . 'attendee_registrations_main_meta_box.template.php'; |
|
| 3725 | + REG_TEMPLATE_PATH.'attendee_registrations_main_meta_box.template.php'; |
|
| 3726 | 3726 | EEH_Template::display_template($template, $this->_template_args); |
| 3727 | 3727 | } |
| 3728 | 3728 | |
@@ -3737,7 +3737,7 @@ discard block |
||
| 3737 | 3737 | public function after_title_form_fields($post) |
| 3738 | 3738 | { |
| 3739 | 3739 | if ($post->post_type == 'espresso_attendees') { |
| 3740 | - $template = REG_TEMPLATE_PATH . 'attendee_details_after_title_form_fields.template.php'; |
|
| 3740 | + $template = REG_TEMPLATE_PATH.'attendee_details_after_title_form_fields.template.php'; |
|
| 3741 | 3741 | $template_args['attendee'] = $this->_cpt_model_obj; |
| 3742 | 3742 | EEH_Template::display_template($template, $template_args); |
| 3743 | 3743 | } |
@@ -28,336 +28,336 @@ |
||
| 28 | 28 | class PersistentAdminNotice implements RequiresCapCheckInterface |
| 29 | 29 | { |
| 30 | 30 | |
| 31 | - /** |
|
| 32 | - * @var string $name |
|
| 33 | - */ |
|
| 34 | - protected $name = ''; |
|
| 35 | - |
|
| 36 | - /** |
|
| 37 | - * @var string $message |
|
| 38 | - */ |
|
| 39 | - protected $message = ''; |
|
| 40 | - |
|
| 41 | - /** |
|
| 42 | - * @var boolean $force_update |
|
| 43 | - */ |
|
| 44 | - protected $force_update = false; |
|
| 45 | - |
|
| 46 | - /** |
|
| 47 | - * @var string $capability |
|
| 48 | - */ |
|
| 49 | - protected $capability = 'manage_options'; |
|
| 50 | - |
|
| 51 | - /** |
|
| 52 | - * @var string $cap_context |
|
| 53 | - */ |
|
| 54 | - protected $cap_context = 'view persistent admin notice'; |
|
| 55 | - |
|
| 56 | - /** |
|
| 57 | - * @var boolean $dismissed |
|
| 58 | - */ |
|
| 59 | - protected $dismissed = false; |
|
| 60 | - |
|
| 61 | - /** |
|
| 62 | - * @var CapCheckInterface $cap_check |
|
| 63 | - */ |
|
| 64 | - protected $cap_check; |
|
| 65 | - |
|
| 66 | - /** |
|
| 67 | - * if true, then this notice will be deleted from the database |
|
| 68 | - * |
|
| 69 | - * @var boolean $purge |
|
| 70 | - */ |
|
| 71 | - protected $purge = false; |
|
| 72 | - |
|
| 73 | - /** |
|
| 74 | - * gets set to true if notice is successfully registered with the PersistentAdminNoticeManager |
|
| 75 | - * if false, and WP_DEBUG is on, then an exception will be thrown in the admin footer |
|
| 76 | - * |
|
| 77 | - * @var boolean $registered |
|
| 78 | - */ |
|
| 79 | - private $registered = false; |
|
| 80 | - |
|
| 81 | - |
|
| 82 | - |
|
| 83 | - /** |
|
| 84 | - * PersistentAdminNotice constructor |
|
| 85 | - * |
|
| 86 | - * @param string $name [required] the name, or key of the Persistent Admin Notice to be stored |
|
| 87 | - * @param string $message [required] the message to be stored persistently until dismissed |
|
| 88 | - * @param bool $force_update enforce the reappearance of a persistent message |
|
| 89 | - * @param string $capability user capability required to view this notice |
|
| 90 | - * @param string $cap_context description for why the cap check is being performed |
|
| 91 | - * @param bool $dismissed whether or not the user has already dismissed/viewed this notice |
|
| 92 | - * @throws InvalidDataTypeException |
|
| 93 | - */ |
|
| 94 | - public function __construct( |
|
| 95 | - $name, |
|
| 96 | - $message, |
|
| 97 | - $force_update = false, |
|
| 98 | - $capability = 'manage_options', |
|
| 99 | - $cap_context = 'view persistent admin notice', |
|
| 100 | - $dismissed = false |
|
| 101 | - ) { |
|
| 102 | - $this->setName($name); |
|
| 103 | - $this->setMessage($message); |
|
| 104 | - $this->setForceUpdate($force_update); |
|
| 105 | - $this->setCapability($capability); |
|
| 106 | - $this->setCapContext($cap_context); |
|
| 107 | - $this->setDismissed($dismissed); |
|
| 108 | - add_action( |
|
| 109 | - 'AHEE__EventEspresso_core_services_notifications_PersistentAdminNoticeManager__registerNotices', |
|
| 110 | - array($this, 'registerPersistentAdminNotice') |
|
| 111 | - ); |
|
| 112 | - add_action('shutdown', array($this, 'confirmRegistered'), 999); |
|
| 113 | - } |
|
| 114 | - |
|
| 115 | - |
|
| 116 | - |
|
| 117 | - /** |
|
| 118 | - * @return string |
|
| 119 | - */ |
|
| 120 | - public function getName() |
|
| 121 | - { |
|
| 122 | - return $this->name; |
|
| 123 | - } |
|
| 124 | - |
|
| 125 | - |
|
| 126 | - |
|
| 127 | - /** |
|
| 128 | - * @param string $name |
|
| 129 | - * @throws InvalidDataTypeException |
|
| 130 | - */ |
|
| 131 | - private function setName($name) |
|
| 132 | - { |
|
| 133 | - if (! is_string($name)) { |
|
| 134 | - throw new InvalidDataTypeException('$name', $name, 'string'); |
|
| 135 | - } |
|
| 136 | - $this->name = sanitize_key($name); |
|
| 137 | - } |
|
| 138 | - |
|
| 139 | - |
|
| 140 | - |
|
| 141 | - /** |
|
| 142 | - * @return string |
|
| 143 | - */ |
|
| 144 | - public function getMessage() |
|
| 145 | - { |
|
| 146 | - return $this->message; |
|
| 147 | - } |
|
| 148 | - |
|
| 149 | - |
|
| 150 | - |
|
| 151 | - /** |
|
| 152 | - * @param string $message |
|
| 153 | - * @throws InvalidDataTypeException |
|
| 154 | - */ |
|
| 155 | - private function setMessage($message) |
|
| 156 | - { |
|
| 157 | - if (! is_string($message)) { |
|
| 158 | - throw new InvalidDataTypeException('$message', $message, 'string'); |
|
| 159 | - } |
|
| 160 | - global $allowedtags; |
|
| 161 | - $allowedtags['br'] = array(); |
|
| 162 | - $this->message = wp_kses($message, $allowedtags); |
|
| 163 | - } |
|
| 164 | - |
|
| 165 | - |
|
| 166 | - |
|
| 167 | - /** |
|
| 168 | - * @return bool |
|
| 169 | - */ |
|
| 170 | - public function getForceUpdate() |
|
| 171 | - { |
|
| 172 | - return $this->force_update; |
|
| 173 | - } |
|
| 174 | - |
|
| 175 | - |
|
| 176 | - |
|
| 177 | - /** |
|
| 178 | - * @param bool $force_update |
|
| 179 | - */ |
|
| 180 | - private function setForceUpdate($force_update) |
|
| 181 | - { |
|
| 182 | - $this->force_update = filter_var($force_update, FILTER_VALIDATE_BOOLEAN); |
|
| 183 | - } |
|
| 184 | - |
|
| 185 | - |
|
| 186 | - |
|
| 187 | - /** |
|
| 188 | - * @return string |
|
| 189 | - */ |
|
| 190 | - public function getCapability() |
|
| 191 | - { |
|
| 192 | - return $this->capability; |
|
| 193 | - } |
|
| 194 | - |
|
| 195 | - |
|
| 196 | - |
|
| 197 | - /** |
|
| 198 | - * @param string $capability |
|
| 199 | - * @throws InvalidDataTypeException |
|
| 200 | - */ |
|
| 201 | - private function setCapability($capability) |
|
| 202 | - { |
|
| 203 | - if (! is_string($capability)) { |
|
| 204 | - throw new InvalidDataTypeException('$capability', $capability, 'string'); |
|
| 205 | - } |
|
| 206 | - $this->capability = ! empty($capability) ? $capability : 'manage_options'; |
|
| 207 | - } |
|
| 31 | + /** |
|
| 32 | + * @var string $name |
|
| 33 | + */ |
|
| 34 | + protected $name = ''; |
|
| 35 | + |
|
| 36 | + /** |
|
| 37 | + * @var string $message |
|
| 38 | + */ |
|
| 39 | + protected $message = ''; |
|
| 40 | + |
|
| 41 | + /** |
|
| 42 | + * @var boolean $force_update |
|
| 43 | + */ |
|
| 44 | + protected $force_update = false; |
|
| 45 | + |
|
| 46 | + /** |
|
| 47 | + * @var string $capability |
|
| 48 | + */ |
|
| 49 | + protected $capability = 'manage_options'; |
|
| 50 | + |
|
| 51 | + /** |
|
| 52 | + * @var string $cap_context |
|
| 53 | + */ |
|
| 54 | + protected $cap_context = 'view persistent admin notice'; |
|
| 55 | + |
|
| 56 | + /** |
|
| 57 | + * @var boolean $dismissed |
|
| 58 | + */ |
|
| 59 | + protected $dismissed = false; |
|
| 60 | + |
|
| 61 | + /** |
|
| 62 | + * @var CapCheckInterface $cap_check |
|
| 63 | + */ |
|
| 64 | + protected $cap_check; |
|
| 65 | + |
|
| 66 | + /** |
|
| 67 | + * if true, then this notice will be deleted from the database |
|
| 68 | + * |
|
| 69 | + * @var boolean $purge |
|
| 70 | + */ |
|
| 71 | + protected $purge = false; |
|
| 72 | + |
|
| 73 | + /** |
|
| 74 | + * gets set to true if notice is successfully registered with the PersistentAdminNoticeManager |
|
| 75 | + * if false, and WP_DEBUG is on, then an exception will be thrown in the admin footer |
|
| 76 | + * |
|
| 77 | + * @var boolean $registered |
|
| 78 | + */ |
|
| 79 | + private $registered = false; |
|
| 80 | + |
|
| 81 | + |
|
| 82 | + |
|
| 83 | + /** |
|
| 84 | + * PersistentAdminNotice constructor |
|
| 85 | + * |
|
| 86 | + * @param string $name [required] the name, or key of the Persistent Admin Notice to be stored |
|
| 87 | + * @param string $message [required] the message to be stored persistently until dismissed |
|
| 88 | + * @param bool $force_update enforce the reappearance of a persistent message |
|
| 89 | + * @param string $capability user capability required to view this notice |
|
| 90 | + * @param string $cap_context description for why the cap check is being performed |
|
| 91 | + * @param bool $dismissed whether or not the user has already dismissed/viewed this notice |
|
| 92 | + * @throws InvalidDataTypeException |
|
| 93 | + */ |
|
| 94 | + public function __construct( |
|
| 95 | + $name, |
|
| 96 | + $message, |
|
| 97 | + $force_update = false, |
|
| 98 | + $capability = 'manage_options', |
|
| 99 | + $cap_context = 'view persistent admin notice', |
|
| 100 | + $dismissed = false |
|
| 101 | + ) { |
|
| 102 | + $this->setName($name); |
|
| 103 | + $this->setMessage($message); |
|
| 104 | + $this->setForceUpdate($force_update); |
|
| 105 | + $this->setCapability($capability); |
|
| 106 | + $this->setCapContext($cap_context); |
|
| 107 | + $this->setDismissed($dismissed); |
|
| 108 | + add_action( |
|
| 109 | + 'AHEE__EventEspresso_core_services_notifications_PersistentAdminNoticeManager__registerNotices', |
|
| 110 | + array($this, 'registerPersistentAdminNotice') |
|
| 111 | + ); |
|
| 112 | + add_action('shutdown', array($this, 'confirmRegistered'), 999); |
|
| 113 | + } |
|
| 114 | + |
|
| 115 | + |
|
| 116 | + |
|
| 117 | + /** |
|
| 118 | + * @return string |
|
| 119 | + */ |
|
| 120 | + public function getName() |
|
| 121 | + { |
|
| 122 | + return $this->name; |
|
| 123 | + } |
|
| 124 | + |
|
| 125 | + |
|
| 126 | + |
|
| 127 | + /** |
|
| 128 | + * @param string $name |
|
| 129 | + * @throws InvalidDataTypeException |
|
| 130 | + */ |
|
| 131 | + private function setName($name) |
|
| 132 | + { |
|
| 133 | + if (! is_string($name)) { |
|
| 134 | + throw new InvalidDataTypeException('$name', $name, 'string'); |
|
| 135 | + } |
|
| 136 | + $this->name = sanitize_key($name); |
|
| 137 | + } |
|
| 138 | + |
|
| 139 | + |
|
| 140 | + |
|
| 141 | + /** |
|
| 142 | + * @return string |
|
| 143 | + */ |
|
| 144 | + public function getMessage() |
|
| 145 | + { |
|
| 146 | + return $this->message; |
|
| 147 | + } |
|
| 148 | + |
|
| 149 | + |
|
| 150 | + |
|
| 151 | + /** |
|
| 152 | + * @param string $message |
|
| 153 | + * @throws InvalidDataTypeException |
|
| 154 | + */ |
|
| 155 | + private function setMessage($message) |
|
| 156 | + { |
|
| 157 | + if (! is_string($message)) { |
|
| 158 | + throw new InvalidDataTypeException('$message', $message, 'string'); |
|
| 159 | + } |
|
| 160 | + global $allowedtags; |
|
| 161 | + $allowedtags['br'] = array(); |
|
| 162 | + $this->message = wp_kses($message, $allowedtags); |
|
| 163 | + } |
|
| 164 | + |
|
| 165 | + |
|
| 166 | + |
|
| 167 | + /** |
|
| 168 | + * @return bool |
|
| 169 | + */ |
|
| 170 | + public function getForceUpdate() |
|
| 171 | + { |
|
| 172 | + return $this->force_update; |
|
| 173 | + } |
|
| 174 | + |
|
| 175 | + |
|
| 176 | + |
|
| 177 | + /** |
|
| 178 | + * @param bool $force_update |
|
| 179 | + */ |
|
| 180 | + private function setForceUpdate($force_update) |
|
| 181 | + { |
|
| 182 | + $this->force_update = filter_var($force_update, FILTER_VALIDATE_BOOLEAN); |
|
| 183 | + } |
|
| 184 | + |
|
| 185 | + |
|
| 186 | + |
|
| 187 | + /** |
|
| 188 | + * @return string |
|
| 189 | + */ |
|
| 190 | + public function getCapability() |
|
| 191 | + { |
|
| 192 | + return $this->capability; |
|
| 193 | + } |
|
| 194 | + |
|
| 195 | + |
|
| 196 | + |
|
| 197 | + /** |
|
| 198 | + * @param string $capability |
|
| 199 | + * @throws InvalidDataTypeException |
|
| 200 | + */ |
|
| 201 | + private function setCapability($capability) |
|
| 202 | + { |
|
| 203 | + if (! is_string($capability)) { |
|
| 204 | + throw new InvalidDataTypeException('$capability', $capability, 'string'); |
|
| 205 | + } |
|
| 206 | + $this->capability = ! empty($capability) ? $capability : 'manage_options'; |
|
| 207 | + } |
|
| 208 | 208 | |
| 209 | 209 | |
| 210 | 210 | |
| 211 | - /** |
|
| 212 | - * @return string |
|
| 213 | - */ |
|
| 214 | - public function getCapContext() |
|
| 215 | - { |
|
| 216 | - return $this->cap_context; |
|
| 217 | - } |
|
| 218 | - |
|
| 219 | - |
|
| 220 | - |
|
| 221 | - /** |
|
| 222 | - * @param string $cap_context |
|
| 223 | - * @throws InvalidDataTypeException |
|
| 224 | - */ |
|
| 225 | - private function setCapContext($cap_context) |
|
| 226 | - { |
|
| 227 | - if (! is_string($cap_context)) { |
|
| 228 | - throw new InvalidDataTypeException('$cap_context', $cap_context, 'string'); |
|
| 229 | - } |
|
| 230 | - $this->cap_context = ! empty($cap_context) ? $cap_context : 'view persistent admin notice'; |
|
| 231 | - } |
|
| 232 | - |
|
| 233 | - |
|
| 234 | - |
|
| 235 | - /** |
|
| 236 | - * @return bool |
|
| 237 | - */ |
|
| 238 | - public function getDismissed() |
|
| 239 | - { |
|
| 240 | - return $this->dismissed; |
|
| 241 | - } |
|
| 242 | - |
|
| 243 | - |
|
| 244 | - |
|
| 245 | - /** |
|
| 246 | - * @param bool $dismissed |
|
| 247 | - */ |
|
| 248 | - public function setDismissed($dismissed) |
|
| 249 | - { |
|
| 250 | - $this->dismissed = filter_var($dismissed, FILTER_VALIDATE_BOOLEAN); |
|
| 251 | - } |
|
| 252 | - |
|
| 253 | - |
|
| 254 | - |
|
| 255 | - /** |
|
| 256 | - * @return CapCheckInterface |
|
| 257 | - * @throws InvalidDataTypeException |
|
| 258 | - */ |
|
| 259 | - public function getCapCheck() |
|
| 260 | - { |
|
| 261 | - if (! $this->cap_check instanceof CapCheckInterface) { |
|
| 262 | - $this->setCapCheck( |
|
| 263 | - new CapCheck( |
|
| 264 | - $this->capability, |
|
| 265 | - $this->cap_context |
|
| 266 | - ) |
|
| 267 | - ); |
|
| 268 | - } |
|
| 269 | - return $this->cap_check; |
|
| 270 | - } |
|
| 271 | - |
|
| 272 | - |
|
| 273 | - |
|
| 274 | - /** |
|
| 275 | - * @param CapCheckInterface $cap_check |
|
| 276 | - */ |
|
| 277 | - private function setCapCheck(CapCheckInterface $cap_check) |
|
| 278 | - { |
|
| 279 | - $this->cap_check = $cap_check; |
|
| 280 | - } |
|
| 281 | - |
|
| 282 | - |
|
| 283 | - |
|
| 284 | - /** |
|
| 285 | - * @return bool |
|
| 286 | - */ |
|
| 287 | - public function getPurge() |
|
| 288 | - { |
|
| 289 | - return $this->purge; |
|
| 290 | - } |
|
| 291 | - |
|
| 292 | - |
|
| 293 | - |
|
| 294 | - /** |
|
| 295 | - * @param bool $purge |
|
| 296 | - */ |
|
| 297 | - public function setPurge($purge) |
|
| 298 | - { |
|
| 299 | - $this->purge = filter_var($purge, FILTER_VALIDATE_BOOLEAN); |
|
| 300 | - } |
|
| 301 | - |
|
| 302 | - |
|
| 303 | - |
|
| 304 | - /** |
|
| 305 | - * given a valid PersistentAdminNotice Collection, |
|
| 306 | - * this notice will be added if it is not already found in the collection (using its name as the identifier) |
|
| 307 | - * if an existing notice is found that has already been dismissed, |
|
| 308 | - * but we are overriding with a forced update, then we will toggle its dismissed state, |
|
| 309 | - * so that the notice is displayed again |
|
| 310 | - * |
|
| 311 | - * @param Collection $persistent_admin_notice_collection |
|
| 312 | - * @throws InvalidEntityException |
|
| 313 | - * @throws InvalidDataTypeException |
|
| 314 | - */ |
|
| 315 | - public function registerPersistentAdminNotice(Collection $persistent_admin_notice_collection) |
|
| 316 | - { |
|
| 317 | - if ($this->registered) { |
|
| 318 | - return; |
|
| 319 | - } |
|
| 320 | - // first check if this notice has already been added to the collection |
|
| 321 | - if ($persistent_admin_notice_collection->has($this->name)) { |
|
| 322 | - /** @var PersistentAdminNotice $existing */ |
|
| 323 | - $existing = $persistent_admin_notice_collection->get($this->name); |
|
| 324 | - // we don't need to add it again (we can't actually) |
|
| 325 | - // but if it has already been dismissed, and we are overriding with a forced update |
|
| 326 | - if ($existing->getDismissed() && $this->getForceUpdate()) { |
|
| 327 | - // then toggle the notice's dismissed state to true |
|
| 328 | - // so that it gets displayed again |
|
| 329 | - $existing->setDismissed(false); |
|
| 330 | - // and make sure the message is set |
|
| 331 | - $existing->setMessage($this->message); |
|
| 332 | - } |
|
| 333 | - } else { |
|
| 334 | - $persistent_admin_notice_collection->add($this, $this->name); |
|
| 335 | - } |
|
| 336 | - $this->registered = true; |
|
| 337 | - } |
|
| 338 | - |
|
| 339 | - |
|
| 340 | - |
|
| 341 | - /** |
|
| 342 | - * @throws Exception |
|
| 343 | - */ |
|
| 344 | - public function confirmRegistered() |
|
| 345 | - { |
|
| 346 | - if (! apply_filters('PersistentAdminNoticeManager__registerAndSaveNotices__complete', false)) { |
|
| 347 | - PersistentAdminNoticeManager::loadRegisterAndSaveNotices(); |
|
| 348 | - } |
|
| 349 | - if (! $this->registered && WP_DEBUG) { |
|
| 350 | - throw new DomainException( |
|
| 351 | - sprintf( |
|
| 352 | - esc_html__( |
|
| 353 | - 'The "%1$s" PersistentAdminNotice was not successfully registered. Please ensure that it is being created prior to either the "admin_notices" or "network_admin_notices" hooks being triggered.', |
|
| 354 | - 'event_espresso' |
|
| 355 | - ), |
|
| 356 | - $this->name |
|
| 357 | - ) |
|
| 358 | - ); |
|
| 359 | - } |
|
| 360 | - } |
|
| 211 | + /** |
|
| 212 | + * @return string |
|
| 213 | + */ |
|
| 214 | + public function getCapContext() |
|
| 215 | + { |
|
| 216 | + return $this->cap_context; |
|
| 217 | + } |
|
| 218 | + |
|
| 219 | + |
|
| 220 | + |
|
| 221 | + /** |
|
| 222 | + * @param string $cap_context |
|
| 223 | + * @throws InvalidDataTypeException |
|
| 224 | + */ |
|
| 225 | + private function setCapContext($cap_context) |
|
| 226 | + { |
|
| 227 | + if (! is_string($cap_context)) { |
|
| 228 | + throw new InvalidDataTypeException('$cap_context', $cap_context, 'string'); |
|
| 229 | + } |
|
| 230 | + $this->cap_context = ! empty($cap_context) ? $cap_context : 'view persistent admin notice'; |
|
| 231 | + } |
|
| 232 | + |
|
| 233 | + |
|
| 234 | + |
|
| 235 | + /** |
|
| 236 | + * @return bool |
|
| 237 | + */ |
|
| 238 | + public function getDismissed() |
|
| 239 | + { |
|
| 240 | + return $this->dismissed; |
|
| 241 | + } |
|
| 242 | + |
|
| 243 | + |
|
| 244 | + |
|
| 245 | + /** |
|
| 246 | + * @param bool $dismissed |
|
| 247 | + */ |
|
| 248 | + public function setDismissed($dismissed) |
|
| 249 | + { |
|
| 250 | + $this->dismissed = filter_var($dismissed, FILTER_VALIDATE_BOOLEAN); |
|
| 251 | + } |
|
| 252 | + |
|
| 253 | + |
|
| 254 | + |
|
| 255 | + /** |
|
| 256 | + * @return CapCheckInterface |
|
| 257 | + * @throws InvalidDataTypeException |
|
| 258 | + */ |
|
| 259 | + public function getCapCheck() |
|
| 260 | + { |
|
| 261 | + if (! $this->cap_check instanceof CapCheckInterface) { |
|
| 262 | + $this->setCapCheck( |
|
| 263 | + new CapCheck( |
|
| 264 | + $this->capability, |
|
| 265 | + $this->cap_context |
|
| 266 | + ) |
|
| 267 | + ); |
|
| 268 | + } |
|
| 269 | + return $this->cap_check; |
|
| 270 | + } |
|
| 271 | + |
|
| 272 | + |
|
| 273 | + |
|
| 274 | + /** |
|
| 275 | + * @param CapCheckInterface $cap_check |
|
| 276 | + */ |
|
| 277 | + private function setCapCheck(CapCheckInterface $cap_check) |
|
| 278 | + { |
|
| 279 | + $this->cap_check = $cap_check; |
|
| 280 | + } |
|
| 281 | + |
|
| 282 | + |
|
| 283 | + |
|
| 284 | + /** |
|
| 285 | + * @return bool |
|
| 286 | + */ |
|
| 287 | + public function getPurge() |
|
| 288 | + { |
|
| 289 | + return $this->purge; |
|
| 290 | + } |
|
| 291 | + |
|
| 292 | + |
|
| 293 | + |
|
| 294 | + /** |
|
| 295 | + * @param bool $purge |
|
| 296 | + */ |
|
| 297 | + public function setPurge($purge) |
|
| 298 | + { |
|
| 299 | + $this->purge = filter_var($purge, FILTER_VALIDATE_BOOLEAN); |
|
| 300 | + } |
|
| 301 | + |
|
| 302 | + |
|
| 303 | + |
|
| 304 | + /** |
|
| 305 | + * given a valid PersistentAdminNotice Collection, |
|
| 306 | + * this notice will be added if it is not already found in the collection (using its name as the identifier) |
|
| 307 | + * if an existing notice is found that has already been dismissed, |
|
| 308 | + * but we are overriding with a forced update, then we will toggle its dismissed state, |
|
| 309 | + * so that the notice is displayed again |
|
| 310 | + * |
|
| 311 | + * @param Collection $persistent_admin_notice_collection |
|
| 312 | + * @throws InvalidEntityException |
|
| 313 | + * @throws InvalidDataTypeException |
|
| 314 | + */ |
|
| 315 | + public function registerPersistentAdminNotice(Collection $persistent_admin_notice_collection) |
|
| 316 | + { |
|
| 317 | + if ($this->registered) { |
|
| 318 | + return; |
|
| 319 | + } |
|
| 320 | + // first check if this notice has already been added to the collection |
|
| 321 | + if ($persistent_admin_notice_collection->has($this->name)) { |
|
| 322 | + /** @var PersistentAdminNotice $existing */ |
|
| 323 | + $existing = $persistent_admin_notice_collection->get($this->name); |
|
| 324 | + // we don't need to add it again (we can't actually) |
|
| 325 | + // but if it has already been dismissed, and we are overriding with a forced update |
|
| 326 | + if ($existing->getDismissed() && $this->getForceUpdate()) { |
|
| 327 | + // then toggle the notice's dismissed state to true |
|
| 328 | + // so that it gets displayed again |
|
| 329 | + $existing->setDismissed(false); |
|
| 330 | + // and make sure the message is set |
|
| 331 | + $existing->setMessage($this->message); |
|
| 332 | + } |
|
| 333 | + } else { |
|
| 334 | + $persistent_admin_notice_collection->add($this, $this->name); |
|
| 335 | + } |
|
| 336 | + $this->registered = true; |
|
| 337 | + } |
|
| 338 | + |
|
| 339 | + |
|
| 340 | + |
|
| 341 | + /** |
|
| 342 | + * @throws Exception |
|
| 343 | + */ |
|
| 344 | + public function confirmRegistered() |
|
| 345 | + { |
|
| 346 | + if (! apply_filters('PersistentAdminNoticeManager__registerAndSaveNotices__complete', false)) { |
|
| 347 | + PersistentAdminNoticeManager::loadRegisterAndSaveNotices(); |
|
| 348 | + } |
|
| 349 | + if (! $this->registered && WP_DEBUG) { |
|
| 350 | + throw new DomainException( |
|
| 351 | + sprintf( |
|
| 352 | + esc_html__( |
|
| 353 | + 'The "%1$s" PersistentAdminNotice was not successfully registered. Please ensure that it is being created prior to either the "admin_notices" or "network_admin_notices" hooks being triggered.', |
|
| 354 | + 'event_espresso' |
|
| 355 | + ), |
|
| 356 | + $this->name |
|
| 357 | + ) |
|
| 358 | + ); |
|
| 359 | + } |
|
| 360 | + } |
|
| 361 | 361 | |
| 362 | 362 | |
| 363 | 363 | } |
@@ -130,7 +130,7 @@ discard block |
||
| 130 | 130 | */ |
| 131 | 131 | private function setName($name) |
| 132 | 132 | { |
| 133 | - if (! is_string($name)) { |
|
| 133 | + if ( ! is_string($name)) { |
|
| 134 | 134 | throw new InvalidDataTypeException('$name', $name, 'string'); |
| 135 | 135 | } |
| 136 | 136 | $this->name = sanitize_key($name); |
@@ -154,7 +154,7 @@ discard block |
||
| 154 | 154 | */ |
| 155 | 155 | private function setMessage($message) |
| 156 | 156 | { |
| 157 | - if (! is_string($message)) { |
|
| 157 | + if ( ! is_string($message)) { |
|
| 158 | 158 | throw new InvalidDataTypeException('$message', $message, 'string'); |
| 159 | 159 | } |
| 160 | 160 | global $allowedtags; |
@@ -200,7 +200,7 @@ discard block |
||
| 200 | 200 | */ |
| 201 | 201 | private function setCapability($capability) |
| 202 | 202 | { |
| 203 | - if (! is_string($capability)) { |
|
| 203 | + if ( ! is_string($capability)) { |
|
| 204 | 204 | throw new InvalidDataTypeException('$capability', $capability, 'string'); |
| 205 | 205 | } |
| 206 | 206 | $this->capability = ! empty($capability) ? $capability : 'manage_options'; |
@@ -224,7 +224,7 @@ discard block |
||
| 224 | 224 | */ |
| 225 | 225 | private function setCapContext($cap_context) |
| 226 | 226 | { |
| 227 | - if (! is_string($cap_context)) { |
|
| 227 | + if ( ! is_string($cap_context)) { |
|
| 228 | 228 | throw new InvalidDataTypeException('$cap_context', $cap_context, 'string'); |
| 229 | 229 | } |
| 230 | 230 | $this->cap_context = ! empty($cap_context) ? $cap_context : 'view persistent admin notice'; |
@@ -258,7 +258,7 @@ discard block |
||
| 258 | 258 | */ |
| 259 | 259 | public function getCapCheck() |
| 260 | 260 | { |
| 261 | - if (! $this->cap_check instanceof CapCheckInterface) { |
|
| 261 | + if ( ! $this->cap_check instanceof CapCheckInterface) { |
|
| 262 | 262 | $this->setCapCheck( |
| 263 | 263 | new CapCheck( |
| 264 | 264 | $this->capability, |
@@ -343,10 +343,10 @@ discard block |
||
| 343 | 343 | */ |
| 344 | 344 | public function confirmRegistered() |
| 345 | 345 | { |
| 346 | - if (! apply_filters('PersistentAdminNoticeManager__registerAndSaveNotices__complete', false)) { |
|
| 346 | + if ( ! apply_filters('PersistentAdminNoticeManager__registerAndSaveNotices__complete', false)) { |
|
| 347 | 347 | PersistentAdminNoticeManager::loadRegisterAndSaveNotices(); |
| 348 | 348 | } |
| 349 | - if (! $this->registered && WP_DEBUG) { |
|
| 349 | + if ( ! $this->registered && WP_DEBUG) { |
|
| 350 | 350 | throw new DomainException( |
| 351 | 351 | sprintf( |
| 352 | 352 | esc_html__( |
@@ -32,390 +32,390 @@ |
||
| 32 | 32 | class PersistentAdminNoticeManager |
| 33 | 33 | { |
| 34 | 34 | |
| 35 | - const WP_OPTION_KEY = 'ee_pers_admin_notices'; |
|
| 36 | - |
|
| 37 | - /** |
|
| 38 | - * @var Collection|PersistentAdminNotice[] $notice_collection |
|
| 39 | - */ |
|
| 40 | - private $notice_collection; |
|
| 41 | - |
|
| 42 | - /** |
|
| 43 | - * if AJAX is not enabled, then the return URL will be used for redirecting back to the admin page where the |
|
| 44 | - * persistent admin notice was displayed, and ultimately dismissed from. |
|
| 45 | - * |
|
| 46 | - * @var string $return_url |
|
| 47 | - */ |
|
| 48 | - private $return_url; |
|
| 49 | - |
|
| 50 | - /** |
|
| 51 | - * @var CapabilitiesChecker $capabilities_checker |
|
| 52 | - */ |
|
| 53 | - private $capabilities_checker; |
|
| 54 | - |
|
| 55 | - /** |
|
| 56 | - * @var EE_Request $request |
|
| 57 | - */ |
|
| 58 | - private $request; |
|
| 59 | - |
|
| 60 | - |
|
| 61 | - |
|
| 62 | - /** |
|
| 63 | - * PersistentAdminNoticeManager constructor |
|
| 64 | - * |
|
| 65 | - * @param string $return_url where to redirect to after dismissing notices |
|
| 66 | - * @param CapabilitiesChecker $capabilities_checker |
|
| 67 | - * @param EE_Request $request |
|
| 68 | - * @throws InvalidDataTypeException |
|
| 69 | - */ |
|
| 70 | - public function __construct($return_url = '', CapabilitiesChecker $capabilities_checker, EE_Request $request) |
|
| 71 | - { |
|
| 72 | - $this->setReturnUrl($return_url); |
|
| 73 | - $this->capabilities_checker = $capabilities_checker; |
|
| 74 | - $this->request = $request; |
|
| 75 | - // setup up notices at priority 9 because `EE_Admin::display_admin_notices()` runs at priority 10, |
|
| 76 | - // and we want to retrieve and generate any nag notices at the last possible moment |
|
| 77 | - add_action('admin_notices', array($this, 'displayNotices'), 9); |
|
| 78 | - add_action('network_admin_notices', array($this, 'displayNotices'), 9); |
|
| 79 | - add_action('wp_ajax_dismiss_ee_nag_notice', array($this, 'dismissNotice')); |
|
| 80 | - add_action('shutdown', array($this, 'registerAndSaveNotices'), 998); |
|
| 81 | - } |
|
| 82 | - |
|
| 83 | - |
|
| 84 | - |
|
| 85 | - /** |
|
| 86 | - * @param string $return_url |
|
| 87 | - * @throws InvalidDataTypeException |
|
| 88 | - */ |
|
| 89 | - public function setReturnUrl($return_url) |
|
| 90 | - { |
|
| 91 | - if (! is_string($return_url)) { |
|
| 92 | - throw new InvalidDataTypeException('$return_url', $return_url, 'string'); |
|
| 93 | - } |
|
| 94 | - $this->return_url = $return_url; |
|
| 95 | - } |
|
| 96 | - |
|
| 97 | - |
|
| 98 | - |
|
| 99 | - /** |
|
| 100 | - * @return Collection |
|
| 101 | - * @throws InvalidEntityException |
|
| 102 | - * @throws InvalidInterfaceException |
|
| 103 | - * @throws InvalidDataTypeException |
|
| 104 | - * @throws DomainException |
|
| 105 | - */ |
|
| 106 | - protected function getPersistentAdminNoticeCollection() |
|
| 107 | - { |
|
| 108 | - if (! $this->notice_collection instanceof Collection) { |
|
| 109 | - $this->notice_collection = new Collection( |
|
| 110 | - 'EventEspresso\core\domain\entities\notifications\PersistentAdminNotice' |
|
| 111 | - ); |
|
| 112 | - $this->retrieveStoredNotices(); |
|
| 113 | - $this->registerNotices(); |
|
| 114 | - } |
|
| 115 | - return $this->notice_collection; |
|
| 116 | - } |
|
| 117 | - |
|
| 118 | - |
|
| 119 | - |
|
| 120 | - /** |
|
| 121 | - * generates PersistentAdminNotice objects for all non-dismissed notices saved to the db |
|
| 122 | - * |
|
| 123 | - * @return void |
|
| 124 | - * @throws InvalidEntityException |
|
| 125 | - * @throws DomainException |
|
| 126 | - * @throws InvalidDataTypeException |
|
| 127 | - */ |
|
| 128 | - protected function retrieveStoredNotices() |
|
| 129 | - { |
|
| 130 | - $persistent_admin_notices = get_option(PersistentAdminNoticeManager::WP_OPTION_KEY, array()); |
|
| 131 | - // \EEH_Debug_Tools::printr($persistent_admin_notices, '$persistent_admin_notices', __FILE__, __LINE__); |
|
| 132 | - if (! empty($persistent_admin_notices)) { |
|
| 133 | - foreach ($persistent_admin_notices as $name => $details) { |
|
| 134 | - if (is_array($details)) { |
|
| 135 | - if ( |
|
| 136 | - ! isset( |
|
| 137 | - $details['message'], |
|
| 138 | - $details['capability'], |
|
| 139 | - $details['cap_context'], |
|
| 140 | - $details['dismissed'] |
|
| 141 | - ) |
|
| 142 | - ) { |
|
| 143 | - throw new DomainException( |
|
| 144 | - sprintf( |
|
| 145 | - esc_html__( |
|
| 146 | - 'The "%1$s" PersistentAdminNotice could not be retrieved from the database.', |
|
| 147 | - 'event_espresso' |
|
| 148 | - ), |
|
| 149 | - $name |
|
| 150 | - ) |
|
| 151 | - ); |
|
| 152 | - } |
|
| 153 | - // new format for nag notices |
|
| 154 | - $this->notice_collection->add( |
|
| 155 | - new PersistentAdminNotice( |
|
| 156 | - $name, |
|
| 157 | - $details['message'], |
|
| 158 | - false, |
|
| 159 | - $details['capability'], |
|
| 160 | - $details['cap_context'], |
|
| 161 | - $details['dismissed'] |
|
| 162 | - ), |
|
| 163 | - $name |
|
| 164 | - ); |
|
| 165 | - } else { |
|
| 166 | - try { |
|
| 167 | - // old nag notices, that we want to convert to the new format |
|
| 168 | - $this->notice_collection->add( |
|
| 169 | - new PersistentAdminNotice( |
|
| 170 | - $name, |
|
| 171 | - (string)$details, |
|
| 172 | - false, |
|
| 173 | - '', |
|
| 174 | - '', |
|
| 175 | - empty($details) |
|
| 176 | - ), |
|
| 177 | - $name |
|
| 178 | - ); |
|
| 179 | - } catch (Exception $e) { |
|
| 180 | - EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
| 181 | - } |
|
| 182 | - } |
|
| 183 | - // each notice will self register when the action hook in registerNotices is triggered |
|
| 184 | - } |
|
| 185 | - } |
|
| 186 | - } |
|
| 187 | - |
|
| 188 | - |
|
| 189 | - |
|
| 190 | - /** |
|
| 191 | - * exposes the Persistent Admin Notice Collection via an action |
|
| 192 | - * so that PersistentAdminNotice objects can be added and/or removed |
|
| 193 | - * without compromising the actual collection like a filter would |
|
| 194 | - */ |
|
| 195 | - protected function registerNotices() |
|
| 196 | - { |
|
| 197 | - do_action( |
|
| 198 | - 'AHEE__EventEspresso_core_services_notifications_PersistentAdminNoticeManager__registerNotices', |
|
| 199 | - $this->notice_collection |
|
| 200 | - ); |
|
| 201 | - } |
|
| 202 | - |
|
| 203 | - |
|
| 204 | - |
|
| 205 | - /** |
|
| 206 | - * @throws DomainException |
|
| 207 | - * @throws InvalidClassException |
|
| 208 | - * @throws InvalidDataTypeException |
|
| 209 | - * @throws InvalidInterfaceException |
|
| 210 | - * @throws InvalidEntityException |
|
| 211 | - */ |
|
| 212 | - public function displayNotices() |
|
| 213 | - { |
|
| 214 | - $this->notice_collection = $this->getPersistentAdminNoticeCollection(); |
|
| 215 | - if ($this->notice_collection->hasObjects()) { |
|
| 216 | - $enqueue_assets = false; |
|
| 217 | - // and display notices |
|
| 218 | - foreach ($this->notice_collection as $persistent_admin_notice) { |
|
| 219 | - /** @var PersistentAdminNotice $persistent_admin_notice */ |
|
| 220 | - // don't display notices that have already been dismissed |
|
| 221 | - if ($persistent_admin_notice->getDismissed()) { |
|
| 222 | - continue; |
|
| 223 | - } |
|
| 224 | - try { |
|
| 225 | - $this->capabilities_checker->processCapCheck( |
|
| 226 | - $persistent_admin_notice->getCapCheck() |
|
| 227 | - ); |
|
| 228 | - } catch (InsufficientPermissionsException $e) { |
|
| 229 | - // user does not have required cap, so skip to next notice |
|
| 230 | - // and just eat the exception - nom nom nom nom |
|
| 231 | - continue; |
|
| 232 | - } |
|
| 233 | - if ($persistent_admin_notice->getMessage() === '') { |
|
| 234 | - continue; |
|
| 235 | - } |
|
| 236 | - $this->displayPersistentAdminNotice($persistent_admin_notice); |
|
| 237 | - $enqueue_assets = true; |
|
| 238 | - } |
|
| 239 | - if ($enqueue_assets) { |
|
| 240 | - $this->enqueueAssets(); |
|
| 241 | - } |
|
| 242 | - } |
|
| 243 | - } |
|
| 244 | - |
|
| 245 | - |
|
| 246 | - |
|
| 247 | - /** |
|
| 248 | - * does what it's named |
|
| 249 | - * |
|
| 250 | - * @return void |
|
| 251 | - */ |
|
| 252 | - public function enqueueAssets() |
|
| 253 | - { |
|
| 254 | - wp_register_script( |
|
| 255 | - 'espresso_core', |
|
| 256 | - EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js', |
|
| 257 | - array('jquery'), |
|
| 258 | - EVENT_ESPRESSO_VERSION, |
|
| 259 | - true |
|
| 260 | - ); |
|
| 261 | - wp_register_script( |
|
| 262 | - 'ee_error_js', |
|
| 263 | - EE_GLOBAL_ASSETS_URL . 'scripts/EE_Error.js', |
|
| 264 | - array('espresso_core'), |
|
| 265 | - EVENT_ESPRESSO_VERSION, |
|
| 266 | - true |
|
| 267 | - ); |
|
| 268 | - wp_localize_script( |
|
| 269 | - 'ee_error_js', |
|
| 270 | - 'ee_dismiss', |
|
| 271 | - array( |
|
| 272 | - 'return_url' => urlencode($this->return_url), |
|
| 273 | - 'ajax_url' => WP_AJAX_URL, |
|
| 274 | - 'unknown_error' => esc_html__( |
|
| 275 | - 'An unknown error has occurred on the server while attempting to dismiss this notice.', |
|
| 276 | - 'event_espresso' |
|
| 277 | - ), |
|
| 278 | - ) |
|
| 279 | - ); |
|
| 280 | - wp_enqueue_script('ee_error_js'); |
|
| 281 | - } |
|
| 282 | - |
|
| 283 | - |
|
| 284 | - |
|
| 285 | - /** |
|
| 286 | - * displayPersistentAdminNoticeHtml |
|
| 287 | - * |
|
| 288 | - * @param PersistentAdminNotice $persistent_admin_notice |
|
| 289 | - */ |
|
| 290 | - protected function displayPersistentAdminNotice(PersistentAdminNotice $persistent_admin_notice) |
|
| 291 | - { |
|
| 292 | - // used in template |
|
| 293 | - $persistent_admin_notice_name = $persistent_admin_notice->getName(); |
|
| 294 | - $persistent_admin_notice_message = $persistent_admin_notice->getMessage(); |
|
| 295 | - require EE_TEMPLATES . DS . 'notifications' . DS . 'persistent_admin_notice.template.php'; |
|
| 296 | - } |
|
| 297 | - |
|
| 298 | - |
|
| 299 | - |
|
| 300 | - /** |
|
| 301 | - * dismissNotice |
|
| 302 | - * |
|
| 303 | - * @param string $pan_name the name, or key of the Persistent Admin Notice to be dismissed |
|
| 304 | - * @param bool $purge if true, then delete it from the db |
|
| 305 | - * @param bool $return forget all of this AJAX or redirect nonsense, and just return |
|
| 306 | - * @return void |
|
| 307 | - * @throws InvalidEntityException |
|
| 308 | - * @throws InvalidInterfaceException |
|
| 309 | - * @throws InvalidDataTypeException |
|
| 310 | - * @throws DomainException |
|
| 311 | - */ |
|
| 312 | - public function dismissNotice($pan_name = '', $purge = false, $return = false) |
|
| 313 | - { |
|
| 314 | - $pan_name = $this->request->get('ee_nag_notice', $pan_name); |
|
| 315 | - $this->notice_collection = $this->getPersistentAdminNoticeCollection(); |
|
| 316 | - if (! empty($pan_name) && $this->notice_collection->has($pan_name)) { |
|
| 317 | - /** @var PersistentAdminNotice $persistent_admin_notice */ |
|
| 318 | - $persistent_admin_notice = $this->notice_collection->get($pan_name); |
|
| 319 | - $persistent_admin_notice->setDismissed(true); |
|
| 320 | - $persistent_admin_notice->setPurge($purge); |
|
| 321 | - $this->saveNotices(); |
|
| 322 | - } |
|
| 323 | - if ($return) { |
|
| 324 | - return; |
|
| 325 | - } |
|
| 326 | - if ($this->request->ajax) { |
|
| 327 | - // grab any notices and concatenate into string |
|
| 328 | - echo wp_json_encode( |
|
| 329 | - array( |
|
| 330 | - 'errors' => implode('<br />', EE_Error::get_notices(false)), |
|
| 331 | - ) |
|
| 332 | - ); |
|
| 333 | - exit(); |
|
| 334 | - } |
|
| 335 | - // save errors to a transient to be displayed on next request (after redirect) |
|
| 336 | - EE_Error::get_notices(false, true); |
|
| 337 | - wp_safe_redirect( |
|
| 338 | - urldecode( |
|
| 339 | - $this->request->get('return_url', '') |
|
| 340 | - ) |
|
| 341 | - ); |
|
| 342 | - } |
|
| 343 | - |
|
| 344 | - |
|
| 345 | - |
|
| 346 | - /** |
|
| 347 | - * saveNotices |
|
| 348 | - * |
|
| 349 | - * @throws DomainException |
|
| 350 | - * @throws InvalidDataTypeException |
|
| 351 | - * @throws InvalidInterfaceException |
|
| 352 | - * @throws InvalidEntityException |
|
| 353 | - */ |
|
| 354 | - public function saveNotices() |
|
| 355 | - { |
|
| 356 | - $this->notice_collection = $this->getPersistentAdminNoticeCollection(); |
|
| 357 | - if ($this->notice_collection->hasObjects()) { |
|
| 358 | - $persistent_admin_notices = get_option(PersistentAdminNoticeManager::WP_OPTION_KEY, array()); |
|
| 359 | - //maybe initialize persistent_admin_notices |
|
| 360 | - if (empty($persistent_admin_notices)) { |
|
| 361 | - add_option(PersistentAdminNoticeManager::WP_OPTION_KEY, array(), '', 'no'); |
|
| 362 | - } |
|
| 363 | - foreach ($this->notice_collection as $persistent_admin_notice) { |
|
| 364 | - // are we deleting this notice ? |
|
| 365 | - if ($persistent_admin_notice->getPurge()) { |
|
| 366 | - unset($persistent_admin_notices[$persistent_admin_notice->getName()]); |
|
| 367 | - } else { |
|
| 368 | - /** @var PersistentAdminNotice $persistent_admin_notice */ |
|
| 369 | - $persistent_admin_notices[$persistent_admin_notice->getName()] = array( |
|
| 370 | - 'message' => $persistent_admin_notice->getMessage(), |
|
| 371 | - 'capability' => $persistent_admin_notice->getCapability(), |
|
| 372 | - 'cap_context' => $persistent_admin_notice->getCapContext(), |
|
| 373 | - 'dismissed' => $persistent_admin_notice->getDismissed(), |
|
| 374 | - ); |
|
| 375 | - } |
|
| 376 | - } |
|
| 377 | - update_option(PersistentAdminNoticeManager::WP_OPTION_KEY, $persistent_admin_notices); |
|
| 378 | - } |
|
| 379 | - } |
|
| 380 | - |
|
| 381 | - |
|
| 382 | - |
|
| 383 | - /** |
|
| 384 | - * @throws DomainException |
|
| 385 | - * @throws InvalidDataTypeException |
|
| 386 | - * @throws InvalidEntityException |
|
| 387 | - * @throws InvalidInterfaceException |
|
| 388 | - */ |
|
| 389 | - public function registerAndSaveNotices() |
|
| 390 | - { |
|
| 391 | - $this->getPersistentAdminNoticeCollection(); |
|
| 392 | - $this->registerNotices(); |
|
| 393 | - $this->saveNotices(); |
|
| 394 | - add_filter( |
|
| 395 | - 'PersistentAdminNoticeManager__registerAndSaveNotices__complete', |
|
| 396 | - '__return_true' |
|
| 397 | - ); |
|
| 398 | - } |
|
| 399 | - |
|
| 400 | - |
|
| 401 | - /** |
|
| 402 | - * @throws DomainException |
|
| 403 | - * @throws InvalidDataTypeException |
|
| 404 | - * @throws InvalidEntityException |
|
| 405 | - * @throws InvalidInterfaceException |
|
| 406 | - * @throws InvalidArgumentException |
|
| 407 | - */ |
|
| 408 | - public static function loadRegisterAndSaveNotices() |
|
| 409 | - { |
|
| 410 | - /** @var PersistentAdminNoticeManager $persistent_admin_notice_manager */ |
|
| 411 | - $persistent_admin_notice_manager = LoaderFactory::getLoader()->getShared( |
|
| 412 | - 'EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 413 | - ); |
|
| 414 | - // if shutdown has already run, then call registerAndSaveNotices() manually |
|
| 415 | - if(did_action('shutdown')){ |
|
| 416 | - $persistent_admin_notice_manager->registerAndSaveNotices(); |
|
| 417 | - } |
|
| 418 | - } |
|
| 35 | + const WP_OPTION_KEY = 'ee_pers_admin_notices'; |
|
| 36 | + |
|
| 37 | + /** |
|
| 38 | + * @var Collection|PersistentAdminNotice[] $notice_collection |
|
| 39 | + */ |
|
| 40 | + private $notice_collection; |
|
| 41 | + |
|
| 42 | + /** |
|
| 43 | + * if AJAX is not enabled, then the return URL will be used for redirecting back to the admin page where the |
|
| 44 | + * persistent admin notice was displayed, and ultimately dismissed from. |
|
| 45 | + * |
|
| 46 | + * @var string $return_url |
|
| 47 | + */ |
|
| 48 | + private $return_url; |
|
| 49 | + |
|
| 50 | + /** |
|
| 51 | + * @var CapabilitiesChecker $capabilities_checker |
|
| 52 | + */ |
|
| 53 | + private $capabilities_checker; |
|
| 54 | + |
|
| 55 | + /** |
|
| 56 | + * @var EE_Request $request |
|
| 57 | + */ |
|
| 58 | + private $request; |
|
| 59 | + |
|
| 60 | + |
|
| 61 | + |
|
| 62 | + /** |
|
| 63 | + * PersistentAdminNoticeManager constructor |
|
| 64 | + * |
|
| 65 | + * @param string $return_url where to redirect to after dismissing notices |
|
| 66 | + * @param CapabilitiesChecker $capabilities_checker |
|
| 67 | + * @param EE_Request $request |
|
| 68 | + * @throws InvalidDataTypeException |
|
| 69 | + */ |
|
| 70 | + public function __construct($return_url = '', CapabilitiesChecker $capabilities_checker, EE_Request $request) |
|
| 71 | + { |
|
| 72 | + $this->setReturnUrl($return_url); |
|
| 73 | + $this->capabilities_checker = $capabilities_checker; |
|
| 74 | + $this->request = $request; |
|
| 75 | + // setup up notices at priority 9 because `EE_Admin::display_admin_notices()` runs at priority 10, |
|
| 76 | + // and we want to retrieve and generate any nag notices at the last possible moment |
|
| 77 | + add_action('admin_notices', array($this, 'displayNotices'), 9); |
|
| 78 | + add_action('network_admin_notices', array($this, 'displayNotices'), 9); |
|
| 79 | + add_action('wp_ajax_dismiss_ee_nag_notice', array($this, 'dismissNotice')); |
|
| 80 | + add_action('shutdown', array($this, 'registerAndSaveNotices'), 998); |
|
| 81 | + } |
|
| 82 | + |
|
| 83 | + |
|
| 84 | + |
|
| 85 | + /** |
|
| 86 | + * @param string $return_url |
|
| 87 | + * @throws InvalidDataTypeException |
|
| 88 | + */ |
|
| 89 | + public function setReturnUrl($return_url) |
|
| 90 | + { |
|
| 91 | + if (! is_string($return_url)) { |
|
| 92 | + throw new InvalidDataTypeException('$return_url', $return_url, 'string'); |
|
| 93 | + } |
|
| 94 | + $this->return_url = $return_url; |
|
| 95 | + } |
|
| 96 | + |
|
| 97 | + |
|
| 98 | + |
|
| 99 | + /** |
|
| 100 | + * @return Collection |
|
| 101 | + * @throws InvalidEntityException |
|
| 102 | + * @throws InvalidInterfaceException |
|
| 103 | + * @throws InvalidDataTypeException |
|
| 104 | + * @throws DomainException |
|
| 105 | + */ |
|
| 106 | + protected function getPersistentAdminNoticeCollection() |
|
| 107 | + { |
|
| 108 | + if (! $this->notice_collection instanceof Collection) { |
|
| 109 | + $this->notice_collection = new Collection( |
|
| 110 | + 'EventEspresso\core\domain\entities\notifications\PersistentAdminNotice' |
|
| 111 | + ); |
|
| 112 | + $this->retrieveStoredNotices(); |
|
| 113 | + $this->registerNotices(); |
|
| 114 | + } |
|
| 115 | + return $this->notice_collection; |
|
| 116 | + } |
|
| 117 | + |
|
| 118 | + |
|
| 119 | + |
|
| 120 | + /** |
|
| 121 | + * generates PersistentAdminNotice objects for all non-dismissed notices saved to the db |
|
| 122 | + * |
|
| 123 | + * @return void |
|
| 124 | + * @throws InvalidEntityException |
|
| 125 | + * @throws DomainException |
|
| 126 | + * @throws InvalidDataTypeException |
|
| 127 | + */ |
|
| 128 | + protected function retrieveStoredNotices() |
|
| 129 | + { |
|
| 130 | + $persistent_admin_notices = get_option(PersistentAdminNoticeManager::WP_OPTION_KEY, array()); |
|
| 131 | + // \EEH_Debug_Tools::printr($persistent_admin_notices, '$persistent_admin_notices', __FILE__, __LINE__); |
|
| 132 | + if (! empty($persistent_admin_notices)) { |
|
| 133 | + foreach ($persistent_admin_notices as $name => $details) { |
|
| 134 | + if (is_array($details)) { |
|
| 135 | + if ( |
|
| 136 | + ! isset( |
|
| 137 | + $details['message'], |
|
| 138 | + $details['capability'], |
|
| 139 | + $details['cap_context'], |
|
| 140 | + $details['dismissed'] |
|
| 141 | + ) |
|
| 142 | + ) { |
|
| 143 | + throw new DomainException( |
|
| 144 | + sprintf( |
|
| 145 | + esc_html__( |
|
| 146 | + 'The "%1$s" PersistentAdminNotice could not be retrieved from the database.', |
|
| 147 | + 'event_espresso' |
|
| 148 | + ), |
|
| 149 | + $name |
|
| 150 | + ) |
|
| 151 | + ); |
|
| 152 | + } |
|
| 153 | + // new format for nag notices |
|
| 154 | + $this->notice_collection->add( |
|
| 155 | + new PersistentAdminNotice( |
|
| 156 | + $name, |
|
| 157 | + $details['message'], |
|
| 158 | + false, |
|
| 159 | + $details['capability'], |
|
| 160 | + $details['cap_context'], |
|
| 161 | + $details['dismissed'] |
|
| 162 | + ), |
|
| 163 | + $name |
|
| 164 | + ); |
|
| 165 | + } else { |
|
| 166 | + try { |
|
| 167 | + // old nag notices, that we want to convert to the new format |
|
| 168 | + $this->notice_collection->add( |
|
| 169 | + new PersistentAdminNotice( |
|
| 170 | + $name, |
|
| 171 | + (string)$details, |
|
| 172 | + false, |
|
| 173 | + '', |
|
| 174 | + '', |
|
| 175 | + empty($details) |
|
| 176 | + ), |
|
| 177 | + $name |
|
| 178 | + ); |
|
| 179 | + } catch (Exception $e) { |
|
| 180 | + EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__); |
|
| 181 | + } |
|
| 182 | + } |
|
| 183 | + // each notice will self register when the action hook in registerNotices is triggered |
|
| 184 | + } |
|
| 185 | + } |
|
| 186 | + } |
|
| 187 | + |
|
| 188 | + |
|
| 189 | + |
|
| 190 | + /** |
|
| 191 | + * exposes the Persistent Admin Notice Collection via an action |
|
| 192 | + * so that PersistentAdminNotice objects can be added and/or removed |
|
| 193 | + * without compromising the actual collection like a filter would |
|
| 194 | + */ |
|
| 195 | + protected function registerNotices() |
|
| 196 | + { |
|
| 197 | + do_action( |
|
| 198 | + 'AHEE__EventEspresso_core_services_notifications_PersistentAdminNoticeManager__registerNotices', |
|
| 199 | + $this->notice_collection |
|
| 200 | + ); |
|
| 201 | + } |
|
| 202 | + |
|
| 203 | + |
|
| 204 | + |
|
| 205 | + /** |
|
| 206 | + * @throws DomainException |
|
| 207 | + * @throws InvalidClassException |
|
| 208 | + * @throws InvalidDataTypeException |
|
| 209 | + * @throws InvalidInterfaceException |
|
| 210 | + * @throws InvalidEntityException |
|
| 211 | + */ |
|
| 212 | + public function displayNotices() |
|
| 213 | + { |
|
| 214 | + $this->notice_collection = $this->getPersistentAdminNoticeCollection(); |
|
| 215 | + if ($this->notice_collection->hasObjects()) { |
|
| 216 | + $enqueue_assets = false; |
|
| 217 | + // and display notices |
|
| 218 | + foreach ($this->notice_collection as $persistent_admin_notice) { |
|
| 219 | + /** @var PersistentAdminNotice $persistent_admin_notice */ |
|
| 220 | + // don't display notices that have already been dismissed |
|
| 221 | + if ($persistent_admin_notice->getDismissed()) { |
|
| 222 | + continue; |
|
| 223 | + } |
|
| 224 | + try { |
|
| 225 | + $this->capabilities_checker->processCapCheck( |
|
| 226 | + $persistent_admin_notice->getCapCheck() |
|
| 227 | + ); |
|
| 228 | + } catch (InsufficientPermissionsException $e) { |
|
| 229 | + // user does not have required cap, so skip to next notice |
|
| 230 | + // and just eat the exception - nom nom nom nom |
|
| 231 | + continue; |
|
| 232 | + } |
|
| 233 | + if ($persistent_admin_notice->getMessage() === '') { |
|
| 234 | + continue; |
|
| 235 | + } |
|
| 236 | + $this->displayPersistentAdminNotice($persistent_admin_notice); |
|
| 237 | + $enqueue_assets = true; |
|
| 238 | + } |
|
| 239 | + if ($enqueue_assets) { |
|
| 240 | + $this->enqueueAssets(); |
|
| 241 | + } |
|
| 242 | + } |
|
| 243 | + } |
|
| 244 | + |
|
| 245 | + |
|
| 246 | + |
|
| 247 | + /** |
|
| 248 | + * does what it's named |
|
| 249 | + * |
|
| 250 | + * @return void |
|
| 251 | + */ |
|
| 252 | + public function enqueueAssets() |
|
| 253 | + { |
|
| 254 | + wp_register_script( |
|
| 255 | + 'espresso_core', |
|
| 256 | + EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js', |
|
| 257 | + array('jquery'), |
|
| 258 | + EVENT_ESPRESSO_VERSION, |
|
| 259 | + true |
|
| 260 | + ); |
|
| 261 | + wp_register_script( |
|
| 262 | + 'ee_error_js', |
|
| 263 | + EE_GLOBAL_ASSETS_URL . 'scripts/EE_Error.js', |
|
| 264 | + array('espresso_core'), |
|
| 265 | + EVENT_ESPRESSO_VERSION, |
|
| 266 | + true |
|
| 267 | + ); |
|
| 268 | + wp_localize_script( |
|
| 269 | + 'ee_error_js', |
|
| 270 | + 'ee_dismiss', |
|
| 271 | + array( |
|
| 272 | + 'return_url' => urlencode($this->return_url), |
|
| 273 | + 'ajax_url' => WP_AJAX_URL, |
|
| 274 | + 'unknown_error' => esc_html__( |
|
| 275 | + 'An unknown error has occurred on the server while attempting to dismiss this notice.', |
|
| 276 | + 'event_espresso' |
|
| 277 | + ), |
|
| 278 | + ) |
|
| 279 | + ); |
|
| 280 | + wp_enqueue_script('ee_error_js'); |
|
| 281 | + } |
|
| 282 | + |
|
| 283 | + |
|
| 284 | + |
|
| 285 | + /** |
|
| 286 | + * displayPersistentAdminNoticeHtml |
|
| 287 | + * |
|
| 288 | + * @param PersistentAdminNotice $persistent_admin_notice |
|
| 289 | + */ |
|
| 290 | + protected function displayPersistentAdminNotice(PersistentAdminNotice $persistent_admin_notice) |
|
| 291 | + { |
|
| 292 | + // used in template |
|
| 293 | + $persistent_admin_notice_name = $persistent_admin_notice->getName(); |
|
| 294 | + $persistent_admin_notice_message = $persistent_admin_notice->getMessage(); |
|
| 295 | + require EE_TEMPLATES . DS . 'notifications' . DS . 'persistent_admin_notice.template.php'; |
|
| 296 | + } |
|
| 297 | + |
|
| 298 | + |
|
| 299 | + |
|
| 300 | + /** |
|
| 301 | + * dismissNotice |
|
| 302 | + * |
|
| 303 | + * @param string $pan_name the name, or key of the Persistent Admin Notice to be dismissed |
|
| 304 | + * @param bool $purge if true, then delete it from the db |
|
| 305 | + * @param bool $return forget all of this AJAX or redirect nonsense, and just return |
|
| 306 | + * @return void |
|
| 307 | + * @throws InvalidEntityException |
|
| 308 | + * @throws InvalidInterfaceException |
|
| 309 | + * @throws InvalidDataTypeException |
|
| 310 | + * @throws DomainException |
|
| 311 | + */ |
|
| 312 | + public function dismissNotice($pan_name = '', $purge = false, $return = false) |
|
| 313 | + { |
|
| 314 | + $pan_name = $this->request->get('ee_nag_notice', $pan_name); |
|
| 315 | + $this->notice_collection = $this->getPersistentAdminNoticeCollection(); |
|
| 316 | + if (! empty($pan_name) && $this->notice_collection->has($pan_name)) { |
|
| 317 | + /** @var PersistentAdminNotice $persistent_admin_notice */ |
|
| 318 | + $persistent_admin_notice = $this->notice_collection->get($pan_name); |
|
| 319 | + $persistent_admin_notice->setDismissed(true); |
|
| 320 | + $persistent_admin_notice->setPurge($purge); |
|
| 321 | + $this->saveNotices(); |
|
| 322 | + } |
|
| 323 | + if ($return) { |
|
| 324 | + return; |
|
| 325 | + } |
|
| 326 | + if ($this->request->ajax) { |
|
| 327 | + // grab any notices and concatenate into string |
|
| 328 | + echo wp_json_encode( |
|
| 329 | + array( |
|
| 330 | + 'errors' => implode('<br />', EE_Error::get_notices(false)), |
|
| 331 | + ) |
|
| 332 | + ); |
|
| 333 | + exit(); |
|
| 334 | + } |
|
| 335 | + // save errors to a transient to be displayed on next request (after redirect) |
|
| 336 | + EE_Error::get_notices(false, true); |
|
| 337 | + wp_safe_redirect( |
|
| 338 | + urldecode( |
|
| 339 | + $this->request->get('return_url', '') |
|
| 340 | + ) |
|
| 341 | + ); |
|
| 342 | + } |
|
| 343 | + |
|
| 344 | + |
|
| 345 | + |
|
| 346 | + /** |
|
| 347 | + * saveNotices |
|
| 348 | + * |
|
| 349 | + * @throws DomainException |
|
| 350 | + * @throws InvalidDataTypeException |
|
| 351 | + * @throws InvalidInterfaceException |
|
| 352 | + * @throws InvalidEntityException |
|
| 353 | + */ |
|
| 354 | + public function saveNotices() |
|
| 355 | + { |
|
| 356 | + $this->notice_collection = $this->getPersistentAdminNoticeCollection(); |
|
| 357 | + if ($this->notice_collection->hasObjects()) { |
|
| 358 | + $persistent_admin_notices = get_option(PersistentAdminNoticeManager::WP_OPTION_KEY, array()); |
|
| 359 | + //maybe initialize persistent_admin_notices |
|
| 360 | + if (empty($persistent_admin_notices)) { |
|
| 361 | + add_option(PersistentAdminNoticeManager::WP_OPTION_KEY, array(), '', 'no'); |
|
| 362 | + } |
|
| 363 | + foreach ($this->notice_collection as $persistent_admin_notice) { |
|
| 364 | + // are we deleting this notice ? |
|
| 365 | + if ($persistent_admin_notice->getPurge()) { |
|
| 366 | + unset($persistent_admin_notices[$persistent_admin_notice->getName()]); |
|
| 367 | + } else { |
|
| 368 | + /** @var PersistentAdminNotice $persistent_admin_notice */ |
|
| 369 | + $persistent_admin_notices[$persistent_admin_notice->getName()] = array( |
|
| 370 | + 'message' => $persistent_admin_notice->getMessage(), |
|
| 371 | + 'capability' => $persistent_admin_notice->getCapability(), |
|
| 372 | + 'cap_context' => $persistent_admin_notice->getCapContext(), |
|
| 373 | + 'dismissed' => $persistent_admin_notice->getDismissed(), |
|
| 374 | + ); |
|
| 375 | + } |
|
| 376 | + } |
|
| 377 | + update_option(PersistentAdminNoticeManager::WP_OPTION_KEY, $persistent_admin_notices); |
|
| 378 | + } |
|
| 379 | + } |
|
| 380 | + |
|
| 381 | + |
|
| 382 | + |
|
| 383 | + /** |
|
| 384 | + * @throws DomainException |
|
| 385 | + * @throws InvalidDataTypeException |
|
| 386 | + * @throws InvalidEntityException |
|
| 387 | + * @throws InvalidInterfaceException |
|
| 388 | + */ |
|
| 389 | + public function registerAndSaveNotices() |
|
| 390 | + { |
|
| 391 | + $this->getPersistentAdminNoticeCollection(); |
|
| 392 | + $this->registerNotices(); |
|
| 393 | + $this->saveNotices(); |
|
| 394 | + add_filter( |
|
| 395 | + 'PersistentAdminNoticeManager__registerAndSaveNotices__complete', |
|
| 396 | + '__return_true' |
|
| 397 | + ); |
|
| 398 | + } |
|
| 399 | + |
|
| 400 | + |
|
| 401 | + /** |
|
| 402 | + * @throws DomainException |
|
| 403 | + * @throws InvalidDataTypeException |
|
| 404 | + * @throws InvalidEntityException |
|
| 405 | + * @throws InvalidInterfaceException |
|
| 406 | + * @throws InvalidArgumentException |
|
| 407 | + */ |
|
| 408 | + public static function loadRegisterAndSaveNotices() |
|
| 409 | + { |
|
| 410 | + /** @var PersistentAdminNoticeManager $persistent_admin_notice_manager */ |
|
| 411 | + $persistent_admin_notice_manager = LoaderFactory::getLoader()->getShared( |
|
| 412 | + 'EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 413 | + ); |
|
| 414 | + // if shutdown has already run, then call registerAndSaveNotices() manually |
|
| 415 | + if(did_action('shutdown')){ |
|
| 416 | + $persistent_admin_notice_manager->registerAndSaveNotices(); |
|
| 417 | + } |
|
| 418 | + } |
|
| 419 | 419 | |
| 420 | 420 | |
| 421 | 421 | } |
@@ -88,7 +88,7 @@ discard block |
||
| 88 | 88 | */ |
| 89 | 89 | public function setReturnUrl($return_url) |
| 90 | 90 | { |
| 91 | - if (! is_string($return_url)) { |
|
| 91 | + if ( ! is_string($return_url)) { |
|
| 92 | 92 | throw new InvalidDataTypeException('$return_url', $return_url, 'string'); |
| 93 | 93 | } |
| 94 | 94 | $this->return_url = $return_url; |
@@ -105,7 +105,7 @@ discard block |
||
| 105 | 105 | */ |
| 106 | 106 | protected function getPersistentAdminNoticeCollection() |
| 107 | 107 | { |
| 108 | - if (! $this->notice_collection instanceof Collection) { |
|
| 108 | + if ( ! $this->notice_collection instanceof Collection) { |
|
| 109 | 109 | $this->notice_collection = new Collection( |
| 110 | 110 | 'EventEspresso\core\domain\entities\notifications\PersistentAdminNotice' |
| 111 | 111 | ); |
@@ -129,7 +129,7 @@ discard block |
||
| 129 | 129 | { |
| 130 | 130 | $persistent_admin_notices = get_option(PersistentAdminNoticeManager::WP_OPTION_KEY, array()); |
| 131 | 131 | // \EEH_Debug_Tools::printr($persistent_admin_notices, '$persistent_admin_notices', __FILE__, __LINE__); |
| 132 | - if (! empty($persistent_admin_notices)) { |
|
| 132 | + if ( ! empty($persistent_admin_notices)) { |
|
| 133 | 133 | foreach ($persistent_admin_notices as $name => $details) { |
| 134 | 134 | if (is_array($details)) { |
| 135 | 135 | if ( |
@@ -168,7 +168,7 @@ discard block |
||
| 168 | 168 | $this->notice_collection->add( |
| 169 | 169 | new PersistentAdminNotice( |
| 170 | 170 | $name, |
| 171 | - (string)$details, |
|
| 171 | + (string) $details, |
|
| 172 | 172 | false, |
| 173 | 173 | '', |
| 174 | 174 | '', |
@@ -253,14 +253,14 @@ discard block |
||
| 253 | 253 | { |
| 254 | 254 | wp_register_script( |
| 255 | 255 | 'espresso_core', |
| 256 | - EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js', |
|
| 256 | + EE_GLOBAL_ASSETS_URL.'scripts/espresso_core.js', |
|
| 257 | 257 | array('jquery'), |
| 258 | 258 | EVENT_ESPRESSO_VERSION, |
| 259 | 259 | true |
| 260 | 260 | ); |
| 261 | 261 | wp_register_script( |
| 262 | 262 | 'ee_error_js', |
| 263 | - EE_GLOBAL_ASSETS_URL . 'scripts/EE_Error.js', |
|
| 263 | + EE_GLOBAL_ASSETS_URL.'scripts/EE_Error.js', |
|
| 264 | 264 | array('espresso_core'), |
| 265 | 265 | EVENT_ESPRESSO_VERSION, |
| 266 | 266 | true |
@@ -292,7 +292,7 @@ discard block |
||
| 292 | 292 | // used in template |
| 293 | 293 | $persistent_admin_notice_name = $persistent_admin_notice->getName(); |
| 294 | 294 | $persistent_admin_notice_message = $persistent_admin_notice->getMessage(); |
| 295 | - require EE_TEMPLATES . DS . 'notifications' . DS . 'persistent_admin_notice.template.php'; |
|
| 295 | + require EE_TEMPLATES.DS.'notifications'.DS.'persistent_admin_notice.template.php'; |
|
| 296 | 296 | } |
| 297 | 297 | |
| 298 | 298 | |
@@ -313,7 +313,7 @@ discard block |
||
| 313 | 313 | { |
| 314 | 314 | $pan_name = $this->request->get('ee_nag_notice', $pan_name); |
| 315 | 315 | $this->notice_collection = $this->getPersistentAdminNoticeCollection(); |
| 316 | - if (! empty($pan_name) && $this->notice_collection->has($pan_name)) { |
|
| 316 | + if ( ! empty($pan_name) && $this->notice_collection->has($pan_name)) { |
|
| 317 | 317 | /** @var PersistentAdminNotice $persistent_admin_notice */ |
| 318 | 318 | $persistent_admin_notice = $this->notice_collection->get($pan_name); |
| 319 | 319 | $persistent_admin_notice->setDismissed(true); |
@@ -412,7 +412,7 @@ discard block |
||
| 412 | 412 | 'EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
| 413 | 413 | ); |
| 414 | 414 | // if shutdown has already run, then call registerAndSaveNotices() manually |
| 415 | - if(did_action('shutdown')){ |
|
| 415 | + if (did_action('shutdown')) { |
|
| 416 | 416 | $persistent_admin_notice_manager->registerAndSaveNotices(); |
| 417 | 417 | } |
| 418 | 418 | } |
@@ -22,457 +22,457 @@ discard block |
||
| 22 | 22 | final class EE_Admin implements InterminableInterface |
| 23 | 23 | { |
| 24 | 24 | |
| 25 | - /** |
|
| 26 | - * @var EE_Admin $_instance |
|
| 27 | - */ |
|
| 28 | - private static $_instance; |
|
| 29 | - |
|
| 30 | - /** |
|
| 31 | - * @var PersistentAdminNoticeManager $persistent_admin_notice_manager |
|
| 32 | - */ |
|
| 33 | - private $persistent_admin_notice_manager; |
|
| 34 | - |
|
| 35 | - /** |
|
| 36 | - * @singleton method used to instantiate class object |
|
| 37 | - * @return EE_Admin |
|
| 38 | - * @throws EE_Error |
|
| 39 | - */ |
|
| 40 | - public static function instance() |
|
| 41 | - { |
|
| 42 | - // check if class object is instantiated |
|
| 43 | - if (! self::$_instance instanceof EE_Admin) { |
|
| 44 | - self::$_instance = new self(); |
|
| 45 | - } |
|
| 46 | - return self::$_instance; |
|
| 47 | - } |
|
| 48 | - |
|
| 49 | - |
|
| 50 | - /** |
|
| 51 | - * @return EE_Admin |
|
| 52 | - * @throws EE_Error |
|
| 53 | - */ |
|
| 54 | - public static function reset() |
|
| 55 | - { |
|
| 56 | - self::$_instance = null; |
|
| 57 | - return self::instance(); |
|
| 58 | - } |
|
| 59 | - |
|
| 60 | - |
|
| 61 | - /** |
|
| 62 | - * class constructor |
|
| 63 | - * |
|
| 64 | - * @throws EE_Error |
|
| 65 | - * @throws InvalidDataTypeException |
|
| 66 | - * @throws InvalidInterfaceException |
|
| 67 | - * @throws InvalidArgumentException |
|
| 68 | - */ |
|
| 69 | - protected function __construct() |
|
| 70 | - { |
|
| 71 | - // define global EE_Admin constants |
|
| 72 | - $this->_define_all_constants(); |
|
| 73 | - // set autoloaders for our admin page classes based on included path information |
|
| 74 | - EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_ADMIN); |
|
| 75 | - // admin hooks |
|
| 76 | - add_filter('plugin_action_links', array($this, 'filter_plugin_actions'), 10, 2); |
|
| 77 | - // load EE_Request_Handler early |
|
| 78 | - add_action('AHEE__EE_System__core_loaded_and_ready', array($this, 'get_request')); |
|
| 79 | - add_action('AHEE__EE_System__initialize_last', array($this, 'init')); |
|
| 80 | - add_action('AHEE__EE_Admin_Page__route_admin_request', array($this, 'route_admin_request'), 100, 2); |
|
| 81 | - add_action('wp_loaded', array($this, 'wp_loaded'), 100); |
|
| 82 | - add_action('admin_init', array($this, 'admin_init'), 100); |
|
| 83 | - add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'), 20); |
|
| 84 | - add_action('admin_notices', array($this, 'display_admin_notices'), 10); |
|
| 85 | - add_action('network_admin_notices', array($this, 'display_admin_notices'), 10); |
|
| 86 | - add_filter('pre_update_option', array($this, 'check_for_invalid_datetime_formats'), 100, 2); |
|
| 87 | - add_filter('admin_footer_text', array($this, 'espresso_admin_footer')); |
|
| 88 | - //reset Environment config (we only do this on admin page loads); |
|
| 89 | - EE_Registry::instance()->CFG->environment->recheck_values(); |
|
| 90 | - do_action('AHEE__EE_Admin__loaded'); |
|
| 91 | - } |
|
| 92 | - |
|
| 93 | - |
|
| 94 | - |
|
| 95 | - /** |
|
| 96 | - * _define_all_constants |
|
| 97 | - * define constants that are set globally for all admin pages |
|
| 98 | - * |
|
| 99 | - * @return void |
|
| 100 | - */ |
|
| 101 | - private function _define_all_constants() |
|
| 102 | - { |
|
| 103 | - if (! defined('EE_ADMIN_URL')) { |
|
| 104 | - define('EE_ADMIN_URL', EE_PLUGIN_DIR_URL . 'core/admin/'); |
|
| 105 | - define('EE_ADMIN_PAGES_URL', EE_PLUGIN_DIR_URL . 'admin_pages/'); |
|
| 106 | - define('EE_ADMIN_TEMPLATE', EE_ADMIN . 'templates' . DS); |
|
| 107 | - define('WP_ADMIN_PATH', ABSPATH . 'wp-admin/'); |
|
| 108 | - define('WP_AJAX_URL', admin_url('admin-ajax.php')); |
|
| 109 | - } |
|
| 110 | - } |
|
| 111 | - |
|
| 112 | - |
|
| 113 | - /** |
|
| 114 | - * filter_plugin_actions - adds links to the Plugins page listing |
|
| 115 | - * |
|
| 116 | - * @param array $links |
|
| 117 | - * @param string $plugin |
|
| 118 | - * @return array |
|
| 119 | - */ |
|
| 120 | - public function filter_plugin_actions($links, $plugin) |
|
| 121 | - { |
|
| 122 | - // set $main_file in stone |
|
| 123 | - static $main_file; |
|
| 124 | - // if $main_file is not set yet |
|
| 125 | - if (! $main_file) { |
|
| 126 | - $main_file = plugin_basename(EVENT_ESPRESSO_MAIN_FILE); |
|
| 127 | - } |
|
| 128 | - if ($plugin === $main_file) { |
|
| 129 | - // compare current plugin to this one |
|
| 130 | - if (EE_Maintenance_Mode::instance()->level() === EE_Maintenance_Mode::level_2_complete_maintenance) { |
|
| 131 | - $maintenance_link = '<a href="admin.php?page=espresso_maintenance_settings"' |
|
| 132 | - . ' title="Event Espresso is in maintenance mode. Click this link to learn why.">' |
|
| 133 | - . esc_html__('Maintenance Mode Active', 'event_espresso') |
|
| 134 | - . '</a>'; |
|
| 135 | - array_unshift($links, $maintenance_link); |
|
| 136 | - } else { |
|
| 137 | - $org_settings_link = '<a href="admin.php?page=espresso_general_settings">' |
|
| 138 | - . esc_html__('Settings', 'event_espresso') |
|
| 139 | - . '</a>'; |
|
| 140 | - $events_link = '<a href="admin.php?page=espresso_events">' |
|
| 141 | - . esc_html__('Events', 'event_espresso') |
|
| 142 | - . '</a>'; |
|
| 143 | - // add before other links |
|
| 144 | - array_unshift($links, $org_settings_link, $events_link); |
|
| 145 | - } |
|
| 146 | - } |
|
| 147 | - return $links; |
|
| 148 | - } |
|
| 149 | - |
|
| 150 | - |
|
| 151 | - /** |
|
| 152 | - * _get_request |
|
| 153 | - * |
|
| 154 | - * @return void |
|
| 155 | - * @throws EE_Error |
|
| 156 | - * @throws InvalidArgumentException |
|
| 157 | - * @throws InvalidDataTypeException |
|
| 158 | - * @throws InvalidInterfaceException |
|
| 159 | - * @throws ReflectionException |
|
| 160 | - */ |
|
| 161 | - public function get_request() |
|
| 162 | - { |
|
| 163 | - EE_Registry::instance()->load_core('Request_Handler'); |
|
| 164 | - EE_Registry::instance()->load_core('CPT_Strategy'); |
|
| 165 | - } |
|
| 166 | - |
|
| 167 | - |
|
| 168 | - |
|
| 169 | - /** |
|
| 170 | - * hide_admin_pages_except_maintenance_mode |
|
| 171 | - * |
|
| 172 | - * @param array $admin_page_folder_names |
|
| 173 | - * @return array |
|
| 174 | - */ |
|
| 175 | - public function hide_admin_pages_except_maintenance_mode($admin_page_folder_names = array()) |
|
| 176 | - { |
|
| 177 | - return array( |
|
| 178 | - 'maintenance' => EE_ADMIN_PAGES . 'maintenance' . DS, |
|
| 179 | - 'about' => EE_ADMIN_PAGES . 'about' . DS, |
|
| 180 | - 'support' => EE_ADMIN_PAGES . 'support' . DS, |
|
| 181 | - ); |
|
| 182 | - } |
|
| 183 | - |
|
| 184 | - |
|
| 185 | - |
|
| 186 | - /** |
|
| 187 | - * init- should fire after shortcode, module, addon, other plugin (default priority), and even |
|
| 188 | - * EE_Front_Controller's init phases have run |
|
| 189 | - * |
|
| 190 | - * @return void |
|
| 191 | - * @throws EE_Error |
|
| 192 | - * @throws InvalidArgumentException |
|
| 193 | - * @throws InvalidDataTypeException |
|
| 194 | - * @throws InvalidInterfaceException |
|
| 195 | - * @throws ReflectionException |
|
| 196 | - * @throws ServiceNotFoundException |
|
| 197 | - */ |
|
| 198 | - public function init() |
|
| 199 | - { |
|
| 200 | - //only enable most of the EE_Admin IF we're not in full maintenance mode |
|
| 201 | - if (EE_Maintenance_Mode::instance()->models_can_query()) { |
|
| 202 | - //ok so we want to enable the entire admin |
|
| 203 | - $this->persistent_admin_notice_manager = LoaderFactory::getLoader()->getShared( |
|
| 204 | - 'EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 205 | - ); |
|
| 206 | - $this->persistent_admin_notice_manager->setReturnUrl( |
|
| 207 | - EE_Admin_Page::add_query_args_and_nonce( |
|
| 208 | - array( |
|
| 209 | - 'page' => EE_Registry::instance()->REQ->get('page', ''), |
|
| 210 | - 'action' => EE_Registry::instance()->REQ->get('action', ''), |
|
| 211 | - ), |
|
| 212 | - EE_ADMIN_URL |
|
| 213 | - ) |
|
| 214 | - ); |
|
| 215 | - $this->maybeSetDatetimeWarningNotice(); |
|
| 216 | - //at a glance dashboard widget |
|
| 217 | - add_filter('dashboard_glance_items', array($this, 'dashboard_glance_items'), 10); |
|
| 218 | - //filter for get_edit_post_link used on comments for custom post types |
|
| 219 | - add_filter('get_edit_post_link', array($this, 'modify_edit_post_link'), 10, 2); |
|
| 220 | - } |
|
| 221 | - // run the admin page factory but ONLY if we are doing an ee admin ajax request |
|
| 222 | - if (! defined('DOING_AJAX') || EE_ADMIN_AJAX) { |
|
| 223 | - try { |
|
| 224 | - //this loads the controller for the admin pages which will setup routing etc |
|
| 225 | - EE_Registry::instance()->load_core('Admin_Page_Loader'); |
|
| 226 | - } catch (EE_Error $e) { |
|
| 227 | - $e->get_error(); |
|
| 228 | - } |
|
| 229 | - } |
|
| 230 | - add_filter('content_save_pre', array($this, 'its_eSpresso'), 10, 1); |
|
| 231 | - //make sure our CPTs and custom taxonomy metaboxes get shown for first time users |
|
| 232 | - add_action('admin_head', array($this, 'enable_hidden_ee_nav_menu_metaboxes'), 10); |
|
| 233 | - add_action('admin_head', array($this, 'register_custom_nav_menu_boxes'), 10); |
|
| 234 | - //exclude EE critical pages from all nav menus and wp_list_pages |
|
| 235 | - add_filter('nav_menu_meta_box_object', array($this, 'remove_pages_from_nav_menu'), 10); |
|
| 236 | - } |
|
| 237 | - |
|
| 238 | - |
|
| 239 | - /** |
|
| 240 | - * get_persistent_admin_notices |
|
| 241 | - * |
|
| 242 | - * @access public |
|
| 243 | - * @return void |
|
| 244 | - * @throws EE_Error |
|
| 245 | - * @throws InvalidArgumentException |
|
| 246 | - * @throws InvalidDataTypeException |
|
| 247 | - * @throws InvalidInterfaceException |
|
| 248 | - */ |
|
| 249 | - public function maybeSetDatetimeWarningNotice() |
|
| 250 | - { |
|
| 251 | - //add dismissable notice for datetime changes. Only valid if site does not have a timezone_string set. |
|
| 252 | - //@todo This needs to stay in core for a bit to catch anyone upgrading from a version without this to a version |
|
| 253 | - //with this. But after enough time (indeterminate at this point) we can just remove this notice. |
|
| 254 | - //this was added with https://events.codebasehq.com/projects/event-espresso/tickets/10626 |
|
| 255 | - if (apply_filters('FHEE__EE_Admin__maybeSetDatetimeWarningNotice', true) |
|
| 256 | - && ! get_option('timezone_string') |
|
| 257 | - && EEM_Event::instance()->count() > 0 |
|
| 258 | - ) { |
|
| 259 | - new PersistentAdminNotice( |
|
| 260 | - 'datetime_fix_notice', |
|
| 261 | - sprintf( |
|
| 262 | - esc_html__( |
|
| 263 | - '%1$sImportant announcement related to your install of Event Espresso%2$s: There are some changes made to your site that could affect how dates display for your events and other related items with dates and times. Read more about it %3$shere%4$s. If your dates and times are displaying incorrectly (incorrect offset), you can fix it using the tool on %5$sthis page%4$s.', |
|
| 264 | - 'event_espresso' |
|
| 265 | - ), |
|
| 266 | - '<strong>', |
|
| 267 | - '</strong>', |
|
| 268 | - '<a href="https://eventespresso.com/2017/08/important-upcoming-changes-dates-times">', |
|
| 269 | - '</a>', |
|
| 270 | - '<a href="' . EE_Admin_Page::add_query_args_and_nonce( |
|
| 271 | - array( |
|
| 272 | - 'page' => 'espresso_maintenance_settings', |
|
| 273 | - 'action' => 'datetime_tools' |
|
| 274 | - ), |
|
| 275 | - admin_url('admin.php') |
|
| 276 | - ) . '">' |
|
| 277 | - ), |
|
| 278 | - false, |
|
| 279 | - 'manage_options', |
|
| 280 | - 'datetime_fix_persistent_notice' |
|
| 281 | - ); |
|
| 282 | - } |
|
| 283 | - } |
|
| 284 | - |
|
| 285 | - |
|
| 286 | - |
|
| 287 | - /** |
|
| 288 | - * this simply hooks into the nav menu setup of pages metabox and makes sure that we remove EE critical pages from |
|
| 289 | - * the list of options. the wp function "wp_nav_menu_item_post_type_meta_box" found in |
|
| 290 | - * wp-admin/includes/nav-menu.php looks for the "_default_query" property on the post_type object and it uses that |
|
| 291 | - * to override any queries found in the existing query for the given post type. Note that _default_query is not a |
|
| 292 | - * normal property on the post_type object. It's found ONLY in this particular context. |
|
| 293 | - * |
|
| 294 | - * @param WP_Post $post_type WP post type object |
|
| 295 | - * @return WP_Post |
|
| 296 | - * @throws InvalidArgumentException |
|
| 297 | - * @throws InvalidDataTypeException |
|
| 298 | - * @throws InvalidInterfaceException |
|
| 299 | - */ |
|
| 300 | - public function remove_pages_from_nav_menu($post_type) |
|
| 301 | - { |
|
| 302 | - //if this isn't the "pages" post type let's get out |
|
| 303 | - if ($post_type->name !== 'page') { |
|
| 304 | - return $post_type; |
|
| 305 | - } |
|
| 306 | - $critical_pages = EE_Registry::instance()->CFG->core->get_critical_pages_array(); |
|
| 307 | - $post_type->_default_query = array( |
|
| 308 | - 'post__not_in' => $critical_pages, |
|
| 309 | - ); |
|
| 310 | - return $post_type; |
|
| 311 | - } |
|
| 312 | - |
|
| 313 | - |
|
| 314 | - |
|
| 315 | - /** |
|
| 316 | - * WP by default only shows three metaboxes in "nav-menus.php" for first times users. We want to make sure our |
|
| 317 | - * metaboxes get shown as well |
|
| 318 | - * |
|
| 319 | - * @return void |
|
| 320 | - */ |
|
| 321 | - public function enable_hidden_ee_nav_menu_metaboxes() |
|
| 322 | - { |
|
| 323 | - global $wp_meta_boxes, $pagenow; |
|
| 324 | - if (! is_array($wp_meta_boxes) || $pagenow !== 'nav-menus.php') { |
|
| 325 | - return; |
|
| 326 | - } |
|
| 327 | - $user = wp_get_current_user(); |
|
| 328 | - //has this been done yet? |
|
| 329 | - if (get_user_option('ee_nav_menu_initialized', $user->ID)) { |
|
| 330 | - return; |
|
| 331 | - } |
|
| 332 | - |
|
| 333 | - $hidden_meta_boxes = get_user_option('metaboxhidden_nav-menus', $user->ID); |
|
| 334 | - $initial_meta_boxes = apply_filters( |
|
| 335 | - 'FHEE__EE_Admin__enable_hidden_ee_nav_menu_boxes__initial_meta_boxes', |
|
| 336 | - array( |
|
| 337 | - 'nav-menu-theme-locations', |
|
| 338 | - 'add-page', |
|
| 339 | - 'add-custom-links', |
|
| 340 | - 'add-category', |
|
| 341 | - 'add-espresso_events', |
|
| 342 | - 'add-espresso_venues', |
|
| 343 | - 'add-espresso_event_categories', |
|
| 344 | - 'add-espresso_venue_categories', |
|
| 345 | - 'add-post-type-post', |
|
| 346 | - 'add-post-type-page', |
|
| 347 | - ) |
|
| 348 | - ); |
|
| 349 | - |
|
| 350 | - if (is_array($hidden_meta_boxes)) { |
|
| 351 | - foreach ($hidden_meta_boxes as $key => $meta_box_id) { |
|
| 352 | - if (in_array($meta_box_id, $initial_meta_boxes, true)) { |
|
| 353 | - unset($hidden_meta_boxes[$key]); |
|
| 354 | - } |
|
| 355 | - } |
|
| 356 | - } |
|
| 357 | - update_user_option($user->ID, 'metaboxhidden_nav-menus', $hidden_meta_boxes, true); |
|
| 358 | - update_user_option($user->ID, 'ee_nav_menu_initialized', 1, true); |
|
| 359 | - } |
|
| 360 | - |
|
| 361 | - |
|
| 362 | - |
|
| 363 | - /** |
|
| 364 | - * This method simply registers custom nav menu boxes for "nav_menus.php route" |
|
| 365 | - * Currently EE is using this to make sure there are menu options for our CPT archive page routes. |
|
| 366 | - * |
|
| 367 | - * @todo modify this so its more dynamic and automatic for all ee CPTs and setups and can also be hooked into by |
|
| 368 | - * addons etc. |
|
| 369 | - * @return void |
|
| 370 | - */ |
|
| 371 | - public function register_custom_nav_menu_boxes() |
|
| 372 | - { |
|
| 373 | - add_meta_box( |
|
| 374 | - 'add-extra-nav-menu-pages', |
|
| 375 | - esc_html__('Event Espresso Pages', 'event_espresso'), |
|
| 376 | - array($this, 'ee_cpt_archive_pages'), |
|
| 377 | - 'nav-menus', |
|
| 378 | - 'side', |
|
| 379 | - 'core' |
|
| 380 | - ); |
|
| 381 | - } |
|
| 382 | - |
|
| 383 | - |
|
| 384 | - |
|
| 385 | - /** |
|
| 386 | - * Use this to edit the post link for our cpts so that the edit link points to the correct page. |
|
| 387 | - * |
|
| 388 | - * @since 4.3.0 |
|
| 389 | - * @param string $link the original link generated by wp |
|
| 390 | - * @param int $id post id |
|
| 391 | - * @return string the (maybe) modified link |
|
| 392 | - */ |
|
| 393 | - public function modify_edit_post_link($link, $id) |
|
| 394 | - { |
|
| 395 | - if (! $post = get_post($id)) { |
|
| 396 | - return $link; |
|
| 397 | - } |
|
| 398 | - if ($post->post_type === 'espresso_attendees') { |
|
| 399 | - $query_args = array( |
|
| 400 | - 'action' => 'edit_attendee', |
|
| 401 | - 'post' => $id, |
|
| 402 | - ); |
|
| 403 | - return EEH_URL::add_query_args_and_nonce( |
|
| 404 | - $query_args, |
|
| 405 | - admin_url('admin.php?page=espresso_registrations') |
|
| 406 | - ); |
|
| 407 | - } |
|
| 408 | - return $link; |
|
| 409 | - } |
|
| 410 | - |
|
| 411 | - |
|
| 412 | - |
|
| 413 | - public function ee_cpt_archive_pages() |
|
| 414 | - { |
|
| 415 | - global $nav_menu_selected_id; |
|
| 416 | - $db_fields = false; |
|
| 417 | - $walker = new Walker_Nav_Menu_Checklist($db_fields); |
|
| 418 | - $current_tab = 'event-archives'; |
|
| 419 | - $removed_args = array( |
|
| 420 | - 'action', |
|
| 421 | - 'customlink-tab', |
|
| 422 | - 'edit-menu-item', |
|
| 423 | - 'menu-item', |
|
| 424 | - 'page-tab', |
|
| 425 | - '_wpnonce', |
|
| 426 | - ); |
|
| 427 | - ?> |
|
| 25 | + /** |
|
| 26 | + * @var EE_Admin $_instance |
|
| 27 | + */ |
|
| 28 | + private static $_instance; |
|
| 29 | + |
|
| 30 | + /** |
|
| 31 | + * @var PersistentAdminNoticeManager $persistent_admin_notice_manager |
|
| 32 | + */ |
|
| 33 | + private $persistent_admin_notice_manager; |
|
| 34 | + |
|
| 35 | + /** |
|
| 36 | + * @singleton method used to instantiate class object |
|
| 37 | + * @return EE_Admin |
|
| 38 | + * @throws EE_Error |
|
| 39 | + */ |
|
| 40 | + public static function instance() |
|
| 41 | + { |
|
| 42 | + // check if class object is instantiated |
|
| 43 | + if (! self::$_instance instanceof EE_Admin) { |
|
| 44 | + self::$_instance = new self(); |
|
| 45 | + } |
|
| 46 | + return self::$_instance; |
|
| 47 | + } |
|
| 48 | + |
|
| 49 | + |
|
| 50 | + /** |
|
| 51 | + * @return EE_Admin |
|
| 52 | + * @throws EE_Error |
|
| 53 | + */ |
|
| 54 | + public static function reset() |
|
| 55 | + { |
|
| 56 | + self::$_instance = null; |
|
| 57 | + return self::instance(); |
|
| 58 | + } |
|
| 59 | + |
|
| 60 | + |
|
| 61 | + /** |
|
| 62 | + * class constructor |
|
| 63 | + * |
|
| 64 | + * @throws EE_Error |
|
| 65 | + * @throws InvalidDataTypeException |
|
| 66 | + * @throws InvalidInterfaceException |
|
| 67 | + * @throws InvalidArgumentException |
|
| 68 | + */ |
|
| 69 | + protected function __construct() |
|
| 70 | + { |
|
| 71 | + // define global EE_Admin constants |
|
| 72 | + $this->_define_all_constants(); |
|
| 73 | + // set autoloaders for our admin page classes based on included path information |
|
| 74 | + EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_ADMIN); |
|
| 75 | + // admin hooks |
|
| 76 | + add_filter('plugin_action_links', array($this, 'filter_plugin_actions'), 10, 2); |
|
| 77 | + // load EE_Request_Handler early |
|
| 78 | + add_action('AHEE__EE_System__core_loaded_and_ready', array($this, 'get_request')); |
|
| 79 | + add_action('AHEE__EE_System__initialize_last', array($this, 'init')); |
|
| 80 | + add_action('AHEE__EE_Admin_Page__route_admin_request', array($this, 'route_admin_request'), 100, 2); |
|
| 81 | + add_action('wp_loaded', array($this, 'wp_loaded'), 100); |
|
| 82 | + add_action('admin_init', array($this, 'admin_init'), 100); |
|
| 83 | + add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'), 20); |
|
| 84 | + add_action('admin_notices', array($this, 'display_admin_notices'), 10); |
|
| 85 | + add_action('network_admin_notices', array($this, 'display_admin_notices'), 10); |
|
| 86 | + add_filter('pre_update_option', array($this, 'check_for_invalid_datetime_formats'), 100, 2); |
|
| 87 | + add_filter('admin_footer_text', array($this, 'espresso_admin_footer')); |
|
| 88 | + //reset Environment config (we only do this on admin page loads); |
|
| 89 | + EE_Registry::instance()->CFG->environment->recheck_values(); |
|
| 90 | + do_action('AHEE__EE_Admin__loaded'); |
|
| 91 | + } |
|
| 92 | + |
|
| 93 | + |
|
| 94 | + |
|
| 95 | + /** |
|
| 96 | + * _define_all_constants |
|
| 97 | + * define constants that are set globally for all admin pages |
|
| 98 | + * |
|
| 99 | + * @return void |
|
| 100 | + */ |
|
| 101 | + private function _define_all_constants() |
|
| 102 | + { |
|
| 103 | + if (! defined('EE_ADMIN_URL')) { |
|
| 104 | + define('EE_ADMIN_URL', EE_PLUGIN_DIR_URL . 'core/admin/'); |
|
| 105 | + define('EE_ADMIN_PAGES_URL', EE_PLUGIN_DIR_URL . 'admin_pages/'); |
|
| 106 | + define('EE_ADMIN_TEMPLATE', EE_ADMIN . 'templates' . DS); |
|
| 107 | + define('WP_ADMIN_PATH', ABSPATH . 'wp-admin/'); |
|
| 108 | + define('WP_AJAX_URL', admin_url('admin-ajax.php')); |
|
| 109 | + } |
|
| 110 | + } |
|
| 111 | + |
|
| 112 | + |
|
| 113 | + /** |
|
| 114 | + * filter_plugin_actions - adds links to the Plugins page listing |
|
| 115 | + * |
|
| 116 | + * @param array $links |
|
| 117 | + * @param string $plugin |
|
| 118 | + * @return array |
|
| 119 | + */ |
|
| 120 | + public function filter_plugin_actions($links, $plugin) |
|
| 121 | + { |
|
| 122 | + // set $main_file in stone |
|
| 123 | + static $main_file; |
|
| 124 | + // if $main_file is not set yet |
|
| 125 | + if (! $main_file) { |
|
| 126 | + $main_file = plugin_basename(EVENT_ESPRESSO_MAIN_FILE); |
|
| 127 | + } |
|
| 128 | + if ($plugin === $main_file) { |
|
| 129 | + // compare current plugin to this one |
|
| 130 | + if (EE_Maintenance_Mode::instance()->level() === EE_Maintenance_Mode::level_2_complete_maintenance) { |
|
| 131 | + $maintenance_link = '<a href="admin.php?page=espresso_maintenance_settings"' |
|
| 132 | + . ' title="Event Espresso is in maintenance mode. Click this link to learn why.">' |
|
| 133 | + . esc_html__('Maintenance Mode Active', 'event_espresso') |
|
| 134 | + . '</a>'; |
|
| 135 | + array_unshift($links, $maintenance_link); |
|
| 136 | + } else { |
|
| 137 | + $org_settings_link = '<a href="admin.php?page=espresso_general_settings">' |
|
| 138 | + . esc_html__('Settings', 'event_espresso') |
|
| 139 | + . '</a>'; |
|
| 140 | + $events_link = '<a href="admin.php?page=espresso_events">' |
|
| 141 | + . esc_html__('Events', 'event_espresso') |
|
| 142 | + . '</a>'; |
|
| 143 | + // add before other links |
|
| 144 | + array_unshift($links, $org_settings_link, $events_link); |
|
| 145 | + } |
|
| 146 | + } |
|
| 147 | + return $links; |
|
| 148 | + } |
|
| 149 | + |
|
| 150 | + |
|
| 151 | + /** |
|
| 152 | + * _get_request |
|
| 153 | + * |
|
| 154 | + * @return void |
|
| 155 | + * @throws EE_Error |
|
| 156 | + * @throws InvalidArgumentException |
|
| 157 | + * @throws InvalidDataTypeException |
|
| 158 | + * @throws InvalidInterfaceException |
|
| 159 | + * @throws ReflectionException |
|
| 160 | + */ |
|
| 161 | + public function get_request() |
|
| 162 | + { |
|
| 163 | + EE_Registry::instance()->load_core('Request_Handler'); |
|
| 164 | + EE_Registry::instance()->load_core('CPT_Strategy'); |
|
| 165 | + } |
|
| 166 | + |
|
| 167 | + |
|
| 168 | + |
|
| 169 | + /** |
|
| 170 | + * hide_admin_pages_except_maintenance_mode |
|
| 171 | + * |
|
| 172 | + * @param array $admin_page_folder_names |
|
| 173 | + * @return array |
|
| 174 | + */ |
|
| 175 | + public function hide_admin_pages_except_maintenance_mode($admin_page_folder_names = array()) |
|
| 176 | + { |
|
| 177 | + return array( |
|
| 178 | + 'maintenance' => EE_ADMIN_PAGES . 'maintenance' . DS, |
|
| 179 | + 'about' => EE_ADMIN_PAGES . 'about' . DS, |
|
| 180 | + 'support' => EE_ADMIN_PAGES . 'support' . DS, |
|
| 181 | + ); |
|
| 182 | + } |
|
| 183 | + |
|
| 184 | + |
|
| 185 | + |
|
| 186 | + /** |
|
| 187 | + * init- should fire after shortcode, module, addon, other plugin (default priority), and even |
|
| 188 | + * EE_Front_Controller's init phases have run |
|
| 189 | + * |
|
| 190 | + * @return void |
|
| 191 | + * @throws EE_Error |
|
| 192 | + * @throws InvalidArgumentException |
|
| 193 | + * @throws InvalidDataTypeException |
|
| 194 | + * @throws InvalidInterfaceException |
|
| 195 | + * @throws ReflectionException |
|
| 196 | + * @throws ServiceNotFoundException |
|
| 197 | + */ |
|
| 198 | + public function init() |
|
| 199 | + { |
|
| 200 | + //only enable most of the EE_Admin IF we're not in full maintenance mode |
|
| 201 | + if (EE_Maintenance_Mode::instance()->models_can_query()) { |
|
| 202 | + //ok so we want to enable the entire admin |
|
| 203 | + $this->persistent_admin_notice_manager = LoaderFactory::getLoader()->getShared( |
|
| 204 | + 'EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 205 | + ); |
|
| 206 | + $this->persistent_admin_notice_manager->setReturnUrl( |
|
| 207 | + EE_Admin_Page::add_query_args_and_nonce( |
|
| 208 | + array( |
|
| 209 | + 'page' => EE_Registry::instance()->REQ->get('page', ''), |
|
| 210 | + 'action' => EE_Registry::instance()->REQ->get('action', ''), |
|
| 211 | + ), |
|
| 212 | + EE_ADMIN_URL |
|
| 213 | + ) |
|
| 214 | + ); |
|
| 215 | + $this->maybeSetDatetimeWarningNotice(); |
|
| 216 | + //at a glance dashboard widget |
|
| 217 | + add_filter('dashboard_glance_items', array($this, 'dashboard_glance_items'), 10); |
|
| 218 | + //filter for get_edit_post_link used on comments for custom post types |
|
| 219 | + add_filter('get_edit_post_link', array($this, 'modify_edit_post_link'), 10, 2); |
|
| 220 | + } |
|
| 221 | + // run the admin page factory but ONLY if we are doing an ee admin ajax request |
|
| 222 | + if (! defined('DOING_AJAX') || EE_ADMIN_AJAX) { |
|
| 223 | + try { |
|
| 224 | + //this loads the controller for the admin pages which will setup routing etc |
|
| 225 | + EE_Registry::instance()->load_core('Admin_Page_Loader'); |
|
| 226 | + } catch (EE_Error $e) { |
|
| 227 | + $e->get_error(); |
|
| 228 | + } |
|
| 229 | + } |
|
| 230 | + add_filter('content_save_pre', array($this, 'its_eSpresso'), 10, 1); |
|
| 231 | + //make sure our CPTs and custom taxonomy metaboxes get shown for first time users |
|
| 232 | + add_action('admin_head', array($this, 'enable_hidden_ee_nav_menu_metaboxes'), 10); |
|
| 233 | + add_action('admin_head', array($this, 'register_custom_nav_menu_boxes'), 10); |
|
| 234 | + //exclude EE critical pages from all nav menus and wp_list_pages |
|
| 235 | + add_filter('nav_menu_meta_box_object', array($this, 'remove_pages_from_nav_menu'), 10); |
|
| 236 | + } |
|
| 237 | + |
|
| 238 | + |
|
| 239 | + /** |
|
| 240 | + * get_persistent_admin_notices |
|
| 241 | + * |
|
| 242 | + * @access public |
|
| 243 | + * @return void |
|
| 244 | + * @throws EE_Error |
|
| 245 | + * @throws InvalidArgumentException |
|
| 246 | + * @throws InvalidDataTypeException |
|
| 247 | + * @throws InvalidInterfaceException |
|
| 248 | + */ |
|
| 249 | + public function maybeSetDatetimeWarningNotice() |
|
| 250 | + { |
|
| 251 | + //add dismissable notice for datetime changes. Only valid if site does not have a timezone_string set. |
|
| 252 | + //@todo This needs to stay in core for a bit to catch anyone upgrading from a version without this to a version |
|
| 253 | + //with this. But after enough time (indeterminate at this point) we can just remove this notice. |
|
| 254 | + //this was added with https://events.codebasehq.com/projects/event-espresso/tickets/10626 |
|
| 255 | + if (apply_filters('FHEE__EE_Admin__maybeSetDatetimeWarningNotice', true) |
|
| 256 | + && ! get_option('timezone_string') |
|
| 257 | + && EEM_Event::instance()->count() > 0 |
|
| 258 | + ) { |
|
| 259 | + new PersistentAdminNotice( |
|
| 260 | + 'datetime_fix_notice', |
|
| 261 | + sprintf( |
|
| 262 | + esc_html__( |
|
| 263 | + '%1$sImportant announcement related to your install of Event Espresso%2$s: There are some changes made to your site that could affect how dates display for your events and other related items with dates and times. Read more about it %3$shere%4$s. If your dates and times are displaying incorrectly (incorrect offset), you can fix it using the tool on %5$sthis page%4$s.', |
|
| 264 | + 'event_espresso' |
|
| 265 | + ), |
|
| 266 | + '<strong>', |
|
| 267 | + '</strong>', |
|
| 268 | + '<a href="https://eventespresso.com/2017/08/important-upcoming-changes-dates-times">', |
|
| 269 | + '</a>', |
|
| 270 | + '<a href="' . EE_Admin_Page::add_query_args_and_nonce( |
|
| 271 | + array( |
|
| 272 | + 'page' => 'espresso_maintenance_settings', |
|
| 273 | + 'action' => 'datetime_tools' |
|
| 274 | + ), |
|
| 275 | + admin_url('admin.php') |
|
| 276 | + ) . '">' |
|
| 277 | + ), |
|
| 278 | + false, |
|
| 279 | + 'manage_options', |
|
| 280 | + 'datetime_fix_persistent_notice' |
|
| 281 | + ); |
|
| 282 | + } |
|
| 283 | + } |
|
| 284 | + |
|
| 285 | + |
|
| 286 | + |
|
| 287 | + /** |
|
| 288 | + * this simply hooks into the nav menu setup of pages metabox and makes sure that we remove EE critical pages from |
|
| 289 | + * the list of options. the wp function "wp_nav_menu_item_post_type_meta_box" found in |
|
| 290 | + * wp-admin/includes/nav-menu.php looks for the "_default_query" property on the post_type object and it uses that |
|
| 291 | + * to override any queries found in the existing query for the given post type. Note that _default_query is not a |
|
| 292 | + * normal property on the post_type object. It's found ONLY in this particular context. |
|
| 293 | + * |
|
| 294 | + * @param WP_Post $post_type WP post type object |
|
| 295 | + * @return WP_Post |
|
| 296 | + * @throws InvalidArgumentException |
|
| 297 | + * @throws InvalidDataTypeException |
|
| 298 | + * @throws InvalidInterfaceException |
|
| 299 | + */ |
|
| 300 | + public function remove_pages_from_nav_menu($post_type) |
|
| 301 | + { |
|
| 302 | + //if this isn't the "pages" post type let's get out |
|
| 303 | + if ($post_type->name !== 'page') { |
|
| 304 | + return $post_type; |
|
| 305 | + } |
|
| 306 | + $critical_pages = EE_Registry::instance()->CFG->core->get_critical_pages_array(); |
|
| 307 | + $post_type->_default_query = array( |
|
| 308 | + 'post__not_in' => $critical_pages, |
|
| 309 | + ); |
|
| 310 | + return $post_type; |
|
| 311 | + } |
|
| 312 | + |
|
| 313 | + |
|
| 314 | + |
|
| 315 | + /** |
|
| 316 | + * WP by default only shows three metaboxes in "nav-menus.php" for first times users. We want to make sure our |
|
| 317 | + * metaboxes get shown as well |
|
| 318 | + * |
|
| 319 | + * @return void |
|
| 320 | + */ |
|
| 321 | + public function enable_hidden_ee_nav_menu_metaboxes() |
|
| 322 | + { |
|
| 323 | + global $wp_meta_boxes, $pagenow; |
|
| 324 | + if (! is_array($wp_meta_boxes) || $pagenow !== 'nav-menus.php') { |
|
| 325 | + return; |
|
| 326 | + } |
|
| 327 | + $user = wp_get_current_user(); |
|
| 328 | + //has this been done yet? |
|
| 329 | + if (get_user_option('ee_nav_menu_initialized', $user->ID)) { |
|
| 330 | + return; |
|
| 331 | + } |
|
| 332 | + |
|
| 333 | + $hidden_meta_boxes = get_user_option('metaboxhidden_nav-menus', $user->ID); |
|
| 334 | + $initial_meta_boxes = apply_filters( |
|
| 335 | + 'FHEE__EE_Admin__enable_hidden_ee_nav_menu_boxes__initial_meta_boxes', |
|
| 336 | + array( |
|
| 337 | + 'nav-menu-theme-locations', |
|
| 338 | + 'add-page', |
|
| 339 | + 'add-custom-links', |
|
| 340 | + 'add-category', |
|
| 341 | + 'add-espresso_events', |
|
| 342 | + 'add-espresso_venues', |
|
| 343 | + 'add-espresso_event_categories', |
|
| 344 | + 'add-espresso_venue_categories', |
|
| 345 | + 'add-post-type-post', |
|
| 346 | + 'add-post-type-page', |
|
| 347 | + ) |
|
| 348 | + ); |
|
| 349 | + |
|
| 350 | + if (is_array($hidden_meta_boxes)) { |
|
| 351 | + foreach ($hidden_meta_boxes as $key => $meta_box_id) { |
|
| 352 | + if (in_array($meta_box_id, $initial_meta_boxes, true)) { |
|
| 353 | + unset($hidden_meta_boxes[$key]); |
|
| 354 | + } |
|
| 355 | + } |
|
| 356 | + } |
|
| 357 | + update_user_option($user->ID, 'metaboxhidden_nav-menus', $hidden_meta_boxes, true); |
|
| 358 | + update_user_option($user->ID, 'ee_nav_menu_initialized', 1, true); |
|
| 359 | + } |
|
| 360 | + |
|
| 361 | + |
|
| 362 | + |
|
| 363 | + /** |
|
| 364 | + * This method simply registers custom nav menu boxes for "nav_menus.php route" |
|
| 365 | + * Currently EE is using this to make sure there are menu options for our CPT archive page routes. |
|
| 366 | + * |
|
| 367 | + * @todo modify this so its more dynamic and automatic for all ee CPTs and setups and can also be hooked into by |
|
| 368 | + * addons etc. |
|
| 369 | + * @return void |
|
| 370 | + */ |
|
| 371 | + public function register_custom_nav_menu_boxes() |
|
| 372 | + { |
|
| 373 | + add_meta_box( |
|
| 374 | + 'add-extra-nav-menu-pages', |
|
| 375 | + esc_html__('Event Espresso Pages', 'event_espresso'), |
|
| 376 | + array($this, 'ee_cpt_archive_pages'), |
|
| 377 | + 'nav-menus', |
|
| 378 | + 'side', |
|
| 379 | + 'core' |
|
| 380 | + ); |
|
| 381 | + } |
|
| 382 | + |
|
| 383 | + |
|
| 384 | + |
|
| 385 | + /** |
|
| 386 | + * Use this to edit the post link for our cpts so that the edit link points to the correct page. |
|
| 387 | + * |
|
| 388 | + * @since 4.3.0 |
|
| 389 | + * @param string $link the original link generated by wp |
|
| 390 | + * @param int $id post id |
|
| 391 | + * @return string the (maybe) modified link |
|
| 392 | + */ |
|
| 393 | + public function modify_edit_post_link($link, $id) |
|
| 394 | + { |
|
| 395 | + if (! $post = get_post($id)) { |
|
| 396 | + return $link; |
|
| 397 | + } |
|
| 398 | + if ($post->post_type === 'espresso_attendees') { |
|
| 399 | + $query_args = array( |
|
| 400 | + 'action' => 'edit_attendee', |
|
| 401 | + 'post' => $id, |
|
| 402 | + ); |
|
| 403 | + return EEH_URL::add_query_args_and_nonce( |
|
| 404 | + $query_args, |
|
| 405 | + admin_url('admin.php?page=espresso_registrations') |
|
| 406 | + ); |
|
| 407 | + } |
|
| 408 | + return $link; |
|
| 409 | + } |
|
| 410 | + |
|
| 411 | + |
|
| 412 | + |
|
| 413 | + public function ee_cpt_archive_pages() |
|
| 414 | + { |
|
| 415 | + global $nav_menu_selected_id; |
|
| 416 | + $db_fields = false; |
|
| 417 | + $walker = new Walker_Nav_Menu_Checklist($db_fields); |
|
| 418 | + $current_tab = 'event-archives'; |
|
| 419 | + $removed_args = array( |
|
| 420 | + 'action', |
|
| 421 | + 'customlink-tab', |
|
| 422 | + 'edit-menu-item', |
|
| 423 | + 'menu-item', |
|
| 424 | + 'page-tab', |
|
| 425 | + '_wpnonce', |
|
| 426 | + ); |
|
| 427 | + ?> |
|
| 428 | 428 | <div id="posttype-extra-nav-menu-pages" class="posttypediv"> |
| 429 | 429 | <ul id="posttype-extra-nav-menu-pages-tabs" class="posttype-tabs add-menu-item-tabs"> |
| 430 | 430 | <li <?php echo('event-archives' === $current_tab ? ' class="tabs"' : ''); ?>> |
| 431 | 431 | <a class="nav-tab-link" data-type="tabs-panel-posttype-extra-nav-menu-pages-event-archives" |
| 432 | 432 | href="<?php if ($nav_menu_selected_id) { |
| 433 | - echo esc_url( |
|
| 434 | - add_query_arg( |
|
| 435 | - 'extra-nav-menu-pages-tab', |
|
| 436 | - 'event-archives', |
|
| 437 | - remove_query_arg($removed_args) |
|
| 438 | - ) |
|
| 439 | - ); |
|
| 440 | - } ?>#tabs-panel-posttype-extra-nav-menu-pages-event-archives"> |
|
| 433 | + echo esc_url( |
|
| 434 | + add_query_arg( |
|
| 435 | + 'extra-nav-menu-pages-tab', |
|
| 436 | + 'event-archives', |
|
| 437 | + remove_query_arg($removed_args) |
|
| 438 | + ) |
|
| 439 | + ); |
|
| 440 | + } ?>#tabs-panel-posttype-extra-nav-menu-pages-event-archives"> |
|
| 441 | 441 | <?php _e('Event Archive Pages', 'event_espresso'); ?> |
| 442 | 442 | </a> |
| 443 | 443 | </li> |
| 444 | 444 | </ul><!-- .posttype-tabs --> |
| 445 | 445 | |
| 446 | 446 | <div id="tabs-panel-posttype-extra-nav-menu-pages-event-archives" class="tabs-panel <?php |
| 447 | - echo('event-archives' === $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive'); |
|
| 448 | - ?>"> |
|
| 447 | + echo('event-archives' === $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive'); |
|
| 448 | + ?>"> |
|
| 449 | 449 | <ul id="extra-nav-menu-pageschecklist-event-archives" class="categorychecklist form-no-clear"> |
| 450 | 450 | <?php |
| 451 | - $pages = $this->_get_extra_nav_menu_pages_items(); |
|
| 452 | - $args['walker'] = $walker; |
|
| 453 | - echo walk_nav_menu_tree( |
|
| 454 | - array_map( |
|
| 455 | - array($this, '_setup_extra_nav_menu_pages_items'), |
|
| 456 | - $pages |
|
| 457 | - ), |
|
| 458 | - 0, |
|
| 459 | - (object) $args |
|
| 460 | - ); |
|
| 461 | - ?> |
|
| 451 | + $pages = $this->_get_extra_nav_menu_pages_items(); |
|
| 452 | + $args['walker'] = $walker; |
|
| 453 | + echo walk_nav_menu_tree( |
|
| 454 | + array_map( |
|
| 455 | + array($this, '_setup_extra_nav_menu_pages_items'), |
|
| 456 | + $pages |
|
| 457 | + ), |
|
| 458 | + 0, |
|
| 459 | + (object) $args |
|
| 460 | + ); |
|
| 461 | + ?> |
|
| 462 | 462 | </ul> |
| 463 | 463 | </div><!-- /.tabs-panel --> |
| 464 | 464 | |
| 465 | 465 | <p class="button-controls"> |
| 466 | 466 | <span class="list-controls"> |
| 467 | 467 | <a href="<?php |
| 468 | - echo esc_url(add_query_arg( |
|
| 469 | - array( |
|
| 470 | - 'extra-nav-menu-pages-tab' => 'event-archives', |
|
| 471 | - 'selectall' => 1, |
|
| 472 | - ), |
|
| 473 | - remove_query_arg($removed_args) |
|
| 474 | - )); |
|
| 475 | - ?>#posttype-extra-nav-menu-pages>" class="select-all"><?php _e('Select All'); ?></a> |
|
| 468 | + echo esc_url(add_query_arg( |
|
| 469 | + array( |
|
| 470 | + 'extra-nav-menu-pages-tab' => 'event-archives', |
|
| 471 | + 'selectall' => 1, |
|
| 472 | + ), |
|
| 473 | + remove_query_arg($removed_args) |
|
| 474 | + )); |
|
| 475 | + ?>#posttype-extra-nav-menu-pages>" class="select-all"><?php _e('Select All'); ?></a> |
|
| 476 | 476 | </span> |
| 477 | 477 | <span class="add-to-menu"> |
| 478 | 478 | <input type="submit"<?php wp_nav_menu_disabled_check($nav_menu_selected_id); ?> |
@@ -485,471 +485,471 @@ discard block |
||
| 485 | 485 | |
| 486 | 486 | </div><!-- /.posttypediv --> |
| 487 | 487 | <?php |
| 488 | - } |
|
| 489 | - |
|
| 490 | - |
|
| 491 | - /** |
|
| 492 | - * Returns an array of event archive nav items. |
|
| 493 | - * |
|
| 494 | - * @todo for now this method is just in place so when it gets abstracted further we can substitute in whatever |
|
| 495 | - * method we use for getting the extra nav menu items |
|
| 496 | - * @return array |
|
| 497 | - */ |
|
| 498 | - private function _get_extra_nav_menu_pages_items() |
|
| 499 | - { |
|
| 500 | - $menuitems[] = array( |
|
| 501 | - 'title' => esc_html__('Event List', 'event_espresso'), |
|
| 502 | - 'url' => get_post_type_archive_link('espresso_events'), |
|
| 503 | - 'description' => esc_html__('Archive page for all events.', 'event_espresso'), |
|
| 504 | - ); |
|
| 505 | - return apply_filters('FHEE__EE_Admin__get_extra_nav_menu_pages_items', $menuitems); |
|
| 506 | - } |
|
| 507 | - |
|
| 508 | - |
|
| 509 | - /** |
|
| 510 | - * Setup nav menu walker item for usage in the event archive nav menu metabox. It receives a menu_item array with |
|
| 511 | - * the properties and converts it to the menu item object. |
|
| 512 | - * |
|
| 513 | - * @see wp_setup_nav_menu_item() in wp-includes/nav-menu.php |
|
| 514 | - * @param $menu_item_values |
|
| 515 | - * @return stdClass |
|
| 516 | - */ |
|
| 517 | - private function _setup_extra_nav_menu_pages_items($menu_item_values) |
|
| 518 | - { |
|
| 519 | - $menu_item = new stdClass(); |
|
| 520 | - $keys = array( |
|
| 521 | - 'ID' => 0, |
|
| 522 | - 'db_id' => 0, |
|
| 523 | - 'menu_item_parent' => 0, |
|
| 524 | - 'object_id' => -1, |
|
| 525 | - 'post_parent' => 0, |
|
| 526 | - 'type' => 'custom', |
|
| 527 | - 'object' => '', |
|
| 528 | - 'type_label' => esc_html__('Extra Nav Menu Item', 'event_espresso'), |
|
| 529 | - 'title' => '', |
|
| 530 | - 'url' => '', |
|
| 531 | - 'target' => '', |
|
| 532 | - 'attr_title' => '', |
|
| 533 | - 'description' => '', |
|
| 534 | - 'classes' => array(), |
|
| 535 | - 'xfn' => '', |
|
| 536 | - ); |
|
| 537 | - |
|
| 538 | - foreach ($keys as $key => $value) { |
|
| 539 | - $menu_item->{$key} = isset($menu_item_values[$key]) ? $menu_item_values[$key] : $value; |
|
| 540 | - } |
|
| 541 | - return $menu_item; |
|
| 542 | - } |
|
| 543 | - |
|
| 544 | - |
|
| 545 | - /** |
|
| 546 | - * This is the action hook for the AHEE__EE_Admin_Page__route_admin_request hook that fires off right before an |
|
| 547 | - * EE_Admin_Page route is called. |
|
| 548 | - * |
|
| 549 | - * @return void |
|
| 550 | - */ |
|
| 551 | - public function route_admin_request() |
|
| 552 | - { |
|
| 553 | - } |
|
| 554 | - |
|
| 555 | - |
|
| 556 | - /** |
|
| 557 | - * wp_loaded should fire on the WordPress wp_loaded hook. This fires on a VERY late priority. |
|
| 558 | - * |
|
| 559 | - * @return void |
|
| 560 | - */ |
|
| 561 | - public function wp_loaded() |
|
| 562 | - { |
|
| 563 | - } |
|
| 564 | - |
|
| 565 | - |
|
| 566 | - /** |
|
| 567 | - * admin_init |
|
| 568 | - * |
|
| 569 | - * @return void |
|
| 570 | - * @throws EE_Error |
|
| 571 | - * @throws InvalidArgumentException |
|
| 572 | - * @throws InvalidDataTypeException |
|
| 573 | - * @throws InvalidInterfaceException |
|
| 574 | - * @throws ReflectionException |
|
| 575 | - */ |
|
| 576 | - public function admin_init() |
|
| 577 | - { |
|
| 578 | - |
|
| 579 | - /** |
|
| 580 | - * our cpt models must be instantiated on WordPress post processing routes (wp-admin/post.php), |
|
| 581 | - * so any hooking into core WP routes is taken care of. So in this next few lines of code: |
|
| 582 | - * - check if doing post processing. |
|
| 583 | - * - check if doing post processing of one of EE CPTs |
|
| 584 | - * - instantiate the corresponding EE CPT model for the post_type being processed. |
|
| 585 | - */ |
|
| 586 | - if (isset($_POST['action'], $_POST['post_type']) && $_POST['action'] === 'editpost') { |
|
| 587 | - EE_Registry::instance()->load_core('Register_CPTs'); |
|
| 588 | - EE_Register_CPTs::instantiate_cpt_models($_POST['post_type']); |
|
| 589 | - } |
|
| 590 | - |
|
| 591 | - |
|
| 592 | - /** |
|
| 593 | - * This code excludes EE critical pages anywhere `wp_dropdown_pages` is used to create a dropdown for selecting |
|
| 594 | - * critical pages. The only place critical pages need included in a generated dropdown is on the "Critical |
|
| 595 | - * Pages" tab in the EE General Settings Admin page. |
|
| 596 | - * This is for user-proofing. |
|
| 597 | - */ |
|
| 598 | - add_filter('wp_dropdown_pages', array($this, 'modify_dropdown_pages')); |
|
| 599 | - } |
|
| 600 | - |
|
| 601 | - |
|
| 602 | - /** |
|
| 603 | - * Callback for wp_dropdown_pages hook to remove ee critical pages from the dropdown selection. |
|
| 604 | - * |
|
| 605 | - * @param string $output Current output. |
|
| 606 | - * @return string |
|
| 607 | - * @throws InvalidArgumentException |
|
| 608 | - * @throws InvalidDataTypeException |
|
| 609 | - * @throws InvalidInterfaceException |
|
| 610 | - */ |
|
| 611 | - public function modify_dropdown_pages($output) |
|
| 612 | - { |
|
| 613 | - //get critical pages |
|
| 614 | - $critical_pages = EE_Registry::instance()->CFG->core->get_critical_pages_array(); |
|
| 615 | - |
|
| 616 | - //split current output by line break for easier parsing. |
|
| 617 | - $split_output = explode("\n", $output); |
|
| 618 | - |
|
| 619 | - //loop through to remove any critical pages from the array. |
|
| 620 | - foreach ($critical_pages as $page_id) { |
|
| 621 | - $needle = 'value="' . $page_id . '"'; |
|
| 622 | - foreach ($split_output as $key => $haystack) { |
|
| 623 | - if (strpos($haystack, $needle) !== false) { |
|
| 624 | - unset($split_output[$key]); |
|
| 625 | - } |
|
| 626 | - } |
|
| 627 | - } |
|
| 628 | - //replace output with the new contents |
|
| 629 | - return implode("\n", $split_output); |
|
| 630 | - } |
|
| 631 | - |
|
| 632 | - |
|
| 633 | - /** |
|
| 634 | - * enqueue all admin scripts that need loaded for admin pages |
|
| 635 | - * |
|
| 636 | - * @return void |
|
| 637 | - */ |
|
| 638 | - public function enqueue_admin_scripts() |
|
| 639 | - { |
|
| 640 | - // this javascript is loaded on every admin page to catch any injections ee needs to add to wp run js. |
|
| 641 | - // Note: the intention of this script is to only do TARGETED injections. I.E, only injecting on certain script |
|
| 642 | - // calls. |
|
| 643 | - wp_enqueue_script( |
|
| 644 | - 'ee-inject-wp', |
|
| 645 | - EE_ADMIN_URL . 'assets/ee-cpt-wp-injects.js', |
|
| 646 | - array('jquery'), |
|
| 647 | - EVENT_ESPRESSO_VERSION, |
|
| 648 | - true |
|
| 649 | - ); |
|
| 650 | - // register cookie script for future dependencies |
|
| 651 | - wp_register_script( |
|
| 652 | - 'jquery-cookie', |
|
| 653 | - EE_THIRD_PARTY_URL . 'joyride/jquery.cookie.js', |
|
| 654 | - array('jquery'), |
|
| 655 | - '2.1', |
|
| 656 | - true |
|
| 657 | - ); |
|
| 658 | - //joyride is turned OFF by default, but prior to the admin_enqueue_scripts hook, can be turned back on again |
|
| 659 | - // via: add_filter('FHEE_load_joyride', '__return_true' ); |
|
| 660 | - if (apply_filters('FHEE_load_joyride', false)) { |
|
| 661 | - //joyride style |
|
| 662 | - wp_register_style('joyride-css', EE_THIRD_PARTY_URL . 'joyride/joyride-2.1.css', array(), '2.1'); |
|
| 663 | - wp_register_style( |
|
| 664 | - 'ee-joyride-css', |
|
| 665 | - EE_GLOBAL_ASSETS_URL . 'css/ee-joyride-styles.css', |
|
| 666 | - array('joyride-css'), |
|
| 667 | - EVENT_ESPRESSO_VERSION |
|
| 668 | - ); |
|
| 669 | - wp_register_script( |
|
| 670 | - 'joyride-modernizr', |
|
| 671 | - EE_THIRD_PARTY_URL . 'joyride/modernizr.mq.js', |
|
| 672 | - array(), |
|
| 673 | - '2.1', |
|
| 674 | - true |
|
| 675 | - ); |
|
| 676 | - //joyride JS |
|
| 677 | - wp_register_script( |
|
| 678 | - 'jquery-joyride', |
|
| 679 | - EE_THIRD_PARTY_URL . 'joyride/jquery.joyride-2.1.js', |
|
| 680 | - array('jquery-cookie', 'joyride-modernizr'), |
|
| 681 | - '2.1', |
|
| 682 | - true |
|
| 683 | - ); |
|
| 684 | - // wanna go for a joyride? |
|
| 685 | - wp_enqueue_style('ee-joyride-css'); |
|
| 686 | - wp_enqueue_script('jquery-joyride'); |
|
| 687 | - } |
|
| 688 | - } |
|
| 689 | - |
|
| 690 | - |
|
| 691 | - /** |
|
| 692 | - * display_admin_notices |
|
| 693 | - * |
|
| 694 | - * @return void |
|
| 695 | - */ |
|
| 696 | - public function display_admin_notices() |
|
| 697 | - { |
|
| 698 | - echo EE_Error::get_notices(); |
|
| 699 | - } |
|
| 700 | - |
|
| 701 | - |
|
| 702 | - |
|
| 703 | - /** |
|
| 704 | - * @param array $elements |
|
| 705 | - * @return array |
|
| 706 | - * @throws EE_Error |
|
| 707 | - * @throws InvalidArgumentException |
|
| 708 | - * @throws InvalidDataTypeException |
|
| 709 | - * @throws InvalidInterfaceException |
|
| 710 | - */ |
|
| 711 | - public function dashboard_glance_items($elements) |
|
| 712 | - { |
|
| 713 | - $elements = is_array($elements) ? $elements : array($elements); |
|
| 714 | - $events = EEM_Event::instance()->count(); |
|
| 715 | - $items['events']['url'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 716 | - array('page' => 'espresso_events'), |
|
| 717 | - admin_url('admin.php') |
|
| 718 | - ); |
|
| 719 | - $items['events']['text'] = sprintf(_n('%s Event', '%s Events', $events), number_format_i18n($events)); |
|
| 720 | - $items['events']['title'] = esc_html__('Click to view all Events', 'event_espresso'); |
|
| 721 | - $registrations = EEM_Registration::instance()->count( |
|
| 722 | - array( |
|
| 723 | - array( |
|
| 724 | - 'STS_ID' => array('!=', EEM_Registration::status_id_incomplete), |
|
| 725 | - ), |
|
| 726 | - ) |
|
| 727 | - ); |
|
| 728 | - $items['registrations']['url'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 729 | - array('page' => 'espresso_registrations'), |
|
| 730 | - admin_url('admin.php') |
|
| 731 | - ); |
|
| 732 | - $items['registrations']['text'] = sprintf( |
|
| 733 | - _n('%s Registration', '%s Registrations', $registrations), |
|
| 734 | - number_format_i18n($registrations) |
|
| 735 | - ); |
|
| 736 | - $items['registrations']['title'] = esc_html__('Click to view all registrations', 'event_espresso'); |
|
| 737 | - |
|
| 738 | - $items = (array)apply_filters('FHEE__EE_Admin__dashboard_glance_items__items', $items); |
|
| 739 | - |
|
| 740 | - foreach ($items as $type => $item_properties) { |
|
| 741 | - $elements[] = sprintf( |
|
| 742 | - '<a class="ee-dashboard-link-' . $type . '" href="%s" title="%s">%s</a>', |
|
| 743 | - $item_properties['url'], |
|
| 744 | - $item_properties['title'], |
|
| 745 | - $item_properties['text'] |
|
| 746 | - ); |
|
| 747 | - } |
|
| 748 | - return $elements; |
|
| 749 | - } |
|
| 750 | - |
|
| 751 | - |
|
| 752 | - /** |
|
| 753 | - * check_for_invalid_datetime_formats |
|
| 754 | - * if an admin changes their date or time format settings on the WP General Settings admin page, verify that |
|
| 755 | - * their selected format can be parsed by PHP |
|
| 756 | - * |
|
| 757 | - * @param $value |
|
| 758 | - * @param $option |
|
| 759 | - * @throws EE_Error |
|
| 760 | - * @return string |
|
| 761 | - */ |
|
| 762 | - public function check_for_invalid_datetime_formats($value, $option) |
|
| 763 | - { |
|
| 764 | - // check for date_format or time_format |
|
| 765 | - switch ($option) { |
|
| 766 | - case 'date_format': |
|
| 767 | - $date_time_format = $value . ' ' . get_option('time_format'); |
|
| 768 | - break; |
|
| 769 | - case 'time_format': |
|
| 770 | - $date_time_format = get_option('date_format') . ' ' . $value; |
|
| 771 | - break; |
|
| 772 | - default: |
|
| 773 | - $date_time_format = false; |
|
| 774 | - } |
|
| 775 | - // do we have a date_time format to check ? |
|
| 776 | - if ($date_time_format) { |
|
| 777 | - $error_msg = EEH_DTT_Helper::validate_format_string($date_time_format); |
|
| 778 | - |
|
| 779 | - if (is_array($error_msg)) { |
|
| 780 | - $msg = '<p>' |
|
| 781 | - . sprintf( |
|
| 782 | - esc_html__( |
|
| 783 | - 'The following date time "%s" ( %s ) is difficult to be properly parsed by PHP for the following reasons:', |
|
| 784 | - 'event_espresso' |
|
| 785 | - ), |
|
| 786 | - date($date_time_format), |
|
| 787 | - $date_time_format |
|
| 788 | - ) |
|
| 789 | - . '</p><p><ul>'; |
|
| 790 | - |
|
| 791 | - |
|
| 792 | - foreach ($error_msg as $error) { |
|
| 793 | - $msg .= '<li>' . $error . '</li>'; |
|
| 794 | - } |
|
| 795 | - |
|
| 796 | - $msg .= '</ul></p><p>' |
|
| 797 | - . sprintf( |
|
| 798 | - esc_html__( |
|
| 799 | - '%sPlease note that your date and time formats have been reset to "F j, Y" and "g:i a" respectively.%s', |
|
| 800 | - 'event_espresso' |
|
| 801 | - ), |
|
| 802 | - '<span style="color:#D54E21;">', |
|
| 803 | - '</span>' |
|
| 804 | - ) |
|
| 805 | - . '</p>'; |
|
| 806 | - |
|
| 807 | - // trigger WP settings error |
|
| 808 | - add_settings_error( |
|
| 809 | - 'date_format', |
|
| 810 | - 'date_format', |
|
| 811 | - $msg |
|
| 812 | - ); |
|
| 813 | - |
|
| 814 | - // set format to something valid |
|
| 815 | - switch ($option) { |
|
| 816 | - case 'date_format': |
|
| 817 | - $value = 'F j, Y'; |
|
| 818 | - break; |
|
| 819 | - case 'time_format': |
|
| 820 | - $value = 'g:i a'; |
|
| 821 | - break; |
|
| 822 | - } |
|
| 823 | - } |
|
| 824 | - } |
|
| 825 | - return $value; |
|
| 826 | - } |
|
| 827 | - |
|
| 828 | - |
|
| 829 | - /** |
|
| 830 | - * its_eSpresso - converts the less commonly used spelling of "Expresso" to "Espresso" |
|
| 831 | - * |
|
| 832 | - * @param $content |
|
| 833 | - * @return string |
|
| 834 | - */ |
|
| 835 | - public function its_eSpresso($content) |
|
| 836 | - { |
|
| 837 | - return str_replace('[EXPRESSO_', '[ESPRESSO_', $content); |
|
| 838 | - } |
|
| 839 | - |
|
| 840 | - |
|
| 841 | - /** |
|
| 842 | - * espresso_admin_footer |
|
| 843 | - * |
|
| 844 | - * @return string |
|
| 845 | - */ |
|
| 846 | - public function espresso_admin_footer() |
|
| 847 | - { |
|
| 848 | - return \EEH_Template::powered_by_event_espresso('aln-cntr', '', array('utm_content' => 'admin_footer')); |
|
| 849 | - } |
|
| 850 | - |
|
| 851 | - |
|
| 852 | - /** |
|
| 853 | - * static method for registering ee admin page. |
|
| 854 | - * This method is deprecated in favor of the new location in EE_Register_Admin_Page::register. |
|
| 855 | - * |
|
| 856 | - * @since 4.3.0 |
|
| 857 | - * @deprecated 4.3.0 Use EE_Register_Admin_Page::register() instead |
|
| 858 | - * @see EE_Register_Admin_Page::register() |
|
| 859 | - * @param $page_basename |
|
| 860 | - * @param $page_path |
|
| 861 | - * @param array $config |
|
| 862 | - * @return void |
|
| 863 | - * @throws EE_Error |
|
| 864 | - */ |
|
| 865 | - public static function register_ee_admin_page($page_basename, $page_path, $config = array()) |
|
| 866 | - { |
|
| 867 | - EE_Error::doing_it_wrong( |
|
| 868 | - __METHOD__, |
|
| 869 | - sprintf( |
|
| 870 | - esc_html__( |
|
| 871 | - 'Usage is deprecated. Use EE_Register_Admin_Page::register() for registering the %s admin page.', |
|
| 872 | - 'event_espresso' |
|
| 873 | - ), |
|
| 874 | - $page_basename |
|
| 875 | - ), |
|
| 876 | - '4.3' |
|
| 877 | - ); |
|
| 878 | - if (class_exists('EE_Register_Admin_Page')) { |
|
| 879 | - $config['page_path'] = $page_path; |
|
| 880 | - } |
|
| 881 | - EE_Register_Admin_Page::register($page_basename, $config); |
|
| 882 | - } |
|
| 883 | - |
|
| 884 | - |
|
| 885 | - /** |
|
| 886 | - * @deprecated 4.8.41 |
|
| 887 | - * @param int $post_ID |
|
| 888 | - * @param \WP_Post $post |
|
| 889 | - * @return void |
|
| 890 | - */ |
|
| 891 | - public static function parse_post_content_on_save($post_ID, $post) |
|
| 892 | - { |
|
| 893 | - EE_Error::doing_it_wrong( |
|
| 894 | - __METHOD__, |
|
| 895 | - esc_html__('Usage is deprecated', 'event_espresso'), |
|
| 896 | - '4.8.41' |
|
| 897 | - ); |
|
| 898 | - } |
|
| 899 | - |
|
| 900 | - |
|
| 901 | - /** |
|
| 902 | - * @deprecated 4.8.41 |
|
| 903 | - * @param $option |
|
| 904 | - * @param $old_value |
|
| 905 | - * @param $value |
|
| 906 | - * @return void |
|
| 907 | - */ |
|
| 908 | - public function reset_page_for_posts_on_change($option, $old_value, $value) |
|
| 909 | - { |
|
| 910 | - EE_Error::doing_it_wrong( |
|
| 911 | - __METHOD__, |
|
| 912 | - esc_html__('Usage is deprecated', 'event_espresso'), |
|
| 913 | - '4.8.41' |
|
| 914 | - ); |
|
| 915 | - } |
|
| 916 | - |
|
| 917 | - |
|
| 918 | - |
|
| 919 | - /** |
|
| 920 | - * @deprecated 4.9.27 |
|
| 921 | - * @return void |
|
| 922 | - */ |
|
| 923 | - public function get_persistent_admin_notices() |
|
| 924 | - { |
|
| 925 | - EE_Error::doing_it_wrong( |
|
| 926 | - __METHOD__, |
|
| 927 | - sprintf( |
|
| 928 | - __('Usage is deprecated. Use "%1$s" instead.', 'event_espresso'), |
|
| 929 | - '\EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 930 | - ), |
|
| 931 | - '4.9.27' |
|
| 932 | - ); |
|
| 933 | - } |
|
| 934 | - |
|
| 935 | - |
|
| 936 | - |
|
| 937 | - /** |
|
| 938 | - * @deprecated 4.9.27 |
|
| 939 | - * @throws InvalidInterfaceException |
|
| 940 | - * @throws InvalidDataTypeException |
|
| 941 | - * @throws DomainException |
|
| 942 | - */ |
|
| 943 | - public function dismiss_ee_nag_notice_callback() |
|
| 944 | - { |
|
| 945 | - EE_Error::doing_it_wrong( |
|
| 946 | - __METHOD__, |
|
| 947 | - sprintf( |
|
| 948 | - __('Usage is deprecated. Use "%1$s" instead.', 'event_espresso'), |
|
| 949 | - '\EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 950 | - ), |
|
| 951 | - '4.9.27' |
|
| 952 | - ); |
|
| 953 | - $this->persistent_admin_notice_manager->dismissNotice(); |
|
| 954 | - } |
|
| 488 | + } |
|
| 489 | + |
|
| 490 | + |
|
| 491 | + /** |
|
| 492 | + * Returns an array of event archive nav items. |
|
| 493 | + * |
|
| 494 | + * @todo for now this method is just in place so when it gets abstracted further we can substitute in whatever |
|
| 495 | + * method we use for getting the extra nav menu items |
|
| 496 | + * @return array |
|
| 497 | + */ |
|
| 498 | + private function _get_extra_nav_menu_pages_items() |
|
| 499 | + { |
|
| 500 | + $menuitems[] = array( |
|
| 501 | + 'title' => esc_html__('Event List', 'event_espresso'), |
|
| 502 | + 'url' => get_post_type_archive_link('espresso_events'), |
|
| 503 | + 'description' => esc_html__('Archive page for all events.', 'event_espresso'), |
|
| 504 | + ); |
|
| 505 | + return apply_filters('FHEE__EE_Admin__get_extra_nav_menu_pages_items', $menuitems); |
|
| 506 | + } |
|
| 507 | + |
|
| 508 | + |
|
| 509 | + /** |
|
| 510 | + * Setup nav menu walker item for usage in the event archive nav menu metabox. It receives a menu_item array with |
|
| 511 | + * the properties and converts it to the menu item object. |
|
| 512 | + * |
|
| 513 | + * @see wp_setup_nav_menu_item() in wp-includes/nav-menu.php |
|
| 514 | + * @param $menu_item_values |
|
| 515 | + * @return stdClass |
|
| 516 | + */ |
|
| 517 | + private function _setup_extra_nav_menu_pages_items($menu_item_values) |
|
| 518 | + { |
|
| 519 | + $menu_item = new stdClass(); |
|
| 520 | + $keys = array( |
|
| 521 | + 'ID' => 0, |
|
| 522 | + 'db_id' => 0, |
|
| 523 | + 'menu_item_parent' => 0, |
|
| 524 | + 'object_id' => -1, |
|
| 525 | + 'post_parent' => 0, |
|
| 526 | + 'type' => 'custom', |
|
| 527 | + 'object' => '', |
|
| 528 | + 'type_label' => esc_html__('Extra Nav Menu Item', 'event_espresso'), |
|
| 529 | + 'title' => '', |
|
| 530 | + 'url' => '', |
|
| 531 | + 'target' => '', |
|
| 532 | + 'attr_title' => '', |
|
| 533 | + 'description' => '', |
|
| 534 | + 'classes' => array(), |
|
| 535 | + 'xfn' => '', |
|
| 536 | + ); |
|
| 537 | + |
|
| 538 | + foreach ($keys as $key => $value) { |
|
| 539 | + $menu_item->{$key} = isset($menu_item_values[$key]) ? $menu_item_values[$key] : $value; |
|
| 540 | + } |
|
| 541 | + return $menu_item; |
|
| 542 | + } |
|
| 543 | + |
|
| 544 | + |
|
| 545 | + /** |
|
| 546 | + * This is the action hook for the AHEE__EE_Admin_Page__route_admin_request hook that fires off right before an |
|
| 547 | + * EE_Admin_Page route is called. |
|
| 548 | + * |
|
| 549 | + * @return void |
|
| 550 | + */ |
|
| 551 | + public function route_admin_request() |
|
| 552 | + { |
|
| 553 | + } |
|
| 554 | + |
|
| 555 | + |
|
| 556 | + /** |
|
| 557 | + * wp_loaded should fire on the WordPress wp_loaded hook. This fires on a VERY late priority. |
|
| 558 | + * |
|
| 559 | + * @return void |
|
| 560 | + */ |
|
| 561 | + public function wp_loaded() |
|
| 562 | + { |
|
| 563 | + } |
|
| 564 | + |
|
| 565 | + |
|
| 566 | + /** |
|
| 567 | + * admin_init |
|
| 568 | + * |
|
| 569 | + * @return void |
|
| 570 | + * @throws EE_Error |
|
| 571 | + * @throws InvalidArgumentException |
|
| 572 | + * @throws InvalidDataTypeException |
|
| 573 | + * @throws InvalidInterfaceException |
|
| 574 | + * @throws ReflectionException |
|
| 575 | + */ |
|
| 576 | + public function admin_init() |
|
| 577 | + { |
|
| 578 | + |
|
| 579 | + /** |
|
| 580 | + * our cpt models must be instantiated on WordPress post processing routes (wp-admin/post.php), |
|
| 581 | + * so any hooking into core WP routes is taken care of. So in this next few lines of code: |
|
| 582 | + * - check if doing post processing. |
|
| 583 | + * - check if doing post processing of one of EE CPTs |
|
| 584 | + * - instantiate the corresponding EE CPT model for the post_type being processed. |
|
| 585 | + */ |
|
| 586 | + if (isset($_POST['action'], $_POST['post_type']) && $_POST['action'] === 'editpost') { |
|
| 587 | + EE_Registry::instance()->load_core('Register_CPTs'); |
|
| 588 | + EE_Register_CPTs::instantiate_cpt_models($_POST['post_type']); |
|
| 589 | + } |
|
| 590 | + |
|
| 591 | + |
|
| 592 | + /** |
|
| 593 | + * This code excludes EE critical pages anywhere `wp_dropdown_pages` is used to create a dropdown for selecting |
|
| 594 | + * critical pages. The only place critical pages need included in a generated dropdown is on the "Critical |
|
| 595 | + * Pages" tab in the EE General Settings Admin page. |
|
| 596 | + * This is for user-proofing. |
|
| 597 | + */ |
|
| 598 | + add_filter('wp_dropdown_pages', array($this, 'modify_dropdown_pages')); |
|
| 599 | + } |
|
| 600 | + |
|
| 601 | + |
|
| 602 | + /** |
|
| 603 | + * Callback for wp_dropdown_pages hook to remove ee critical pages from the dropdown selection. |
|
| 604 | + * |
|
| 605 | + * @param string $output Current output. |
|
| 606 | + * @return string |
|
| 607 | + * @throws InvalidArgumentException |
|
| 608 | + * @throws InvalidDataTypeException |
|
| 609 | + * @throws InvalidInterfaceException |
|
| 610 | + */ |
|
| 611 | + public function modify_dropdown_pages($output) |
|
| 612 | + { |
|
| 613 | + //get critical pages |
|
| 614 | + $critical_pages = EE_Registry::instance()->CFG->core->get_critical_pages_array(); |
|
| 615 | + |
|
| 616 | + //split current output by line break for easier parsing. |
|
| 617 | + $split_output = explode("\n", $output); |
|
| 618 | + |
|
| 619 | + //loop through to remove any critical pages from the array. |
|
| 620 | + foreach ($critical_pages as $page_id) { |
|
| 621 | + $needle = 'value="' . $page_id . '"'; |
|
| 622 | + foreach ($split_output as $key => $haystack) { |
|
| 623 | + if (strpos($haystack, $needle) !== false) { |
|
| 624 | + unset($split_output[$key]); |
|
| 625 | + } |
|
| 626 | + } |
|
| 627 | + } |
|
| 628 | + //replace output with the new contents |
|
| 629 | + return implode("\n", $split_output); |
|
| 630 | + } |
|
| 631 | + |
|
| 632 | + |
|
| 633 | + /** |
|
| 634 | + * enqueue all admin scripts that need loaded for admin pages |
|
| 635 | + * |
|
| 636 | + * @return void |
|
| 637 | + */ |
|
| 638 | + public function enqueue_admin_scripts() |
|
| 639 | + { |
|
| 640 | + // this javascript is loaded on every admin page to catch any injections ee needs to add to wp run js. |
|
| 641 | + // Note: the intention of this script is to only do TARGETED injections. I.E, only injecting on certain script |
|
| 642 | + // calls. |
|
| 643 | + wp_enqueue_script( |
|
| 644 | + 'ee-inject-wp', |
|
| 645 | + EE_ADMIN_URL . 'assets/ee-cpt-wp-injects.js', |
|
| 646 | + array('jquery'), |
|
| 647 | + EVENT_ESPRESSO_VERSION, |
|
| 648 | + true |
|
| 649 | + ); |
|
| 650 | + // register cookie script for future dependencies |
|
| 651 | + wp_register_script( |
|
| 652 | + 'jquery-cookie', |
|
| 653 | + EE_THIRD_PARTY_URL . 'joyride/jquery.cookie.js', |
|
| 654 | + array('jquery'), |
|
| 655 | + '2.1', |
|
| 656 | + true |
|
| 657 | + ); |
|
| 658 | + //joyride is turned OFF by default, but prior to the admin_enqueue_scripts hook, can be turned back on again |
|
| 659 | + // via: add_filter('FHEE_load_joyride', '__return_true' ); |
|
| 660 | + if (apply_filters('FHEE_load_joyride', false)) { |
|
| 661 | + //joyride style |
|
| 662 | + wp_register_style('joyride-css', EE_THIRD_PARTY_URL . 'joyride/joyride-2.1.css', array(), '2.1'); |
|
| 663 | + wp_register_style( |
|
| 664 | + 'ee-joyride-css', |
|
| 665 | + EE_GLOBAL_ASSETS_URL . 'css/ee-joyride-styles.css', |
|
| 666 | + array('joyride-css'), |
|
| 667 | + EVENT_ESPRESSO_VERSION |
|
| 668 | + ); |
|
| 669 | + wp_register_script( |
|
| 670 | + 'joyride-modernizr', |
|
| 671 | + EE_THIRD_PARTY_URL . 'joyride/modernizr.mq.js', |
|
| 672 | + array(), |
|
| 673 | + '2.1', |
|
| 674 | + true |
|
| 675 | + ); |
|
| 676 | + //joyride JS |
|
| 677 | + wp_register_script( |
|
| 678 | + 'jquery-joyride', |
|
| 679 | + EE_THIRD_PARTY_URL . 'joyride/jquery.joyride-2.1.js', |
|
| 680 | + array('jquery-cookie', 'joyride-modernizr'), |
|
| 681 | + '2.1', |
|
| 682 | + true |
|
| 683 | + ); |
|
| 684 | + // wanna go for a joyride? |
|
| 685 | + wp_enqueue_style('ee-joyride-css'); |
|
| 686 | + wp_enqueue_script('jquery-joyride'); |
|
| 687 | + } |
|
| 688 | + } |
|
| 689 | + |
|
| 690 | + |
|
| 691 | + /** |
|
| 692 | + * display_admin_notices |
|
| 693 | + * |
|
| 694 | + * @return void |
|
| 695 | + */ |
|
| 696 | + public function display_admin_notices() |
|
| 697 | + { |
|
| 698 | + echo EE_Error::get_notices(); |
|
| 699 | + } |
|
| 700 | + |
|
| 701 | + |
|
| 702 | + |
|
| 703 | + /** |
|
| 704 | + * @param array $elements |
|
| 705 | + * @return array |
|
| 706 | + * @throws EE_Error |
|
| 707 | + * @throws InvalidArgumentException |
|
| 708 | + * @throws InvalidDataTypeException |
|
| 709 | + * @throws InvalidInterfaceException |
|
| 710 | + */ |
|
| 711 | + public function dashboard_glance_items($elements) |
|
| 712 | + { |
|
| 713 | + $elements = is_array($elements) ? $elements : array($elements); |
|
| 714 | + $events = EEM_Event::instance()->count(); |
|
| 715 | + $items['events']['url'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 716 | + array('page' => 'espresso_events'), |
|
| 717 | + admin_url('admin.php') |
|
| 718 | + ); |
|
| 719 | + $items['events']['text'] = sprintf(_n('%s Event', '%s Events', $events), number_format_i18n($events)); |
|
| 720 | + $items['events']['title'] = esc_html__('Click to view all Events', 'event_espresso'); |
|
| 721 | + $registrations = EEM_Registration::instance()->count( |
|
| 722 | + array( |
|
| 723 | + array( |
|
| 724 | + 'STS_ID' => array('!=', EEM_Registration::status_id_incomplete), |
|
| 725 | + ), |
|
| 726 | + ) |
|
| 727 | + ); |
|
| 728 | + $items['registrations']['url'] = EE_Admin_Page::add_query_args_and_nonce( |
|
| 729 | + array('page' => 'espresso_registrations'), |
|
| 730 | + admin_url('admin.php') |
|
| 731 | + ); |
|
| 732 | + $items['registrations']['text'] = sprintf( |
|
| 733 | + _n('%s Registration', '%s Registrations', $registrations), |
|
| 734 | + number_format_i18n($registrations) |
|
| 735 | + ); |
|
| 736 | + $items['registrations']['title'] = esc_html__('Click to view all registrations', 'event_espresso'); |
|
| 737 | + |
|
| 738 | + $items = (array)apply_filters('FHEE__EE_Admin__dashboard_glance_items__items', $items); |
|
| 739 | + |
|
| 740 | + foreach ($items as $type => $item_properties) { |
|
| 741 | + $elements[] = sprintf( |
|
| 742 | + '<a class="ee-dashboard-link-' . $type . '" href="%s" title="%s">%s</a>', |
|
| 743 | + $item_properties['url'], |
|
| 744 | + $item_properties['title'], |
|
| 745 | + $item_properties['text'] |
|
| 746 | + ); |
|
| 747 | + } |
|
| 748 | + return $elements; |
|
| 749 | + } |
|
| 750 | + |
|
| 751 | + |
|
| 752 | + /** |
|
| 753 | + * check_for_invalid_datetime_formats |
|
| 754 | + * if an admin changes their date or time format settings on the WP General Settings admin page, verify that |
|
| 755 | + * their selected format can be parsed by PHP |
|
| 756 | + * |
|
| 757 | + * @param $value |
|
| 758 | + * @param $option |
|
| 759 | + * @throws EE_Error |
|
| 760 | + * @return string |
|
| 761 | + */ |
|
| 762 | + public function check_for_invalid_datetime_formats($value, $option) |
|
| 763 | + { |
|
| 764 | + // check for date_format or time_format |
|
| 765 | + switch ($option) { |
|
| 766 | + case 'date_format': |
|
| 767 | + $date_time_format = $value . ' ' . get_option('time_format'); |
|
| 768 | + break; |
|
| 769 | + case 'time_format': |
|
| 770 | + $date_time_format = get_option('date_format') . ' ' . $value; |
|
| 771 | + break; |
|
| 772 | + default: |
|
| 773 | + $date_time_format = false; |
|
| 774 | + } |
|
| 775 | + // do we have a date_time format to check ? |
|
| 776 | + if ($date_time_format) { |
|
| 777 | + $error_msg = EEH_DTT_Helper::validate_format_string($date_time_format); |
|
| 778 | + |
|
| 779 | + if (is_array($error_msg)) { |
|
| 780 | + $msg = '<p>' |
|
| 781 | + . sprintf( |
|
| 782 | + esc_html__( |
|
| 783 | + 'The following date time "%s" ( %s ) is difficult to be properly parsed by PHP for the following reasons:', |
|
| 784 | + 'event_espresso' |
|
| 785 | + ), |
|
| 786 | + date($date_time_format), |
|
| 787 | + $date_time_format |
|
| 788 | + ) |
|
| 789 | + . '</p><p><ul>'; |
|
| 790 | + |
|
| 791 | + |
|
| 792 | + foreach ($error_msg as $error) { |
|
| 793 | + $msg .= '<li>' . $error . '</li>'; |
|
| 794 | + } |
|
| 795 | + |
|
| 796 | + $msg .= '</ul></p><p>' |
|
| 797 | + . sprintf( |
|
| 798 | + esc_html__( |
|
| 799 | + '%sPlease note that your date and time formats have been reset to "F j, Y" and "g:i a" respectively.%s', |
|
| 800 | + 'event_espresso' |
|
| 801 | + ), |
|
| 802 | + '<span style="color:#D54E21;">', |
|
| 803 | + '</span>' |
|
| 804 | + ) |
|
| 805 | + . '</p>'; |
|
| 806 | + |
|
| 807 | + // trigger WP settings error |
|
| 808 | + add_settings_error( |
|
| 809 | + 'date_format', |
|
| 810 | + 'date_format', |
|
| 811 | + $msg |
|
| 812 | + ); |
|
| 813 | + |
|
| 814 | + // set format to something valid |
|
| 815 | + switch ($option) { |
|
| 816 | + case 'date_format': |
|
| 817 | + $value = 'F j, Y'; |
|
| 818 | + break; |
|
| 819 | + case 'time_format': |
|
| 820 | + $value = 'g:i a'; |
|
| 821 | + break; |
|
| 822 | + } |
|
| 823 | + } |
|
| 824 | + } |
|
| 825 | + return $value; |
|
| 826 | + } |
|
| 827 | + |
|
| 828 | + |
|
| 829 | + /** |
|
| 830 | + * its_eSpresso - converts the less commonly used spelling of "Expresso" to "Espresso" |
|
| 831 | + * |
|
| 832 | + * @param $content |
|
| 833 | + * @return string |
|
| 834 | + */ |
|
| 835 | + public function its_eSpresso($content) |
|
| 836 | + { |
|
| 837 | + return str_replace('[EXPRESSO_', '[ESPRESSO_', $content); |
|
| 838 | + } |
|
| 839 | + |
|
| 840 | + |
|
| 841 | + /** |
|
| 842 | + * espresso_admin_footer |
|
| 843 | + * |
|
| 844 | + * @return string |
|
| 845 | + */ |
|
| 846 | + public function espresso_admin_footer() |
|
| 847 | + { |
|
| 848 | + return \EEH_Template::powered_by_event_espresso('aln-cntr', '', array('utm_content' => 'admin_footer')); |
|
| 849 | + } |
|
| 850 | + |
|
| 851 | + |
|
| 852 | + /** |
|
| 853 | + * static method for registering ee admin page. |
|
| 854 | + * This method is deprecated in favor of the new location in EE_Register_Admin_Page::register. |
|
| 855 | + * |
|
| 856 | + * @since 4.3.0 |
|
| 857 | + * @deprecated 4.3.0 Use EE_Register_Admin_Page::register() instead |
|
| 858 | + * @see EE_Register_Admin_Page::register() |
|
| 859 | + * @param $page_basename |
|
| 860 | + * @param $page_path |
|
| 861 | + * @param array $config |
|
| 862 | + * @return void |
|
| 863 | + * @throws EE_Error |
|
| 864 | + */ |
|
| 865 | + public static function register_ee_admin_page($page_basename, $page_path, $config = array()) |
|
| 866 | + { |
|
| 867 | + EE_Error::doing_it_wrong( |
|
| 868 | + __METHOD__, |
|
| 869 | + sprintf( |
|
| 870 | + esc_html__( |
|
| 871 | + 'Usage is deprecated. Use EE_Register_Admin_Page::register() for registering the %s admin page.', |
|
| 872 | + 'event_espresso' |
|
| 873 | + ), |
|
| 874 | + $page_basename |
|
| 875 | + ), |
|
| 876 | + '4.3' |
|
| 877 | + ); |
|
| 878 | + if (class_exists('EE_Register_Admin_Page')) { |
|
| 879 | + $config['page_path'] = $page_path; |
|
| 880 | + } |
|
| 881 | + EE_Register_Admin_Page::register($page_basename, $config); |
|
| 882 | + } |
|
| 883 | + |
|
| 884 | + |
|
| 885 | + /** |
|
| 886 | + * @deprecated 4.8.41 |
|
| 887 | + * @param int $post_ID |
|
| 888 | + * @param \WP_Post $post |
|
| 889 | + * @return void |
|
| 890 | + */ |
|
| 891 | + public static function parse_post_content_on_save($post_ID, $post) |
|
| 892 | + { |
|
| 893 | + EE_Error::doing_it_wrong( |
|
| 894 | + __METHOD__, |
|
| 895 | + esc_html__('Usage is deprecated', 'event_espresso'), |
|
| 896 | + '4.8.41' |
|
| 897 | + ); |
|
| 898 | + } |
|
| 899 | + |
|
| 900 | + |
|
| 901 | + /** |
|
| 902 | + * @deprecated 4.8.41 |
|
| 903 | + * @param $option |
|
| 904 | + * @param $old_value |
|
| 905 | + * @param $value |
|
| 906 | + * @return void |
|
| 907 | + */ |
|
| 908 | + public function reset_page_for_posts_on_change($option, $old_value, $value) |
|
| 909 | + { |
|
| 910 | + EE_Error::doing_it_wrong( |
|
| 911 | + __METHOD__, |
|
| 912 | + esc_html__('Usage is deprecated', 'event_espresso'), |
|
| 913 | + '4.8.41' |
|
| 914 | + ); |
|
| 915 | + } |
|
| 916 | + |
|
| 917 | + |
|
| 918 | + |
|
| 919 | + /** |
|
| 920 | + * @deprecated 4.9.27 |
|
| 921 | + * @return void |
|
| 922 | + */ |
|
| 923 | + public function get_persistent_admin_notices() |
|
| 924 | + { |
|
| 925 | + EE_Error::doing_it_wrong( |
|
| 926 | + __METHOD__, |
|
| 927 | + sprintf( |
|
| 928 | + __('Usage is deprecated. Use "%1$s" instead.', 'event_espresso'), |
|
| 929 | + '\EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 930 | + ), |
|
| 931 | + '4.9.27' |
|
| 932 | + ); |
|
| 933 | + } |
|
| 934 | + |
|
| 935 | + |
|
| 936 | + |
|
| 937 | + /** |
|
| 938 | + * @deprecated 4.9.27 |
|
| 939 | + * @throws InvalidInterfaceException |
|
| 940 | + * @throws InvalidDataTypeException |
|
| 941 | + * @throws DomainException |
|
| 942 | + */ |
|
| 943 | + public function dismiss_ee_nag_notice_callback() |
|
| 944 | + { |
|
| 945 | + EE_Error::doing_it_wrong( |
|
| 946 | + __METHOD__, |
|
| 947 | + sprintf( |
|
| 948 | + __('Usage is deprecated. Use "%1$s" instead.', 'event_espresso'), |
|
| 949 | + '\EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 950 | + ), |
|
| 951 | + '4.9.27' |
|
| 952 | + ); |
|
| 953 | + $this->persistent_admin_notice_manager->dismissNotice(); |
|
| 954 | + } |
|
| 955 | 955 | } |
@@ -28,223 +28,223 @@ |
||
| 28 | 28 | class EE_Load_Espresso_Core implements EEI_Request_Decorator, EEI_Request_Stack_Core_App |
| 29 | 29 | { |
| 30 | 30 | |
| 31 | - /** |
|
| 32 | - * @var EE_Request $request |
|
| 33 | - */ |
|
| 34 | - protected $request; |
|
| 35 | - |
|
| 36 | - /** |
|
| 37 | - * @var EE_Response $response |
|
| 38 | - */ |
|
| 39 | - protected $response; |
|
| 40 | - |
|
| 41 | - /** |
|
| 42 | - * @var EE_Dependency_Map $dependency_map |
|
| 43 | - */ |
|
| 44 | - protected $dependency_map; |
|
| 45 | - |
|
| 46 | - /** |
|
| 47 | - * @var EE_Registry $registry |
|
| 48 | - */ |
|
| 49 | - protected $registry; |
|
| 50 | - |
|
| 51 | - |
|
| 52 | - /** |
|
| 53 | - * EE_Load_Espresso_Core constructor |
|
| 54 | - * |
|
| 55 | - * @throws EE_Error |
|
| 56 | - */ |
|
| 31 | + /** |
|
| 32 | + * @var EE_Request $request |
|
| 33 | + */ |
|
| 34 | + protected $request; |
|
| 35 | + |
|
| 36 | + /** |
|
| 37 | + * @var EE_Response $response |
|
| 38 | + */ |
|
| 39 | + protected $response; |
|
| 40 | + |
|
| 41 | + /** |
|
| 42 | + * @var EE_Dependency_Map $dependency_map |
|
| 43 | + */ |
|
| 44 | + protected $dependency_map; |
|
| 45 | + |
|
| 46 | + /** |
|
| 47 | + * @var EE_Registry $registry |
|
| 48 | + */ |
|
| 49 | + protected $registry; |
|
| 50 | + |
|
| 51 | + |
|
| 52 | + /** |
|
| 53 | + * EE_Load_Espresso_Core constructor |
|
| 54 | + * |
|
| 55 | + * @throws EE_Error |
|
| 56 | + */ |
|
| 57 | 57 | public function __construct() { |
| 58 | - // deprecated functions |
|
| 59 | - espresso_load_required('EE_Base', EE_CORE . 'EE_Base.core.php'); |
|
| 60 | - espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php'); |
|
| 61 | - } |
|
| 62 | - |
|
| 63 | - |
|
| 64 | - /** |
|
| 65 | - * handle |
|
| 66 | - * sets hooks for running rest of system |
|
| 67 | - * provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point |
|
| 68 | - * starting EE Addons from any other point may lead to problems |
|
| 69 | - * |
|
| 70 | - * @param EE_Request $request |
|
| 71 | - * @param EE_Response $response |
|
| 72 | - * @return EE_Response |
|
| 73 | - * @throws \EventEspresso\core\exceptions\InvalidFilePathException |
|
| 74 | - * @throws \EventEspresso\core\exceptions\InvalidClassException |
|
| 75 | - * @throws EE_Error |
|
| 76 | - * @throws InvalidDataTypeException |
|
| 77 | - * @throws InvalidInterfaceException |
|
| 78 | - * @throws InvalidArgumentException |
|
| 79 | - * @throws DomainException |
|
| 80 | - */ |
|
| 81 | - public function handle_request(EE_Request $request, EE_Response $response) |
|
| 82 | - { |
|
| 83 | - $this->request = $request; |
|
| 84 | - $this->response = $response; |
|
| 85 | - // info about how to load classes required by other classes |
|
| 86 | - $this->dependency_map = $this->_load_dependency_map(); |
|
| 87 | - // central repository for classes |
|
| 88 | - $this->registry = $this->_load_registry(); |
|
| 89 | - do_action('EE_Load_Espresso_Core__handle_request__initialize_core_loading'); |
|
| 90 | - $loader = LoaderFactory::getLoader($this->registry); |
|
| 91 | - $this->dependency_map->setLoader($loader); |
|
| 92 | - // instantiate core Domain class |
|
| 93 | - DomainFactory::getShared( |
|
| 94 | - new FullyQualifiedName( |
|
| 95 | - 'EventEspresso\core\domain\Domain' |
|
| 96 | - ), |
|
| 97 | - array( |
|
| 98 | - new FilePath(EVENT_ESPRESSO_MAIN_FILE), |
|
| 99 | - Version::fromString(espresso_version()) |
|
| 100 | - ) |
|
| 101 | - ); |
|
| 102 | - // build DI container |
|
| 103 | - // $OpenCoffeeShop = new EventEspresso\core\services\container\OpenCoffeeShop(); |
|
| 104 | - // $OpenCoffeeShop->addRecipes(); |
|
| 105 | - // $CoffeeShop = $OpenCoffeeShop->CoffeeShop(); |
|
| 106 | - // workarounds for PHP < 5.3 |
|
| 107 | - $this->_load_class_tools(); |
|
| 108 | - // deprecated functions |
|
| 109 | - espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php'); |
|
| 110 | - $loader->getShared( |
|
| 111 | - 'EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 112 | - ); |
|
| 113 | - // WP cron jobs |
|
| 114 | - $loader->getShared('EE_Cron_Tasks'); |
|
| 115 | - $loader->getShared('EE_Request_Handler'); |
|
| 116 | - $loader->getShared('EE_System'); |
|
| 117 | - return $this->response; |
|
| 118 | - } |
|
| 119 | - |
|
| 120 | - |
|
| 121 | - |
|
| 122 | - /** |
|
| 123 | - * @return EE_Request |
|
| 124 | - */ |
|
| 125 | - public function request() |
|
| 126 | - { |
|
| 127 | - return $this->request; |
|
| 128 | - } |
|
| 129 | - |
|
| 130 | - |
|
| 131 | - |
|
| 132 | - /** |
|
| 133 | - * @return EE_Response |
|
| 134 | - */ |
|
| 135 | - public function response() |
|
| 136 | - { |
|
| 137 | - return $this->response; |
|
| 138 | - } |
|
| 139 | - |
|
| 140 | - |
|
| 141 | - |
|
| 142 | - /** |
|
| 143 | - * @return EE_Dependency_Map |
|
| 144 | - * @throws EE_Error |
|
| 145 | - */ |
|
| 146 | - public function dependency_map() |
|
| 147 | - { |
|
| 148 | - if (! $this->dependency_map instanceof EE_Dependency_Map) { |
|
| 149 | - throw new EE_Error( |
|
| 150 | - sprintf( |
|
| 151 | - __('Invalid EE_Dependency_Map: "%1$s"', 'event_espresso'), |
|
| 152 | - print_r($this->dependency_map, true) |
|
| 153 | - ) |
|
| 154 | - ); |
|
| 155 | - } |
|
| 156 | - return $this->dependency_map; |
|
| 157 | - } |
|
| 158 | - |
|
| 159 | - |
|
| 160 | - |
|
| 161 | - /** |
|
| 162 | - * @return EE_Registry |
|
| 163 | - * @throws EE_Error |
|
| 164 | - */ |
|
| 165 | - public function registry() |
|
| 166 | - { |
|
| 167 | - if (! $this->registry instanceof EE_Registry) { |
|
| 168 | - throw new EE_Error( |
|
| 169 | - sprintf( |
|
| 170 | - __('Invalid EE_Registry: "%1$s"', 'event_espresso'), |
|
| 171 | - print_r($this->registry, true) |
|
| 172 | - ) |
|
| 173 | - ); |
|
| 174 | - } |
|
| 175 | - return $this->registry; |
|
| 176 | - } |
|
| 177 | - |
|
| 178 | - |
|
| 179 | - |
|
| 180 | - /** |
|
| 181 | - * @return EE_Dependency_Map |
|
| 182 | - */ |
|
| 183 | - private function _load_dependency_map() |
|
| 184 | - { |
|
| 185 | - if (! is_readable(EE_CORE . 'EE_Dependency_Map.core.php')) { |
|
| 186 | - EE_Error::add_error( |
|
| 187 | - __('The EE_Dependency_Map core class could not be loaded.', 'event_espresso'), |
|
| 188 | - __FILE__, __FUNCTION__, __LINE__ |
|
| 189 | - ); |
|
| 190 | - wp_die(EE_Error::get_notices()); |
|
| 191 | - } |
|
| 192 | - require_once EE_CORE . 'EE_Dependency_Map.core.php'; |
|
| 193 | - return EE_Dependency_Map::instance($this->request, $this->response); |
|
| 194 | - } |
|
| 195 | - |
|
| 196 | - |
|
| 197 | - |
|
| 198 | - /** |
|
| 199 | - * @return EE_Registry |
|
| 200 | - * @throws \InvalidArgumentException |
|
| 201 | - * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
| 202 | - * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
| 203 | - */ |
|
| 204 | - private function _load_registry() |
|
| 205 | - { |
|
| 206 | - if (! is_readable(EE_CORE . 'EE_Registry.core.php')) { |
|
| 207 | - EE_Error::add_error( |
|
| 208 | - __('The EE_Registry core class could not be loaded.', 'event_espresso'), |
|
| 209 | - __FILE__, __FUNCTION__, __LINE__ |
|
| 210 | - ); |
|
| 211 | - wp_die(EE_Error::get_notices()); |
|
| 212 | - } |
|
| 213 | - require_once EE_CORE . 'EE_Registry.core.php'; |
|
| 214 | - return EE_Registry::instance($this->dependency_map); |
|
| 215 | - } |
|
| 216 | - |
|
| 217 | - |
|
| 218 | - |
|
| 219 | - /** |
|
| 220 | - * @return void |
|
| 221 | - */ |
|
| 222 | - private function _load_class_tools() |
|
| 223 | - { |
|
| 224 | - if (! is_readable(EE_HELPERS . 'EEH_Class_Tools.helper.php')) { |
|
| 225 | - EE_Error::add_error( |
|
| 226 | - __('The EEH_Class_Tools helper could not be loaded.', 'event_espresso'), |
|
| 227 | - __FILE__, __FUNCTION__, __LINE__ |
|
| 228 | - ); |
|
| 229 | - } |
|
| 230 | - require_once EE_HELPERS . 'EEH_Class_Tools.helper.php'; |
|
| 231 | - } |
|
| 232 | - |
|
| 233 | - |
|
| 234 | - |
|
| 235 | - /** |
|
| 236 | - * called after the request stack has been fully processed |
|
| 237 | - * if any of the middleware apps has requested the plugin be deactivated, then we do that now |
|
| 238 | - * |
|
| 239 | - * @param EE_Request $request |
|
| 240 | - * @param EE_Response $response |
|
| 241 | - */ |
|
| 242 | - public function handle_response(EE_Request $request, EE_Response $response) |
|
| 243 | - { |
|
| 244 | - if ($response->plugin_deactivated()) { |
|
| 245 | - espresso_deactivate_plugin(EE_PLUGIN_BASENAME); |
|
| 246 | - } |
|
| 247 | - } |
|
| 58 | + // deprecated functions |
|
| 59 | + espresso_load_required('EE_Base', EE_CORE . 'EE_Base.core.php'); |
|
| 60 | + espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php'); |
|
| 61 | + } |
|
| 62 | + |
|
| 63 | + |
|
| 64 | + /** |
|
| 65 | + * handle |
|
| 66 | + * sets hooks for running rest of system |
|
| 67 | + * provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point |
|
| 68 | + * starting EE Addons from any other point may lead to problems |
|
| 69 | + * |
|
| 70 | + * @param EE_Request $request |
|
| 71 | + * @param EE_Response $response |
|
| 72 | + * @return EE_Response |
|
| 73 | + * @throws \EventEspresso\core\exceptions\InvalidFilePathException |
|
| 74 | + * @throws \EventEspresso\core\exceptions\InvalidClassException |
|
| 75 | + * @throws EE_Error |
|
| 76 | + * @throws InvalidDataTypeException |
|
| 77 | + * @throws InvalidInterfaceException |
|
| 78 | + * @throws InvalidArgumentException |
|
| 79 | + * @throws DomainException |
|
| 80 | + */ |
|
| 81 | + public function handle_request(EE_Request $request, EE_Response $response) |
|
| 82 | + { |
|
| 83 | + $this->request = $request; |
|
| 84 | + $this->response = $response; |
|
| 85 | + // info about how to load classes required by other classes |
|
| 86 | + $this->dependency_map = $this->_load_dependency_map(); |
|
| 87 | + // central repository for classes |
|
| 88 | + $this->registry = $this->_load_registry(); |
|
| 89 | + do_action('EE_Load_Espresso_Core__handle_request__initialize_core_loading'); |
|
| 90 | + $loader = LoaderFactory::getLoader($this->registry); |
|
| 91 | + $this->dependency_map->setLoader($loader); |
|
| 92 | + // instantiate core Domain class |
|
| 93 | + DomainFactory::getShared( |
|
| 94 | + new FullyQualifiedName( |
|
| 95 | + 'EventEspresso\core\domain\Domain' |
|
| 96 | + ), |
|
| 97 | + array( |
|
| 98 | + new FilePath(EVENT_ESPRESSO_MAIN_FILE), |
|
| 99 | + Version::fromString(espresso_version()) |
|
| 100 | + ) |
|
| 101 | + ); |
|
| 102 | + // build DI container |
|
| 103 | + // $OpenCoffeeShop = new EventEspresso\core\services\container\OpenCoffeeShop(); |
|
| 104 | + // $OpenCoffeeShop->addRecipes(); |
|
| 105 | + // $CoffeeShop = $OpenCoffeeShop->CoffeeShop(); |
|
| 106 | + // workarounds for PHP < 5.3 |
|
| 107 | + $this->_load_class_tools(); |
|
| 108 | + // deprecated functions |
|
| 109 | + espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php'); |
|
| 110 | + $loader->getShared( |
|
| 111 | + 'EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
|
| 112 | + ); |
|
| 113 | + // WP cron jobs |
|
| 114 | + $loader->getShared('EE_Cron_Tasks'); |
|
| 115 | + $loader->getShared('EE_Request_Handler'); |
|
| 116 | + $loader->getShared('EE_System'); |
|
| 117 | + return $this->response; |
|
| 118 | + } |
|
| 119 | + |
|
| 120 | + |
|
| 121 | + |
|
| 122 | + /** |
|
| 123 | + * @return EE_Request |
|
| 124 | + */ |
|
| 125 | + public function request() |
|
| 126 | + { |
|
| 127 | + return $this->request; |
|
| 128 | + } |
|
| 129 | + |
|
| 130 | + |
|
| 131 | + |
|
| 132 | + /** |
|
| 133 | + * @return EE_Response |
|
| 134 | + */ |
|
| 135 | + public function response() |
|
| 136 | + { |
|
| 137 | + return $this->response; |
|
| 138 | + } |
|
| 139 | + |
|
| 140 | + |
|
| 141 | + |
|
| 142 | + /** |
|
| 143 | + * @return EE_Dependency_Map |
|
| 144 | + * @throws EE_Error |
|
| 145 | + */ |
|
| 146 | + public function dependency_map() |
|
| 147 | + { |
|
| 148 | + if (! $this->dependency_map instanceof EE_Dependency_Map) { |
|
| 149 | + throw new EE_Error( |
|
| 150 | + sprintf( |
|
| 151 | + __('Invalid EE_Dependency_Map: "%1$s"', 'event_espresso'), |
|
| 152 | + print_r($this->dependency_map, true) |
|
| 153 | + ) |
|
| 154 | + ); |
|
| 155 | + } |
|
| 156 | + return $this->dependency_map; |
|
| 157 | + } |
|
| 158 | + |
|
| 159 | + |
|
| 160 | + |
|
| 161 | + /** |
|
| 162 | + * @return EE_Registry |
|
| 163 | + * @throws EE_Error |
|
| 164 | + */ |
|
| 165 | + public function registry() |
|
| 166 | + { |
|
| 167 | + if (! $this->registry instanceof EE_Registry) { |
|
| 168 | + throw new EE_Error( |
|
| 169 | + sprintf( |
|
| 170 | + __('Invalid EE_Registry: "%1$s"', 'event_espresso'), |
|
| 171 | + print_r($this->registry, true) |
|
| 172 | + ) |
|
| 173 | + ); |
|
| 174 | + } |
|
| 175 | + return $this->registry; |
|
| 176 | + } |
|
| 177 | + |
|
| 178 | + |
|
| 179 | + |
|
| 180 | + /** |
|
| 181 | + * @return EE_Dependency_Map |
|
| 182 | + */ |
|
| 183 | + private function _load_dependency_map() |
|
| 184 | + { |
|
| 185 | + if (! is_readable(EE_CORE . 'EE_Dependency_Map.core.php')) { |
|
| 186 | + EE_Error::add_error( |
|
| 187 | + __('The EE_Dependency_Map core class could not be loaded.', 'event_espresso'), |
|
| 188 | + __FILE__, __FUNCTION__, __LINE__ |
|
| 189 | + ); |
|
| 190 | + wp_die(EE_Error::get_notices()); |
|
| 191 | + } |
|
| 192 | + require_once EE_CORE . 'EE_Dependency_Map.core.php'; |
|
| 193 | + return EE_Dependency_Map::instance($this->request, $this->response); |
|
| 194 | + } |
|
| 195 | + |
|
| 196 | + |
|
| 197 | + |
|
| 198 | + /** |
|
| 199 | + * @return EE_Registry |
|
| 200 | + * @throws \InvalidArgumentException |
|
| 201 | + * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
| 202 | + * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
| 203 | + */ |
|
| 204 | + private function _load_registry() |
|
| 205 | + { |
|
| 206 | + if (! is_readable(EE_CORE . 'EE_Registry.core.php')) { |
|
| 207 | + EE_Error::add_error( |
|
| 208 | + __('The EE_Registry core class could not be loaded.', 'event_espresso'), |
|
| 209 | + __FILE__, __FUNCTION__, __LINE__ |
|
| 210 | + ); |
|
| 211 | + wp_die(EE_Error::get_notices()); |
|
| 212 | + } |
|
| 213 | + require_once EE_CORE . 'EE_Registry.core.php'; |
|
| 214 | + return EE_Registry::instance($this->dependency_map); |
|
| 215 | + } |
|
| 216 | + |
|
| 217 | + |
|
| 218 | + |
|
| 219 | + /** |
|
| 220 | + * @return void |
|
| 221 | + */ |
|
| 222 | + private function _load_class_tools() |
|
| 223 | + { |
|
| 224 | + if (! is_readable(EE_HELPERS . 'EEH_Class_Tools.helper.php')) { |
|
| 225 | + EE_Error::add_error( |
|
| 226 | + __('The EEH_Class_Tools helper could not be loaded.', 'event_espresso'), |
|
| 227 | + __FILE__, __FUNCTION__, __LINE__ |
|
| 228 | + ); |
|
| 229 | + } |
|
| 230 | + require_once EE_HELPERS . 'EEH_Class_Tools.helper.php'; |
|
| 231 | + } |
|
| 232 | + |
|
| 233 | + |
|
| 234 | + |
|
| 235 | + /** |
|
| 236 | + * called after the request stack has been fully processed |
|
| 237 | + * if any of the middleware apps has requested the plugin be deactivated, then we do that now |
|
| 238 | + * |
|
| 239 | + * @param EE_Request $request |
|
| 240 | + * @param EE_Response $response |
|
| 241 | + */ |
|
| 242 | + public function handle_response(EE_Request $request, EE_Response $response) |
|
| 243 | + { |
|
| 244 | + if ($response->plugin_deactivated()) { |
|
| 245 | + espresso_deactivate_plugin(EE_PLUGIN_BASENAME); |
|
| 246 | + } |
|
| 247 | + } |
|
| 248 | 248 | |
| 249 | 249 | |
| 250 | 250 | |
@@ -56,8 +56,8 @@ discard block |
||
| 56 | 56 | */ |
| 57 | 57 | public function __construct() { |
| 58 | 58 | // deprecated functions |
| 59 | - espresso_load_required('EE_Base', EE_CORE . 'EE_Base.core.php'); |
|
| 60 | - espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php'); |
|
| 59 | + espresso_load_required('EE_Base', EE_CORE.'EE_Base.core.php'); |
|
| 60 | + espresso_load_required('EE_Deprecated', EE_CORE.'EE_Deprecated.core.php'); |
|
| 61 | 61 | } |
| 62 | 62 | |
| 63 | 63 | |
@@ -106,7 +106,7 @@ discard block |
||
| 106 | 106 | // workarounds for PHP < 5.3 |
| 107 | 107 | $this->_load_class_tools(); |
| 108 | 108 | // deprecated functions |
| 109 | - espresso_load_required('EE_Deprecated', EE_CORE . 'EE_Deprecated.core.php'); |
|
| 109 | + espresso_load_required('EE_Deprecated', EE_CORE.'EE_Deprecated.core.php'); |
|
| 110 | 110 | $loader->getShared( |
| 111 | 111 | 'EventEspresso\core\services\notifications\PersistentAdminNoticeManager' |
| 112 | 112 | ); |
@@ -145,7 +145,7 @@ discard block |
||
| 145 | 145 | */ |
| 146 | 146 | public function dependency_map() |
| 147 | 147 | { |
| 148 | - if (! $this->dependency_map instanceof EE_Dependency_Map) { |
|
| 148 | + if ( ! $this->dependency_map instanceof EE_Dependency_Map) { |
|
| 149 | 149 | throw new EE_Error( |
| 150 | 150 | sprintf( |
| 151 | 151 | __('Invalid EE_Dependency_Map: "%1$s"', 'event_espresso'), |
@@ -164,7 +164,7 @@ discard block |
||
| 164 | 164 | */ |
| 165 | 165 | public function registry() |
| 166 | 166 | { |
| 167 | - if (! $this->registry instanceof EE_Registry) { |
|
| 167 | + if ( ! $this->registry instanceof EE_Registry) { |
|
| 168 | 168 | throw new EE_Error( |
| 169 | 169 | sprintf( |
| 170 | 170 | __('Invalid EE_Registry: "%1$s"', 'event_espresso'), |
@@ -182,14 +182,14 @@ discard block |
||
| 182 | 182 | */ |
| 183 | 183 | private function _load_dependency_map() |
| 184 | 184 | { |
| 185 | - if (! is_readable(EE_CORE . 'EE_Dependency_Map.core.php')) { |
|
| 185 | + if ( ! is_readable(EE_CORE.'EE_Dependency_Map.core.php')) { |
|
| 186 | 186 | EE_Error::add_error( |
| 187 | 187 | __('The EE_Dependency_Map core class could not be loaded.', 'event_espresso'), |
| 188 | 188 | __FILE__, __FUNCTION__, __LINE__ |
| 189 | 189 | ); |
| 190 | 190 | wp_die(EE_Error::get_notices()); |
| 191 | 191 | } |
| 192 | - require_once EE_CORE . 'EE_Dependency_Map.core.php'; |
|
| 192 | + require_once EE_CORE.'EE_Dependency_Map.core.php'; |
|
| 193 | 193 | return EE_Dependency_Map::instance($this->request, $this->response); |
| 194 | 194 | } |
| 195 | 195 | |
@@ -203,14 +203,14 @@ discard block |
||
| 203 | 203 | */ |
| 204 | 204 | private function _load_registry() |
| 205 | 205 | { |
| 206 | - if (! is_readable(EE_CORE . 'EE_Registry.core.php')) { |
|
| 206 | + if ( ! is_readable(EE_CORE.'EE_Registry.core.php')) { |
|
| 207 | 207 | EE_Error::add_error( |
| 208 | 208 | __('The EE_Registry core class could not be loaded.', 'event_espresso'), |
| 209 | 209 | __FILE__, __FUNCTION__, __LINE__ |
| 210 | 210 | ); |
| 211 | 211 | wp_die(EE_Error::get_notices()); |
| 212 | 212 | } |
| 213 | - require_once EE_CORE . 'EE_Registry.core.php'; |
|
| 213 | + require_once EE_CORE.'EE_Registry.core.php'; |
|
| 214 | 214 | return EE_Registry::instance($this->dependency_map); |
| 215 | 215 | } |
| 216 | 216 | |
@@ -221,13 +221,13 @@ discard block |
||
| 221 | 221 | */ |
| 222 | 222 | private function _load_class_tools() |
| 223 | 223 | { |
| 224 | - if (! is_readable(EE_HELPERS . 'EEH_Class_Tools.helper.php')) { |
|
| 224 | + if ( ! is_readable(EE_HELPERS.'EEH_Class_Tools.helper.php')) { |
|
| 225 | 225 | EE_Error::add_error( |
| 226 | 226 | __('The EEH_Class_Tools helper could not be loaded.', 'event_espresso'), |
| 227 | 227 | __FILE__, __FUNCTION__, __LINE__ |
| 228 | 228 | ); |
| 229 | 229 | } |
| 230 | - require_once EE_HELPERS . 'EEH_Class_Tools.helper.php'; |
|
| 230 | + require_once EE_HELPERS.'EEH_Class_Tools.helper.php'; |
|
| 231 | 231 | } |
| 232 | 232 | |
| 233 | 233 | |
@@ -12,9 +12,9 @@ discard block |
||
| 12 | 12 | $stages = glob(EE_CORE . 'data_migration_scripts/4_9_0_stages/*'); |
| 13 | 13 | $class_to_filepath = array(); |
| 14 | 14 | foreach ($stages as $filepath) { |
| 15 | - $matches = array(); |
|
| 16 | - preg_match('~4_9_0_stages/(.*).dmsstage.php~', $filepath, $matches); |
|
| 17 | - $class_to_filepath[$matches[1]] = $filepath; |
|
| 15 | + $matches = array(); |
|
| 16 | + preg_match('~4_9_0_stages/(.*).dmsstage.php~', $filepath, $matches); |
|
| 17 | + $class_to_filepath[$matches[1]] = $filepath; |
|
| 18 | 18 | } |
| 19 | 19 | //give addons a chance to autoload their stages too |
| 20 | 20 | $class_to_filepath = apply_filters('FHEE__EE_DMS_4_9_0__autoloaded_stages', $class_to_filepath); |
@@ -33,68 +33,68 @@ discard block |
||
| 33 | 33 | class EE_DMS_Core_4_9_0 extends EE_Data_Migration_Script_Base |
| 34 | 34 | { |
| 35 | 35 | |
| 36 | - /** |
|
| 37 | - * return EE_DMS_Core_4_9_0 |
|
| 38 | - * |
|
| 39 | - * @param TableManager $table_manager |
|
| 40 | - * @param TableAnalysis $table_analysis |
|
| 41 | - */ |
|
| 42 | - public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null) |
|
| 43 | - { |
|
| 44 | - $this->_pretty_name = esc_html__("Data Update to Event Espresso 4.9.0", "event_espresso"); |
|
| 45 | - $this->_priority = 10; |
|
| 46 | - $this->_migration_stages = array( |
|
| 47 | - new EE_DMS_4_9_0_Email_System_Question(), |
|
| 48 | - new EE_DMS_4_9_0_Answers_With_No_Registration(), |
|
| 49 | - ); |
|
| 50 | - parent::__construct($table_manager, $table_analysis); |
|
| 51 | - } |
|
| 36 | + /** |
|
| 37 | + * return EE_DMS_Core_4_9_0 |
|
| 38 | + * |
|
| 39 | + * @param TableManager $table_manager |
|
| 40 | + * @param TableAnalysis $table_analysis |
|
| 41 | + */ |
|
| 42 | + public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null) |
|
| 43 | + { |
|
| 44 | + $this->_pretty_name = esc_html__("Data Update to Event Espresso 4.9.0", "event_espresso"); |
|
| 45 | + $this->_priority = 10; |
|
| 46 | + $this->_migration_stages = array( |
|
| 47 | + new EE_DMS_4_9_0_Email_System_Question(), |
|
| 48 | + new EE_DMS_4_9_0_Answers_With_No_Registration(), |
|
| 49 | + ); |
|
| 50 | + parent::__construct($table_manager, $table_analysis); |
|
| 51 | + } |
|
| 52 | 52 | |
| 53 | 53 | |
| 54 | 54 | |
| 55 | - /** |
|
| 56 | - * Whether to migrate or not. |
|
| 57 | - * |
|
| 58 | - * @param array $version_array |
|
| 59 | - * @return bool |
|
| 60 | - */ |
|
| 61 | - public function can_migrate_from_version($version_array) |
|
| 62 | - { |
|
| 63 | - $version_string = $version_array['Core']; |
|
| 64 | - if (version_compare($version_string, '4.9.0', '<=') && version_compare($version_string, '4.8.0', '>=')) { |
|
| 65 | - // echo "$version_string can be migrated from"; |
|
| 66 | - return true; |
|
| 67 | - } elseif ( ! $version_string) { |
|
| 68 | - // echo "no version string provided: $version_string"; |
|
| 69 | - //no version string provided... this must be pre 4.3 |
|
| 70 | - return false;//changed mind. dont want people thinking they should migrate yet because they cant |
|
| 71 | - } else { |
|
| 72 | - // echo "$version_string doesnt apply"; |
|
| 73 | - return false; |
|
| 74 | - } |
|
| 75 | - } |
|
| 55 | + /** |
|
| 56 | + * Whether to migrate or not. |
|
| 57 | + * |
|
| 58 | + * @param array $version_array |
|
| 59 | + * @return bool |
|
| 60 | + */ |
|
| 61 | + public function can_migrate_from_version($version_array) |
|
| 62 | + { |
|
| 63 | + $version_string = $version_array['Core']; |
|
| 64 | + if (version_compare($version_string, '4.9.0', '<=') && version_compare($version_string, '4.8.0', '>=')) { |
|
| 65 | + // echo "$version_string can be migrated from"; |
|
| 66 | + return true; |
|
| 67 | + } elseif ( ! $version_string) { |
|
| 68 | + // echo "no version string provided: $version_string"; |
|
| 69 | + //no version string provided... this must be pre 4.3 |
|
| 70 | + return false;//changed mind. dont want people thinking they should migrate yet because they cant |
|
| 71 | + } else { |
|
| 72 | + // echo "$version_string doesnt apply"; |
|
| 73 | + return false; |
|
| 74 | + } |
|
| 75 | + } |
|
| 76 | 76 | |
| 77 | 77 | |
| 78 | 78 | |
| 79 | - /** |
|
| 80 | - * @return bool |
|
| 81 | - */ |
|
| 82 | - public function schema_changes_before_migration() |
|
| 83 | - { |
|
| 84 | - require_once(EE_HELPERS . 'EEH_Activation.helper.php'); |
|
| 85 | - $now_in_mysql = current_time('mysql', true); |
|
| 86 | - $table_name = 'esp_answer'; |
|
| 87 | - $sql = " ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 79 | + /** |
|
| 80 | + * @return bool |
|
| 81 | + */ |
|
| 82 | + public function schema_changes_before_migration() |
|
| 83 | + { |
|
| 84 | + require_once(EE_HELPERS . 'EEH_Activation.helper.php'); |
|
| 85 | + $now_in_mysql = current_time('mysql', true); |
|
| 86 | + $table_name = 'esp_answer'; |
|
| 87 | + $sql = " ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 88 | 88 | REG_ID int(10) unsigned NOT NULL, |
| 89 | 89 | QST_ID int(10) unsigned NOT NULL, |
| 90 | 90 | ANS_value text NOT NULL, |
| 91 | 91 | PRIMARY KEY (ANS_ID), |
| 92 | 92 | KEY REG_ID (REG_ID), |
| 93 | 93 | KEY QST_ID (QST_ID)"; |
| 94 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 95 | - $table_name = 'esp_attendee_meta'; |
|
| 96 | - $this->_get_table_manager()->dropIndexIfSizeNot($table_name, 'ATT_email'); |
|
| 97 | - $sql = "ATTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 94 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 95 | + $table_name = 'esp_attendee_meta'; |
|
| 96 | + $this->_get_table_manager()->dropIndexIfSizeNot($table_name, 'ATT_email'); |
|
| 97 | + $sql = "ATTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 98 | 98 | ATT_ID bigint(20) unsigned NOT NULL, |
| 99 | 99 | ATT_fname varchar(45) NOT NULL, |
| 100 | 100 | ATT_lname varchar(45) NOT NULL, |
@@ -111,9 +111,9 @@ discard block |
||
| 111 | 111 | KEY ATT_email (ATT_email(191)), |
| 112 | 112 | KEY ATT_lname (ATT_lname), |
| 113 | 113 | KEY ATT_fname (ATT_fname)"; |
| 114 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 115 | - $table_name = 'esp_checkin'; |
|
| 116 | - $sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 114 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 115 | + $table_name = 'esp_checkin'; |
|
| 116 | + $sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 117 | 117 | REG_ID int(10) unsigned NOT NULL, |
| 118 | 118 | DTT_ID int(10) unsigned NOT NULL, |
| 119 | 119 | CHK_in tinyint(1) unsigned NOT NULL DEFAULT 1, |
@@ -121,9 +121,9 @@ discard block |
||
| 121 | 121 | PRIMARY KEY (CHK_ID), |
| 122 | 122 | KEY REG_ID (REG_ID), |
| 123 | 123 | KEY DTT_ID (DTT_ID)"; |
| 124 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 125 | - $table_name = 'esp_country'; |
|
| 126 | - $sql = "CNT_ISO varchar(2) NOT NULL, |
|
| 124 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 125 | + $table_name = 'esp_country'; |
|
| 126 | + $sql = "CNT_ISO varchar(2) NOT NULL, |
|
| 127 | 127 | CNT_ISO3 varchar(3) NOT NULL, |
| 128 | 128 | RGN_ID tinyint(3) unsigned DEFAULT NULL, |
| 129 | 129 | CNT_name varchar(45) NOT NULL, |
@@ -139,29 +139,29 @@ discard block |
||
| 139 | 139 | CNT_is_EU tinyint(1) DEFAULT '0', |
| 140 | 140 | CNT_active tinyint(1) DEFAULT '0', |
| 141 | 141 | PRIMARY KEY (CNT_ISO)"; |
| 142 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 143 | - $table_name = 'esp_currency'; |
|
| 144 | - $sql = "CUR_code varchar(6) NOT NULL, |
|
| 142 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 143 | + $table_name = 'esp_currency'; |
|
| 144 | + $sql = "CUR_code varchar(6) NOT NULL, |
|
| 145 | 145 | CUR_single varchar(45) DEFAULT 'dollar', |
| 146 | 146 | CUR_plural varchar(45) DEFAULT 'dollars', |
| 147 | 147 | CUR_sign varchar(45) DEFAULT '$', |
| 148 | 148 | CUR_dec_plc varchar(1) NOT NULL DEFAULT '2', |
| 149 | 149 | CUR_active tinyint(1) DEFAULT '0', |
| 150 | 150 | PRIMARY KEY (CUR_code)"; |
| 151 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 152 | - //note: although this table is no longer in use, |
|
| 153 | - //it hasn't been removed because then queries to the model will have errors. |
|
| 154 | - //but you should expect this table and its corresponding model to be removed in |
|
| 155 | - //the next few months |
|
| 156 | - $table_name = 'esp_currency_payment_method'; |
|
| 157 | - $sql = "CPM_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 151 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 152 | + //note: although this table is no longer in use, |
|
| 153 | + //it hasn't been removed because then queries to the model will have errors. |
|
| 154 | + //but you should expect this table and its corresponding model to be removed in |
|
| 155 | + //the next few months |
|
| 156 | + $table_name = 'esp_currency_payment_method'; |
|
| 157 | + $sql = "CPM_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 158 | 158 | CUR_code varchar(6) NOT NULL, |
| 159 | 159 | PMD_ID int(11) NOT NULL, |
| 160 | 160 | PRIMARY KEY (CPM_ID), |
| 161 | 161 | KEY PMD_ID (PMD_ID)"; |
| 162 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 163 | - $table_name = 'esp_datetime'; |
|
| 164 | - $sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 162 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 163 | + $table_name = 'esp_datetime'; |
|
| 164 | + $sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 165 | 165 | EVT_ID bigint(20) unsigned NOT NULL, |
| 166 | 166 | DTT_name varchar(255) NOT NULL DEFAULT '', |
| 167 | 167 | DTT_description text NOT NULL, |
@@ -178,25 +178,25 @@ discard block |
||
| 178 | 178 | KEY DTT_EVT_start (DTT_EVT_start), |
| 179 | 179 | KEY EVT_ID (EVT_ID), |
| 180 | 180 | KEY DTT_is_primary (DTT_is_primary)"; |
| 181 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 182 | - $table_name = "esp_datetime_ticket"; |
|
| 183 | - $sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 181 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 182 | + $table_name = "esp_datetime_ticket"; |
|
| 183 | + $sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 184 | 184 | DTT_ID int(10) unsigned NOT NULL, |
| 185 | 185 | TKT_ID int(10) unsigned NOT NULL, |
| 186 | 186 | PRIMARY KEY (DTK_ID), |
| 187 | 187 | KEY DTT_ID (DTT_ID), |
| 188 | 188 | KEY TKT_ID (TKT_ID)"; |
| 189 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 190 | - $table_name = 'esp_event_message_template'; |
|
| 191 | - $sql = "EMT_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT, |
|
| 189 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 190 | + $table_name = 'esp_event_message_template'; |
|
| 191 | + $sql = "EMT_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT, |
|
| 192 | 192 | EVT_ID bigint(20) unsigned NOT NULL DEFAULT 0, |
| 193 | 193 | GRP_ID int(10) unsigned NOT NULL DEFAULT 0, |
| 194 | 194 | PRIMARY KEY (EMT_ID), |
| 195 | 195 | KEY EVT_ID (EVT_ID), |
| 196 | 196 | KEY GRP_ID (GRP_ID)"; |
| 197 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 198 | - $table_name = 'esp_event_meta'; |
|
| 199 | - $sql = "EVTM_ID int(10) NOT NULL AUTO_INCREMENT, |
|
| 197 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 198 | + $table_name = 'esp_event_meta'; |
|
| 199 | + $sql = "EVTM_ID int(10) NOT NULL AUTO_INCREMENT, |
|
| 200 | 200 | EVT_ID bigint(20) unsigned NOT NULL, |
| 201 | 201 | EVT_display_desc tinyint(1) unsigned NOT NULL DEFAULT 1, |
| 202 | 202 | EVT_display_ticket_selector tinyint(1) unsigned NOT NULL DEFAULT 1, |
@@ -211,34 +211,34 @@ discard block |
||
| 211 | 211 | EVT_donations tinyint(1) NULL, |
| 212 | 212 | PRIMARY KEY (EVTM_ID), |
| 213 | 213 | KEY EVT_ID (EVT_ID)"; |
| 214 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 215 | - $table_name = 'esp_event_question_group'; |
|
| 216 | - $sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 214 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 215 | + $table_name = 'esp_event_question_group'; |
|
| 216 | + $sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 217 | 217 | EVT_ID bigint(20) unsigned NOT NULL, |
| 218 | 218 | QSG_ID int(10) unsigned NOT NULL, |
| 219 | 219 | EQG_primary tinyint(1) unsigned NOT NULL DEFAULT 0, |
| 220 | 220 | PRIMARY KEY (EQG_ID), |
| 221 | 221 | KEY EVT_ID (EVT_ID), |
| 222 | 222 | KEY QSG_ID (QSG_ID)"; |
| 223 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 224 | - $table_name = 'esp_event_venue'; |
|
| 225 | - $sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 223 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 224 | + $table_name = 'esp_event_venue'; |
|
| 225 | + $sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 226 | 226 | EVT_ID bigint(20) unsigned NOT NULL, |
| 227 | 227 | VNU_ID bigint(20) unsigned NOT NULL, |
| 228 | 228 | EVV_primary tinyint(1) unsigned NOT NULL DEFAULT 0, |
| 229 | 229 | PRIMARY KEY (EVV_ID)"; |
| 230 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 231 | - $table_name = 'esp_extra_meta'; |
|
| 232 | - $sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 230 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 231 | + $table_name = 'esp_extra_meta'; |
|
| 232 | + $sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 233 | 233 | OBJ_ID int(11) DEFAULT NULL, |
| 234 | 234 | EXM_type varchar(45) DEFAULT NULL, |
| 235 | 235 | EXM_key varchar(45) DEFAULT NULL, |
| 236 | 236 | EXM_value text, |
| 237 | 237 | PRIMARY KEY (EXM_ID), |
| 238 | 238 | KEY EXM_type (EXM_type,OBJ_ID,EXM_key)"; |
| 239 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 240 | - $table_name = 'esp_extra_join'; |
|
| 241 | - $sql = "EXJ_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 239 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 240 | + $table_name = 'esp_extra_join'; |
|
| 241 | + $sql = "EXJ_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 242 | 242 | EXJ_first_model_id varchar(6) NOT NULL, |
| 243 | 243 | EXJ_first_model_name varchar(20) NOT NULL, |
| 244 | 244 | EXJ_second_model_id varchar(6) NOT NULL, |
@@ -246,9 +246,9 @@ discard block |
||
| 246 | 246 | PRIMARY KEY (EXJ_ID), |
| 247 | 247 | KEY first_model (EXJ_first_model_name,EXJ_first_model_id), |
| 248 | 248 | KEY second_model (EXJ_second_model_name,EXJ_second_model_id)"; |
| 249 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 250 | - $table_name = 'esp_line_item'; |
|
| 251 | - $sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 249 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 250 | + $table_name = 'esp_line_item'; |
|
| 251 | + $sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 252 | 252 | LIN_code varchar(245) NOT NULL DEFAULT '', |
| 253 | 253 | TXN_ID int(11) DEFAULT NULL, |
| 254 | 254 | LIN_name varchar(245) NOT NULL DEFAULT '', |
@@ -269,11 +269,11 @@ discard block |
||
| 269 | 269 | KEY txn_type_timestamp (TXN_ID,LIN_type,LIN_timestamp), |
| 270 | 270 | KEY txn_obj_id_obj_type (TXN_ID,OBJ_ID,OBJ_type), |
| 271 | 271 | KEY obj_id_obj_type (OBJ_ID,OBJ_type)"; |
| 272 | - $this->_get_table_manager()->dropIndex('esp_line_item', 'TXN_ID'); |
|
| 273 | - $this->_get_table_manager()->dropIndex('esp_line_item', 'LIN_code'); |
|
| 274 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 275 | - $table_name = 'esp_log'; |
|
| 276 | - $sql = "LOG_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 272 | + $this->_get_table_manager()->dropIndex('esp_line_item', 'TXN_ID'); |
|
| 273 | + $this->_get_table_manager()->dropIndex('esp_line_item', 'LIN_code'); |
|
| 274 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 275 | + $table_name = 'esp_log'; |
|
| 276 | + $sql = "LOG_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 277 | 277 | LOG_time datetime DEFAULT NULL, |
| 278 | 278 | OBJ_ID varchar(45) DEFAULT NULL, |
| 279 | 279 | OBJ_type varchar(45) DEFAULT NULL, |
@@ -284,12 +284,12 @@ discard block |
||
| 284 | 284 | KEY LOG_time (LOG_time), |
| 285 | 285 | KEY OBJ (OBJ_type,OBJ_ID), |
| 286 | 286 | KEY LOG_type (LOG_type)"; |
| 287 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 288 | - $table_name = 'esp_message'; |
|
| 289 | - $this->_get_table_manager()->dropIndexIfSizeNot($table_name, 'MSG_to'); |
|
| 290 | - $this->_get_table_manager()->dropIndexIfSizeNot($table_name, 'MSG_from'); |
|
| 291 | - $this->_get_table_manager()->dropIndexIfSizeNot($table_name, 'MSG_subject'); |
|
| 292 | - $sql = "MSG_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT, |
|
| 287 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 288 | + $table_name = 'esp_message'; |
|
| 289 | + $this->_get_table_manager()->dropIndexIfSizeNot($table_name, 'MSG_to'); |
|
| 290 | + $this->_get_table_manager()->dropIndexIfSizeNot($table_name, 'MSG_from'); |
|
| 291 | + $this->_get_table_manager()->dropIndexIfSizeNot($table_name, 'MSG_subject'); |
|
| 292 | + $sql = "MSG_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT, |
|
| 293 | 293 | GRP_ID int(10) unsigned NULL, |
| 294 | 294 | MSG_token varchar(255) NULL, |
| 295 | 295 | TXN_ID int(10) unsigned NULL, |
@@ -321,18 +321,18 @@ discard block |
||
| 321 | 321 | KEY STS_ID (STS_ID), |
| 322 | 322 | KEY MSG_created (MSG_created), |
| 323 | 323 | KEY MSG_modified (MSG_modified)"; |
| 324 | - $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 325 | - $table_name = 'esp_message_template'; |
|
| 326 | - $sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 324 | + $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 325 | + $table_name = 'esp_message_template'; |
|
| 326 | + $sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 327 | 327 | GRP_ID int(10) unsigned NOT NULL, |
| 328 | 328 | MTP_context varchar(50) NOT NULL, |
| 329 | 329 | MTP_template_field varchar(30) NOT NULL, |
| 330 | 330 | MTP_content text NOT NULL, |
| 331 | 331 | PRIMARY KEY (MTP_ID), |
| 332 | 332 | KEY GRP_ID (GRP_ID)"; |
| 333 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 334 | - $table_name = 'esp_message_template_group'; |
|
| 335 | - $sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 333 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 334 | + $table_name = 'esp_message_template_group'; |
|
| 335 | + $sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 336 | 336 | MTP_user_id int(10) NOT NULL DEFAULT '1', |
| 337 | 337 | MTP_name varchar(245) NOT NULL DEFAULT '', |
| 338 | 338 | MTP_description varchar(245) NOT NULL DEFAULT '', |
@@ -344,9 +344,9 @@ discard block |
||
| 344 | 344 | MTP_is_active tinyint(1) NOT NULL DEFAULT '1', |
| 345 | 345 | PRIMARY KEY (GRP_ID), |
| 346 | 346 | KEY MTP_user_id (MTP_user_id)"; |
| 347 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 348 | - $table_name = 'esp_payment'; |
|
| 349 | - $sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 347 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 348 | + $table_name = 'esp_payment'; |
|
| 349 | + $sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 350 | 350 | TXN_ID int(10) unsigned DEFAULT NULL, |
| 351 | 351 | STS_ID varchar(3) DEFAULT NULL, |
| 352 | 352 | PAY_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00', |
@@ -363,9 +363,9 @@ discard block |
||
| 363 | 363 | PRIMARY KEY (PAY_ID), |
| 364 | 364 | KEY PAY_timestamp (PAY_timestamp), |
| 365 | 365 | KEY TXN_ID (TXN_ID)"; |
| 366 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 367 | - $table_name = 'esp_payment_method'; |
|
| 368 | - $sql = "PMD_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 366 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 367 | + $table_name = 'esp_payment_method'; |
|
| 368 | + $sql = "PMD_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 369 | 369 | PMD_type varchar(124) DEFAULT NULL, |
| 370 | 370 | PMD_name varchar(255) DEFAULT NULL, |
| 371 | 371 | PMD_desc text, |
@@ -381,24 +381,24 @@ discard block |
||
| 381 | 381 | PRIMARY KEY (PMD_ID), |
| 382 | 382 | UNIQUE KEY PMD_slug_UNIQUE (PMD_slug), |
| 383 | 383 | KEY PMD_type (PMD_type)"; |
| 384 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 385 | - $table_name = "esp_ticket_price"; |
|
| 386 | - $sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 384 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 385 | + $table_name = "esp_ticket_price"; |
|
| 386 | + $sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 387 | 387 | TKT_ID int(10) unsigned NOT NULL, |
| 388 | 388 | PRC_ID int(10) unsigned NOT NULL, |
| 389 | 389 | PRIMARY KEY (TKP_ID), |
| 390 | 390 | KEY TKT_ID (TKT_ID), |
| 391 | 391 | KEY PRC_ID (PRC_ID)"; |
| 392 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 393 | - $table_name = "esp_ticket_template"; |
|
| 394 | - $sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 392 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 393 | + $table_name = "esp_ticket_template"; |
|
| 394 | + $sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 395 | 395 | TTM_name varchar(45) NOT NULL, |
| 396 | 396 | TTM_description text, |
| 397 | 397 | TTM_file varchar(45), |
| 398 | 398 | PRIMARY KEY (TTM_ID)"; |
| 399 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 400 | - $table_name = 'esp_question'; |
|
| 401 | - $sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 399 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 400 | + $table_name = 'esp_question'; |
|
| 401 | + $sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 402 | 402 | QST_display_text text NOT NULL, |
| 403 | 403 | QST_admin_label varchar(255) NOT NULL, |
| 404 | 404 | QST_system varchar(25) DEFAULT NULL, |
@@ -412,18 +412,18 @@ discard block |
||
| 412 | 412 | QST_deleted tinyint(2) unsigned NOT NULL DEFAULT 0, |
| 413 | 413 | PRIMARY KEY (QST_ID), |
| 414 | 414 | KEY QST_order (QST_order)'; |
| 415 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 416 | - $table_name = 'esp_question_group_question'; |
|
| 417 | - $sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 415 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 416 | + $table_name = 'esp_question_group_question'; |
|
| 417 | + $sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 418 | 418 | QSG_ID int(10) unsigned NOT NULL, |
| 419 | 419 | QST_ID int(10) unsigned NOT NULL, |
| 420 | 420 | QGQ_order int(10) unsigned NOT NULL DEFAULT 0, |
| 421 | 421 | PRIMARY KEY (QGQ_ID), |
| 422 | 422 | KEY QST_ID (QST_ID), |
| 423 | 423 | KEY QSG_ID_order (QSG_ID,QGQ_order)"; |
| 424 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 425 | - $table_name = 'esp_question_option'; |
|
| 426 | - $sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 424 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 425 | + $table_name = 'esp_question_option'; |
|
| 426 | + $sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 427 | 427 | QSO_value varchar(255) NOT NULL, |
| 428 | 428 | QSO_desc text NOT NULL, |
| 429 | 429 | QST_ID int(10) unsigned NOT NULL, |
@@ -433,9 +433,9 @@ discard block |
||
| 433 | 433 | PRIMARY KEY (QSO_ID), |
| 434 | 434 | KEY QST_ID (QST_ID), |
| 435 | 435 | KEY QSO_order (QSO_order)"; |
| 436 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 437 | - $table_name = 'esp_registration'; |
|
| 438 | - $sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 436 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 437 | + $table_name = 'esp_registration'; |
|
| 438 | + $sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 439 | 439 | EVT_ID bigint(20) unsigned NOT NULL, |
| 440 | 440 | ATT_ID bigint(20) unsigned NOT NULL, |
| 441 | 441 | TXN_ID int(10) unsigned NOT NULL, |
@@ -459,18 +459,18 @@ discard block |
||
| 459 | 459 | KEY TKT_ID (TKT_ID), |
| 460 | 460 | KEY EVT_ID (EVT_ID), |
| 461 | 461 | KEY STS_ID (STS_ID)"; |
| 462 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 463 | - $table_name = 'esp_registration_payment'; |
|
| 464 | - $sql = "RPY_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 462 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 463 | + $table_name = 'esp_registration_payment'; |
|
| 464 | + $sql = "RPY_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 465 | 465 | REG_ID int(10) unsigned NOT NULL, |
| 466 | 466 | PAY_ID int(10) unsigned NULL, |
| 467 | 467 | RPY_amount decimal(12,3) NOT NULL DEFAULT '0.00', |
| 468 | 468 | PRIMARY KEY (RPY_ID), |
| 469 | 469 | KEY REG_ID (REG_ID), |
| 470 | 470 | KEY PAY_ID (PAY_ID)"; |
| 471 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 472 | - $table_name = 'esp_state'; |
|
| 473 | - $sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT, |
|
| 471 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 472 | + $table_name = 'esp_state'; |
|
| 473 | + $sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT, |
|
| 474 | 474 | CNT_ISO varchar(2) NOT NULL, |
| 475 | 475 | STA_abbrev varchar(24) NOT NULL, |
| 476 | 476 | STA_name varchar(100) NOT NULL, |
@@ -478,9 +478,9 @@ discard block |
||
| 478 | 478 | PRIMARY KEY (STA_ID), |
| 479 | 479 | KEY STA_abbrev (STA_abbrev), |
| 480 | 480 | KEY CNT_ISO (CNT_ISO)"; |
| 481 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 482 | - $table_name = 'esp_status'; |
|
| 483 | - $sql = "STS_ID varchar(3) NOT NULL, |
|
| 481 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 482 | + $table_name = 'esp_status'; |
|
| 483 | + $sql = "STS_ID varchar(3) NOT NULL, |
|
| 484 | 484 | STS_code varchar(45) NOT NULL, |
| 485 | 485 | STS_type varchar(45) NOT NULL, |
| 486 | 486 | STS_can_edit tinyint(1) NOT NULL DEFAULT 0, |
@@ -488,9 +488,9 @@ discard block |
||
| 488 | 488 | STS_open tinyint(1) NOT NULL DEFAULT 1, |
| 489 | 489 | UNIQUE KEY STS_ID_UNIQUE (STS_ID), |
| 490 | 490 | KEY STS_type (STS_type)"; |
| 491 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 492 | - $table_name = 'esp_transaction'; |
|
| 493 | - $sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 491 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 492 | + $table_name = 'esp_transaction'; |
|
| 493 | + $sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 494 | 494 | TXN_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00', |
| 495 | 495 | TXN_total decimal(12,3) DEFAULT '0.00', |
| 496 | 496 | TXN_paid decimal(12,3) NOT NULL DEFAULT '0.00', |
@@ -502,9 +502,9 @@ discard block |
||
| 502 | 502 | PRIMARY KEY (TXN_ID), |
| 503 | 503 | KEY TXN_timestamp (TXN_timestamp), |
| 504 | 504 | KEY STS_ID (STS_ID)"; |
| 505 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 506 | - $table_name = 'esp_venue_meta'; |
|
| 507 | - $sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 505 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 506 | + $table_name = 'esp_venue_meta'; |
|
| 507 | + $sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT, |
|
| 508 | 508 | VNU_ID bigint(20) unsigned NOT NULL DEFAULT 0, |
| 509 | 509 | VNU_address varchar(255) DEFAULT NULL, |
| 510 | 510 | VNU_address2 varchar(255) DEFAULT NULL, |
@@ -523,10 +523,10 @@ discard block |
||
| 523 | 523 | KEY VNU_ID (VNU_ID), |
| 524 | 524 | KEY STA_ID (STA_ID), |
| 525 | 525 | KEY CNT_ISO (CNT_ISO)"; |
| 526 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 527 | - //modified tables |
|
| 528 | - $table_name = "esp_price"; |
|
| 529 | - $sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 526 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 527 | + //modified tables |
|
| 528 | + $table_name = "esp_price"; |
|
| 529 | + $sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 530 | 530 | PRT_ID tinyint(3) unsigned NOT NULL, |
| 531 | 531 | PRC_amount decimal(12,3) NOT NULL DEFAULT '0.00', |
| 532 | 532 | PRC_name varchar(245) NOT NULL, |
@@ -539,9 +539,9 @@ discard block |
||
| 539 | 539 | PRC_parent int(10) unsigned DEFAULT 0, |
| 540 | 540 | PRIMARY KEY (PRC_ID), |
| 541 | 541 | KEY PRT_ID (PRT_ID)"; |
| 542 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 543 | - $table_name = "esp_price_type"; |
|
| 544 | - $sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT, |
|
| 542 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 543 | + $table_name = "esp_price_type"; |
|
| 544 | + $sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT, |
|
| 545 | 545 | PRT_name varchar(45) NOT NULL, |
| 546 | 546 | PBT_ID tinyint(3) unsigned NOT NULL DEFAULT '1', |
| 547 | 547 | PRT_is_percent tinyint(1) NOT NULL DEFAULT '0', |
@@ -550,9 +550,9 @@ discard block |
||
| 550 | 550 | PRT_deleted tinyint(1) NOT NULL DEFAULT '0', |
| 551 | 551 | UNIQUE KEY PRT_name_UNIQUE (PRT_name), |
| 552 | 552 | PRIMARY KEY (PRT_ID)"; |
| 553 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 554 | - $table_name = "esp_ticket"; |
|
| 555 | - $sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 553 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB '); |
|
| 554 | + $table_name = "esp_ticket"; |
|
| 555 | + $sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 556 | 556 | TTM_ID int(10) unsigned NOT NULL, |
| 557 | 557 | TKT_name varchar(245) NOT NULL DEFAULT '', |
| 558 | 558 | TKT_description text NOT NULL, |
@@ -575,9 +575,9 @@ discard block |
||
| 575 | 575 | TKT_deleted tinyint(1) NOT NULL DEFAULT '0', |
| 576 | 576 | PRIMARY KEY (TKT_ID), |
| 577 | 577 | KEY TKT_start_date (TKT_start_date)"; |
| 578 | - $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 579 | - $table_name = 'esp_question_group'; |
|
| 580 | - $sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 578 | + $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 579 | + $table_name = 'esp_question_group'; |
|
| 580 | + $sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
| 581 | 581 | QSG_name varchar(255) NOT NULL, |
| 582 | 582 | QSG_identifier varchar(100) NOT NULL, |
| 583 | 583 | QSG_desc text NULL, |
@@ -590,145 +590,145 @@ discard block |
||
| 590 | 590 | PRIMARY KEY (QSG_ID), |
| 591 | 591 | UNIQUE KEY QSG_identifier_UNIQUE (QSG_identifier), |
| 592 | 592 | KEY QSG_order (QSG_order)'; |
| 593 | - $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 594 | - /** @var EE_DMS_Core_4_1_0 $script_4_1_defaults */ |
|
| 595 | - $script_4_1_defaults = EE_Registry::instance()->load_dms('Core_4_1_0'); |
|
| 596 | - //(because many need to convert old string states to foreign keys into the states table) |
|
| 597 | - $script_4_1_defaults->insert_default_states(); |
|
| 598 | - $script_4_1_defaults->insert_default_countries(); |
|
| 599 | - /** @var EE_DMS_Core_4_5_0 $script_4_5_defaults */ |
|
| 600 | - $script_4_5_defaults = EE_Registry::instance()->load_dms('Core_4_5_0'); |
|
| 601 | - $script_4_5_defaults->insert_default_price_types(); |
|
| 602 | - $script_4_5_defaults->insert_default_prices(); |
|
| 603 | - $script_4_5_defaults->insert_default_tickets(); |
|
| 604 | - /** @var EE_DMS_Core_4_6_0 $script_4_6_defaults */ |
|
| 605 | - $script_4_6_defaults = EE_Registry::instance()->load_dms('Core_4_6_0'); |
|
| 606 | - $script_4_6_defaults->add_default_admin_only_payments(); |
|
| 607 | - $script_4_6_defaults->insert_default_currencies(); |
|
| 608 | - /** @var EE_DMS_Core_4_8_0 $script_4_8_defaults */ |
|
| 609 | - $script_4_8_defaults = EE_Registry::instance()->load_dms('Core_4_8_0'); |
|
| 610 | - $script_4_8_defaults->verify_new_countries(); |
|
| 611 | - $script_4_8_defaults->verify_new_currencies(); |
|
| 612 | - $this->verify_db_collations(); |
|
| 613 | - $this->verify_db_collations_again(); |
|
| 614 | - return true; |
|
| 615 | - } |
|
| 593 | + $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB'); |
|
| 594 | + /** @var EE_DMS_Core_4_1_0 $script_4_1_defaults */ |
|
| 595 | + $script_4_1_defaults = EE_Registry::instance()->load_dms('Core_4_1_0'); |
|
| 596 | + //(because many need to convert old string states to foreign keys into the states table) |
|
| 597 | + $script_4_1_defaults->insert_default_states(); |
|
| 598 | + $script_4_1_defaults->insert_default_countries(); |
|
| 599 | + /** @var EE_DMS_Core_4_5_0 $script_4_5_defaults */ |
|
| 600 | + $script_4_5_defaults = EE_Registry::instance()->load_dms('Core_4_5_0'); |
|
| 601 | + $script_4_5_defaults->insert_default_price_types(); |
|
| 602 | + $script_4_5_defaults->insert_default_prices(); |
|
| 603 | + $script_4_5_defaults->insert_default_tickets(); |
|
| 604 | + /** @var EE_DMS_Core_4_6_0 $script_4_6_defaults */ |
|
| 605 | + $script_4_6_defaults = EE_Registry::instance()->load_dms('Core_4_6_0'); |
|
| 606 | + $script_4_6_defaults->add_default_admin_only_payments(); |
|
| 607 | + $script_4_6_defaults->insert_default_currencies(); |
|
| 608 | + /** @var EE_DMS_Core_4_8_0 $script_4_8_defaults */ |
|
| 609 | + $script_4_8_defaults = EE_Registry::instance()->load_dms('Core_4_8_0'); |
|
| 610 | + $script_4_8_defaults->verify_new_countries(); |
|
| 611 | + $script_4_8_defaults->verify_new_currencies(); |
|
| 612 | + $this->verify_db_collations(); |
|
| 613 | + $this->verify_db_collations_again(); |
|
| 614 | + return true; |
|
| 615 | + } |
|
| 616 | 616 | |
| 617 | 617 | |
| 618 | 618 | |
| 619 | - /** |
|
| 620 | - * @return boolean |
|
| 621 | - */ |
|
| 622 | - public function schema_changes_after_migration() |
|
| 623 | - { |
|
| 624 | - return true; |
|
| 625 | - } |
|
| 619 | + /** |
|
| 620 | + * @return boolean |
|
| 621 | + */ |
|
| 622 | + public function schema_changes_after_migration() |
|
| 623 | + { |
|
| 624 | + return true; |
|
| 625 | + } |
|
| 626 | 626 | |
| 627 | 627 | |
| 628 | 628 | |
| 629 | - public function migration_page_hooks() |
|
| 630 | - { |
|
| 631 | - } |
|
| 629 | + public function migration_page_hooks() |
|
| 630 | + { |
|
| 631 | + } |
|
| 632 | 632 | |
| 633 | 633 | |
| 634 | 634 | |
| 635 | - /** |
|
| 636 | - * Verify all EE4 models' tables use utf8mb4 collation |
|
| 637 | - * |
|
| 638 | - * @return void |
|
| 639 | - */ |
|
| 640 | - public function verify_db_collations() |
|
| 641 | - { |
|
| 642 | - global $wpdb; |
|
| 643 | - //double-check we haven't already done it or that that the DB doesn't support utf8mb4 |
|
| 644 | - if ('utf8mb4' !== $wpdb->charset |
|
| 645 | - || get_option('ee_verified_db_collations', false)) { |
|
| 646 | - return; |
|
| 647 | - } |
|
| 648 | - // grab tables from each model |
|
| 649 | - $tables_to_check = array(); |
|
| 650 | - foreach (EE_Registry::instance()->non_abstract_db_models as $model_name) { |
|
| 651 | - if (method_exists($model_name, 'instance')) { |
|
| 652 | - $model_obj = call_user_func(array($model_name, 'instance')); |
|
| 653 | - if ($model_obj instanceof EEM_Base) { |
|
| 654 | - foreach ($model_obj->get_tables() as $table) { |
|
| 655 | - if ( |
|
| 656 | - strpos($table->get_table_name(), 'esp_') |
|
| 657 | - && (is_main_site()//for main tables, verify global tables |
|
| 658 | - || ! $table->is_global()//if not the main site, then only verify non-global tables (avoid doubling up) |
|
| 659 | - ) |
|
| 660 | - && function_exists('maybe_convert_table_to_utf8mb4') |
|
| 661 | - ) { |
|
| 662 | - $tables_to_check[] = $table->get_table_name(); |
|
| 663 | - } |
|
| 664 | - } |
|
| 665 | - } |
|
| 666 | - } |
|
| 667 | - } |
|
| 668 | - //and let's just be sure these addons' tables get migrated too. They already get handled if their addons are active |
|
| 669 | - //when this code is run, but not otherwise. Once we record what tables EE added, we'll be able to use that instead |
|
| 670 | - //of hard-coding this |
|
| 671 | - $addon_tables = array( |
|
| 672 | - //mailchimp |
|
| 673 | - 'esp_event_mailchimp_list_group', |
|
| 674 | - 'esp_event_question_mailchimp_field', |
|
| 675 | - //multisite |
|
| 676 | - 'esp_blog_meta', |
|
| 677 | - //people |
|
| 678 | - 'esp_people_to_post', |
|
| 679 | - //promotions |
|
| 680 | - 'esp_promotion', |
|
| 681 | - 'esp_promotion_object', |
|
| 682 | - ); |
|
| 683 | - foreach ($addon_tables as $table_name) { |
|
| 684 | - $tables_to_check[] = $table_name; |
|
| 685 | - } |
|
| 686 | - $this->_verify_db_collations_for_tables(array_unique($tables_to_check)); |
|
| 687 | - //ok and now let's remember this was done (without needing to check the db schemas all over again) |
|
| 688 | - add_option('ee_verified_db_collations', true, null, 'no'); |
|
| 689 | - //seeing how this ran with the fix from 10435, no need to check again |
|
| 690 | - add_option('ee_verified_db_collations_again',true,null,'no'); |
|
| 691 | - } |
|
| 635 | + /** |
|
| 636 | + * Verify all EE4 models' tables use utf8mb4 collation |
|
| 637 | + * |
|
| 638 | + * @return void |
|
| 639 | + */ |
|
| 640 | + public function verify_db_collations() |
|
| 641 | + { |
|
| 642 | + global $wpdb; |
|
| 643 | + //double-check we haven't already done it or that that the DB doesn't support utf8mb4 |
|
| 644 | + if ('utf8mb4' !== $wpdb->charset |
|
| 645 | + || get_option('ee_verified_db_collations', false)) { |
|
| 646 | + return; |
|
| 647 | + } |
|
| 648 | + // grab tables from each model |
|
| 649 | + $tables_to_check = array(); |
|
| 650 | + foreach (EE_Registry::instance()->non_abstract_db_models as $model_name) { |
|
| 651 | + if (method_exists($model_name, 'instance')) { |
|
| 652 | + $model_obj = call_user_func(array($model_name, 'instance')); |
|
| 653 | + if ($model_obj instanceof EEM_Base) { |
|
| 654 | + foreach ($model_obj->get_tables() as $table) { |
|
| 655 | + if ( |
|
| 656 | + strpos($table->get_table_name(), 'esp_') |
|
| 657 | + && (is_main_site()//for main tables, verify global tables |
|
| 658 | + || ! $table->is_global()//if not the main site, then only verify non-global tables (avoid doubling up) |
|
| 659 | + ) |
|
| 660 | + && function_exists('maybe_convert_table_to_utf8mb4') |
|
| 661 | + ) { |
|
| 662 | + $tables_to_check[] = $table->get_table_name(); |
|
| 663 | + } |
|
| 664 | + } |
|
| 665 | + } |
|
| 666 | + } |
|
| 667 | + } |
|
| 668 | + //and let's just be sure these addons' tables get migrated too. They already get handled if their addons are active |
|
| 669 | + //when this code is run, but not otherwise. Once we record what tables EE added, we'll be able to use that instead |
|
| 670 | + //of hard-coding this |
|
| 671 | + $addon_tables = array( |
|
| 672 | + //mailchimp |
|
| 673 | + 'esp_event_mailchimp_list_group', |
|
| 674 | + 'esp_event_question_mailchimp_field', |
|
| 675 | + //multisite |
|
| 676 | + 'esp_blog_meta', |
|
| 677 | + //people |
|
| 678 | + 'esp_people_to_post', |
|
| 679 | + //promotions |
|
| 680 | + 'esp_promotion', |
|
| 681 | + 'esp_promotion_object', |
|
| 682 | + ); |
|
| 683 | + foreach ($addon_tables as $table_name) { |
|
| 684 | + $tables_to_check[] = $table_name; |
|
| 685 | + } |
|
| 686 | + $this->_verify_db_collations_for_tables(array_unique($tables_to_check)); |
|
| 687 | + //ok and now let's remember this was done (without needing to check the db schemas all over again) |
|
| 688 | + add_option('ee_verified_db_collations', true, null, 'no'); |
|
| 689 | + //seeing how this ran with the fix from 10435, no need to check again |
|
| 690 | + add_option('ee_verified_db_collations_again',true,null,'no'); |
|
| 691 | + } |
|
| 692 | 692 | |
| 693 | 693 | |
| 694 | 694 | |
| 695 | - /** |
|
| 696 | - * Verifies DB collations because a bug was discovered on https://events.codebasehq.com/projects/event-espresso/tickets/10435 |
|
| 697 | - * which meant some DB collations might not have been updated |
|
| 698 | - * @return void |
|
| 699 | - */ |
|
| 700 | - public function verify_db_collations_again(){ |
|
| 701 | - global $wpdb; |
|
| 702 | - //double-check we haven't already done this or that the DB doesn't support it |
|
| 703 | - //compare to how WordPress' upgrade_430() function does this check |
|
| 704 | - if ('utf8mb4' !== $wpdb->charset |
|
| 705 | - || get_option('ee_verified_db_collations_again', false)) { |
|
| 706 | - return; |
|
| 707 | - } |
|
| 708 | - $tables_to_check = array( |
|
| 709 | - 'esp_attendee_meta', |
|
| 710 | - 'esp_message' |
|
| 711 | - ); |
|
| 712 | - $this->_verify_db_collations_for_tables(array_unique($tables_to_check)); |
|
| 713 | - add_option('ee_verified_db_collations_again',true,null,'no'); |
|
| 714 | - } |
|
| 695 | + /** |
|
| 696 | + * Verifies DB collations because a bug was discovered on https://events.codebasehq.com/projects/event-espresso/tickets/10435 |
|
| 697 | + * which meant some DB collations might not have been updated |
|
| 698 | + * @return void |
|
| 699 | + */ |
|
| 700 | + public function verify_db_collations_again(){ |
|
| 701 | + global $wpdb; |
|
| 702 | + //double-check we haven't already done this or that the DB doesn't support it |
|
| 703 | + //compare to how WordPress' upgrade_430() function does this check |
|
| 704 | + if ('utf8mb4' !== $wpdb->charset |
|
| 705 | + || get_option('ee_verified_db_collations_again', false)) { |
|
| 706 | + return; |
|
| 707 | + } |
|
| 708 | + $tables_to_check = array( |
|
| 709 | + 'esp_attendee_meta', |
|
| 710 | + 'esp_message' |
|
| 711 | + ); |
|
| 712 | + $this->_verify_db_collations_for_tables(array_unique($tables_to_check)); |
|
| 713 | + add_option('ee_verified_db_collations_again',true,null,'no'); |
|
| 714 | + } |
|
| 715 | 715 | |
| 716 | 716 | |
| 717 | 717 | |
| 718 | - /** |
|
| 719 | - * Runs maybe_convert_table_to_utf8mb4 on the specified tables |
|
| 720 | - * @param $tables_to_check |
|
| 721 | - * @return boolean true if logic ran, false if it didn't |
|
| 722 | - */ |
|
| 723 | - protected function _verify_db_collations_for_tables($tables_to_check) |
|
| 724 | - { |
|
| 725 | - foreach ($tables_to_check as $table_name) { |
|
| 726 | - $table_name = $this->_table_analysis->ensureTableNameHasPrefix($table_name); |
|
| 727 | - if ( ! apply_filters('FHEE__EE_DMS_Core_4_9_0__verify_db_collations__check_overridden', false, $table_name ) |
|
| 728 | - && $this->_get_table_analysis()->tableExists($table_name) |
|
| 729 | - ) { |
|
| 730 | - maybe_convert_table_to_utf8mb4($table_name); |
|
| 731 | - } |
|
| 732 | - } |
|
| 733 | - } |
|
| 718 | + /** |
|
| 719 | + * Runs maybe_convert_table_to_utf8mb4 on the specified tables |
|
| 720 | + * @param $tables_to_check |
|
| 721 | + * @return boolean true if logic ran, false if it didn't |
|
| 722 | + */ |
|
| 723 | + protected function _verify_db_collations_for_tables($tables_to_check) |
|
| 724 | + { |
|
| 725 | + foreach ($tables_to_check as $table_name) { |
|
| 726 | + $table_name = $this->_table_analysis->ensureTableNameHasPrefix($table_name); |
|
| 727 | + if ( ! apply_filters('FHEE__EE_DMS_Core_4_9_0__verify_db_collations__check_overridden', false, $table_name ) |
|
| 728 | + && $this->_get_table_analysis()->tableExists($table_name) |
|
| 729 | + ) { |
|
| 730 | + maybe_convert_table_to_utf8mb4($table_name); |
|
| 731 | + } |
|
| 732 | + } |
|
| 733 | + } |
|
| 734 | 734 | } |
| 735 | 735 | \ No newline at end of file |