@@ -129,7 +129,7 @@ discard block |
||
129 | 129 | */ |
130 | 130 | public function messages_autoload_paths($dir_ref) |
131 | 131 | { |
132 | - $dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/'; |
|
132 | + $dir_ref[] = EE_CAF_LIBRARIES.'shortcodes/'; |
|
133 | 133 | |
134 | 134 | return $dir_ref; |
135 | 135 | } |
@@ -245,32 +245,32 @@ discard block |
||
245 | 245 | ) { |
246 | 246 | |
247 | 247 | // we're only modifying templates for the default template pack |
248 | - if (! $template_pack instanceof EE_Messages_Template_Pack_Default) { |
|
248 | + if ( ! $template_pack instanceof EE_Messages_Template_Pack_Default) { |
|
249 | 249 | return $contents; |
250 | 250 | } |
251 | 251 | |
252 | 252 | // the template file name we're replacing contents for. |
253 | - $template_file_prefix = $field . '_' . $context; |
|
254 | - $msg_prefix = $messenger->name . '_' . $message_type->name . '_'; |
|
253 | + $template_file_prefix = $field.'_'.$context; |
|
254 | + $msg_prefix = $messenger->name.'_'.$message_type->name.'_'; |
|
255 | 255 | |
256 | - $base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/'; |
|
256 | + $base_path = EE_CAF_LIBRARIES.'messages/defaults/default/'; |
|
257 | 257 | |
258 | 258 | if ($messenger->name == 'email' && $message_type->name == 'registration') { |
259 | 259 | switch ($template_file_prefix) { |
260 | 260 | case 'question_list_admin': |
261 | 261 | case 'question_list_attendee': |
262 | 262 | case 'question_list_primary_attendee': |
263 | - $path = $base_path . $msg_prefix . 'question_list.template.php'; |
|
263 | + $path = $base_path.$msg_prefix.'question_list.template.php'; |
|
264 | 264 | $contents = EEH_Template::display_template($path, array(), true); |
265 | 265 | break; |
266 | 266 | |
267 | 267 | case 'attendee_list_primary_attendee': |
268 | - $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
268 | + $path = $base_path.$msg_prefix.'attendee_list.template.php'; |
|
269 | 269 | $contents = EEH_Template::display_template($path, array(), true); |
270 | 270 | break; |
271 | 271 | |
272 | 272 | case 'attendee_list_admin': |
273 | - $path = $base_path . $msg_prefix . 'attendee_list_admin.template.php'; |
|
273 | + $path = $base_path.$msg_prefix.'attendee_list_admin.template.php'; |
|
274 | 274 | $contents = EEH_Template::display_template( |
275 | 275 | $path, |
276 | 276 | array(), |
@@ -283,31 +283,31 @@ discard block |
||
283 | 283 | break; |
284 | 284 | |
285 | 285 | case 'event_list_attendee': |
286 | - $path = $base_path . $msg_prefix . 'event_list_attendee.template.php'; |
|
286 | + $path = $base_path.$msg_prefix.'event_list_attendee.template.php'; |
|
287 | 287 | $contents = EEH_Template::display_template($path, array(), true); |
288 | 288 | break; |
289 | 289 | } |
290 | 290 | } elseif ($messenger->name == 'email' && $message_type->name == 'newsletter') { |
291 | 291 | switch ($template_file_prefix) { |
292 | 292 | case 'content_attendee': |
293 | - $path = $base_path . $msg_prefix . 'content.template.php'; |
|
293 | + $path = $base_path.$msg_prefix.'content.template.php'; |
|
294 | 294 | $contents = EEH_Template::display_template($path, array(), true); |
295 | 295 | break; |
296 | 296 | |
297 | 297 | case 'newsletter_content_attendee': |
298 | - $path = $base_path . $msg_prefix . 'newsletter_content.template.php'; |
|
298 | + $path = $base_path.$msg_prefix.'newsletter_content.template.php'; |
|
299 | 299 | $contents = EEH_Template::display_template($path, array(), true); |
300 | 300 | break; |
301 | 301 | |
302 | 302 | case 'newsletter_subject_attendee': |
303 | - $path = $base_path . $msg_prefix . 'subject.template.php'; |
|
303 | + $path = $base_path.$msg_prefix.'subject.template.php'; |
|
304 | 304 | $contents = EEH_Template::display_template($path, array(), true); |
305 | 305 | break; |
306 | 306 | } |
307 | 307 | } elseif ($messenger->name == 'html' && $message_type->name == 'receipt') { |
308 | 308 | switch ($template_file_prefix) { |
309 | 309 | case 'attendee_list_purchaser': |
310 | - $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
310 | + $path = $base_path.$msg_prefix.'attendee_list.template.php'; |
|
311 | 311 | $contents = EEH_Template::display_template($path, array(), true); |
312 | 312 | break; |
313 | 313 | } |
@@ -338,8 +338,8 @@ discard block |
||
338 | 338 | if ($msg instanceof EE_message_type && in_array($msg->name, $include_with)) { |
339 | 339 | $contexts = array_keys($msg->get_contexts()); |
340 | 340 | foreach ($contexts as $context) { |
341 | - $valid_shortcodes[ $context ][] = 'question_list'; |
|
342 | - $valid_shortcodes[ $context ][] = 'question'; |
|
341 | + $valid_shortcodes[$context][] = 'question_list'; |
|
342 | + $valid_shortcodes[$context][] = 'question'; |
|
343 | 343 | } |
344 | 344 | } |
345 | 345 | |
@@ -383,7 +383,7 @@ discard block |
||
383 | 383 | $extra_data |
384 | 384 | ) && isset($extra_data['data']) ? $extra_data['data'] : $aee; |
385 | 385 | |
386 | - if (! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) { |
|
386 | + if ( ! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) { |
|
387 | 387 | return $parsed; |
388 | 388 | } |
389 | 389 | |
@@ -392,9 +392,9 @@ discard block |
||
392 | 392 | if ( |
393 | 393 | $question instanceof EE_Question |
394 | 394 | && trim($question->display_text()) == trim($shortcode) |
395 | - && isset($aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]) |
|
395 | + && isset($aee->registrations[$registration->ID()]['ans_objs'][$ansid]) |
|
396 | 396 | ) { |
397 | - return $aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]->get_pretty( |
|
397 | + return $aee->registrations[$registration->ID()]['ans_objs'][$ansid]->get_pretty( |
|
398 | 398 | 'ANS_value', |
399 | 399 | 'no_wpautop' |
400 | 400 | ); |
@@ -455,7 +455,7 @@ discard block |
||
455 | 455 | public function additional_datetime_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
456 | 456 | { |
457 | 457 | |
458 | - if (! $data instanceof EE_Datetime) { |
|
458 | + if ( ! $data instanceof EE_Datetime) { |
|
459 | 459 | return ''; // get out because we can only parse with the datetime object. |
460 | 460 | } |
461 | 461 | |
@@ -508,7 +508,7 @@ discard block |
||
508 | 508 | $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
509 | 509 | $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
510 | 510 | |
511 | - if (! $recipient instanceof EE_Messages_Addressee) { |
|
511 | + if ( ! $recipient instanceof EE_Messages_Addressee) { |
|
512 | 512 | return $parsed; |
513 | 513 | } |
514 | 514 | |
@@ -516,7 +516,7 @@ discard block |
||
516 | 516 | case '[RECIPIENT_QUESTION_LIST]': |
517 | 517 | $att = $recipient->att_obj; |
518 | 518 | $registrations_on_attendee = $att instanceof EE_Attendee |
519 | - ? $recipient->attendees[ $att->ID() ]['reg_objs'] |
|
519 | + ? $recipient->attendees[$att->ID()]['reg_objs'] |
|
520 | 520 | : array(); |
521 | 521 | $registrations_on_attendee = empty($registrations_on_attendee) && $recipient->reg_obj instanceof EE_Registration ? array($recipient->reg_obj) : $registrations_on_attendee; |
522 | 522 | $answers = array(); |
@@ -530,12 +530,12 @@ discard block |
||
530 | 530 | if ($data['data'] instanceof EE_Messages_Addressee) { |
531 | 531 | foreach ($registrations_on_attendee as $reg) { |
532 | 532 | if ($reg instanceof EE_Registration) { |
533 | - $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs']) |
|
534 | - ? $recipient->registrations[ $reg->ID() ]['ans_objs'] |
|
533 | + $anss = ! empty($recipient->registrations[$reg->ID()]['ans_objs']) |
|
534 | + ? $recipient->registrations[$reg->ID()]['ans_objs'] |
|
535 | 535 | : array(); |
536 | 536 | foreach ($anss as $ans) { |
537 | 537 | if ($ans instanceof EE_Answer) { |
538 | - $answers[ $ans->ID() ] = $ans; |
|
538 | + $answers[$ans->ID()] = $ans; |
|
539 | 539 | } |
540 | 540 | } |
541 | 541 | } |
@@ -547,12 +547,12 @@ discard block |
||
547 | 547 | $event = $data['data']; |
548 | 548 | foreach ($registrations_on_attendee as $reg) { |
549 | 549 | if ($reg instanceof EE_Registration && $reg->event_ID() == $event->ID()) { |
550 | - $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs']) |
|
551 | - ? $recipient->registrations[ $reg->ID() ]['ans_objs'] |
|
550 | + $anss = ! empty($recipient->registrations[$reg->ID()]['ans_objs']) |
|
551 | + ? $recipient->registrations[$reg->ID()]['ans_objs'] |
|
552 | 552 | : array(); |
553 | 553 | foreach ($anss as $ans) { |
554 | 554 | if ($ans instanceof EE_Answer) { |
555 | - $answers[ $ans->ID() ] = $ans; |
|
555 | + $answers[$ans->ID()] = $ans; |
|
556 | 556 | } |
557 | 557 | } |
558 | 558 | } |
@@ -563,7 +563,7 @@ discard block |
||
563 | 563 | |
564 | 564 | // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
565 | 565 | // object on it. |
566 | - if (! isset($extra_data['data'])) { |
|
566 | + if ( ! isset($extra_data['data'])) { |
|
567 | 567 | $extra_data['data'] = $recipient; |
568 | 568 | } |
569 | 569 | |
@@ -620,18 +620,18 @@ discard block |
||
620 | 620 | $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
621 | 621 | $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
622 | 622 | |
623 | - if (! $recipient instanceof EE_Messages_Addressee) { |
|
623 | + if ( ! $recipient instanceof EE_Messages_Addressee) { |
|
624 | 624 | return $parsed; |
625 | 625 | } |
626 | 626 | |
627 | 627 | switch ($shortcode) { |
628 | 628 | case '[PRIMARY_REGISTRANT_QUESTION_LIST]': |
629 | - if (! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) { |
|
629 | + if ( ! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) { |
|
630 | 630 | return ''; |
631 | 631 | } |
632 | 632 | $registration = $recipient->primary_reg_obj; |
633 | - $answers = isset($recipient->registrations[ $registration->ID() ]['ans_objs']) |
|
634 | - ? $recipient->registrations[ $registration->ID() ]['ans_objs'] |
|
633 | + $answers = isset($recipient->registrations[$registration->ID()]['ans_objs']) |
|
634 | + ? $recipient->registrations[$registration->ID()]['ans_objs'] |
|
635 | 635 | : array(); |
636 | 636 | if (empty($answers)) { |
637 | 637 | return ''; |
@@ -640,11 +640,11 @@ discard block |
||
640 | 640 | ? $data['template']['question_list'] |
641 | 641 | : $extra_data['template']['question_list']; |
642 | 642 | $valid_shortcodes = array('question'); |
643 | - $answers = $recipient->registrations[ $registration->ID() ]['ans_objs']; |
|
643 | + $answers = $recipient->registrations[$registration->ID()]['ans_objs']; |
|
644 | 644 | $questions = isset($recipient->questions) ? $recipient->questions : array(); |
645 | 645 | // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
646 | 646 | // object on it. |
647 | - if (! isset($extra_data['data'])) { |
|
647 | + if ( ! isset($extra_data['data'])) { |
|
648 | 648 | $extra_data['data'] = $recipient; |
649 | 649 | } |
650 | 650 | return $this->_parse_question_list_for_primary_or_recipient_registration( |
@@ -677,7 +677,7 @@ discard block |
||
677 | 677 | $setup_args = array( |
678 | 678 | 'mtfilename' => 'EE_Newsletter_message_type.class.php', |
679 | 679 | 'autoloadpaths' => array( |
680 | - EE_CAF_LIBRARIES . 'messages/message_type/newsletter/', |
|
680 | + EE_CAF_LIBRARIES.'messages/message_type/newsletter/', |
|
681 | 681 | ), |
682 | 682 | 'messengers_to_activate_with' => array('email'), |
683 | 683 | 'messengers_to_validate_with' => array('email'), |
@@ -688,7 +688,7 @@ discard block |
||
688 | 688 | // register payment reminder message type |
689 | 689 | $setup_args = array( |
690 | 690 | 'mtfilename' => 'EE_Payment_Reminder_message_type.class.php', |
691 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'), |
|
691 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/payment_reminder/'), |
|
692 | 692 | 'messengers_to_activate_with' => array('email'), |
693 | 693 | 'messengers_to_validate_with' => array('email'), |
694 | 694 | 'messengers_supporting_default_template_pack_with' => array('email'), |
@@ -698,7 +698,7 @@ discard block |
||
698 | 698 | // register payment declined message type |
699 | 699 | $setup_args = array( |
700 | 700 | 'mtfilename' => 'EE_Payment_Declined_message_type.class.php', |
701 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'), |
|
701 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/payment_declined/'), |
|
702 | 702 | 'messengers_to_activate_with' => array('email'), |
703 | 703 | 'messengers_to_validate_with' => array('email'), |
704 | 704 | 'messengers_supporting_default_template_pack_with' => array('email'), |
@@ -708,7 +708,7 @@ discard block |
||
708 | 708 | // register registration declined message type |
709 | 709 | $setup_args = array( |
710 | 710 | 'mtfilename' => 'EE_Declined_Registration_message_type.class.php', |
711 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'), |
|
711 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/declined_registration/'), |
|
712 | 712 | 'messengers_to_activate_with' => array('email'), |
713 | 713 | 'messengers_to_validate_with' => array('email'), |
714 | 714 | 'messengers_supporting_default_template_pack_with' => array('email'), |
@@ -718,7 +718,7 @@ discard block |
||
718 | 718 | // register registration cancelled message type |
719 | 719 | $setup_args = array( |
720 | 720 | 'mtfilename' => 'EE_Cancelled_Registration_message_type.class.php', |
721 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'), |
|
721 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/cancelled_registration/'), |
|
722 | 722 | 'messengers_to_activate_with' => array('email'), |
723 | 723 | 'messengers_to_validate_with' => array('email'), |
724 | 724 | 'messengers_supporting_default_template_pack_with' => array('email'), |
@@ -729,7 +729,7 @@ discard block |
||
729 | 729 | // register payment failed message type |
730 | 730 | $setup_args = array( |
731 | 731 | 'mtfilename' => 'EE_Payment_Failed_message_type.class.php', |
732 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'), |
|
732 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/payment_failed/'), |
|
733 | 733 | 'messengers_to_activate_with' => array('email'), |
734 | 734 | 'messengers_to_validate_with' => array('email'), |
735 | 735 | 'messengers_supporting_default_template_pack_with' => array('email'), |
@@ -739,7 +739,7 @@ discard block |
||
739 | 739 | // register payment declined message type |
740 | 740 | $setup_args = array( |
741 | 741 | 'mtfilename' => 'EE_Payment_Cancelled_message_type.class.php', |
742 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'), |
|
742 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES.'messages/message_type/payment_cancelled/'), |
|
743 | 743 | 'messengers_to_activate_with' => array('email'), |
744 | 744 | 'messengers_to_validate_with' => array('email'), |
745 | 745 | 'messengers_supporting_default_template_pack_with' => array('email'), |
@@ -759,7 +759,7 @@ discard block |
||
759 | 759 | { |
760 | 760 | $setup_args = array( |
761 | 761 | 'autoloadpaths' => array( |
762 | - EE_CAF_LIBRARIES . 'shortcodes/', |
|
762 | + EE_CAF_LIBRARIES.'shortcodes/', |
|
763 | 763 | ), |
764 | 764 | 'msgr_validator_callback' => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'), |
765 | 765 | 'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'), |
@@ -793,7 +793,7 @@ discard block |
||
793 | 793 | foreach ($answers as $answer) { |
794 | 794 | if ($answer instanceof EE_Answer) { |
795 | 795 | // first see if the question is in our $questions array. If not then try to get from answer object. |
796 | - $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
796 | + $question = isset($questions[$answer->ID()]) ? $questions[$answer->ID()] : null; |
|
797 | 797 | $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
798 | 798 | if ( |
799 | 799 | ! $question instanceof EE_Question |
@@ -10,806 +10,806 @@ |
||
10 | 10 | */ |
11 | 11 | class EE_Caf_Messages |
12 | 12 | { |
13 | - /** |
|
14 | - * constructor. |
|
15 | - */ |
|
16 | - public function __construct() |
|
17 | - { |
|
18 | - $this->_caf_hooks(); |
|
19 | - } |
|
20 | - |
|
21 | - |
|
22 | - /** |
|
23 | - * Contains all the hooks filters for setting up caffeinated messages functionality. |
|
24 | - * |
|
25 | - * @since 4.3.2 |
|
26 | - * |
|
27 | - * @return void |
|
28 | - */ |
|
29 | - private function _caf_hooks() |
|
30 | - { |
|
31 | - add_filter('FHEE__EED_Messages___set_messages_paths___MSG_PATHS', array($this, 'messages_autoload_paths'), 5); |
|
32 | - add_filter( |
|
33 | - 'FHEE__EE_Email_messenger__get_validator_config', |
|
34 | - array($this, 'email_messenger_validator_config'), |
|
35 | - 5, |
|
36 | - 2 |
|
37 | - ); |
|
38 | - add_filter( |
|
39 | - 'FHEE__EE_Email_messenger__get_template_fields', |
|
40 | - array($this, 'email_messenger_template_fields'), |
|
41 | - 5, |
|
42 | - 2 |
|
43 | - ); |
|
44 | - add_filter( |
|
45 | - 'FHEE__EE_Html_messenger__get_template_fields', |
|
46 | - array($this, 'html_messenger_template_fields'), |
|
47 | - 5, |
|
48 | - 2 |
|
49 | - ); |
|
50 | - add_filter( |
|
51 | - 'FHEE__EE_Html_messenger__get_validator_config', |
|
52 | - array($this, 'html_messenger_validator_config'), |
|
53 | - 5, |
|
54 | - 2 |
|
55 | - ); |
|
56 | - add_filter('FHEE__EE_Pdf_messenger__get_template_fields', array($this, 'pdf_messenger_template_fields'), 5, 2); |
|
57 | - add_filter( |
|
58 | - 'FHEE__EE_Pdf_messenger__get_validator_config', |
|
59 | - array($this, 'pdf_messenger_validator_config'), |
|
60 | - 5, |
|
61 | - 2 |
|
62 | - ); |
|
63 | - add_filter( |
|
64 | - 'FHEE__EE_Messages_Template_Pack__get_specific_template__contents', |
|
65 | - array($this, 'new_default_templates'), |
|
66 | - 5, |
|
67 | - 7 |
|
68 | - ); |
|
69 | - add_filter( |
|
70 | - 'FHEE__EE_Messages_Base__get_valid_shortcodes', |
|
71 | - array($this, 'message_types_valid_shortcodes'), |
|
72 | - 5, |
|
73 | - 2 |
|
74 | - ); |
|
75 | - |
|
76 | - // shortcode parsers |
|
77 | - add_filter('FHEE__EE_Attendee_Shortcodes__shortcodes', array($this, 'additional_attendee_shortcodes'), 5, 2); |
|
78 | - add_filter('FHEE__EE_Attendee_Shortcodes__parser_after', array($this, 'additional_attendee_parser'), 5, 5); |
|
79 | - add_filter( |
|
80 | - 'FHEE__EE_Recipient_List_Shortcodes__shortcodes', |
|
81 | - array($this, 'additional_recipient_details_shortcodes'), |
|
82 | - 5, |
|
83 | - 2 |
|
84 | - ); |
|
85 | - add_filter( |
|
86 | - 'FHEE__EE_Recipient_List_Shortcodes__parser_after', |
|
87 | - array($this, 'additional_recipient_details_parser'), |
|
88 | - 5, |
|
89 | - 5 |
|
90 | - ); |
|
91 | - add_filter( |
|
92 | - 'FHEE__EE_Primary_Registration_List_Shortcodes__shortcodes', |
|
93 | - array($this, 'additional_primary_registration_details_shortcodes'), |
|
94 | - 5, |
|
95 | - 2 |
|
96 | - ); |
|
97 | - add_filter( |
|
98 | - 'FHEE__EE_Primary_Registration_List_Shortcodes__parser_after', |
|
99 | - array($this, 'additional_primary_registration_details_parser'), |
|
100 | - 5, |
|
101 | - 5 |
|
102 | - ); |
|
103 | - |
|
104 | - /** |
|
105 | - * @since 4.2.0 |
|
106 | - */ |
|
107 | - add_filter('FHEE__EE_Datetime_Shortcodes__shortcodes', array($this, 'additional_datetime_shortcodes'), 10, 2); |
|
108 | - add_filter('FHEE__EE_Datetime_Shortcodes__parser_after', array($this, 'additional_datetime_parser'), 10, 5); |
|
109 | - |
|
110 | - /** |
|
111 | - * @since 4.3.0 |
|
112 | - */ |
|
113 | - // eat our own dog food! |
|
114 | - add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_message_types')); |
|
115 | - add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_shortcodes')); |
|
116 | - do_action('EE_Brewing_Regular___messages_caf'); |
|
117 | - } |
|
118 | - |
|
119 | - |
|
120 | - /** |
|
121 | - * This just allows us to add additional paths to the autoloader (EED_Messages::autoload_messages()) for the |
|
122 | - * messages system. |
|
123 | - * |
|
124 | - * @param array $dir_ref original array of paths |
|
125 | - * |
|
126 | - * @return array appended paths |
|
127 | - */ |
|
128 | - public function messages_autoload_paths($dir_ref) |
|
129 | - { |
|
130 | - $dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/'; |
|
131 | - |
|
132 | - return $dir_ref; |
|
133 | - } |
|
134 | - |
|
135 | - |
|
136 | - public function email_messenger_validator_config($validator_config, EE_Email_messenger $messenger) |
|
137 | - { |
|
138 | - $validator_config['attendee_list'] = array( |
|
139 | - 'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'), |
|
140 | - 'required' => array('[ATTENDEE_LIST]'), |
|
141 | - ); |
|
142 | - $validator_config['question_list'] = array( |
|
143 | - 'shortcodes' => array('question'), |
|
144 | - 'required' => array('[QUESTION_LIST]'), |
|
145 | - ); |
|
146 | - |
|
147 | - return $validator_config; |
|
148 | - } |
|
149 | - |
|
150 | - |
|
151 | - public function html_messenger_validator_config($validator_config, EE_Html_messenger $messenger) |
|
152 | - { |
|
153 | - $validator_config['attendee_list'] = array( |
|
154 | - 'shortcodes' => array('attendee', 'question_list'), |
|
155 | - 'required' => array('[ATTENDEE_LIST]'), |
|
156 | - ); |
|
157 | - $validator_config['question_list'] = array( |
|
158 | - 'shortcodes' => array('question'), |
|
159 | - 'required' => array('[QUESTION_LIST]'), |
|
160 | - ); |
|
161 | - |
|
162 | - return $validator_config; |
|
163 | - } |
|
164 | - |
|
165 | - |
|
166 | - public function pdf_messenger_validator_config($validator_config, EE_Pdf_messenger $messenger) |
|
167 | - { |
|
168 | - $validator_config['attendee_list'] = array( |
|
169 | - 'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'), |
|
170 | - 'required' => array('[ATTENDEE_LIST]'), |
|
171 | - ); |
|
172 | - $validator_config['question_list'] = array( |
|
173 | - 'shortcodes' => array('question'), |
|
174 | - 'required' => array('[QUESTION_LIST]'), |
|
175 | - ); |
|
176 | - |
|
177 | - return $validator_config; |
|
178 | - } |
|
179 | - |
|
180 | - |
|
181 | - public function email_messenger_template_fields($template_fields, EE_Email_messenger $messenger) |
|
182 | - { |
|
183 | - $template_fields['extra']['content']['question_list'] = array( |
|
184 | - 'input' => 'textarea', |
|
185 | - 'label' => '[QUESTION_LIST]', |
|
186 | - 'type' => 'string', |
|
187 | - 'required' => true, |
|
188 | - 'validation' => true, |
|
189 | - 'format' => '%s', |
|
190 | - 'css_class' => 'large-text', |
|
191 | - 'rows' => '5', |
|
192 | - 'shortcodes_required' => array('[QUESTION_LIST]'), |
|
193 | - ); |
|
194 | - |
|
195 | - return $template_fields; |
|
196 | - } |
|
197 | - |
|
198 | - |
|
199 | - public function html_messenger_template_fields($template_fields, EE_Html_messenger $messenger) |
|
200 | - { |
|
201 | - $template_fields['extra']['content']['question_list'] = array( |
|
202 | - 'input' => 'textarea', |
|
203 | - 'label' => '[QUESTION_LIST]', |
|
204 | - 'type' => 'string', |
|
205 | - 'required' => true, |
|
206 | - 'validation' => true, |
|
207 | - 'format' => '%s', |
|
208 | - 'css_class' => 'large-text', |
|
209 | - 'rows' => '5', |
|
210 | - 'shortcodes_required' => array('[QUESTION_LIST]'), |
|
211 | - ); |
|
212 | - |
|
213 | - return $template_fields; |
|
214 | - } |
|
215 | - |
|
216 | - |
|
217 | - public function pdf_messenger_template_fields($template_fields, EE_Pdf_messenger $messenger) |
|
218 | - { |
|
219 | - $template_fields['extra']['content']['question_list'] = array( |
|
220 | - 'input' => 'textarea', |
|
221 | - 'label' => '[QUESTION_LIST]', |
|
222 | - 'type' => 'string', |
|
223 | - 'required' => true, |
|
224 | - 'validation' => true, |
|
225 | - 'format' => '%s', |
|
226 | - 'css_class' => 'large-text', |
|
227 | - 'rows' => '5', |
|
228 | - 'shortcodes_required' => array('[QUESTION_LIST]'), |
|
229 | - ); |
|
230 | - |
|
231 | - return $template_fields; |
|
232 | - } |
|
233 | - |
|
234 | - |
|
235 | - public function new_default_templates( |
|
236 | - $contents, |
|
237 | - $actual_path, |
|
238 | - EE_messenger $messenger, |
|
239 | - EE_message_type $message_type, |
|
240 | - $field, |
|
241 | - $context, |
|
242 | - EE_Messages_Template_Pack $template_pack |
|
243 | - ) { |
|
244 | - |
|
245 | - // we're only modifying templates for the default template pack |
|
246 | - if (! $template_pack instanceof EE_Messages_Template_Pack_Default) { |
|
247 | - return $contents; |
|
248 | - } |
|
249 | - |
|
250 | - // the template file name we're replacing contents for. |
|
251 | - $template_file_prefix = $field . '_' . $context; |
|
252 | - $msg_prefix = $messenger->name . '_' . $message_type->name . '_'; |
|
253 | - |
|
254 | - $base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/'; |
|
255 | - |
|
256 | - if ($messenger->name == 'email' && $message_type->name == 'registration') { |
|
257 | - switch ($template_file_prefix) { |
|
258 | - case 'question_list_admin': |
|
259 | - case 'question_list_attendee': |
|
260 | - case 'question_list_primary_attendee': |
|
261 | - $path = $base_path . $msg_prefix . 'question_list.template.php'; |
|
262 | - $contents = EEH_Template::display_template($path, array(), true); |
|
263 | - break; |
|
264 | - |
|
265 | - case 'attendee_list_primary_attendee': |
|
266 | - $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
267 | - $contents = EEH_Template::display_template($path, array(), true); |
|
268 | - break; |
|
269 | - |
|
270 | - case 'attendee_list_admin': |
|
271 | - $path = $base_path . $msg_prefix . 'attendee_list_admin.template.php'; |
|
272 | - $contents = EEH_Template::display_template( |
|
273 | - $path, |
|
274 | - array(), |
|
275 | - true |
|
276 | - ); |
|
277 | - break; |
|
278 | - |
|
279 | - case 'attendee_list_attendee': |
|
280 | - $contents = ''; |
|
281 | - break; |
|
282 | - |
|
283 | - case 'event_list_attendee': |
|
284 | - $path = $base_path . $msg_prefix . 'event_list_attendee.template.php'; |
|
285 | - $contents = EEH_Template::display_template($path, array(), true); |
|
286 | - break; |
|
287 | - } |
|
288 | - } elseif ($messenger->name == 'email' && $message_type->name == 'newsletter') { |
|
289 | - switch ($template_file_prefix) { |
|
290 | - case 'content_attendee': |
|
291 | - $path = $base_path . $msg_prefix . 'content.template.php'; |
|
292 | - $contents = EEH_Template::display_template($path, array(), true); |
|
293 | - break; |
|
294 | - |
|
295 | - case 'newsletter_content_attendee': |
|
296 | - $path = $base_path . $msg_prefix . 'newsletter_content.template.php'; |
|
297 | - $contents = EEH_Template::display_template($path, array(), true); |
|
298 | - break; |
|
299 | - |
|
300 | - case 'newsletter_subject_attendee': |
|
301 | - $path = $base_path . $msg_prefix . 'subject.template.php'; |
|
302 | - $contents = EEH_Template::display_template($path, array(), true); |
|
303 | - break; |
|
304 | - } |
|
305 | - } elseif ($messenger->name == 'html' && $message_type->name == 'receipt') { |
|
306 | - switch ($template_file_prefix) { |
|
307 | - case 'attendee_list_purchaser': |
|
308 | - $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
309 | - $contents = EEH_Template::display_template($path, array(), true); |
|
310 | - break; |
|
311 | - } |
|
312 | - } |
|
313 | - |
|
314 | - return $contents; |
|
315 | - } |
|
316 | - |
|
317 | - |
|
318 | - public function message_types_valid_shortcodes($valid_shortcodes, EE_Messages_Base $msg) |
|
319 | - { |
|
320 | - // make sure question_list and question are ONLY added for the core message types. Any other message types will have to explicitly set question_list as a valid shortcode. |
|
321 | - $include_with = array( |
|
322 | - 'registration', |
|
323 | - 'cancelled_registration', |
|
324 | - 'declined_registration', |
|
325 | - 'not_approved_registration', |
|
326 | - 'payment_declined', |
|
327 | - 'payment_failed', |
|
328 | - 'payment_cancelled', |
|
329 | - 'payment', |
|
330 | - 'payment_reminder', |
|
331 | - 'pending_approval', |
|
332 | - 'registration_summary', |
|
333 | - 'invoice', |
|
334 | - 'receipt', |
|
335 | - ); |
|
336 | - if ($msg instanceof EE_message_type && in_array($msg->name, $include_with)) { |
|
337 | - $contexts = array_keys($msg->get_contexts()); |
|
338 | - foreach ($contexts as $context) { |
|
339 | - $valid_shortcodes[ $context ][] = 'question_list'; |
|
340 | - $valid_shortcodes[ $context ][] = 'question'; |
|
341 | - } |
|
342 | - } |
|
343 | - |
|
344 | - return $valid_shortcodes; |
|
345 | - } |
|
346 | - |
|
347 | - |
|
348 | - public function additional_attendee_shortcodes($shortcodes, $shortcode_parser) |
|
349 | - { |
|
350 | - $shortcodes['[ANSWER_*]'] = esc_html__( |
|
351 | - 'This is a special dynamic shortcode. Right after the "*", add the exact text of a existing question, and if there is an answer for that question for this registrant, that will take the place of this shortcode.', |
|
352 | - 'event_espresso' |
|
353 | - ); |
|
354 | - |
|
355 | - return $shortcodes; |
|
356 | - } |
|
357 | - |
|
358 | - |
|
359 | - public function additional_attendee_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
360 | - { |
|
361 | - |
|
362 | - if ( |
|
363 | - strpos($shortcode, '[ANSWER_*') === false |
|
364 | - || ! isset($extra_data['data']->questions) |
|
365 | - || ! isset($extra_data['data']->registrations) |
|
366 | - ) { |
|
367 | - return $parsed; |
|
368 | - } |
|
369 | - |
|
370 | - // let's get the question from the code. |
|
371 | - $shortcode = str_replace('[ANSWER_*', '', $shortcode); |
|
372 | - $shortcode = trim(str_replace(']', '', $shortcode)); |
|
373 | - |
|
374 | - $registration = $data instanceof EE_Registration ? $data : null; |
|
375 | - $registration = ! $registration instanceof EE_Registration && is_array( |
|
376 | - $extra_data |
|
377 | - ) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Registration ? $extra_data['data'] : $registration; |
|
378 | - |
|
379 | - $aee = $data instanceof EE_Messages_Addressee ? $data : null; |
|
380 | - $aee = ! $aee instanceof EE_Messages_Addressee && is_array( |
|
381 | - $extra_data |
|
382 | - ) && isset($extra_data['data']) ? $extra_data['data'] : $aee; |
|
383 | - |
|
384 | - if (! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) { |
|
385 | - return $parsed; |
|
386 | - } |
|
387 | - |
|
388 | - // now let's figure out which question has this text. |
|
389 | - foreach ($aee->questions as $ansid => $question) { |
|
390 | - if ( |
|
391 | - $question instanceof EE_Question |
|
392 | - && trim($question->display_text()) == trim($shortcode) |
|
393 | - && isset($aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]) |
|
394 | - ) { |
|
395 | - return $aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]->get_pretty( |
|
396 | - 'ANS_value', |
|
397 | - 'no_wpautop' |
|
398 | - ); |
|
399 | - } |
|
400 | - } |
|
401 | - |
|
402 | - // nothing! |
|
403 | - return $parsed; |
|
404 | - } |
|
405 | - |
|
406 | - |
|
407 | - /** |
|
408 | - * Callback for additional shortcodes filter for adding additional datetime shortcodes. |
|
409 | - * |
|
410 | - * @since 4.2 |
|
411 | - * |
|
412 | - * @param array $shortcodes array of shortcodes and |
|
413 | - * descriptions |
|
414 | - * @param EE_Datetime_Shortcodes $shortcode_parser EE_Shortcodes object |
|
415 | - * |
|
416 | - * @return array array of shortcodes and |
|
417 | - * descriptions |
|
418 | - */ |
|
419 | - public function additional_datetime_shortcodes($shortcodes, $shortcode_parser) |
|
420 | - { |
|
421 | - $shortcodes['[DTT_NAME]'] = esc_html__( |
|
422 | - 'This will be parsed to the Title given for a Datetime', |
|
423 | - 'event_espresso' |
|
424 | - ); |
|
425 | - $shortcodes['[DTT_DESCRIPTION]'] = esc_html__( |
|
426 | - 'This will be parsed to the description for a Datetime', |
|
427 | - 'event_espresso' |
|
428 | - ); |
|
429 | - $shortcodes['[DTT_NAME_OR_DATES]'] = esc_html__( |
|
430 | - 'When parsed, if the Datetime has a name, it is used, otherwise a formatted string including the start date and end date will be used.', |
|
431 | - 'event_espresso' |
|
432 | - ); |
|
433 | - |
|
434 | - return $shortcodes; |
|
435 | - } |
|
436 | - |
|
437 | - |
|
438 | - /** |
|
439 | - * Callback for additional shortcodes parser filter used for adding parser for new |
|
440 | - * Datetime shortcodes |
|
441 | - * |
|
442 | - * @since 4.2 |
|
443 | - * |
|
444 | - * @param string $parsed The finished parsed string for the given shortcode. |
|
445 | - * @param string $shortcode The shortcode being parsed. |
|
446 | - * @param object $data The incoming data object for the Shortcode Parser. |
|
447 | - * @param object $extra_data The incoming extra date object for the Shortcode |
|
448 | - * Parser. |
|
449 | - * @param EE_Datetime_Shortcodes $shortcode_parser |
|
450 | - * |
|
451 | - * @return string The new parsed string. |
|
452 | - */ |
|
453 | - public function additional_datetime_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
454 | - { |
|
455 | - |
|
456 | - if (! $data instanceof EE_Datetime) { |
|
457 | - return ''; // get out because we can only parse with the datetime object. |
|
458 | - } |
|
459 | - |
|
460 | - switch ($shortcode) { |
|
461 | - case '[DTT_NAME]': |
|
462 | - return $data->name(); |
|
463 | - break; |
|
464 | - case '[DTT_DESCRIPTION]': |
|
465 | - return $data->description(); |
|
466 | - break; |
|
467 | - case '[DTT_NAME_OR_DATES]': |
|
468 | - return $data->get_dtt_display_name(true); |
|
469 | - break; |
|
470 | - default: |
|
471 | - return $parsed; |
|
472 | - break; |
|
473 | - } |
|
474 | - } |
|
475 | - |
|
476 | - |
|
477 | - public function additional_recipient_details_shortcodes($shortcodes, $shortcode_parser) |
|
478 | - { |
|
479 | - $shortcodes['[RECIPIENT_QUESTION_LIST]'] = esc_html__( |
|
480 | - 'This is used to indicate where you want the list of questions and answers to show for the person receiving the message.', |
|
481 | - 'event_espresso' |
|
482 | - ); |
|
483 | - |
|
484 | - return $shortcodes; |
|
485 | - } |
|
486 | - |
|
487 | - |
|
488 | - /** |
|
489 | - * Callback for FHEE__EE_Recipient_List_Shortcodes__parser_after filter (dynamic filter). |
|
490 | - * |
|
491 | - * @param string $parsed The original parsed content for the shortcode |
|
492 | - * @param string $shortcode The shortcode being parsed |
|
493 | - * @param array $data The shortcode parser data array |
|
494 | - * @param array $extra_data The shortcode parser extra data array |
|
495 | - * @param \EE_Shortcodes $shortcode_parser Shortcode parser. |
|
496 | - * |
|
497 | - * @return string |
|
498 | - */ |
|
499 | - public function additional_recipient_details_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
500 | - { |
|
501 | - |
|
502 | - if (array($data) && ! isset($data['data'])) { |
|
503 | - return $parsed; |
|
504 | - } |
|
505 | - |
|
506 | - $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
|
507 | - $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
|
508 | - |
|
509 | - if (! $recipient instanceof EE_Messages_Addressee) { |
|
510 | - return $parsed; |
|
511 | - } |
|
512 | - |
|
513 | - switch ($shortcode) { |
|
514 | - case '[RECIPIENT_QUESTION_LIST]': |
|
515 | - $att = $recipient->att_obj; |
|
516 | - $registrations_on_attendee = $att instanceof EE_Attendee |
|
517 | - ? $recipient->attendees[ $att->ID() ]['reg_objs'] |
|
518 | - : array(); |
|
519 | - $registrations_on_attendee = empty($registrations_on_attendee) && $recipient->reg_obj instanceof EE_Registration ? array($recipient->reg_obj) : $registrations_on_attendee; |
|
520 | - $answers = array(); |
|
521 | - |
|
522 | - $template = is_array($data['template']) && isset($data['template']['question_list']) |
|
523 | - ? $data['template']['question_list'] |
|
524 | - : $extra_data['template']['question_list']; |
|
525 | - $valid_shortcodes = array('question'); |
|
526 | - |
|
527 | - // if the context is main_content then get all answers for all registrations on this attendee |
|
528 | - if ($data['data'] instanceof EE_Messages_Addressee) { |
|
529 | - foreach ($registrations_on_attendee as $reg) { |
|
530 | - if ($reg instanceof EE_Registration) { |
|
531 | - $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs']) |
|
532 | - ? $recipient->registrations[ $reg->ID() ]['ans_objs'] |
|
533 | - : array(); |
|
534 | - foreach ($anss as $ans) { |
|
535 | - if ($ans instanceof EE_Answer) { |
|
536 | - $answers[ $ans->ID() ] = $ans; |
|
537 | - } |
|
538 | - } |
|
539 | - } |
|
540 | - } |
|
541 | - } |
|
542 | - |
|
543 | - // if the context is the event list parser, then let's return just the answers for all registrations attached to the recipient for that event. |
|
544 | - if ($data['data'] instanceof EE_Event) { |
|
545 | - $event = $data['data']; |
|
546 | - foreach ($registrations_on_attendee as $reg) { |
|
547 | - if ($reg instanceof EE_Registration && $reg->event_ID() == $event->ID()) { |
|
548 | - $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs']) |
|
549 | - ? $recipient->registrations[ $reg->ID() ]['ans_objs'] |
|
550 | - : array(); |
|
551 | - foreach ($anss as $ans) { |
|
552 | - if ($ans instanceof EE_Answer) { |
|
553 | - $answers[ $ans->ID() ] = $ans; |
|
554 | - } |
|
555 | - } |
|
556 | - } |
|
557 | - } |
|
558 | - } |
|
559 | - |
|
560 | - $questions = $questions = isset($recipient->questions) ? $recipient->questions : array(); |
|
561 | - |
|
562 | - // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
|
563 | - // object on it. |
|
564 | - if (! isset($extra_data['data'])) { |
|
565 | - $extra_data['data'] = $recipient; |
|
566 | - } |
|
567 | - |
|
568 | - return $this->_parse_question_list_for_primary_or_recipient_registration( |
|
569 | - $shortcode_parser, |
|
570 | - $questions, |
|
571 | - $answers, |
|
572 | - $template, |
|
573 | - $valid_shortcodes, |
|
574 | - $extra_data |
|
575 | - ); |
|
576 | - break; |
|
577 | - |
|
578 | - default: |
|
579 | - return $parsed; |
|
580 | - break; |
|
581 | - } |
|
582 | - } |
|
583 | - |
|
584 | - |
|
585 | - public function additional_primary_registration_details_shortcodes($shortcodes, $shortcode_parser) |
|
586 | - { |
|
587 | - $shortcodes['[PRIMARY_REGISTRANT_QUESTION_LIST]'] = esc_html__( |
|
588 | - 'This is used to indicate the questions and answers for the primary_registrant. It should be placed in the "[attendee_list]" field', |
|
589 | - 'event_espresso' |
|
590 | - ); |
|
591 | - |
|
592 | - return $shortcodes; |
|
593 | - } |
|
594 | - |
|
595 | - |
|
596 | - /** |
|
597 | - * Callback for FHEE__EE_Primary_Registration_List_Shortcodes__parser_after filter (dynamic filter). |
|
598 | - * |
|
599 | - * @param string $parsed The original parsed content for the shortcode |
|
600 | - * @param string $shortcode The shortcode being parsed |
|
601 | - * @param array $data The shortcode parser data array |
|
602 | - * @param array $extra_data The shortcode parser extra data array |
|
603 | - * @param \EE_Shortcodes $shortcode_parser Shortcode parser. |
|
604 | - * |
|
605 | - * @return string |
|
606 | - */ |
|
607 | - public function additional_primary_registration_details_parser( |
|
608 | - $parsed, |
|
609 | - $shortcode, |
|
610 | - $data, |
|
611 | - $extra_data, |
|
612 | - $shortcode_parser |
|
613 | - ) { |
|
614 | - if (array($data) && ! isset($data['data'])) { |
|
615 | - return $parsed; |
|
616 | - } |
|
617 | - |
|
618 | - $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
|
619 | - $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
|
620 | - |
|
621 | - if (! $recipient instanceof EE_Messages_Addressee) { |
|
622 | - return $parsed; |
|
623 | - } |
|
624 | - |
|
625 | - switch ($shortcode) { |
|
626 | - case '[PRIMARY_REGISTRANT_QUESTION_LIST]': |
|
627 | - if (! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) { |
|
628 | - return ''; |
|
629 | - } |
|
630 | - $registration = $recipient->primary_reg_obj; |
|
631 | - $answers = isset($recipient->registrations[ $registration->ID() ]['ans_objs']) |
|
632 | - ? $recipient->registrations[ $registration->ID() ]['ans_objs'] |
|
633 | - : array(); |
|
634 | - if (empty($answers)) { |
|
635 | - return ''; |
|
636 | - } |
|
637 | - $template = is_array($data['template']) && isset($data['template']['question_list']) |
|
638 | - ? $data['template']['question_list'] |
|
639 | - : $extra_data['template']['question_list']; |
|
640 | - $valid_shortcodes = array('question'); |
|
641 | - $answers = $recipient->registrations[ $registration->ID() ]['ans_objs']; |
|
642 | - $questions = isset($recipient->questions) ? $recipient->questions : array(); |
|
643 | - // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
|
644 | - // object on it. |
|
645 | - if (! isset($extra_data['data'])) { |
|
646 | - $extra_data['data'] = $recipient; |
|
647 | - } |
|
648 | - return $this->_parse_question_list_for_primary_or_recipient_registration( |
|
649 | - $shortcode_parser, |
|
650 | - $questions, |
|
651 | - $answers, |
|
652 | - $template, |
|
653 | - $valid_shortcodes, |
|
654 | - $extra_data |
|
655 | - ); |
|
656 | - break; |
|
657 | - |
|
658 | - default: |
|
659 | - return $parsed; |
|
660 | - break; |
|
661 | - } |
|
662 | - } |
|
663 | - |
|
664 | - |
|
665 | - /** |
|
666 | - * Takes care of registering the message types that are only available in caffeinated EE. |
|
667 | - * |
|
668 | - * @since 4.3.2 |
|
669 | - * |
|
670 | - * @return void |
|
671 | - */ |
|
672 | - public function register_caf_message_types() |
|
673 | - { |
|
674 | - // register newsletter message type |
|
675 | - $setup_args = array( |
|
676 | - 'mtfilename' => 'EE_Newsletter_message_type.class.php', |
|
677 | - 'autoloadpaths' => array( |
|
678 | - EE_CAF_LIBRARIES . 'messages/message_type/newsletter/', |
|
679 | - ), |
|
680 | - 'messengers_to_activate_with' => array('email'), |
|
681 | - 'messengers_to_validate_with' => array('email'), |
|
682 | - 'messengers_supporting_default_template_pack_with' => array('email'), |
|
683 | - ); |
|
684 | - EE_Register_Message_Type::register('newsletter', $setup_args); |
|
685 | - |
|
686 | - // register payment reminder message type |
|
687 | - $setup_args = array( |
|
688 | - 'mtfilename' => 'EE_Payment_Reminder_message_type.class.php', |
|
689 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'), |
|
690 | - 'messengers_to_activate_with' => array('email'), |
|
691 | - 'messengers_to_validate_with' => array('email'), |
|
692 | - 'messengers_supporting_default_template_pack_with' => array('email'), |
|
693 | - ); |
|
694 | - EE_Register_Message_Type::register('payment_reminder', $setup_args); |
|
695 | - |
|
696 | - // register payment declined message type |
|
697 | - $setup_args = array( |
|
698 | - 'mtfilename' => 'EE_Payment_Declined_message_type.class.php', |
|
699 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'), |
|
700 | - 'messengers_to_activate_with' => array('email'), |
|
701 | - 'messengers_to_validate_with' => array('email'), |
|
702 | - 'messengers_supporting_default_template_pack_with' => array('email'), |
|
703 | - ); |
|
704 | - EE_Register_Message_Type::register('payment_declined', $setup_args); |
|
705 | - |
|
706 | - // register registration declined message type |
|
707 | - $setup_args = array( |
|
708 | - 'mtfilename' => 'EE_Declined_Registration_message_type.class.php', |
|
709 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'), |
|
710 | - 'messengers_to_activate_with' => array('email'), |
|
711 | - 'messengers_to_validate_with' => array('email'), |
|
712 | - 'messengers_supporting_default_template_pack_with' => array('email'), |
|
713 | - ); |
|
714 | - EE_Register_Message_Type::register('declined_registration', $setup_args); |
|
715 | - |
|
716 | - // register registration cancelled message type |
|
717 | - $setup_args = array( |
|
718 | - 'mtfilename' => 'EE_Cancelled_Registration_message_type.class.php', |
|
719 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'), |
|
720 | - 'messengers_to_activate_with' => array('email'), |
|
721 | - 'messengers_to_validate_with' => array('email'), |
|
722 | - 'messengers_supporting_default_template_pack_with' => array('email'), |
|
723 | - ); |
|
724 | - EE_Register_Message_Type::register('cancelled_registration', $setup_args); |
|
725 | - |
|
726 | - |
|
727 | - // register payment failed message type |
|
728 | - $setup_args = array( |
|
729 | - 'mtfilename' => 'EE_Payment_Failed_message_type.class.php', |
|
730 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'), |
|
731 | - 'messengers_to_activate_with' => array('email'), |
|
732 | - 'messengers_to_validate_with' => array('email'), |
|
733 | - 'messengers_supporting_default_template_pack_with' => array('email'), |
|
734 | - ); |
|
735 | - EE_Register_Message_Type::register('payment_failed', $setup_args); |
|
736 | - |
|
737 | - // register payment declined message type |
|
738 | - $setup_args = array( |
|
739 | - 'mtfilename' => 'EE_Payment_Cancelled_message_type.class.php', |
|
740 | - 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'), |
|
741 | - 'messengers_to_activate_with' => array('email'), |
|
742 | - 'messengers_to_validate_with' => array('email'), |
|
743 | - 'messengers_supporting_default_template_pack_with' => array('email'), |
|
744 | - ); |
|
745 | - EE_Register_Message_Type::register('payment_cancelled', $setup_args); |
|
746 | - } |
|
747 | - |
|
748 | - |
|
749 | - /** |
|
750 | - * Takes care of registering the shortcode libraries implemented with caffeinated EE and set up related items. |
|
751 | - * |
|
752 | - * @since 4.3.2 |
|
753 | - * |
|
754 | - * @return void |
|
755 | - */ |
|
756 | - public function register_caf_shortcodes() |
|
757 | - { |
|
758 | - $setup_args = array( |
|
759 | - 'autoloadpaths' => array( |
|
760 | - EE_CAF_LIBRARIES . 'shortcodes/', |
|
761 | - ), |
|
762 | - 'msgr_validator_callback' => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'), |
|
763 | - 'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'), |
|
764 | - 'list_type_shortcodes' => array('[NEWSLETTER_CONTENT]'), |
|
765 | - ); |
|
766 | - EE_Register_Messages_Shortcode_Library::register('newsletter', $setup_args); |
|
767 | - } |
|
768 | - |
|
769 | - |
|
770 | - /** |
|
771 | - * Parses a question list shortcode using given data and template |
|
772 | - * |
|
773 | - * @param \EE_Shortcodes $shortcode_parser |
|
774 | - * @param EE_Question[] $questions An array of questions indexed by answer id. |
|
775 | - * @param EE_Answer[] $answers An array of answer objects |
|
776 | - * @param string $template Template content to be parsed. |
|
777 | - * @param array $valid_shortcodes Valid shortcodes for the template being parsed. |
|
778 | - * @param array $extra_data Extra data that might be used when parsing the template. |
|
779 | - */ |
|
780 | - protected function _parse_question_list_for_primary_or_recipient_registration( |
|
781 | - $shortcode_parser, |
|
782 | - $questions, |
|
783 | - $answers, |
|
784 | - $template, |
|
785 | - $valid_shortcodes, |
|
786 | - $extra_data |
|
787 | - ) { |
|
788 | - $question_list = ''; |
|
789 | - /** @var EEH_Parse_Shortcodes $shortcode_helper */ |
|
790 | - $shortcode_helper = $shortcode_parser->get_shortcode_helper(); |
|
791 | - foreach ($answers as $answer) { |
|
792 | - if ($answer instanceof EE_Answer) { |
|
793 | - // first see if the question is in our $questions array. If not then try to get from answer object. |
|
794 | - $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
795 | - $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
|
796 | - if ( |
|
797 | - ! $question instanceof EE_Question |
|
798 | - || ( |
|
799 | - $question instanceof EE_Question |
|
800 | - && $question->admin_only() |
|
801 | - ) |
|
802 | - ) { |
|
803 | - continue; |
|
804 | - } |
|
805 | - $question_list .= $shortcode_helper->parse_question_list_template( |
|
806 | - $template, |
|
807 | - $answer, |
|
808 | - $valid_shortcodes, |
|
809 | - $extra_data |
|
810 | - ); |
|
811 | - } |
|
812 | - } |
|
813 | - return $question_list; |
|
814 | - } |
|
13 | + /** |
|
14 | + * constructor. |
|
15 | + */ |
|
16 | + public function __construct() |
|
17 | + { |
|
18 | + $this->_caf_hooks(); |
|
19 | + } |
|
20 | + |
|
21 | + |
|
22 | + /** |
|
23 | + * Contains all the hooks filters for setting up caffeinated messages functionality. |
|
24 | + * |
|
25 | + * @since 4.3.2 |
|
26 | + * |
|
27 | + * @return void |
|
28 | + */ |
|
29 | + private function _caf_hooks() |
|
30 | + { |
|
31 | + add_filter('FHEE__EED_Messages___set_messages_paths___MSG_PATHS', array($this, 'messages_autoload_paths'), 5); |
|
32 | + add_filter( |
|
33 | + 'FHEE__EE_Email_messenger__get_validator_config', |
|
34 | + array($this, 'email_messenger_validator_config'), |
|
35 | + 5, |
|
36 | + 2 |
|
37 | + ); |
|
38 | + add_filter( |
|
39 | + 'FHEE__EE_Email_messenger__get_template_fields', |
|
40 | + array($this, 'email_messenger_template_fields'), |
|
41 | + 5, |
|
42 | + 2 |
|
43 | + ); |
|
44 | + add_filter( |
|
45 | + 'FHEE__EE_Html_messenger__get_template_fields', |
|
46 | + array($this, 'html_messenger_template_fields'), |
|
47 | + 5, |
|
48 | + 2 |
|
49 | + ); |
|
50 | + add_filter( |
|
51 | + 'FHEE__EE_Html_messenger__get_validator_config', |
|
52 | + array($this, 'html_messenger_validator_config'), |
|
53 | + 5, |
|
54 | + 2 |
|
55 | + ); |
|
56 | + add_filter('FHEE__EE_Pdf_messenger__get_template_fields', array($this, 'pdf_messenger_template_fields'), 5, 2); |
|
57 | + add_filter( |
|
58 | + 'FHEE__EE_Pdf_messenger__get_validator_config', |
|
59 | + array($this, 'pdf_messenger_validator_config'), |
|
60 | + 5, |
|
61 | + 2 |
|
62 | + ); |
|
63 | + add_filter( |
|
64 | + 'FHEE__EE_Messages_Template_Pack__get_specific_template__contents', |
|
65 | + array($this, 'new_default_templates'), |
|
66 | + 5, |
|
67 | + 7 |
|
68 | + ); |
|
69 | + add_filter( |
|
70 | + 'FHEE__EE_Messages_Base__get_valid_shortcodes', |
|
71 | + array($this, 'message_types_valid_shortcodes'), |
|
72 | + 5, |
|
73 | + 2 |
|
74 | + ); |
|
75 | + |
|
76 | + // shortcode parsers |
|
77 | + add_filter('FHEE__EE_Attendee_Shortcodes__shortcodes', array($this, 'additional_attendee_shortcodes'), 5, 2); |
|
78 | + add_filter('FHEE__EE_Attendee_Shortcodes__parser_after', array($this, 'additional_attendee_parser'), 5, 5); |
|
79 | + add_filter( |
|
80 | + 'FHEE__EE_Recipient_List_Shortcodes__shortcodes', |
|
81 | + array($this, 'additional_recipient_details_shortcodes'), |
|
82 | + 5, |
|
83 | + 2 |
|
84 | + ); |
|
85 | + add_filter( |
|
86 | + 'FHEE__EE_Recipient_List_Shortcodes__parser_after', |
|
87 | + array($this, 'additional_recipient_details_parser'), |
|
88 | + 5, |
|
89 | + 5 |
|
90 | + ); |
|
91 | + add_filter( |
|
92 | + 'FHEE__EE_Primary_Registration_List_Shortcodes__shortcodes', |
|
93 | + array($this, 'additional_primary_registration_details_shortcodes'), |
|
94 | + 5, |
|
95 | + 2 |
|
96 | + ); |
|
97 | + add_filter( |
|
98 | + 'FHEE__EE_Primary_Registration_List_Shortcodes__parser_after', |
|
99 | + array($this, 'additional_primary_registration_details_parser'), |
|
100 | + 5, |
|
101 | + 5 |
|
102 | + ); |
|
103 | + |
|
104 | + /** |
|
105 | + * @since 4.2.0 |
|
106 | + */ |
|
107 | + add_filter('FHEE__EE_Datetime_Shortcodes__shortcodes', array($this, 'additional_datetime_shortcodes'), 10, 2); |
|
108 | + add_filter('FHEE__EE_Datetime_Shortcodes__parser_after', array($this, 'additional_datetime_parser'), 10, 5); |
|
109 | + |
|
110 | + /** |
|
111 | + * @since 4.3.0 |
|
112 | + */ |
|
113 | + // eat our own dog food! |
|
114 | + add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_message_types')); |
|
115 | + add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_shortcodes')); |
|
116 | + do_action('EE_Brewing_Regular___messages_caf'); |
|
117 | + } |
|
118 | + |
|
119 | + |
|
120 | + /** |
|
121 | + * This just allows us to add additional paths to the autoloader (EED_Messages::autoload_messages()) for the |
|
122 | + * messages system. |
|
123 | + * |
|
124 | + * @param array $dir_ref original array of paths |
|
125 | + * |
|
126 | + * @return array appended paths |
|
127 | + */ |
|
128 | + public function messages_autoload_paths($dir_ref) |
|
129 | + { |
|
130 | + $dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/'; |
|
131 | + |
|
132 | + return $dir_ref; |
|
133 | + } |
|
134 | + |
|
135 | + |
|
136 | + public function email_messenger_validator_config($validator_config, EE_Email_messenger $messenger) |
|
137 | + { |
|
138 | + $validator_config['attendee_list'] = array( |
|
139 | + 'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'), |
|
140 | + 'required' => array('[ATTENDEE_LIST]'), |
|
141 | + ); |
|
142 | + $validator_config['question_list'] = array( |
|
143 | + 'shortcodes' => array('question'), |
|
144 | + 'required' => array('[QUESTION_LIST]'), |
|
145 | + ); |
|
146 | + |
|
147 | + return $validator_config; |
|
148 | + } |
|
149 | + |
|
150 | + |
|
151 | + public function html_messenger_validator_config($validator_config, EE_Html_messenger $messenger) |
|
152 | + { |
|
153 | + $validator_config['attendee_list'] = array( |
|
154 | + 'shortcodes' => array('attendee', 'question_list'), |
|
155 | + 'required' => array('[ATTENDEE_LIST]'), |
|
156 | + ); |
|
157 | + $validator_config['question_list'] = array( |
|
158 | + 'shortcodes' => array('question'), |
|
159 | + 'required' => array('[QUESTION_LIST]'), |
|
160 | + ); |
|
161 | + |
|
162 | + return $validator_config; |
|
163 | + } |
|
164 | + |
|
165 | + |
|
166 | + public function pdf_messenger_validator_config($validator_config, EE_Pdf_messenger $messenger) |
|
167 | + { |
|
168 | + $validator_config['attendee_list'] = array( |
|
169 | + 'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'), |
|
170 | + 'required' => array('[ATTENDEE_LIST]'), |
|
171 | + ); |
|
172 | + $validator_config['question_list'] = array( |
|
173 | + 'shortcodes' => array('question'), |
|
174 | + 'required' => array('[QUESTION_LIST]'), |
|
175 | + ); |
|
176 | + |
|
177 | + return $validator_config; |
|
178 | + } |
|
179 | + |
|
180 | + |
|
181 | + public function email_messenger_template_fields($template_fields, EE_Email_messenger $messenger) |
|
182 | + { |
|
183 | + $template_fields['extra']['content']['question_list'] = array( |
|
184 | + 'input' => 'textarea', |
|
185 | + 'label' => '[QUESTION_LIST]', |
|
186 | + 'type' => 'string', |
|
187 | + 'required' => true, |
|
188 | + 'validation' => true, |
|
189 | + 'format' => '%s', |
|
190 | + 'css_class' => 'large-text', |
|
191 | + 'rows' => '5', |
|
192 | + 'shortcodes_required' => array('[QUESTION_LIST]'), |
|
193 | + ); |
|
194 | + |
|
195 | + return $template_fields; |
|
196 | + } |
|
197 | + |
|
198 | + |
|
199 | + public function html_messenger_template_fields($template_fields, EE_Html_messenger $messenger) |
|
200 | + { |
|
201 | + $template_fields['extra']['content']['question_list'] = array( |
|
202 | + 'input' => 'textarea', |
|
203 | + 'label' => '[QUESTION_LIST]', |
|
204 | + 'type' => 'string', |
|
205 | + 'required' => true, |
|
206 | + 'validation' => true, |
|
207 | + 'format' => '%s', |
|
208 | + 'css_class' => 'large-text', |
|
209 | + 'rows' => '5', |
|
210 | + 'shortcodes_required' => array('[QUESTION_LIST]'), |
|
211 | + ); |
|
212 | + |
|
213 | + return $template_fields; |
|
214 | + } |
|
215 | + |
|
216 | + |
|
217 | + public function pdf_messenger_template_fields($template_fields, EE_Pdf_messenger $messenger) |
|
218 | + { |
|
219 | + $template_fields['extra']['content']['question_list'] = array( |
|
220 | + 'input' => 'textarea', |
|
221 | + 'label' => '[QUESTION_LIST]', |
|
222 | + 'type' => 'string', |
|
223 | + 'required' => true, |
|
224 | + 'validation' => true, |
|
225 | + 'format' => '%s', |
|
226 | + 'css_class' => 'large-text', |
|
227 | + 'rows' => '5', |
|
228 | + 'shortcodes_required' => array('[QUESTION_LIST]'), |
|
229 | + ); |
|
230 | + |
|
231 | + return $template_fields; |
|
232 | + } |
|
233 | + |
|
234 | + |
|
235 | + public function new_default_templates( |
|
236 | + $contents, |
|
237 | + $actual_path, |
|
238 | + EE_messenger $messenger, |
|
239 | + EE_message_type $message_type, |
|
240 | + $field, |
|
241 | + $context, |
|
242 | + EE_Messages_Template_Pack $template_pack |
|
243 | + ) { |
|
244 | + |
|
245 | + // we're only modifying templates for the default template pack |
|
246 | + if (! $template_pack instanceof EE_Messages_Template_Pack_Default) { |
|
247 | + return $contents; |
|
248 | + } |
|
249 | + |
|
250 | + // the template file name we're replacing contents for. |
|
251 | + $template_file_prefix = $field . '_' . $context; |
|
252 | + $msg_prefix = $messenger->name . '_' . $message_type->name . '_'; |
|
253 | + |
|
254 | + $base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/'; |
|
255 | + |
|
256 | + if ($messenger->name == 'email' && $message_type->name == 'registration') { |
|
257 | + switch ($template_file_prefix) { |
|
258 | + case 'question_list_admin': |
|
259 | + case 'question_list_attendee': |
|
260 | + case 'question_list_primary_attendee': |
|
261 | + $path = $base_path . $msg_prefix . 'question_list.template.php'; |
|
262 | + $contents = EEH_Template::display_template($path, array(), true); |
|
263 | + break; |
|
264 | + |
|
265 | + case 'attendee_list_primary_attendee': |
|
266 | + $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
267 | + $contents = EEH_Template::display_template($path, array(), true); |
|
268 | + break; |
|
269 | + |
|
270 | + case 'attendee_list_admin': |
|
271 | + $path = $base_path . $msg_prefix . 'attendee_list_admin.template.php'; |
|
272 | + $contents = EEH_Template::display_template( |
|
273 | + $path, |
|
274 | + array(), |
|
275 | + true |
|
276 | + ); |
|
277 | + break; |
|
278 | + |
|
279 | + case 'attendee_list_attendee': |
|
280 | + $contents = ''; |
|
281 | + break; |
|
282 | + |
|
283 | + case 'event_list_attendee': |
|
284 | + $path = $base_path . $msg_prefix . 'event_list_attendee.template.php'; |
|
285 | + $contents = EEH_Template::display_template($path, array(), true); |
|
286 | + break; |
|
287 | + } |
|
288 | + } elseif ($messenger->name == 'email' && $message_type->name == 'newsletter') { |
|
289 | + switch ($template_file_prefix) { |
|
290 | + case 'content_attendee': |
|
291 | + $path = $base_path . $msg_prefix . 'content.template.php'; |
|
292 | + $contents = EEH_Template::display_template($path, array(), true); |
|
293 | + break; |
|
294 | + |
|
295 | + case 'newsletter_content_attendee': |
|
296 | + $path = $base_path . $msg_prefix . 'newsletter_content.template.php'; |
|
297 | + $contents = EEH_Template::display_template($path, array(), true); |
|
298 | + break; |
|
299 | + |
|
300 | + case 'newsletter_subject_attendee': |
|
301 | + $path = $base_path . $msg_prefix . 'subject.template.php'; |
|
302 | + $contents = EEH_Template::display_template($path, array(), true); |
|
303 | + break; |
|
304 | + } |
|
305 | + } elseif ($messenger->name == 'html' && $message_type->name == 'receipt') { |
|
306 | + switch ($template_file_prefix) { |
|
307 | + case 'attendee_list_purchaser': |
|
308 | + $path = $base_path . $msg_prefix . 'attendee_list.template.php'; |
|
309 | + $contents = EEH_Template::display_template($path, array(), true); |
|
310 | + break; |
|
311 | + } |
|
312 | + } |
|
313 | + |
|
314 | + return $contents; |
|
315 | + } |
|
316 | + |
|
317 | + |
|
318 | + public function message_types_valid_shortcodes($valid_shortcodes, EE_Messages_Base $msg) |
|
319 | + { |
|
320 | + // make sure question_list and question are ONLY added for the core message types. Any other message types will have to explicitly set question_list as a valid shortcode. |
|
321 | + $include_with = array( |
|
322 | + 'registration', |
|
323 | + 'cancelled_registration', |
|
324 | + 'declined_registration', |
|
325 | + 'not_approved_registration', |
|
326 | + 'payment_declined', |
|
327 | + 'payment_failed', |
|
328 | + 'payment_cancelled', |
|
329 | + 'payment', |
|
330 | + 'payment_reminder', |
|
331 | + 'pending_approval', |
|
332 | + 'registration_summary', |
|
333 | + 'invoice', |
|
334 | + 'receipt', |
|
335 | + ); |
|
336 | + if ($msg instanceof EE_message_type && in_array($msg->name, $include_with)) { |
|
337 | + $contexts = array_keys($msg->get_contexts()); |
|
338 | + foreach ($contexts as $context) { |
|
339 | + $valid_shortcodes[ $context ][] = 'question_list'; |
|
340 | + $valid_shortcodes[ $context ][] = 'question'; |
|
341 | + } |
|
342 | + } |
|
343 | + |
|
344 | + return $valid_shortcodes; |
|
345 | + } |
|
346 | + |
|
347 | + |
|
348 | + public function additional_attendee_shortcodes($shortcodes, $shortcode_parser) |
|
349 | + { |
|
350 | + $shortcodes['[ANSWER_*]'] = esc_html__( |
|
351 | + 'This is a special dynamic shortcode. Right after the "*", add the exact text of a existing question, and if there is an answer for that question for this registrant, that will take the place of this shortcode.', |
|
352 | + 'event_espresso' |
|
353 | + ); |
|
354 | + |
|
355 | + return $shortcodes; |
|
356 | + } |
|
357 | + |
|
358 | + |
|
359 | + public function additional_attendee_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
360 | + { |
|
361 | + |
|
362 | + if ( |
|
363 | + strpos($shortcode, '[ANSWER_*') === false |
|
364 | + || ! isset($extra_data['data']->questions) |
|
365 | + || ! isset($extra_data['data']->registrations) |
|
366 | + ) { |
|
367 | + return $parsed; |
|
368 | + } |
|
369 | + |
|
370 | + // let's get the question from the code. |
|
371 | + $shortcode = str_replace('[ANSWER_*', '', $shortcode); |
|
372 | + $shortcode = trim(str_replace(']', '', $shortcode)); |
|
373 | + |
|
374 | + $registration = $data instanceof EE_Registration ? $data : null; |
|
375 | + $registration = ! $registration instanceof EE_Registration && is_array( |
|
376 | + $extra_data |
|
377 | + ) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Registration ? $extra_data['data'] : $registration; |
|
378 | + |
|
379 | + $aee = $data instanceof EE_Messages_Addressee ? $data : null; |
|
380 | + $aee = ! $aee instanceof EE_Messages_Addressee && is_array( |
|
381 | + $extra_data |
|
382 | + ) && isset($extra_data['data']) ? $extra_data['data'] : $aee; |
|
383 | + |
|
384 | + if (! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) { |
|
385 | + return $parsed; |
|
386 | + } |
|
387 | + |
|
388 | + // now let's figure out which question has this text. |
|
389 | + foreach ($aee->questions as $ansid => $question) { |
|
390 | + if ( |
|
391 | + $question instanceof EE_Question |
|
392 | + && trim($question->display_text()) == trim($shortcode) |
|
393 | + && isset($aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]) |
|
394 | + ) { |
|
395 | + return $aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]->get_pretty( |
|
396 | + 'ANS_value', |
|
397 | + 'no_wpautop' |
|
398 | + ); |
|
399 | + } |
|
400 | + } |
|
401 | + |
|
402 | + // nothing! |
|
403 | + return $parsed; |
|
404 | + } |
|
405 | + |
|
406 | + |
|
407 | + /** |
|
408 | + * Callback for additional shortcodes filter for adding additional datetime shortcodes. |
|
409 | + * |
|
410 | + * @since 4.2 |
|
411 | + * |
|
412 | + * @param array $shortcodes array of shortcodes and |
|
413 | + * descriptions |
|
414 | + * @param EE_Datetime_Shortcodes $shortcode_parser EE_Shortcodes object |
|
415 | + * |
|
416 | + * @return array array of shortcodes and |
|
417 | + * descriptions |
|
418 | + */ |
|
419 | + public function additional_datetime_shortcodes($shortcodes, $shortcode_parser) |
|
420 | + { |
|
421 | + $shortcodes['[DTT_NAME]'] = esc_html__( |
|
422 | + 'This will be parsed to the Title given for a Datetime', |
|
423 | + 'event_espresso' |
|
424 | + ); |
|
425 | + $shortcodes['[DTT_DESCRIPTION]'] = esc_html__( |
|
426 | + 'This will be parsed to the description for a Datetime', |
|
427 | + 'event_espresso' |
|
428 | + ); |
|
429 | + $shortcodes['[DTT_NAME_OR_DATES]'] = esc_html__( |
|
430 | + 'When parsed, if the Datetime has a name, it is used, otherwise a formatted string including the start date and end date will be used.', |
|
431 | + 'event_espresso' |
|
432 | + ); |
|
433 | + |
|
434 | + return $shortcodes; |
|
435 | + } |
|
436 | + |
|
437 | + |
|
438 | + /** |
|
439 | + * Callback for additional shortcodes parser filter used for adding parser for new |
|
440 | + * Datetime shortcodes |
|
441 | + * |
|
442 | + * @since 4.2 |
|
443 | + * |
|
444 | + * @param string $parsed The finished parsed string for the given shortcode. |
|
445 | + * @param string $shortcode The shortcode being parsed. |
|
446 | + * @param object $data The incoming data object for the Shortcode Parser. |
|
447 | + * @param object $extra_data The incoming extra date object for the Shortcode |
|
448 | + * Parser. |
|
449 | + * @param EE_Datetime_Shortcodes $shortcode_parser |
|
450 | + * |
|
451 | + * @return string The new parsed string. |
|
452 | + */ |
|
453 | + public function additional_datetime_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
454 | + { |
|
455 | + |
|
456 | + if (! $data instanceof EE_Datetime) { |
|
457 | + return ''; // get out because we can only parse with the datetime object. |
|
458 | + } |
|
459 | + |
|
460 | + switch ($shortcode) { |
|
461 | + case '[DTT_NAME]': |
|
462 | + return $data->name(); |
|
463 | + break; |
|
464 | + case '[DTT_DESCRIPTION]': |
|
465 | + return $data->description(); |
|
466 | + break; |
|
467 | + case '[DTT_NAME_OR_DATES]': |
|
468 | + return $data->get_dtt_display_name(true); |
|
469 | + break; |
|
470 | + default: |
|
471 | + return $parsed; |
|
472 | + break; |
|
473 | + } |
|
474 | + } |
|
475 | + |
|
476 | + |
|
477 | + public function additional_recipient_details_shortcodes($shortcodes, $shortcode_parser) |
|
478 | + { |
|
479 | + $shortcodes['[RECIPIENT_QUESTION_LIST]'] = esc_html__( |
|
480 | + 'This is used to indicate where you want the list of questions and answers to show for the person receiving the message.', |
|
481 | + 'event_espresso' |
|
482 | + ); |
|
483 | + |
|
484 | + return $shortcodes; |
|
485 | + } |
|
486 | + |
|
487 | + |
|
488 | + /** |
|
489 | + * Callback for FHEE__EE_Recipient_List_Shortcodes__parser_after filter (dynamic filter). |
|
490 | + * |
|
491 | + * @param string $parsed The original parsed content for the shortcode |
|
492 | + * @param string $shortcode The shortcode being parsed |
|
493 | + * @param array $data The shortcode parser data array |
|
494 | + * @param array $extra_data The shortcode parser extra data array |
|
495 | + * @param \EE_Shortcodes $shortcode_parser Shortcode parser. |
|
496 | + * |
|
497 | + * @return string |
|
498 | + */ |
|
499 | + public function additional_recipient_details_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser) |
|
500 | + { |
|
501 | + |
|
502 | + if (array($data) && ! isset($data['data'])) { |
|
503 | + return $parsed; |
|
504 | + } |
|
505 | + |
|
506 | + $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
|
507 | + $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
|
508 | + |
|
509 | + if (! $recipient instanceof EE_Messages_Addressee) { |
|
510 | + return $parsed; |
|
511 | + } |
|
512 | + |
|
513 | + switch ($shortcode) { |
|
514 | + case '[RECIPIENT_QUESTION_LIST]': |
|
515 | + $att = $recipient->att_obj; |
|
516 | + $registrations_on_attendee = $att instanceof EE_Attendee |
|
517 | + ? $recipient->attendees[ $att->ID() ]['reg_objs'] |
|
518 | + : array(); |
|
519 | + $registrations_on_attendee = empty($registrations_on_attendee) && $recipient->reg_obj instanceof EE_Registration ? array($recipient->reg_obj) : $registrations_on_attendee; |
|
520 | + $answers = array(); |
|
521 | + |
|
522 | + $template = is_array($data['template']) && isset($data['template']['question_list']) |
|
523 | + ? $data['template']['question_list'] |
|
524 | + : $extra_data['template']['question_list']; |
|
525 | + $valid_shortcodes = array('question'); |
|
526 | + |
|
527 | + // if the context is main_content then get all answers for all registrations on this attendee |
|
528 | + if ($data['data'] instanceof EE_Messages_Addressee) { |
|
529 | + foreach ($registrations_on_attendee as $reg) { |
|
530 | + if ($reg instanceof EE_Registration) { |
|
531 | + $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs']) |
|
532 | + ? $recipient->registrations[ $reg->ID() ]['ans_objs'] |
|
533 | + : array(); |
|
534 | + foreach ($anss as $ans) { |
|
535 | + if ($ans instanceof EE_Answer) { |
|
536 | + $answers[ $ans->ID() ] = $ans; |
|
537 | + } |
|
538 | + } |
|
539 | + } |
|
540 | + } |
|
541 | + } |
|
542 | + |
|
543 | + // if the context is the event list parser, then let's return just the answers for all registrations attached to the recipient for that event. |
|
544 | + if ($data['data'] instanceof EE_Event) { |
|
545 | + $event = $data['data']; |
|
546 | + foreach ($registrations_on_attendee as $reg) { |
|
547 | + if ($reg instanceof EE_Registration && $reg->event_ID() == $event->ID()) { |
|
548 | + $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs']) |
|
549 | + ? $recipient->registrations[ $reg->ID() ]['ans_objs'] |
|
550 | + : array(); |
|
551 | + foreach ($anss as $ans) { |
|
552 | + if ($ans instanceof EE_Answer) { |
|
553 | + $answers[ $ans->ID() ] = $ans; |
|
554 | + } |
|
555 | + } |
|
556 | + } |
|
557 | + } |
|
558 | + } |
|
559 | + |
|
560 | + $questions = $questions = isset($recipient->questions) ? $recipient->questions : array(); |
|
561 | + |
|
562 | + // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
|
563 | + // object on it. |
|
564 | + if (! isset($extra_data['data'])) { |
|
565 | + $extra_data['data'] = $recipient; |
|
566 | + } |
|
567 | + |
|
568 | + return $this->_parse_question_list_for_primary_or_recipient_registration( |
|
569 | + $shortcode_parser, |
|
570 | + $questions, |
|
571 | + $answers, |
|
572 | + $template, |
|
573 | + $valid_shortcodes, |
|
574 | + $extra_data |
|
575 | + ); |
|
576 | + break; |
|
577 | + |
|
578 | + default: |
|
579 | + return $parsed; |
|
580 | + break; |
|
581 | + } |
|
582 | + } |
|
583 | + |
|
584 | + |
|
585 | + public function additional_primary_registration_details_shortcodes($shortcodes, $shortcode_parser) |
|
586 | + { |
|
587 | + $shortcodes['[PRIMARY_REGISTRANT_QUESTION_LIST]'] = esc_html__( |
|
588 | + 'This is used to indicate the questions and answers for the primary_registrant. It should be placed in the "[attendee_list]" field', |
|
589 | + 'event_espresso' |
|
590 | + ); |
|
591 | + |
|
592 | + return $shortcodes; |
|
593 | + } |
|
594 | + |
|
595 | + |
|
596 | + /** |
|
597 | + * Callback for FHEE__EE_Primary_Registration_List_Shortcodes__parser_after filter (dynamic filter). |
|
598 | + * |
|
599 | + * @param string $parsed The original parsed content for the shortcode |
|
600 | + * @param string $shortcode The shortcode being parsed |
|
601 | + * @param array $data The shortcode parser data array |
|
602 | + * @param array $extra_data The shortcode parser extra data array |
|
603 | + * @param \EE_Shortcodes $shortcode_parser Shortcode parser. |
|
604 | + * |
|
605 | + * @return string |
|
606 | + */ |
|
607 | + public function additional_primary_registration_details_parser( |
|
608 | + $parsed, |
|
609 | + $shortcode, |
|
610 | + $data, |
|
611 | + $extra_data, |
|
612 | + $shortcode_parser |
|
613 | + ) { |
|
614 | + if (array($data) && ! isset($data['data'])) { |
|
615 | + return $parsed; |
|
616 | + } |
|
617 | + |
|
618 | + $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null; |
|
619 | + $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient; |
|
620 | + |
|
621 | + if (! $recipient instanceof EE_Messages_Addressee) { |
|
622 | + return $parsed; |
|
623 | + } |
|
624 | + |
|
625 | + switch ($shortcode) { |
|
626 | + case '[PRIMARY_REGISTRANT_QUESTION_LIST]': |
|
627 | + if (! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) { |
|
628 | + return ''; |
|
629 | + } |
|
630 | + $registration = $recipient->primary_reg_obj; |
|
631 | + $answers = isset($recipient->registrations[ $registration->ID() ]['ans_objs']) |
|
632 | + ? $recipient->registrations[ $registration->ID() ]['ans_objs'] |
|
633 | + : array(); |
|
634 | + if (empty($answers)) { |
|
635 | + return ''; |
|
636 | + } |
|
637 | + $template = is_array($data['template']) && isset($data['template']['question_list']) |
|
638 | + ? $data['template']['question_list'] |
|
639 | + : $extra_data['template']['question_list']; |
|
640 | + $valid_shortcodes = array('question'); |
|
641 | + $answers = $recipient->registrations[ $registration->ID() ]['ans_objs']; |
|
642 | + $questions = isset($recipient->questions) ? $recipient->questions : array(); |
|
643 | + // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee |
|
644 | + // object on it. |
|
645 | + if (! isset($extra_data['data'])) { |
|
646 | + $extra_data['data'] = $recipient; |
|
647 | + } |
|
648 | + return $this->_parse_question_list_for_primary_or_recipient_registration( |
|
649 | + $shortcode_parser, |
|
650 | + $questions, |
|
651 | + $answers, |
|
652 | + $template, |
|
653 | + $valid_shortcodes, |
|
654 | + $extra_data |
|
655 | + ); |
|
656 | + break; |
|
657 | + |
|
658 | + default: |
|
659 | + return $parsed; |
|
660 | + break; |
|
661 | + } |
|
662 | + } |
|
663 | + |
|
664 | + |
|
665 | + /** |
|
666 | + * Takes care of registering the message types that are only available in caffeinated EE. |
|
667 | + * |
|
668 | + * @since 4.3.2 |
|
669 | + * |
|
670 | + * @return void |
|
671 | + */ |
|
672 | + public function register_caf_message_types() |
|
673 | + { |
|
674 | + // register newsletter message type |
|
675 | + $setup_args = array( |
|
676 | + 'mtfilename' => 'EE_Newsletter_message_type.class.php', |
|
677 | + 'autoloadpaths' => array( |
|
678 | + EE_CAF_LIBRARIES . 'messages/message_type/newsletter/', |
|
679 | + ), |
|
680 | + 'messengers_to_activate_with' => array('email'), |
|
681 | + 'messengers_to_validate_with' => array('email'), |
|
682 | + 'messengers_supporting_default_template_pack_with' => array('email'), |
|
683 | + ); |
|
684 | + EE_Register_Message_Type::register('newsletter', $setup_args); |
|
685 | + |
|
686 | + // register payment reminder message type |
|
687 | + $setup_args = array( |
|
688 | + 'mtfilename' => 'EE_Payment_Reminder_message_type.class.php', |
|
689 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'), |
|
690 | + 'messengers_to_activate_with' => array('email'), |
|
691 | + 'messengers_to_validate_with' => array('email'), |
|
692 | + 'messengers_supporting_default_template_pack_with' => array('email'), |
|
693 | + ); |
|
694 | + EE_Register_Message_Type::register('payment_reminder', $setup_args); |
|
695 | + |
|
696 | + // register payment declined message type |
|
697 | + $setup_args = array( |
|
698 | + 'mtfilename' => 'EE_Payment_Declined_message_type.class.php', |
|
699 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'), |
|
700 | + 'messengers_to_activate_with' => array('email'), |
|
701 | + 'messengers_to_validate_with' => array('email'), |
|
702 | + 'messengers_supporting_default_template_pack_with' => array('email'), |
|
703 | + ); |
|
704 | + EE_Register_Message_Type::register('payment_declined', $setup_args); |
|
705 | + |
|
706 | + // register registration declined message type |
|
707 | + $setup_args = array( |
|
708 | + 'mtfilename' => 'EE_Declined_Registration_message_type.class.php', |
|
709 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'), |
|
710 | + 'messengers_to_activate_with' => array('email'), |
|
711 | + 'messengers_to_validate_with' => array('email'), |
|
712 | + 'messengers_supporting_default_template_pack_with' => array('email'), |
|
713 | + ); |
|
714 | + EE_Register_Message_Type::register('declined_registration', $setup_args); |
|
715 | + |
|
716 | + // register registration cancelled message type |
|
717 | + $setup_args = array( |
|
718 | + 'mtfilename' => 'EE_Cancelled_Registration_message_type.class.php', |
|
719 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'), |
|
720 | + 'messengers_to_activate_with' => array('email'), |
|
721 | + 'messengers_to_validate_with' => array('email'), |
|
722 | + 'messengers_supporting_default_template_pack_with' => array('email'), |
|
723 | + ); |
|
724 | + EE_Register_Message_Type::register('cancelled_registration', $setup_args); |
|
725 | + |
|
726 | + |
|
727 | + // register payment failed message type |
|
728 | + $setup_args = array( |
|
729 | + 'mtfilename' => 'EE_Payment_Failed_message_type.class.php', |
|
730 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'), |
|
731 | + 'messengers_to_activate_with' => array('email'), |
|
732 | + 'messengers_to_validate_with' => array('email'), |
|
733 | + 'messengers_supporting_default_template_pack_with' => array('email'), |
|
734 | + ); |
|
735 | + EE_Register_Message_Type::register('payment_failed', $setup_args); |
|
736 | + |
|
737 | + // register payment declined message type |
|
738 | + $setup_args = array( |
|
739 | + 'mtfilename' => 'EE_Payment_Cancelled_message_type.class.php', |
|
740 | + 'autoloadpaths' => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'), |
|
741 | + 'messengers_to_activate_with' => array('email'), |
|
742 | + 'messengers_to_validate_with' => array('email'), |
|
743 | + 'messengers_supporting_default_template_pack_with' => array('email'), |
|
744 | + ); |
|
745 | + EE_Register_Message_Type::register('payment_cancelled', $setup_args); |
|
746 | + } |
|
747 | + |
|
748 | + |
|
749 | + /** |
|
750 | + * Takes care of registering the shortcode libraries implemented with caffeinated EE and set up related items. |
|
751 | + * |
|
752 | + * @since 4.3.2 |
|
753 | + * |
|
754 | + * @return void |
|
755 | + */ |
|
756 | + public function register_caf_shortcodes() |
|
757 | + { |
|
758 | + $setup_args = array( |
|
759 | + 'autoloadpaths' => array( |
|
760 | + EE_CAF_LIBRARIES . 'shortcodes/', |
|
761 | + ), |
|
762 | + 'msgr_validator_callback' => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'), |
|
763 | + 'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'), |
|
764 | + 'list_type_shortcodes' => array('[NEWSLETTER_CONTENT]'), |
|
765 | + ); |
|
766 | + EE_Register_Messages_Shortcode_Library::register('newsletter', $setup_args); |
|
767 | + } |
|
768 | + |
|
769 | + |
|
770 | + /** |
|
771 | + * Parses a question list shortcode using given data and template |
|
772 | + * |
|
773 | + * @param \EE_Shortcodes $shortcode_parser |
|
774 | + * @param EE_Question[] $questions An array of questions indexed by answer id. |
|
775 | + * @param EE_Answer[] $answers An array of answer objects |
|
776 | + * @param string $template Template content to be parsed. |
|
777 | + * @param array $valid_shortcodes Valid shortcodes for the template being parsed. |
|
778 | + * @param array $extra_data Extra data that might be used when parsing the template. |
|
779 | + */ |
|
780 | + protected function _parse_question_list_for_primary_or_recipient_registration( |
|
781 | + $shortcode_parser, |
|
782 | + $questions, |
|
783 | + $answers, |
|
784 | + $template, |
|
785 | + $valid_shortcodes, |
|
786 | + $extra_data |
|
787 | + ) { |
|
788 | + $question_list = ''; |
|
789 | + /** @var EEH_Parse_Shortcodes $shortcode_helper */ |
|
790 | + $shortcode_helper = $shortcode_parser->get_shortcode_helper(); |
|
791 | + foreach ($answers as $answer) { |
|
792 | + if ($answer instanceof EE_Answer) { |
|
793 | + // first see if the question is in our $questions array. If not then try to get from answer object. |
|
794 | + $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
795 | + $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
|
796 | + if ( |
|
797 | + ! $question instanceof EE_Question |
|
798 | + || ( |
|
799 | + $question instanceof EE_Question |
|
800 | + && $question->admin_only() |
|
801 | + ) |
|
802 | + ) { |
|
803 | + continue; |
|
804 | + } |
|
805 | + $question_list .= $shortcode_helper->parse_question_list_template( |
|
806 | + $template, |
|
807 | + $answer, |
|
808 | + $valid_shortcodes, |
|
809 | + $extra_data |
|
810 | + ); |
|
811 | + } |
|
812 | + } |
|
813 | + return $question_list; |
|
814 | + } |
|
815 | 815 | } |
@@ -1,10 +1,10 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | printf( |
4 | - esc_html__( |
|
5 | - 'PayPal Pro (Website Payments Pro) is an on-site payment method for accepting credit and debit cards and is available to event organizers in the United States, United Kingdom, and Canada. An account with PayPal is required to accept payments. Need a PayPal Pro account? Call 1-855-456-1338 or %1$sclick here to sign up for a merchant account%2$s.', |
|
6 | - 'event_espresso' |
|
7 | - ), |
|
8 | - '<a href="https://eventespresso.com/go/paypalpro/" target="_blank">', |
|
9 | - '</a>' |
|
4 | + esc_html__( |
|
5 | + 'PayPal Pro (Website Payments Pro) is an on-site payment method for accepting credit and debit cards and is available to event organizers in the United States, United Kingdom, and Canada. An account with PayPal is required to accept payments. Need a PayPal Pro account? Call 1-855-456-1338 or %1$sclick here to sign up for a merchant account%2$s.', |
|
6 | + 'event_espresso' |
|
7 | + ), |
|
8 | + '<a href="https://eventespresso.com/go/paypalpro/" target="_blank">', |
|
9 | + '</a>' |
|
10 | 10 | ); |
@@ -20,7 +20,7 @@ discard block |
||
20 | 20 | */ |
21 | 21 | public function __construct($pm_instance = null) |
22 | 22 | { |
23 | - require_once($this->file_folder() . 'EEG_Paypal_Pro.gateway.php'); |
|
23 | + require_once($this->file_folder().'EEG_Paypal_Pro.gateway.php'); |
|
24 | 24 | $this->_gateway = new EEG_Paypal_Pro(); |
25 | 25 | $this->_pretty_name = esc_html__("Paypal Pro", 'event_espresso'); |
26 | 26 | $this->_default_description = esc_html__('Please provide the following billing information.', 'event_espresso'); |
@@ -63,22 +63,22 @@ discard block |
||
63 | 63 | // 'html_id'=> 'ee-Paypal_Pro-billing-form', |
64 | 64 | 'subsections' => array( |
65 | 65 | 'credit_card' => new EE_Credit_Card_Input( |
66 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Number', 'event_espresso')) |
|
66 | + array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Number', 'event_espresso')) |
|
67 | 67 | ), |
68 | 68 | 'credit_card_type' => new EE_Select_Input( |
69 | 69 | // the options are set dynamically |
70 | 70 | array_intersect_key(EE_PMT_Paypal_Pro::card_types_supported(), array_flip($allowed_types)), |
71 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Type', 'event_espresso')) |
|
71 | + array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Type', 'event_espresso')) |
|
72 | 72 | ), |
73 | 73 | 'exp_month' => new EE_Credit_Card_Month_Input( |
74 | 74 | true, |
75 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Month', 'event_espresso') ) |
|
75 | + array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Month', 'event_espresso')) |
|
76 | 76 | ), |
77 | 77 | 'exp_year' => new EE_Credit_Card_Year_Input( |
78 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Year', 'event_espresso') ) |
|
78 | + array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Year', 'event_espresso')) |
|
79 | 79 | ), |
80 | 80 | 'cvv' => new EE_CVV_Input( |
81 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('CVV', 'event_espresso') ) |
|
81 | + array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('CVV', 'event_espresso')) |
|
82 | 82 | ), |
83 | 83 | ) |
84 | 84 | ) |
@@ -99,11 +99,11 @@ discard block |
||
99 | 99 | { |
100 | 100 | if ($this->_pm_instance->debug_mode()) { |
101 | 101 | $billing_form->add_subsections( |
102 | - array( 'fyi_about_autofill' => $billing_form->payment_fields_autofilled_notice_html() ), |
|
102 | + array('fyi_about_autofill' => $billing_form->payment_fields_autofilled_notice_html()), |
|
103 | 103 | 'credit_card' |
104 | 104 | ); |
105 | 105 | $billing_form->add_subsections( |
106 | - array( 'debug_content' => new EE_Form_Section_HTML_From_Template(dirname(__FILE__) . '/templates/paypal_pro_debug_info.template.php')), |
|
106 | + array('debug_content' => new EE_Form_Section_HTML_From_Template(dirname(__FILE__).'/templates/paypal_pro_debug_info.template.php')), |
|
107 | 107 | 'first_name' |
108 | 108 | ); |
109 | 109 | $billing_form->get_input('credit_card_type')->set_default('Visa'); |
@@ -184,9 +184,9 @@ discard block |
||
184 | 184 | ] |
185 | 185 | ); |
186 | 186 | // If they existed, set the new ones instead |
187 | - if (!empty($old_extra_metas)) { |
|
187 | + if ( ! empty($old_extra_metas)) { |
|
188 | 188 | foreach ($old_extra_metas as $old_extra_meta) { |
189 | - $old_extra_meta->set('EXM_key', 'api_' . $old_extra_meta->get('EXM_key')); |
|
189 | + $old_extra_meta->set('EXM_key', 'api_'.$old_extra_meta->get('EXM_key')); |
|
190 | 190 | $old_extra_meta->save(); |
191 | 191 | } |
192 | 192 | } |
@@ -13,182 +13,182 @@ |
||
13 | 13 | */ |
14 | 14 | class EE_PMT_Paypal_Pro extends EE_PMT_Base |
15 | 15 | { |
16 | - /** |
|
17 | - * @param EE_Payment_Method $pm_instance |
|
18 | - * @return EE_PMT_Paypal_Pro |
|
19 | - */ |
|
20 | - public function __construct($pm_instance = null) |
|
21 | - { |
|
22 | - require_once($this->file_folder() . 'EEG_Paypal_Pro.gateway.php'); |
|
23 | - $this->_gateway = new EEG_Paypal_Pro(); |
|
24 | - $this->_pretty_name = esc_html__("Paypal Pro", 'event_espresso'); |
|
25 | - $this->_default_description = esc_html__('Please provide the following billing information.', 'event_espresso'); |
|
26 | - $this->_requires_https = true; |
|
27 | - parent::__construct($pm_instance); |
|
28 | - } |
|
29 | - |
|
30 | - |
|
31 | - /** |
|
32 | - * Gets the form for all the settings related to this payment method type |
|
33 | - * @return EE_Payment_Method_Form |
|
34 | - * @throws InvalidArgumentException |
|
35 | - * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
36 | - * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
37 | - */ |
|
38 | - public function generate_new_settings_form() |
|
39 | - { |
|
40 | - return new PayPalProSettingsForm(array(), $this->get_help_tab_link()); |
|
41 | - } |
|
42 | - |
|
43 | - |
|
44 | - /** |
|
45 | - * Creates the billing form for this payment method type |
|
46 | - * @param \EE_Transaction $transaction |
|
47 | - * @throws \EE_Error |
|
48 | - * @return EE_Billing_Info_Form |
|
49 | - */ |
|
50 | - public function generate_new_billing_form(EE_Transaction $transaction = null) |
|
51 | - { |
|
52 | - $allowed_types = $this->_pm_instance->get_extra_meta('credit_card_types', true); |
|
53 | - // if allowed types is a string or empty array or null... |
|
54 | - if (empty($allowed_types)) { |
|
55 | - $allowed_types = array(); |
|
56 | - } |
|
57 | - |
|
58 | - $billing_form = new EE_Billing_Attendee_Info_Form( |
|
59 | - $this->_pm_instance, |
|
60 | - array( |
|
61 | - 'name' => 'Paypal_Pro_Billing_Form', |
|
62 | - // 'html_id'=> 'ee-Paypal_Pro-billing-form', |
|
63 | - 'subsections' => array( |
|
64 | - 'credit_card' => new EE_Credit_Card_Input( |
|
65 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Number', 'event_espresso')) |
|
66 | - ), |
|
67 | - 'credit_card_type' => new EE_Select_Input( |
|
68 | - // the options are set dynamically |
|
69 | - array_intersect_key(EE_PMT_Paypal_Pro::card_types_supported(), array_flip($allowed_types)), |
|
70 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Type', 'event_espresso')) |
|
71 | - ), |
|
72 | - 'exp_month' => new EE_Credit_Card_Month_Input( |
|
73 | - true, |
|
74 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Month', 'event_espresso') ) |
|
75 | - ), |
|
76 | - 'exp_year' => new EE_Credit_Card_Year_Input( |
|
77 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Year', 'event_espresso') ) |
|
78 | - ), |
|
79 | - 'cvv' => new EE_CVV_Input( |
|
80 | - array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('CVV', 'event_espresso') ) |
|
81 | - ), |
|
82 | - ) |
|
83 | - ) |
|
84 | - ); |
|
85 | - return $this->apply_billing_form_debug_settings($billing_form); |
|
86 | - } |
|
87 | - |
|
88 | - |
|
89 | - |
|
90 | - /** |
|
91 | - * apply_billing_form_debug_settings |
|
92 | - * applies debug data to the form |
|
93 | - * |
|
94 | - * @param \EE_Billing_Info_Form $billing_form |
|
95 | - * @return \EE_Billing_Info_Form |
|
96 | - */ |
|
97 | - public function apply_billing_form_debug_settings(EE_Billing_Info_Form $billing_form) |
|
98 | - { |
|
99 | - if ($this->_pm_instance->debug_mode()) { |
|
100 | - $billing_form->add_subsections( |
|
101 | - array( 'fyi_about_autofill' => $billing_form->payment_fields_autofilled_notice_html() ), |
|
102 | - 'credit_card' |
|
103 | - ); |
|
104 | - $billing_form->add_subsections( |
|
105 | - array( 'debug_content' => new EE_Form_Section_HTML_From_Template(dirname(__FILE__) . '/templates/paypal_pro_debug_info.template.php')), |
|
106 | - 'first_name' |
|
107 | - ); |
|
108 | - $billing_form->get_input('credit_card_type')->set_default('Visa'); |
|
109 | - $billing_form->get_input('exp_year')->set_default(2018); |
|
110 | - $billing_form->get_input('cvv')->set_default('115'); |
|
111 | - } |
|
112 | - return $billing_form; |
|
113 | - } |
|
114 | - |
|
115 | - |
|
116 | - |
|
117 | - /** |
|
118 | - * Returns an array of all the payment cards possibly supported by paypal pro. |
|
119 | - * Keys are their values, values are their pretty names. |
|
120 | - * @return array |
|
121 | - */ |
|
122 | - public static function card_types_supported() |
|
123 | - { |
|
124 | - return array( |
|
125 | - 'Visa' => esc_html__("Visa", 'event_espresso'), |
|
126 | - 'MasterCard' => esc_html__("MasterCard", 'event_espresso'), |
|
127 | - 'Amex' => esc_html__("American Express", 'event_espresso'), |
|
128 | - 'Discover' => esc_html__("Discover", 'event_espresso') |
|
129 | - ); |
|
130 | - } |
|
131 | - |
|
132 | - |
|
133 | - |
|
134 | - /** |
|
135 | - * Adds the help tab |
|
136 | - * @see EE_PMT_Base::help_tabs_config() |
|
137 | - * @return array |
|
138 | - */ |
|
139 | - public function help_tabs_config() |
|
140 | - { |
|
141 | - return array( |
|
142 | - $this->get_help_tab_name() => array( |
|
143 | - 'title' => esc_html__('PayPal Pro Settings', 'event_espresso'), |
|
144 | - 'filename' => 'payment_methods_overview_paypalpro' |
|
145 | - ), |
|
146 | - ); |
|
147 | - } |
|
148 | - |
|
149 | - /** |
|
150 | - * Overrides parent's _get_billing_values_from_form because we want to |
|
151 | - * get the country's 2-character ISO code, not the name like most gateways |
|
152 | - * @param EE_Billing_Info_Form $billing_form |
|
153 | - * @return array |
|
154 | - */ |
|
155 | - protected function _get_billing_values_from_form($billing_form) |
|
156 | - { |
|
157 | - $billing_values = parent::_get_billing_values_from_form($billing_form); |
|
158 | - $billing_values['country'] = $billing_form->get_input_value('country'); |
|
159 | - $billing_values['credit_card_type'] = $billing_form->get_input_value('credit_card_type'); |
|
160 | - return $billing_values; |
|
161 | - } |
|
162 | - |
|
163 | - /** |
|
164 | - * Override parent to account for a change in extra meta inputs in 4.9.75.p |
|
165 | - * @since 4.9.79.p |
|
166 | - * @param EE_Payment_Method $payment_method_instance |
|
167 | - * @throws EE_Error |
|
168 | - * @throws InvalidArgumentException |
|
169 | - * @throws ReflectionException |
|
170 | - * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
171 | - * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
172 | - */ |
|
173 | - public function set_instance($payment_method_instance) |
|
174 | - { |
|
175 | - // Check for the old extra meta inputs |
|
176 | - $old_extra_metas = EEM_Extra_Meta::instance()->get_all( |
|
177 | - [ |
|
178 | - [ |
|
179 | - 'EXM_type' => 'Payment_Method', |
|
180 | - 'OBJ_ID' => $payment_method_instance->ID(), |
|
181 | - 'EXM_key' => ['IN', ['username', 'password', 'signature']], |
|
182 | - ] |
|
183 | - ] |
|
184 | - ); |
|
185 | - // If they existed, set the new ones instead |
|
186 | - if (!empty($old_extra_metas)) { |
|
187 | - foreach ($old_extra_metas as $old_extra_meta) { |
|
188 | - $old_extra_meta->set('EXM_key', 'api_' . $old_extra_meta->get('EXM_key')); |
|
189 | - $old_extra_meta->save(); |
|
190 | - } |
|
191 | - } |
|
192 | - return parent::set_instance($payment_method_instance); |
|
193 | - } |
|
16 | + /** |
|
17 | + * @param EE_Payment_Method $pm_instance |
|
18 | + * @return EE_PMT_Paypal_Pro |
|
19 | + */ |
|
20 | + public function __construct($pm_instance = null) |
|
21 | + { |
|
22 | + require_once($this->file_folder() . 'EEG_Paypal_Pro.gateway.php'); |
|
23 | + $this->_gateway = new EEG_Paypal_Pro(); |
|
24 | + $this->_pretty_name = esc_html__("Paypal Pro", 'event_espresso'); |
|
25 | + $this->_default_description = esc_html__('Please provide the following billing information.', 'event_espresso'); |
|
26 | + $this->_requires_https = true; |
|
27 | + parent::__construct($pm_instance); |
|
28 | + } |
|
29 | + |
|
30 | + |
|
31 | + /** |
|
32 | + * Gets the form for all the settings related to this payment method type |
|
33 | + * @return EE_Payment_Method_Form |
|
34 | + * @throws InvalidArgumentException |
|
35 | + * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
36 | + * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
37 | + */ |
|
38 | + public function generate_new_settings_form() |
|
39 | + { |
|
40 | + return new PayPalProSettingsForm(array(), $this->get_help_tab_link()); |
|
41 | + } |
|
42 | + |
|
43 | + |
|
44 | + /** |
|
45 | + * Creates the billing form for this payment method type |
|
46 | + * @param \EE_Transaction $transaction |
|
47 | + * @throws \EE_Error |
|
48 | + * @return EE_Billing_Info_Form |
|
49 | + */ |
|
50 | + public function generate_new_billing_form(EE_Transaction $transaction = null) |
|
51 | + { |
|
52 | + $allowed_types = $this->_pm_instance->get_extra_meta('credit_card_types', true); |
|
53 | + // if allowed types is a string or empty array or null... |
|
54 | + if (empty($allowed_types)) { |
|
55 | + $allowed_types = array(); |
|
56 | + } |
|
57 | + |
|
58 | + $billing_form = new EE_Billing_Attendee_Info_Form( |
|
59 | + $this->_pm_instance, |
|
60 | + array( |
|
61 | + 'name' => 'Paypal_Pro_Billing_Form', |
|
62 | + // 'html_id'=> 'ee-Paypal_Pro-billing-form', |
|
63 | + 'subsections' => array( |
|
64 | + 'credit_card' => new EE_Credit_Card_Input( |
|
65 | + array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Number', 'event_espresso')) |
|
66 | + ), |
|
67 | + 'credit_card_type' => new EE_Select_Input( |
|
68 | + // the options are set dynamically |
|
69 | + array_intersect_key(EE_PMT_Paypal_Pro::card_types_supported(), array_flip($allowed_types)), |
|
70 | + array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Type', 'event_espresso')) |
|
71 | + ), |
|
72 | + 'exp_month' => new EE_Credit_Card_Month_Input( |
|
73 | + true, |
|
74 | + array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Month', 'event_espresso') ) |
|
75 | + ), |
|
76 | + 'exp_year' => new EE_Credit_Card_Year_Input( |
|
77 | + array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Year', 'event_espresso') ) |
|
78 | + ), |
|
79 | + 'cvv' => new EE_CVV_Input( |
|
80 | + array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('CVV', 'event_espresso') ) |
|
81 | + ), |
|
82 | + ) |
|
83 | + ) |
|
84 | + ); |
|
85 | + return $this->apply_billing_form_debug_settings($billing_form); |
|
86 | + } |
|
87 | + |
|
88 | + |
|
89 | + |
|
90 | + /** |
|
91 | + * apply_billing_form_debug_settings |
|
92 | + * applies debug data to the form |
|
93 | + * |
|
94 | + * @param \EE_Billing_Info_Form $billing_form |
|
95 | + * @return \EE_Billing_Info_Form |
|
96 | + */ |
|
97 | + public function apply_billing_form_debug_settings(EE_Billing_Info_Form $billing_form) |
|
98 | + { |
|
99 | + if ($this->_pm_instance->debug_mode()) { |
|
100 | + $billing_form->add_subsections( |
|
101 | + array( 'fyi_about_autofill' => $billing_form->payment_fields_autofilled_notice_html() ), |
|
102 | + 'credit_card' |
|
103 | + ); |
|
104 | + $billing_form->add_subsections( |
|
105 | + array( 'debug_content' => new EE_Form_Section_HTML_From_Template(dirname(__FILE__) . '/templates/paypal_pro_debug_info.template.php')), |
|
106 | + 'first_name' |
|
107 | + ); |
|
108 | + $billing_form->get_input('credit_card_type')->set_default('Visa'); |
|
109 | + $billing_form->get_input('exp_year')->set_default(2018); |
|
110 | + $billing_form->get_input('cvv')->set_default('115'); |
|
111 | + } |
|
112 | + return $billing_form; |
|
113 | + } |
|
114 | + |
|
115 | + |
|
116 | + |
|
117 | + /** |
|
118 | + * Returns an array of all the payment cards possibly supported by paypal pro. |
|
119 | + * Keys are their values, values are their pretty names. |
|
120 | + * @return array |
|
121 | + */ |
|
122 | + public static function card_types_supported() |
|
123 | + { |
|
124 | + return array( |
|
125 | + 'Visa' => esc_html__("Visa", 'event_espresso'), |
|
126 | + 'MasterCard' => esc_html__("MasterCard", 'event_espresso'), |
|
127 | + 'Amex' => esc_html__("American Express", 'event_espresso'), |
|
128 | + 'Discover' => esc_html__("Discover", 'event_espresso') |
|
129 | + ); |
|
130 | + } |
|
131 | + |
|
132 | + |
|
133 | + |
|
134 | + /** |
|
135 | + * Adds the help tab |
|
136 | + * @see EE_PMT_Base::help_tabs_config() |
|
137 | + * @return array |
|
138 | + */ |
|
139 | + public function help_tabs_config() |
|
140 | + { |
|
141 | + return array( |
|
142 | + $this->get_help_tab_name() => array( |
|
143 | + 'title' => esc_html__('PayPal Pro Settings', 'event_espresso'), |
|
144 | + 'filename' => 'payment_methods_overview_paypalpro' |
|
145 | + ), |
|
146 | + ); |
|
147 | + } |
|
148 | + |
|
149 | + /** |
|
150 | + * Overrides parent's _get_billing_values_from_form because we want to |
|
151 | + * get the country's 2-character ISO code, not the name like most gateways |
|
152 | + * @param EE_Billing_Info_Form $billing_form |
|
153 | + * @return array |
|
154 | + */ |
|
155 | + protected function _get_billing_values_from_form($billing_form) |
|
156 | + { |
|
157 | + $billing_values = parent::_get_billing_values_from_form($billing_form); |
|
158 | + $billing_values['country'] = $billing_form->get_input_value('country'); |
|
159 | + $billing_values['credit_card_type'] = $billing_form->get_input_value('credit_card_type'); |
|
160 | + return $billing_values; |
|
161 | + } |
|
162 | + |
|
163 | + /** |
|
164 | + * Override parent to account for a change in extra meta inputs in 4.9.75.p |
|
165 | + * @since 4.9.79.p |
|
166 | + * @param EE_Payment_Method $payment_method_instance |
|
167 | + * @throws EE_Error |
|
168 | + * @throws InvalidArgumentException |
|
169 | + * @throws ReflectionException |
|
170 | + * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
171 | + * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
172 | + */ |
|
173 | + public function set_instance($payment_method_instance) |
|
174 | + { |
|
175 | + // Check for the old extra meta inputs |
|
176 | + $old_extra_metas = EEM_Extra_Meta::instance()->get_all( |
|
177 | + [ |
|
178 | + [ |
|
179 | + 'EXM_type' => 'Payment_Method', |
|
180 | + 'OBJ_ID' => $payment_method_instance->ID(), |
|
181 | + 'EXM_key' => ['IN', ['username', 'password', 'signature']], |
|
182 | + ] |
|
183 | + ] |
|
184 | + ); |
|
185 | + // If they existed, set the new ones instead |
|
186 | + if (!empty($old_extra_metas)) { |
|
187 | + foreach ($old_extra_metas as $old_extra_meta) { |
|
188 | + $old_extra_meta->set('EXM_key', 'api_' . $old_extra_meta->get('EXM_key')); |
|
189 | + $old_extra_meta->save(); |
|
190 | + } |
|
191 | + } |
|
192 | + return parent::set_instance($payment_method_instance); |
|
193 | + } |
|
194 | 194 | } |
@@ -191,7 +191,7 @@ discard block |
||
191 | 191 | $line_item->unit_price(), |
192 | 192 | 'N' |
193 | 193 | ); |
194 | - $order_description .= $this->prepareStringForAuthnet($line_item->desc()) . ', '; |
|
194 | + $order_description .= $this->prepareStringForAuthnet($line_item->desc()).', '; |
|
195 | 195 | } |
196 | 196 | foreach ($total_line_item->tax_descendants() as $tax_line_item) { |
197 | 197 | $this->addLineItem( |
@@ -216,7 +216,7 @@ discard block |
||
216 | 216 | $this->setField('last_name', $billing_info['last_name']); |
217 | 217 | $this->setField('email', $billing_info['email']); |
218 | 218 | $this->setField('company', $billing_info['company']); |
219 | - $this->setField('address', $billing_info['address'] . ' ' . $billing_info['address2']); |
|
219 | + $this->setField('address', $billing_info['address'].' '.$billing_info['address2']); |
|
220 | 220 | $this->setField('city', $billing_info['city']); |
221 | 221 | $this->setField('state', $billing_info['state']); |
222 | 222 | $this->setField('country', $billing_info['country']); |
@@ -229,7 +229,7 @@ discard block |
||
229 | 229 | // invoice_num would be nice to have it be unique per SPCO page-load, that way if users |
230 | 230 | // press back, they don't submit a duplicate. However, we may be keeping the user on teh same spco page |
231 | 231 | // in which case, we need to generate teh invoice num per request right here... |
232 | - $this->setField('invoice_num', wp_generate_password(12, false));// $billing_info['_reg-page-billing-invoice-'.$this->_gateway_name]['value']); |
|
232 | + $this->setField('invoice_num', wp_generate_password(12, false)); // $billing_info['_reg-page-billing-invoice-'.$this->_gateway_name]['value']); |
|
233 | 233 | // tell AIM that any duplicates sent in the next 5 minutes are to be ignored |
234 | 234 | $this->setField('duplicate_window', 5 * MINUTE_IN_SECONDS); |
235 | 235 | |
@@ -240,7 +240,7 @@ discard block |
||
240 | 240 | // Capture response |
241 | 241 | $this->type = "AUTH_CAPTURE"; |
242 | 242 | $response = $this->_sendRequest($payment); |
243 | - if (! empty($response)) { |
|
243 | + if ( ! empty($response)) { |
|
244 | 244 | if ($response->error_message) { |
245 | 245 | $payment->set_status($this->_pay_model->failed_status()); |
246 | 246 | $payment->set_gateway_response($response->error_message); |
@@ -286,7 +286,7 @@ discard block |
||
286 | 286 | protected function _set_sensitive_billing_data($billing_info) |
287 | 287 | { |
288 | 288 | $this->setField('card_num', $billing_info['credit_card']); |
289 | - $this->setField('exp_date', $billing_info['exp_month'] . $billing_info['exp_year']); |
|
289 | + $this->setField('exp_date', $billing_info['exp_month'].$billing_info['exp_year']); |
|
290 | 290 | $this->setField('card_code', $billing_info['cvv']); |
291 | 291 | } |
292 | 292 | |
@@ -326,7 +326,7 @@ discard block |
||
326 | 326 | protected function setField($name, $value) |
327 | 327 | { |
328 | 328 | if (in_array($name, $this->_all_aim_fields)) { |
329 | - $this->_x_post_fields[ $name ] = $value; |
|
329 | + $this->_x_post_fields[$name] = $value; |
|
330 | 330 | } else { |
331 | 331 | throw new AuthorizeNetException("Error: no field $name exists in the AIM API. |
332 | 332 | To set a custom field use setCustomField('field','value') instead."); |
@@ -346,11 +346,11 @@ discard block |
||
346 | 346 | $this->_x_post_fields['tran_key'] = $this->_transaction_key; |
347 | 347 | $x_keys = array(); |
348 | 348 | foreach ($this->_x_post_fields as $key => $value) { |
349 | - $x_keys[] = "x_$key=" . urlencode($this->_get_unsupported_character_remover()->format($value)); |
|
349 | + $x_keys[] = "x_$key=".urlencode($this->_get_unsupported_character_remover()->format($value)); |
|
350 | 350 | } |
351 | 351 | // Add line items |
352 | 352 | foreach ($this->_additional_line_items as $key => $value) { |
353 | - $x_keys[] = "x_line_item=" . urlencode($this->_get_unsupported_character_remover()->format($value)); |
|
353 | + $x_keys[] = "x_line_item=".urlencode($this->_get_unsupported_character_remover()->format($value)); |
|
354 | 354 | } |
355 | 355 | $this->_log_clean_request($x_keys, $payment); |
356 | 356 | $post_url = $this->_get_server_url(); |
@@ -362,7 +362,7 @@ discard block |
||
362 | 362 | curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1); |
363 | 363 | curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 2); |
364 | 364 | if ($this->VERIFY_PEER) { |
365 | - curl_setopt($curl_request, CURLOPT_CAINFO, dirname(__DIR__) . '/ssl/cert.pem'); |
|
365 | + curl_setopt($curl_request, CURLOPT_CAINFO, dirname(__DIR__).'/ssl/cert.pem'); |
|
366 | 366 | } else { |
367 | 367 | curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false); |
368 | 368 | } |
@@ -374,7 +374,7 @@ discard block |
||
374 | 374 | $response = curl_exec($curl_request); |
375 | 375 | |
376 | 376 | curl_close($curl_request); |
377 | - $response_obj = new EE_AuthorizeNetAIM_Response($response); |
|
377 | + $response_obj = new EE_AuthorizeNetAIM_Response($response); |
|
378 | 378 | |
379 | 379 | return $this->_log_and_clean_response($response_obj, $payment); |
380 | 380 | } |
@@ -394,7 +394,7 @@ discard block |
||
394 | 394 | if (strpos($keyvaltogether, $key) === 0) { |
395 | 395 | // found it at the first character |
396 | 396 | // so its one of them |
397 | - unset($request_array[ $index ]); |
|
397 | + unset($request_array[$index]); |
|
398 | 398 | } |
399 | 399 | } |
400 | 400 | } |
@@ -535,7 +535,7 @@ discard block |
||
535 | 535 | // Split Array |
536 | 536 | $this->response = $response; |
537 | 537 | if ($encap_char) { |
538 | - $this->_response_array = explode($encap_char . $delimiter . $encap_char, substr($response, 1, -1)); |
|
538 | + $this->_response_array = explode($encap_char.$delimiter.$encap_char, substr($response, 1, -1)); |
|
539 | 539 | } else { |
540 | 540 | $this->_response_array = explode($delimiter, $response); |
541 | 541 | } |
@@ -617,7 +617,7 @@ discard block |
||
617 | 617 | } |
618 | 618 | } |
619 | 619 | |
620 | -if (! class_exists('AuthorizeNetException')) { |
|
620 | +if ( ! class_exists('AuthorizeNetException')) { |
|
621 | 621 | /** |
622 | 622 | * Class AuthorizeNetException |
623 | 623 | * |
@@ -25,417 +25,417 @@ discard block |
||
25 | 25 | */ |
26 | 26 | class EEG_Aim extends EE_Onsite_Gateway |
27 | 27 | { |
28 | - const LIVE_URL = 'https://secure2.authorize.net/gateway/transact.dll'; // Authnet URL |
|
29 | - |
|
30 | - const SANDBOX_URL = 'https://test.authorize.net/gateway/transact.dll'; |
|
31 | - |
|
32 | - protected $_login_id; |
|
33 | - |
|
34 | - protected $_transaction_key; |
|
35 | - |
|
36 | - protected $_currencies_supported = array( |
|
37 | - 'AUD', |
|
38 | - 'USD', |
|
39 | - 'CAD', |
|
40 | - 'EUR', |
|
41 | - 'GBP', |
|
42 | - 'NZD', |
|
43 | - ); |
|
44 | - |
|
45 | - /** |
|
46 | - * Whether to send test transactions (even to live site) |
|
47 | - * |
|
48 | - * @var boolean |
|
49 | - */ |
|
50 | - protected $_test_transactions; |
|
51 | - |
|
52 | - private $VERIFY_PEER = false; |
|
53 | - |
|
54 | - private $_x_post_fields = array( |
|
55 | - "version" => "3.1", |
|
56 | - "delim_char" => ",", |
|
57 | - "delim_data" => "TRUE", |
|
58 | - "relay_response" => "FALSE", |
|
59 | - "encap_char" => "|", |
|
60 | - ); |
|
61 | - |
|
62 | - private $_additional_line_items = array(); |
|
63 | - |
|
64 | - /** |
|
65 | - * A list of all fields in the AIM API. |
|
66 | - * Used to warn user if they try to set a field not offered in the API. |
|
67 | - */ |
|
68 | - private $_all_aim_fields = array( |
|
69 | - "address", |
|
70 | - "allow_partial_auth", |
|
71 | - "amount", |
|
72 | - "auth_code", |
|
73 | - "authentication_indicator", |
|
74 | - "bank_aba_code", |
|
75 | - "bank_acct_name", |
|
76 | - "bank_acct_num", |
|
77 | - "bank_acct_type", |
|
78 | - "bank_check_number", |
|
79 | - "bank_name", |
|
80 | - "card_code", |
|
81 | - "card_num", |
|
82 | - "cardholder_authentication_value", |
|
83 | - "city", |
|
84 | - "company", |
|
85 | - "country", |
|
86 | - "cust_id", |
|
87 | - "customer_ip", |
|
88 | - "delim_char", |
|
89 | - "delim_data", |
|
90 | - "description", |
|
91 | - "duplicate_window", |
|
92 | - "duty", |
|
93 | - "echeck_type", |
|
94 | - "email", |
|
95 | - "email_customer", |
|
96 | - "encap_char", |
|
97 | - "exp_date", |
|
98 | - "fax", |
|
99 | - "first_name", |
|
100 | - "footer_email_receipt", |
|
101 | - "freight", |
|
102 | - "header_email_receipt", |
|
103 | - "invoice_num", |
|
104 | - "last_name", |
|
105 | - "line_item", |
|
106 | - "login", |
|
107 | - "method", |
|
108 | - "phone", |
|
109 | - "po_num", |
|
110 | - "recurring_billing", |
|
111 | - "relay_response", |
|
112 | - "ship_to_address", |
|
113 | - "ship_to_city", |
|
114 | - "ship_to_company", |
|
115 | - "ship_to_country", |
|
116 | - "ship_to_first_name", |
|
117 | - "ship_to_last_name", |
|
118 | - "ship_to_state", |
|
119 | - "ship_to_zip", |
|
120 | - "split_tender_id", |
|
121 | - "state", |
|
122 | - "tax", |
|
123 | - "tax_exempt", |
|
124 | - "test_request", |
|
125 | - "tran_key", |
|
126 | - "trans_id", |
|
127 | - "type", |
|
128 | - "version", |
|
129 | - "zip", |
|
130 | - "solution_id", |
|
131 | - "currency_code" |
|
132 | - ); |
|
133 | - |
|
134 | - |
|
135 | - /** |
|
136 | - * Gets the URL where the request should go. This is filterable |
|
137 | - * |
|
138 | - * @return string |
|
139 | - */ |
|
140 | - protected function _get_server_url() |
|
141 | - { |
|
142 | - return apply_filters( |
|
143 | - 'FHEE__EEG_Aim___get_server_url', |
|
144 | - $this->_debug_mode ? self::SANDBOX_URL : self::LIVE_URL, |
|
145 | - $this |
|
146 | - ); |
|
147 | - } |
|
148 | - |
|
149 | - |
|
150 | - /** |
|
151 | - * Asks the gateway to do whatever it does to process the payment. Onsite gateways will |
|
152 | - * usually send a request directly to the payment provider and update the payment's status based on that; |
|
153 | - * whereas offsite gateways will usually just update the payment with the URL and query parameters to use |
|
154 | - * for sending the request via http_remote_request() |
|
155 | - * |
|
156 | - * @param EEI_Payment $payment |
|
157 | - * @param array $billing_info { |
|
158 | - * @type $credit_card string |
|
159 | - * @type $cvv string |
|
160 | - * @type $exp_month string |
|
161 | - * @type $exp_year string |
|
162 | - * @see parent::do_direct_payment |
|
163 | - * } |
|
164 | - * @return EEI_Payment updated |
|
165 | - */ |
|
166 | - public function do_direct_payment($payment, $billing_info = null) |
|
167 | - { |
|
168 | - // Enable test mode if needed |
|
169 | - // 4007000000027 <-- test successful visa |
|
170 | - // 4222222222222 <-- test failure card number |
|
171 | - |
|
172 | - $item_num = 1; |
|
173 | - $transaction = $payment->transaction(); |
|
174 | - $gateway_formatter = $this->_get_gateway_formatter(); |
|
175 | - $order_description = $this->prepareStringForAuthnet($gateway_formatter->formatOrderDescription($payment)); |
|
176 | - $primary_registrant = $transaction->primary_registration(); |
|
177 | - // if we're are charging for the full amount, show the normal line items |
|
178 | - // and the itemized total adds up properly |
|
179 | - if ($this->_can_easily_itemize_transaction_for($payment)) { |
|
180 | - $total_line_item = $transaction->total_line_item(); |
|
181 | - foreach ($total_line_item->get_items() as $line_item) { |
|
182 | - if ($line_item->quantity() == 0) { |
|
183 | - continue; |
|
184 | - } |
|
185 | - $this->addLineItem( |
|
186 | - $item_num++, |
|
187 | - $gateway_formatter->formatLineItemName($line_item, $payment), |
|
188 | - $gateway_formatter->formatLineItemDesc($line_item, $payment), |
|
189 | - $line_item->quantity(), |
|
190 | - $line_item->unit_price(), |
|
191 | - 'N' |
|
192 | - ); |
|
193 | - $order_description .= $this->prepareStringForAuthnet($line_item->desc()) . ', '; |
|
194 | - } |
|
195 | - foreach ($total_line_item->tax_descendants() as $tax_line_item) { |
|
196 | - $this->addLineItem( |
|
197 | - $item_num++, |
|
198 | - $tax_line_item->name(), |
|
199 | - $tax_line_item->desc(), |
|
200 | - 1, |
|
201 | - $tax_line_item->total(), |
|
202 | - 'N' |
|
203 | - ); |
|
204 | - } |
|
205 | - } |
|
206 | - |
|
207 | - // start transaction |
|
208 | - // if in debug mode, use authorize.net's sandbox id; otherwise use the Event Espresso partner id |
|
209 | - $partner_id = $this->_debug_mode ? 'AAA100302' : 'AAA105363'; |
|
210 | - $this->setField('solution_id', $partner_id); |
|
211 | - $this->setField('amount', $gateway_formatter->formatCurrency($payment->amount())); |
|
212 | - $this->setField('description', substr(rtrim($order_description, ', '), 0, 255)); |
|
213 | - $this->_set_sensitive_billing_data($billing_info); |
|
214 | - $this->setField('first_name', $billing_info['first_name']); |
|
215 | - $this->setField('last_name', $billing_info['last_name']); |
|
216 | - $this->setField('email', $billing_info['email']); |
|
217 | - $this->setField('company', $billing_info['company']); |
|
218 | - $this->setField('address', $billing_info['address'] . ' ' . $billing_info['address2']); |
|
219 | - $this->setField('city', $billing_info['city']); |
|
220 | - $this->setField('state', $billing_info['state']); |
|
221 | - $this->setField('country', $billing_info['country']); |
|
222 | - $this->setField('zip', $billing_info['zip']); |
|
223 | - $this->setField('fax', $billing_info['fax']); |
|
224 | - $this->setField('cust_id', $primary_registrant->ID()); |
|
225 | - $this->setField('phone', $billing_info['phone']); |
|
226 | - $currency_config = LoaderFactory::getLoader()->load('EE_Currency_Config'); |
|
227 | - $this->setField('currency_code', $currency_config->code); |
|
228 | - // invoice_num would be nice to have it be unique per SPCO page-load, that way if users |
|
229 | - // press back, they don't submit a duplicate. However, we may be keeping the user on teh same spco page |
|
230 | - // in which case, we need to generate teh invoice num per request right here... |
|
231 | - $this->setField('invoice_num', wp_generate_password(12, false));// $billing_info['_reg-page-billing-invoice-'.$this->_gateway_name]['value']); |
|
232 | - // tell AIM that any duplicates sent in the next 5 minutes are to be ignored |
|
233 | - $this->setField('duplicate_window', 5 * MINUTE_IN_SECONDS); |
|
234 | - |
|
235 | - if ($this->_test_transactions) { |
|
236 | - $this->test_request = "true"; |
|
237 | - } |
|
238 | - |
|
239 | - // Capture response |
|
240 | - $this->type = "AUTH_CAPTURE"; |
|
241 | - $response = $this->_sendRequest($payment); |
|
242 | - if (! empty($response)) { |
|
243 | - if ($response->error_message) { |
|
244 | - $payment->set_status($this->_pay_model->failed_status()); |
|
245 | - $payment->set_gateway_response($response->error_message); |
|
246 | - } else { |
|
247 | - $payment_status = $response->approved |
|
248 | - ? $this->_pay_model->approved_status() |
|
249 | - : $this->_pay_model->declined_status(); |
|
250 | - $payment->set_status($payment_status); |
|
251 | - // make sure we interpret the AMT as a float, not an international string (where periods are thousand separators) |
|
252 | - $payment->set_amount((float) $response->amount); |
|
253 | - $payment->set_gateway_response( |
|
254 | - sprintf( |
|
255 | - esc_html__('%1$s (Reason Code: %2$s)', 'event_espresso'), |
|
256 | - $response->response_reason_text, |
|
257 | - $response->response_reason_code |
|
258 | - ) |
|
259 | - ); |
|
260 | - if ($this->_debug_mode) { |
|
261 | - $txn_id = $response->invoice_number; |
|
262 | - } else { |
|
263 | - $txn_id = $response->transaction_id; |
|
264 | - } |
|
265 | - $payment->set_txn_id_chq_nmbr($txn_id); |
|
266 | - } |
|
267 | - $payment->set_extra_accntng($primary_registrant->reg_code()); |
|
268 | - $payment->set_details(print_r($response, true)); |
|
269 | - } else { |
|
270 | - $payment->set_status($this->_pay_model->failed_status()); |
|
271 | - $payment->set_gateway_response(esc_html__("There was no response from Authorize.net", 'event_espresso')); |
|
272 | - $payment->set_details(print_r($response, true)); |
|
273 | - } |
|
274 | - return $payment; |
|
275 | - } |
|
276 | - |
|
277 | - |
|
278 | - /** |
|
279 | - * Sets billing data for the upcoming request to AIM that is considered sensitive; |
|
280 | - * also this method can be overridden by children classes to easily change |
|
281 | - * what billing data gets sent |
|
282 | - * |
|
283 | - * @param array $billing_info |
|
284 | - */ |
|
285 | - protected function _set_sensitive_billing_data($billing_info) |
|
286 | - { |
|
287 | - $this->setField('card_num', $billing_info['credit_card']); |
|
288 | - $this->setField('exp_date', $billing_info['exp_month'] . $billing_info['exp_year']); |
|
289 | - $this->setField('card_code', $billing_info['cvv']); |
|
290 | - } |
|
291 | - |
|
292 | - |
|
293 | - /** |
|
294 | - * Add a line item. |
|
295 | - * |
|
296 | - * @param string $item_id |
|
297 | - * @param string $item_name |
|
298 | - * @param string $item_description |
|
299 | - * @param string $item_quantity |
|
300 | - * @param string $item_unit_price |
|
301 | - * @param string $item_taxable |
|
302 | - */ |
|
303 | - public function addLineItem($item_id, $item_name, $item_description, $item_quantity, $item_unit_price, $item_taxable) |
|
304 | - { |
|
305 | - $args = array( |
|
306 | - substr($item_id, 0, 31), |
|
307 | - substr($this->prepareStringForAuthnet($item_name), 0, 31), |
|
308 | - substr($this->prepareStringForAuthnet($item_description), 0, 255), |
|
309 | - number_format(abs($item_quantity), 2, '.', ''), |
|
310 | - number_format(abs($item_unit_price), 2, '.', ''), |
|
311 | - $item_taxable === 'N' ? 'N' : 'Y' |
|
312 | - ); |
|
313 | - $this->_additional_line_items[] = implode('<|>', $args); |
|
314 | - } |
|
315 | - |
|
316 | - |
|
317 | - /** |
|
318 | - * Set an individual name/value pair. This will append x_ to the name |
|
319 | - * before posting. |
|
320 | - * |
|
321 | - * @param string $name |
|
322 | - * @param string $value |
|
323 | - * @throws AuthorizeNetException |
|
324 | - */ |
|
325 | - protected function setField($name, $value) |
|
326 | - { |
|
327 | - if (in_array($name, $this->_all_aim_fields)) { |
|
328 | - $this->_x_post_fields[ $name ] = $value; |
|
329 | - } else { |
|
330 | - throw new AuthorizeNetException("Error: no field $name exists in the AIM API. |
|
28 | + const LIVE_URL = 'https://secure2.authorize.net/gateway/transact.dll'; // Authnet URL |
|
29 | + |
|
30 | + const SANDBOX_URL = 'https://test.authorize.net/gateway/transact.dll'; |
|
31 | + |
|
32 | + protected $_login_id; |
|
33 | + |
|
34 | + protected $_transaction_key; |
|
35 | + |
|
36 | + protected $_currencies_supported = array( |
|
37 | + 'AUD', |
|
38 | + 'USD', |
|
39 | + 'CAD', |
|
40 | + 'EUR', |
|
41 | + 'GBP', |
|
42 | + 'NZD', |
|
43 | + ); |
|
44 | + |
|
45 | + /** |
|
46 | + * Whether to send test transactions (even to live site) |
|
47 | + * |
|
48 | + * @var boolean |
|
49 | + */ |
|
50 | + protected $_test_transactions; |
|
51 | + |
|
52 | + private $VERIFY_PEER = false; |
|
53 | + |
|
54 | + private $_x_post_fields = array( |
|
55 | + "version" => "3.1", |
|
56 | + "delim_char" => ",", |
|
57 | + "delim_data" => "TRUE", |
|
58 | + "relay_response" => "FALSE", |
|
59 | + "encap_char" => "|", |
|
60 | + ); |
|
61 | + |
|
62 | + private $_additional_line_items = array(); |
|
63 | + |
|
64 | + /** |
|
65 | + * A list of all fields in the AIM API. |
|
66 | + * Used to warn user if they try to set a field not offered in the API. |
|
67 | + */ |
|
68 | + private $_all_aim_fields = array( |
|
69 | + "address", |
|
70 | + "allow_partial_auth", |
|
71 | + "amount", |
|
72 | + "auth_code", |
|
73 | + "authentication_indicator", |
|
74 | + "bank_aba_code", |
|
75 | + "bank_acct_name", |
|
76 | + "bank_acct_num", |
|
77 | + "bank_acct_type", |
|
78 | + "bank_check_number", |
|
79 | + "bank_name", |
|
80 | + "card_code", |
|
81 | + "card_num", |
|
82 | + "cardholder_authentication_value", |
|
83 | + "city", |
|
84 | + "company", |
|
85 | + "country", |
|
86 | + "cust_id", |
|
87 | + "customer_ip", |
|
88 | + "delim_char", |
|
89 | + "delim_data", |
|
90 | + "description", |
|
91 | + "duplicate_window", |
|
92 | + "duty", |
|
93 | + "echeck_type", |
|
94 | + "email", |
|
95 | + "email_customer", |
|
96 | + "encap_char", |
|
97 | + "exp_date", |
|
98 | + "fax", |
|
99 | + "first_name", |
|
100 | + "footer_email_receipt", |
|
101 | + "freight", |
|
102 | + "header_email_receipt", |
|
103 | + "invoice_num", |
|
104 | + "last_name", |
|
105 | + "line_item", |
|
106 | + "login", |
|
107 | + "method", |
|
108 | + "phone", |
|
109 | + "po_num", |
|
110 | + "recurring_billing", |
|
111 | + "relay_response", |
|
112 | + "ship_to_address", |
|
113 | + "ship_to_city", |
|
114 | + "ship_to_company", |
|
115 | + "ship_to_country", |
|
116 | + "ship_to_first_name", |
|
117 | + "ship_to_last_name", |
|
118 | + "ship_to_state", |
|
119 | + "ship_to_zip", |
|
120 | + "split_tender_id", |
|
121 | + "state", |
|
122 | + "tax", |
|
123 | + "tax_exempt", |
|
124 | + "test_request", |
|
125 | + "tran_key", |
|
126 | + "trans_id", |
|
127 | + "type", |
|
128 | + "version", |
|
129 | + "zip", |
|
130 | + "solution_id", |
|
131 | + "currency_code" |
|
132 | + ); |
|
133 | + |
|
134 | + |
|
135 | + /** |
|
136 | + * Gets the URL where the request should go. This is filterable |
|
137 | + * |
|
138 | + * @return string |
|
139 | + */ |
|
140 | + protected function _get_server_url() |
|
141 | + { |
|
142 | + return apply_filters( |
|
143 | + 'FHEE__EEG_Aim___get_server_url', |
|
144 | + $this->_debug_mode ? self::SANDBOX_URL : self::LIVE_URL, |
|
145 | + $this |
|
146 | + ); |
|
147 | + } |
|
148 | + |
|
149 | + |
|
150 | + /** |
|
151 | + * Asks the gateway to do whatever it does to process the payment. Onsite gateways will |
|
152 | + * usually send a request directly to the payment provider and update the payment's status based on that; |
|
153 | + * whereas offsite gateways will usually just update the payment with the URL and query parameters to use |
|
154 | + * for sending the request via http_remote_request() |
|
155 | + * |
|
156 | + * @param EEI_Payment $payment |
|
157 | + * @param array $billing_info { |
|
158 | + * @type $credit_card string |
|
159 | + * @type $cvv string |
|
160 | + * @type $exp_month string |
|
161 | + * @type $exp_year string |
|
162 | + * @see parent::do_direct_payment |
|
163 | + * } |
|
164 | + * @return EEI_Payment updated |
|
165 | + */ |
|
166 | + public function do_direct_payment($payment, $billing_info = null) |
|
167 | + { |
|
168 | + // Enable test mode if needed |
|
169 | + // 4007000000027 <-- test successful visa |
|
170 | + // 4222222222222 <-- test failure card number |
|
171 | + |
|
172 | + $item_num = 1; |
|
173 | + $transaction = $payment->transaction(); |
|
174 | + $gateway_formatter = $this->_get_gateway_formatter(); |
|
175 | + $order_description = $this->prepareStringForAuthnet($gateway_formatter->formatOrderDescription($payment)); |
|
176 | + $primary_registrant = $transaction->primary_registration(); |
|
177 | + // if we're are charging for the full amount, show the normal line items |
|
178 | + // and the itemized total adds up properly |
|
179 | + if ($this->_can_easily_itemize_transaction_for($payment)) { |
|
180 | + $total_line_item = $transaction->total_line_item(); |
|
181 | + foreach ($total_line_item->get_items() as $line_item) { |
|
182 | + if ($line_item->quantity() == 0) { |
|
183 | + continue; |
|
184 | + } |
|
185 | + $this->addLineItem( |
|
186 | + $item_num++, |
|
187 | + $gateway_formatter->formatLineItemName($line_item, $payment), |
|
188 | + $gateway_formatter->formatLineItemDesc($line_item, $payment), |
|
189 | + $line_item->quantity(), |
|
190 | + $line_item->unit_price(), |
|
191 | + 'N' |
|
192 | + ); |
|
193 | + $order_description .= $this->prepareStringForAuthnet($line_item->desc()) . ', '; |
|
194 | + } |
|
195 | + foreach ($total_line_item->tax_descendants() as $tax_line_item) { |
|
196 | + $this->addLineItem( |
|
197 | + $item_num++, |
|
198 | + $tax_line_item->name(), |
|
199 | + $tax_line_item->desc(), |
|
200 | + 1, |
|
201 | + $tax_line_item->total(), |
|
202 | + 'N' |
|
203 | + ); |
|
204 | + } |
|
205 | + } |
|
206 | + |
|
207 | + // start transaction |
|
208 | + // if in debug mode, use authorize.net's sandbox id; otherwise use the Event Espresso partner id |
|
209 | + $partner_id = $this->_debug_mode ? 'AAA100302' : 'AAA105363'; |
|
210 | + $this->setField('solution_id', $partner_id); |
|
211 | + $this->setField('amount', $gateway_formatter->formatCurrency($payment->amount())); |
|
212 | + $this->setField('description', substr(rtrim($order_description, ', '), 0, 255)); |
|
213 | + $this->_set_sensitive_billing_data($billing_info); |
|
214 | + $this->setField('first_name', $billing_info['first_name']); |
|
215 | + $this->setField('last_name', $billing_info['last_name']); |
|
216 | + $this->setField('email', $billing_info['email']); |
|
217 | + $this->setField('company', $billing_info['company']); |
|
218 | + $this->setField('address', $billing_info['address'] . ' ' . $billing_info['address2']); |
|
219 | + $this->setField('city', $billing_info['city']); |
|
220 | + $this->setField('state', $billing_info['state']); |
|
221 | + $this->setField('country', $billing_info['country']); |
|
222 | + $this->setField('zip', $billing_info['zip']); |
|
223 | + $this->setField('fax', $billing_info['fax']); |
|
224 | + $this->setField('cust_id', $primary_registrant->ID()); |
|
225 | + $this->setField('phone', $billing_info['phone']); |
|
226 | + $currency_config = LoaderFactory::getLoader()->load('EE_Currency_Config'); |
|
227 | + $this->setField('currency_code', $currency_config->code); |
|
228 | + // invoice_num would be nice to have it be unique per SPCO page-load, that way if users |
|
229 | + // press back, they don't submit a duplicate. However, we may be keeping the user on teh same spco page |
|
230 | + // in which case, we need to generate teh invoice num per request right here... |
|
231 | + $this->setField('invoice_num', wp_generate_password(12, false));// $billing_info['_reg-page-billing-invoice-'.$this->_gateway_name]['value']); |
|
232 | + // tell AIM that any duplicates sent in the next 5 minutes are to be ignored |
|
233 | + $this->setField('duplicate_window', 5 * MINUTE_IN_SECONDS); |
|
234 | + |
|
235 | + if ($this->_test_transactions) { |
|
236 | + $this->test_request = "true"; |
|
237 | + } |
|
238 | + |
|
239 | + // Capture response |
|
240 | + $this->type = "AUTH_CAPTURE"; |
|
241 | + $response = $this->_sendRequest($payment); |
|
242 | + if (! empty($response)) { |
|
243 | + if ($response->error_message) { |
|
244 | + $payment->set_status($this->_pay_model->failed_status()); |
|
245 | + $payment->set_gateway_response($response->error_message); |
|
246 | + } else { |
|
247 | + $payment_status = $response->approved |
|
248 | + ? $this->_pay_model->approved_status() |
|
249 | + : $this->_pay_model->declined_status(); |
|
250 | + $payment->set_status($payment_status); |
|
251 | + // make sure we interpret the AMT as a float, not an international string (where periods are thousand separators) |
|
252 | + $payment->set_amount((float) $response->amount); |
|
253 | + $payment->set_gateway_response( |
|
254 | + sprintf( |
|
255 | + esc_html__('%1$s (Reason Code: %2$s)', 'event_espresso'), |
|
256 | + $response->response_reason_text, |
|
257 | + $response->response_reason_code |
|
258 | + ) |
|
259 | + ); |
|
260 | + if ($this->_debug_mode) { |
|
261 | + $txn_id = $response->invoice_number; |
|
262 | + } else { |
|
263 | + $txn_id = $response->transaction_id; |
|
264 | + } |
|
265 | + $payment->set_txn_id_chq_nmbr($txn_id); |
|
266 | + } |
|
267 | + $payment->set_extra_accntng($primary_registrant->reg_code()); |
|
268 | + $payment->set_details(print_r($response, true)); |
|
269 | + } else { |
|
270 | + $payment->set_status($this->_pay_model->failed_status()); |
|
271 | + $payment->set_gateway_response(esc_html__("There was no response from Authorize.net", 'event_espresso')); |
|
272 | + $payment->set_details(print_r($response, true)); |
|
273 | + } |
|
274 | + return $payment; |
|
275 | + } |
|
276 | + |
|
277 | + |
|
278 | + /** |
|
279 | + * Sets billing data for the upcoming request to AIM that is considered sensitive; |
|
280 | + * also this method can be overridden by children classes to easily change |
|
281 | + * what billing data gets sent |
|
282 | + * |
|
283 | + * @param array $billing_info |
|
284 | + */ |
|
285 | + protected function _set_sensitive_billing_data($billing_info) |
|
286 | + { |
|
287 | + $this->setField('card_num', $billing_info['credit_card']); |
|
288 | + $this->setField('exp_date', $billing_info['exp_month'] . $billing_info['exp_year']); |
|
289 | + $this->setField('card_code', $billing_info['cvv']); |
|
290 | + } |
|
291 | + |
|
292 | + |
|
293 | + /** |
|
294 | + * Add a line item. |
|
295 | + * |
|
296 | + * @param string $item_id |
|
297 | + * @param string $item_name |
|
298 | + * @param string $item_description |
|
299 | + * @param string $item_quantity |
|
300 | + * @param string $item_unit_price |
|
301 | + * @param string $item_taxable |
|
302 | + */ |
|
303 | + public function addLineItem($item_id, $item_name, $item_description, $item_quantity, $item_unit_price, $item_taxable) |
|
304 | + { |
|
305 | + $args = array( |
|
306 | + substr($item_id, 0, 31), |
|
307 | + substr($this->prepareStringForAuthnet($item_name), 0, 31), |
|
308 | + substr($this->prepareStringForAuthnet($item_description), 0, 255), |
|
309 | + number_format(abs($item_quantity), 2, '.', ''), |
|
310 | + number_format(abs($item_unit_price), 2, '.', ''), |
|
311 | + $item_taxable === 'N' ? 'N' : 'Y' |
|
312 | + ); |
|
313 | + $this->_additional_line_items[] = implode('<|>', $args); |
|
314 | + } |
|
315 | + |
|
316 | + |
|
317 | + /** |
|
318 | + * Set an individual name/value pair. This will append x_ to the name |
|
319 | + * before posting. |
|
320 | + * |
|
321 | + * @param string $name |
|
322 | + * @param string $value |
|
323 | + * @throws AuthorizeNetException |
|
324 | + */ |
|
325 | + protected function setField($name, $value) |
|
326 | + { |
|
327 | + if (in_array($name, $this->_all_aim_fields)) { |
|
328 | + $this->_x_post_fields[ $name ] = $value; |
|
329 | + } else { |
|
330 | + throw new AuthorizeNetException("Error: no field $name exists in the AIM API. |
|
331 | 331 | To set a custom field use setCustomField('field','value') instead."); |
332 | - } |
|
333 | - } |
|
334 | - |
|
335 | - |
|
336 | - /** |
|
337 | - * Posts the request to AuthorizeNet & returns response. |
|
338 | - * |
|
339 | - * @param $payment |
|
340 | - * @return \EE_AuthorizeNetAIM_Response |
|
341 | - */ |
|
342 | - private function _sendRequest($payment) |
|
343 | - { |
|
344 | - $this->_x_post_fields['login'] = $this->_login_id; |
|
345 | - $this->_x_post_fields['tran_key'] = $this->_transaction_key; |
|
346 | - $x_keys = array(); |
|
347 | - foreach ($this->_x_post_fields as $key => $value) { |
|
348 | - $x_keys[] = "x_$key=" . urlencode($this->_get_unsupported_character_remover()->format($value)); |
|
349 | - } |
|
350 | - // Add line items |
|
351 | - foreach ($this->_additional_line_items as $key => $value) { |
|
352 | - $x_keys[] = "x_line_item=" . urlencode($this->_get_unsupported_character_remover()->format($value)); |
|
353 | - } |
|
354 | - $this->_log_clean_request($x_keys, $payment); |
|
355 | - $post_url = $this->_get_server_url(); |
|
356 | - $curl_request = curl_init($post_url); |
|
357 | - $post_body = implode("&", $x_keys); |
|
358 | - curl_setopt($curl_request, CURLOPT_POSTFIELDS, $post_body); |
|
359 | - curl_setopt($curl_request, CURLOPT_HEADER, 0); |
|
360 | - curl_setopt($curl_request, CURLOPT_TIMEOUT, 45); |
|
361 | - curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1); |
|
362 | - curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 2); |
|
363 | - if ($this->VERIFY_PEER) { |
|
364 | - curl_setopt($curl_request, CURLOPT_CAINFO, dirname(__DIR__) . '/ssl/cert.pem'); |
|
365 | - } else { |
|
366 | - curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false); |
|
367 | - } |
|
368 | - |
|
369 | - if (preg_match('/xml/', $post_url)) { |
|
370 | - curl_setopt($curl_request, CURLOPT_HTTPHEADER, array("Content-Type: text/xml")); |
|
371 | - } |
|
372 | - |
|
373 | - $response = curl_exec($curl_request); |
|
374 | - |
|
375 | - curl_close($curl_request); |
|
376 | - $response_obj = new EE_AuthorizeNetAIM_Response($response); |
|
377 | - |
|
378 | - return $this->_log_and_clean_response($response_obj, $payment); |
|
379 | - } |
|
380 | - |
|
381 | - |
|
382 | - /** |
|
383 | - * Logs the clean data only |
|
384 | - * |
|
385 | - * @param array $request_array |
|
386 | - * @param EEI_Payment $payment |
|
387 | - */ |
|
388 | - protected function _log_clean_request($request_array, $payment) |
|
389 | - { |
|
390 | - $keys_to_filter_out = array('x_card_num', 'x_card_code', 'x_exp_date'); |
|
391 | - foreach ($request_array as $index => $keyvaltogether) { |
|
392 | - foreach ($keys_to_filter_out as $key) { |
|
393 | - if (strpos($keyvaltogether, $key) === 0) { |
|
394 | - // found it at the first character |
|
395 | - // so its one of them |
|
396 | - unset($request_array[ $index ]); |
|
397 | - } |
|
398 | - } |
|
399 | - } |
|
400 | - $this->log( |
|
401 | - array( |
|
402 | - 'AIM Request sent:' => $request_array, |
|
403 | - 'Server URL' => $this->_get_server_url() |
|
404 | - ), |
|
405 | - $payment |
|
406 | - ); |
|
407 | - } |
|
408 | - |
|
409 | - |
|
410 | - |
|
411 | - /** |
|
412 | - * Logs the response and cleans it |
|
413 | - * |
|
414 | - * @param EE_AuthorizeNetAIM_Response $response_obj |
|
415 | - * @param EE_Payment $payment |
|
416 | - * @return \EE_AuthorizeNetAIM_Response |
|
417 | - */ |
|
418 | - private function _log_and_clean_response($response_obj, $payment) |
|
419 | - { |
|
420 | - $response_obj->account_number = ''; |
|
421 | - $this->log(array('AIM Response received:' => (array) $response_obj), $payment); |
|
422 | - return $response_obj; |
|
423 | - } |
|
424 | - |
|
425 | - /** |
|
426 | - * Removes characters Authorize.net doesn't handle well. |
|
427 | - * @since 4.9.82.p |
|
428 | - * @param $text |
|
429 | - * @return string |
|
430 | - */ |
|
431 | - private function prepareStringForAuthnet($text) |
|
432 | - { |
|
433 | - return str_replace( |
|
434 | - '\'', |
|
435 | - '', |
|
436 | - $text |
|
437 | - ); |
|
438 | - } |
|
332 | + } |
|
333 | + } |
|
334 | + |
|
335 | + |
|
336 | + /** |
|
337 | + * Posts the request to AuthorizeNet & returns response. |
|
338 | + * |
|
339 | + * @param $payment |
|
340 | + * @return \EE_AuthorizeNetAIM_Response |
|
341 | + */ |
|
342 | + private function _sendRequest($payment) |
|
343 | + { |
|
344 | + $this->_x_post_fields['login'] = $this->_login_id; |
|
345 | + $this->_x_post_fields['tran_key'] = $this->_transaction_key; |
|
346 | + $x_keys = array(); |
|
347 | + foreach ($this->_x_post_fields as $key => $value) { |
|
348 | + $x_keys[] = "x_$key=" . urlencode($this->_get_unsupported_character_remover()->format($value)); |
|
349 | + } |
|
350 | + // Add line items |
|
351 | + foreach ($this->_additional_line_items as $key => $value) { |
|
352 | + $x_keys[] = "x_line_item=" . urlencode($this->_get_unsupported_character_remover()->format($value)); |
|
353 | + } |
|
354 | + $this->_log_clean_request($x_keys, $payment); |
|
355 | + $post_url = $this->_get_server_url(); |
|
356 | + $curl_request = curl_init($post_url); |
|
357 | + $post_body = implode("&", $x_keys); |
|
358 | + curl_setopt($curl_request, CURLOPT_POSTFIELDS, $post_body); |
|
359 | + curl_setopt($curl_request, CURLOPT_HEADER, 0); |
|
360 | + curl_setopt($curl_request, CURLOPT_TIMEOUT, 45); |
|
361 | + curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1); |
|
362 | + curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 2); |
|
363 | + if ($this->VERIFY_PEER) { |
|
364 | + curl_setopt($curl_request, CURLOPT_CAINFO, dirname(__DIR__) . '/ssl/cert.pem'); |
|
365 | + } else { |
|
366 | + curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false); |
|
367 | + } |
|
368 | + |
|
369 | + if (preg_match('/xml/', $post_url)) { |
|
370 | + curl_setopt($curl_request, CURLOPT_HTTPHEADER, array("Content-Type: text/xml")); |
|
371 | + } |
|
372 | + |
|
373 | + $response = curl_exec($curl_request); |
|
374 | + |
|
375 | + curl_close($curl_request); |
|
376 | + $response_obj = new EE_AuthorizeNetAIM_Response($response); |
|
377 | + |
|
378 | + return $this->_log_and_clean_response($response_obj, $payment); |
|
379 | + } |
|
380 | + |
|
381 | + |
|
382 | + /** |
|
383 | + * Logs the clean data only |
|
384 | + * |
|
385 | + * @param array $request_array |
|
386 | + * @param EEI_Payment $payment |
|
387 | + */ |
|
388 | + protected function _log_clean_request($request_array, $payment) |
|
389 | + { |
|
390 | + $keys_to_filter_out = array('x_card_num', 'x_card_code', 'x_exp_date'); |
|
391 | + foreach ($request_array as $index => $keyvaltogether) { |
|
392 | + foreach ($keys_to_filter_out as $key) { |
|
393 | + if (strpos($keyvaltogether, $key) === 0) { |
|
394 | + // found it at the first character |
|
395 | + // so its one of them |
|
396 | + unset($request_array[ $index ]); |
|
397 | + } |
|
398 | + } |
|
399 | + } |
|
400 | + $this->log( |
|
401 | + array( |
|
402 | + 'AIM Request sent:' => $request_array, |
|
403 | + 'Server URL' => $this->_get_server_url() |
|
404 | + ), |
|
405 | + $payment |
|
406 | + ); |
|
407 | + } |
|
408 | + |
|
409 | + |
|
410 | + |
|
411 | + /** |
|
412 | + * Logs the response and cleans it |
|
413 | + * |
|
414 | + * @param EE_AuthorizeNetAIM_Response $response_obj |
|
415 | + * @param EE_Payment $payment |
|
416 | + * @return \EE_AuthorizeNetAIM_Response |
|
417 | + */ |
|
418 | + private function _log_and_clean_response($response_obj, $payment) |
|
419 | + { |
|
420 | + $response_obj->account_number = ''; |
|
421 | + $this->log(array('AIM Response received:' => (array) $response_obj), $payment); |
|
422 | + return $response_obj; |
|
423 | + } |
|
424 | + |
|
425 | + /** |
|
426 | + * Removes characters Authorize.net doesn't handle well. |
|
427 | + * @since 4.9.82.p |
|
428 | + * @param $text |
|
429 | + * @return string |
|
430 | + */ |
|
431 | + private function prepareStringForAuthnet($text) |
|
432 | + { |
|
433 | + return str_replace( |
|
434 | + '\'', |
|
435 | + '', |
|
436 | + $text |
|
437 | + ); |
|
438 | + } |
|
439 | 439 | } |
440 | 440 | |
441 | 441 | |
@@ -450,191 +450,191 @@ discard block |
||
450 | 450 | */ |
451 | 451 | class EE_AuthorizeNetAIM_Response |
452 | 452 | { |
453 | - const APPROVED = '1'; |
|
454 | - const DECLINED = '2'; |
|
455 | - const ERROR = '3'; |
|
456 | - const HELD = '4'; |
|
457 | - |
|
458 | - protected $_x_post_fields = array( |
|
459 | - "version" => "3.1", |
|
460 | - "delim_char" => ",", |
|
461 | - "delim_data" => "TRUE", |
|
462 | - "relay_response" => "FALSE", |
|
463 | - "encap_char" => "|", |
|
464 | - ); |
|
465 | - public $approved; |
|
466 | - public $declined; |
|
467 | - public $error; |
|
468 | - public $held; |
|
469 | - public $response_code; |
|
470 | - public $response_subcode; |
|
471 | - public $response_reason_code; |
|
472 | - public $response_reason_text; |
|
473 | - public $authorization_code; |
|
474 | - public $avs_response; |
|
475 | - public $transaction_id; |
|
476 | - public $invoice_number; |
|
477 | - public $description; |
|
478 | - public $amount; |
|
479 | - public $method; |
|
480 | - public $transaction_type; |
|
481 | - public $customer_id; |
|
482 | - public $first_name; |
|
483 | - public $last_name; |
|
484 | - public $company; |
|
485 | - public $address; |
|
486 | - public $city; |
|
487 | - public $state; |
|
488 | - public $zip_code; |
|
489 | - public $country; |
|
490 | - public $phone; |
|
491 | - public $fax; |
|
492 | - public $email_address; |
|
493 | - public $ship_to_first_name; |
|
494 | - public $ship_to_last_name; |
|
495 | - public $ship_to_company; |
|
496 | - public $ship_to_address; |
|
497 | - public $ship_to_city; |
|
498 | - public $ship_to_state; |
|
499 | - public $ship_to_zip_code; |
|
500 | - public $ship_to_country; |
|
501 | - public $tax; |
|
502 | - public $duty; |
|
503 | - public $freight; |
|
504 | - public $tax_exempt; |
|
505 | - public $purchase_order_number; |
|
506 | - public $md5_hash; |
|
507 | - public $card_code_response; |
|
508 | - public $cavv_response; // cardholder_authentication_verification_response |
|
509 | - public $account_number; |
|
510 | - public $card_type; |
|
511 | - public $split_tender_id; |
|
512 | - public $requested_amount; |
|
513 | - public $balance_on_card; |
|
514 | - public $response; // The response string from AuthorizeNet. |
|
515 | - public $error_message; |
|
516 | - private $_response_array = array(); // An array with the split response. |
|
517 | - |
|
518 | - |
|
519 | - /** |
|
520 | - * Constructor. Parses the AuthorizeNet response string |
|
521 | - * |
|
522 | - * @param string $response The response from the AuthNet server. |
|
523 | - * @var string $delimiter The delimiter used (default is ",") |
|
524 | - * @var string $encap_char The encap_char used (default is "|") |
|
525 | - * @var array $custom_fields Any custom fields set in the request. |
|
526 | - */ |
|
527 | - |
|
528 | - public function __construct($response) |
|
529 | - { |
|
530 | - $encap_char = $this->_x_post_fields['encap_char']; |
|
531 | - $delimiter = $this->_x_post_fields['delim_char']; |
|
532 | - if ($response) { |
|
533 | - // Split Array |
|
534 | - $this->response = $response; |
|
535 | - if ($encap_char) { |
|
536 | - $this->_response_array = explode($encap_char . $delimiter . $encap_char, substr($response, 1, -1)); |
|
537 | - } else { |
|
538 | - $this->_response_array = explode($delimiter, $response); |
|
539 | - } |
|
540 | - |
|
541 | - /** |
|
542 | - * If AuthorizeNet doesn't return a delimited response. |
|
543 | - */ |
|
544 | - if (count($this->_response_array) < 10) { |
|
545 | - $this->approved = false; |
|
546 | - $this->error = true; |
|
547 | - $this->error_message = sprintf( |
|
548 | - esc_html__('Unrecognized response from Authorize.net: %1$s', 'event_espresso'), |
|
549 | - esc_html($response) |
|
550 | - ); |
|
551 | - return; |
|
552 | - } |
|
553 | - |
|
554 | - |
|
555 | - |
|
556 | - // Set all fields |
|
557 | - $this->response_code = $this->_response_array[0]; |
|
558 | - $this->response_subcode = $this->_response_array[1]; |
|
559 | - $this->response_reason_code = $this->_response_array[2]; |
|
560 | - $this->response_reason_text = $this->_response_array[3]; |
|
561 | - $this->authorization_code = $this->_response_array[4]; |
|
562 | - $this->avs_response = $this->_response_array[5]; |
|
563 | - $this->transaction_id = $this->_response_array[6]; |
|
564 | - $this->invoice_number = $this->_response_array[7]; |
|
565 | - $this->description = $this->_response_array[8]; |
|
566 | - $this->amount = $this->_response_array[9]; |
|
567 | - $this->method = $this->_response_array[10]; |
|
568 | - $this->transaction_type = $this->_response_array[11]; |
|
569 | - $this->customer_id = $this->_response_array[12]; |
|
570 | - $this->first_name = $this->_response_array[13]; |
|
571 | - $this->last_name = $this->_response_array[14]; |
|
572 | - $this->company = $this->_response_array[15]; |
|
573 | - $this->address = $this->_response_array[16]; |
|
574 | - $this->city = $this->_response_array[17]; |
|
575 | - $this->state = $this->_response_array[18]; |
|
576 | - $this->zip_code = $this->_response_array[19]; |
|
577 | - $this->country = $this->_response_array[20]; |
|
578 | - $this->phone = $this->_response_array[21]; |
|
579 | - $this->fax = $this->_response_array[22]; |
|
580 | - $this->email_address = $this->_response_array[23]; |
|
581 | - $this->ship_to_first_name = $this->_response_array[24]; |
|
582 | - $this->ship_to_last_name = $this->_response_array[25]; |
|
583 | - $this->ship_to_company = $this->_response_array[26]; |
|
584 | - $this->ship_to_address = $this->_response_array[27]; |
|
585 | - $this->ship_to_city = $this->_response_array[28]; |
|
586 | - $this->ship_to_state = $this->_response_array[29]; |
|
587 | - $this->ship_to_zip_code = $this->_response_array[30]; |
|
588 | - $this->ship_to_country = $this->_response_array[31]; |
|
589 | - $this->tax = $this->_response_array[32]; |
|
590 | - $this->duty = $this->_response_array[33]; |
|
591 | - $this->freight = $this->_response_array[34]; |
|
592 | - $this->tax_exempt = $this->_response_array[35]; |
|
593 | - $this->purchase_order_number = $this->_response_array[36]; |
|
594 | - $this->md5_hash = $this->_response_array[37]; |
|
595 | - $this->card_code_response = $this->_response_array[38]; |
|
596 | - $this->cavv_response = $this->_response_array[39]; |
|
597 | - $this->account_number = $this->_response_array[50]; |
|
598 | - $this->card_type = $this->_response_array[51]; |
|
599 | - $this->split_tender_id = $this->_response_array[52]; |
|
600 | - $this->requested_amount = $this->_response_array[53]; |
|
601 | - $this->balance_on_card = $this->_response_array[54]; |
|
602 | - |
|
603 | - $this->approved = ($this->response_code === self::APPROVED); |
|
604 | - $this->declined = ($this->response_code === self::DECLINED); |
|
605 | - $this->error = ($this->response_code === self::ERROR); |
|
606 | - $this->held = ($this->response_code === self::HELD); |
|
607 | - } else { |
|
608 | - $this->approved = false; |
|
609 | - $this->error = true; |
|
610 | - $this->error_message = esc_html__( |
|
611 | - 'Error connecting to Authorize.net', |
|
612 | - 'event_espresso' |
|
613 | - ); |
|
614 | - } |
|
615 | - } |
|
453 | + const APPROVED = '1'; |
|
454 | + const DECLINED = '2'; |
|
455 | + const ERROR = '3'; |
|
456 | + const HELD = '4'; |
|
457 | + |
|
458 | + protected $_x_post_fields = array( |
|
459 | + "version" => "3.1", |
|
460 | + "delim_char" => ",", |
|
461 | + "delim_data" => "TRUE", |
|
462 | + "relay_response" => "FALSE", |
|
463 | + "encap_char" => "|", |
|
464 | + ); |
|
465 | + public $approved; |
|
466 | + public $declined; |
|
467 | + public $error; |
|
468 | + public $held; |
|
469 | + public $response_code; |
|
470 | + public $response_subcode; |
|
471 | + public $response_reason_code; |
|
472 | + public $response_reason_text; |
|
473 | + public $authorization_code; |
|
474 | + public $avs_response; |
|
475 | + public $transaction_id; |
|
476 | + public $invoice_number; |
|
477 | + public $description; |
|
478 | + public $amount; |
|
479 | + public $method; |
|
480 | + public $transaction_type; |
|
481 | + public $customer_id; |
|
482 | + public $first_name; |
|
483 | + public $last_name; |
|
484 | + public $company; |
|
485 | + public $address; |
|
486 | + public $city; |
|
487 | + public $state; |
|
488 | + public $zip_code; |
|
489 | + public $country; |
|
490 | + public $phone; |
|
491 | + public $fax; |
|
492 | + public $email_address; |
|
493 | + public $ship_to_first_name; |
|
494 | + public $ship_to_last_name; |
|
495 | + public $ship_to_company; |
|
496 | + public $ship_to_address; |
|
497 | + public $ship_to_city; |
|
498 | + public $ship_to_state; |
|
499 | + public $ship_to_zip_code; |
|
500 | + public $ship_to_country; |
|
501 | + public $tax; |
|
502 | + public $duty; |
|
503 | + public $freight; |
|
504 | + public $tax_exempt; |
|
505 | + public $purchase_order_number; |
|
506 | + public $md5_hash; |
|
507 | + public $card_code_response; |
|
508 | + public $cavv_response; // cardholder_authentication_verification_response |
|
509 | + public $account_number; |
|
510 | + public $card_type; |
|
511 | + public $split_tender_id; |
|
512 | + public $requested_amount; |
|
513 | + public $balance_on_card; |
|
514 | + public $response; // The response string from AuthorizeNet. |
|
515 | + public $error_message; |
|
516 | + private $_response_array = array(); // An array with the split response. |
|
517 | + |
|
518 | + |
|
519 | + /** |
|
520 | + * Constructor. Parses the AuthorizeNet response string |
|
521 | + * |
|
522 | + * @param string $response The response from the AuthNet server. |
|
523 | + * @var string $delimiter The delimiter used (default is ",") |
|
524 | + * @var string $encap_char The encap_char used (default is "|") |
|
525 | + * @var array $custom_fields Any custom fields set in the request. |
|
526 | + */ |
|
527 | + |
|
528 | + public function __construct($response) |
|
529 | + { |
|
530 | + $encap_char = $this->_x_post_fields['encap_char']; |
|
531 | + $delimiter = $this->_x_post_fields['delim_char']; |
|
532 | + if ($response) { |
|
533 | + // Split Array |
|
534 | + $this->response = $response; |
|
535 | + if ($encap_char) { |
|
536 | + $this->_response_array = explode($encap_char . $delimiter . $encap_char, substr($response, 1, -1)); |
|
537 | + } else { |
|
538 | + $this->_response_array = explode($delimiter, $response); |
|
539 | + } |
|
540 | + |
|
541 | + /** |
|
542 | + * If AuthorizeNet doesn't return a delimited response. |
|
543 | + */ |
|
544 | + if (count($this->_response_array) < 10) { |
|
545 | + $this->approved = false; |
|
546 | + $this->error = true; |
|
547 | + $this->error_message = sprintf( |
|
548 | + esc_html__('Unrecognized response from Authorize.net: %1$s', 'event_espresso'), |
|
549 | + esc_html($response) |
|
550 | + ); |
|
551 | + return; |
|
552 | + } |
|
553 | + |
|
554 | + |
|
555 | + |
|
556 | + // Set all fields |
|
557 | + $this->response_code = $this->_response_array[0]; |
|
558 | + $this->response_subcode = $this->_response_array[1]; |
|
559 | + $this->response_reason_code = $this->_response_array[2]; |
|
560 | + $this->response_reason_text = $this->_response_array[3]; |
|
561 | + $this->authorization_code = $this->_response_array[4]; |
|
562 | + $this->avs_response = $this->_response_array[5]; |
|
563 | + $this->transaction_id = $this->_response_array[6]; |
|
564 | + $this->invoice_number = $this->_response_array[7]; |
|
565 | + $this->description = $this->_response_array[8]; |
|
566 | + $this->amount = $this->_response_array[9]; |
|
567 | + $this->method = $this->_response_array[10]; |
|
568 | + $this->transaction_type = $this->_response_array[11]; |
|
569 | + $this->customer_id = $this->_response_array[12]; |
|
570 | + $this->first_name = $this->_response_array[13]; |
|
571 | + $this->last_name = $this->_response_array[14]; |
|
572 | + $this->company = $this->_response_array[15]; |
|
573 | + $this->address = $this->_response_array[16]; |
|
574 | + $this->city = $this->_response_array[17]; |
|
575 | + $this->state = $this->_response_array[18]; |
|
576 | + $this->zip_code = $this->_response_array[19]; |
|
577 | + $this->country = $this->_response_array[20]; |
|
578 | + $this->phone = $this->_response_array[21]; |
|
579 | + $this->fax = $this->_response_array[22]; |
|
580 | + $this->email_address = $this->_response_array[23]; |
|
581 | + $this->ship_to_first_name = $this->_response_array[24]; |
|
582 | + $this->ship_to_last_name = $this->_response_array[25]; |
|
583 | + $this->ship_to_company = $this->_response_array[26]; |
|
584 | + $this->ship_to_address = $this->_response_array[27]; |
|
585 | + $this->ship_to_city = $this->_response_array[28]; |
|
586 | + $this->ship_to_state = $this->_response_array[29]; |
|
587 | + $this->ship_to_zip_code = $this->_response_array[30]; |
|
588 | + $this->ship_to_country = $this->_response_array[31]; |
|
589 | + $this->tax = $this->_response_array[32]; |
|
590 | + $this->duty = $this->_response_array[33]; |
|
591 | + $this->freight = $this->_response_array[34]; |
|
592 | + $this->tax_exempt = $this->_response_array[35]; |
|
593 | + $this->purchase_order_number = $this->_response_array[36]; |
|
594 | + $this->md5_hash = $this->_response_array[37]; |
|
595 | + $this->card_code_response = $this->_response_array[38]; |
|
596 | + $this->cavv_response = $this->_response_array[39]; |
|
597 | + $this->account_number = $this->_response_array[50]; |
|
598 | + $this->card_type = $this->_response_array[51]; |
|
599 | + $this->split_tender_id = $this->_response_array[52]; |
|
600 | + $this->requested_amount = $this->_response_array[53]; |
|
601 | + $this->balance_on_card = $this->_response_array[54]; |
|
602 | + |
|
603 | + $this->approved = ($this->response_code === self::APPROVED); |
|
604 | + $this->declined = ($this->response_code === self::DECLINED); |
|
605 | + $this->error = ($this->response_code === self::ERROR); |
|
606 | + $this->held = ($this->response_code === self::HELD); |
|
607 | + } else { |
|
608 | + $this->approved = false; |
|
609 | + $this->error = true; |
|
610 | + $this->error_message = esc_html__( |
|
611 | + 'Error connecting to Authorize.net', |
|
612 | + 'event_espresso' |
|
613 | + ); |
|
614 | + } |
|
615 | + } |
|
616 | 616 | } |
617 | 617 | |
618 | 618 | if (! class_exists('AuthorizeNetException')) { |
619 | - /** |
|
620 | - * Class AuthorizeNetException |
|
621 | - * |
|
622 | - * @package AuthorizeNet |
|
623 | - */ |
|
624 | - class AuthorizeNetException extends Exception |
|
625 | - { |
|
626 | - /** |
|
627 | - * Construct the exception. Note: The message is NOT binary safe. |
|
628 | - * |
|
629 | - * @link http://php.net/manual/en/exception.construct.php |
|
630 | - * @param string $message [optional] The Exception message to throw. |
|
631 | - * @param int $code [optional] The Exception code. |
|
632 | - * @param Exception $previous [optional] The previous exception used for the exception chaining. Since 5.3.0 |
|
633 | - * @since 5.1.0 |
|
634 | - */ |
|
635 | - public function __construct($message = "", $code = 0, Exception $previous = null) |
|
636 | - { |
|
637 | - parent::__construct($message, $code, $previous); |
|
638 | - } |
|
639 | - } |
|
619 | + /** |
|
620 | + * Class AuthorizeNetException |
|
621 | + * |
|
622 | + * @package AuthorizeNet |
|
623 | + */ |
|
624 | + class AuthorizeNetException extends Exception |
|
625 | + { |
|
626 | + /** |
|
627 | + * Construct the exception. Note: The message is NOT binary safe. |
|
628 | + * |
|
629 | + * @link http://php.net/manual/en/exception.construct.php |
|
630 | + * @param string $message [optional] The Exception message to throw. |
|
631 | + * @param int $code [optional] The Exception code. |
|
632 | + * @param Exception $previous [optional] The previous exception used for the exception chaining. Since 5.3.0 |
|
633 | + * @since 5.1.0 |
|
634 | + */ |
|
635 | + public function __construct($message = "", $code = 0, Exception $previous = null) |
|
636 | + { |
|
637 | + parent::__construct($message, $code, $previous); |
|
638 | + } |
|
639 | + } |
|
640 | 640 | } |
@@ -1,10 +1,10 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | printf( |
4 | - esc_html__( |
|
5 | - 'Authorize.Net AIM is an on-site payment method for accepting credit and debit card payments and is available to event organizers in the United States, Canada, United Kingdom, and Australia. An account with Authorize.Net is required to accept payments. Need an Authorize.Net account? %1$sClick here to sign up for a merchant account%2$s.', |
|
6 | - 'event_espresso' |
|
7 | - ), |
|
8 | - '<a href="https://eventespresso.com/go/authorizenetaim/" target="_blank">', |
|
9 | - '</a>' |
|
4 | + esc_html__( |
|
5 | + 'Authorize.Net AIM is an on-site payment method for accepting credit and debit card payments and is available to event organizers in the United States, Canada, United Kingdom, and Australia. An account with Authorize.Net is required to accept payments. Need an Authorize.Net account? %1$sClick here to sign up for a merchant account%2$s.', |
|
6 | + 'event_espresso' |
|
7 | + ), |
|
8 | + '<a href="https://eventespresso.com/go/authorizenetaim/" target="_blank">', |
|
9 | + '</a>' |
|
10 | 10 | ); |
@@ -7,33 +7,33 @@ |
||
7 | 7 | */ |
8 | 8 | |
9 | 9 | spl_autoload_register(function ($class) { |
10 | - if (substr($class, 0, 10) !== 'ReCaptcha\\') { |
|
11 | - /* If the class does not lie under the "ReCaptcha" namespace, |
|
10 | + if (substr($class, 0, 10) !== 'ReCaptcha\\') { |
|
11 | + /* If the class does not lie under the "ReCaptcha" namespace, |
|
12 | 12 | * then we can exit immediately. |
13 | 13 | */ |
14 | - return; |
|
15 | - } |
|
14 | + return; |
|
15 | + } |
|
16 | 16 | |
17 | - /* All of the classes have names like "ReCaptcha\Foo", so we need |
|
17 | + /* All of the classes have names like "ReCaptcha\Foo", so we need |
|
18 | 18 | * to replace the backslashes with frontslashes if we want the |
19 | 19 | * name to map directly to a location in the filesystem. |
20 | 20 | */ |
21 | - $class = str_replace('\\', '/', $class); |
|
21 | + $class = str_replace('\\', '/', $class); |
|
22 | 22 | |
23 | - /* First, check under the current directory. It is important that |
|
23 | + /* First, check under the current directory. It is important that |
|
24 | 24 | * we look here first, so that we don't waste time searching for |
25 | 25 | * test classes in the common case. |
26 | 26 | */ |
27 | - $path = dirname(__FILE__) . '/' . $class . '.php'; |
|
28 | - if (is_readable($path)) { |
|
29 | - require_once $path; |
|
30 | - } |
|
27 | + $path = dirname(__FILE__) . '/' . $class . '.php'; |
|
28 | + if (is_readable($path)) { |
|
29 | + require_once $path; |
|
30 | + } |
|
31 | 31 | |
32 | - /* If we didn't find what we're looking for already, maybe it's |
|
32 | + /* If we didn't find what we're looking for already, maybe it's |
|
33 | 33 | * a test class? |
34 | 34 | */ |
35 | - $path = dirname(__FILE__) . '/../tests/' . $class . '.php'; |
|
36 | - if (is_readable($path)) { |
|
37 | - require_once $path; |
|
38 | - } |
|
35 | + $path = dirname(__FILE__) . '/../tests/' . $class . '.php'; |
|
36 | + if (is_readable($path)) { |
|
37 | + require_once $path; |
|
38 | + } |
|
39 | 39 | }); |
@@ -6,7 +6,7 @@ discard block |
||
6 | 6 | * classes. |
7 | 7 | */ |
8 | 8 | |
9 | -spl_autoload_register(function ($class) { |
|
9 | +spl_autoload_register(function($class) { |
|
10 | 10 | if (substr($class, 0, 10) !== 'ReCaptcha\\') { |
11 | 11 | /* If the class does not lie under the "ReCaptcha" namespace, |
12 | 12 | * then we can exit immediately. |
@@ -24,7 +24,7 @@ discard block |
||
24 | 24 | * we look here first, so that we don't waste time searching for |
25 | 25 | * test classes in the common case. |
26 | 26 | */ |
27 | - $path = dirname(__FILE__) . '/' . $class . '.php'; |
|
27 | + $path = dirname(__FILE__).'/'.$class.'.php'; |
|
28 | 28 | if (is_readable($path)) { |
29 | 29 | require_once $path; |
30 | 30 | } |
@@ -32,7 +32,7 @@ discard block |
||
32 | 32 | /* If we didn't find what we're looking for already, maybe it's |
33 | 33 | * a test class? |
34 | 34 | */ |
35 | - $path = dirname(__FILE__) . '/../tests/' . $class . '.php'; |
|
35 | + $path = dirname(__FILE__).'/../tests/'.$class.'.php'; |
|
36 | 36 | if (is_readable($path)) { |
37 | 37 | require_once $path; |
38 | 38 | } |
@@ -99,7 +99,7 @@ discard block |
||
99 | 99 | ) { |
100 | 100 | $has_password = $model->hasPassword(); |
101 | 101 | if ($has_password) { |
102 | - $entity[ $model->getPasswordField()->get_name() ] = ModelDataTranslator::prepareFieldValueForJson( |
|
102 | + $entity[$model->getPasswordField()->get_name()] = ModelDataTranslator::prepareFieldValueForJson( |
|
103 | 103 | $model->getPasswordField(), |
104 | 104 | $model->getPasswordField()->get_default_value(), |
105 | 105 | $model_version_info->requestedVersion() |
@@ -109,7 +109,7 @@ discard block |
||
109 | 109 | if ( |
110 | 110 | $has_password |
111 | 111 | && $model->getPasswordField()->fieldIsProtected($field_name) |
112 | - && $entity[ $field_name ] |
|
112 | + && $entity[$field_name] |
|
113 | 113 | ) { |
114 | 114 | $replacement_value = ModelDataTranslator::prepareFieldValueForJson( |
115 | 115 | $field_obj, |
@@ -117,10 +117,10 @@ discard block |
||
117 | 117 | $model_version_info->requestedVersion() |
118 | 118 | ); |
119 | 119 | if ($model_version_info->fieldHasRenderedFormat($field_obj)) { |
120 | - $entity[ $field_name ]['rendered'] = $replacement_value; |
|
120 | + $entity[$field_name]['rendered'] = $replacement_value; |
|
121 | 121 | } elseif ($model_version_info->fieldHasPrettyFormat($field_obj)) { |
122 | - $entity[ $field_name ]['raw'] = $replacement_value; |
|
123 | - $entity[ $field_name ]['pretty'] = ModelDataTranslator::prepareFieldValueForJson( |
|
122 | + $entity[$field_name]['raw'] = $replacement_value; |
|
123 | + $entity[$field_name]['pretty'] = ModelDataTranslator::prepareFieldValueForJson( |
|
124 | 124 | $field_obj, |
125 | 125 | $field_obj->prepare_for_pretty_echoing($field_obj->get_default_value()), |
126 | 126 | $model_version_info->requestedVersion() |
@@ -131,7 +131,7 @@ discard block |
||
131 | 131 | // so just remove it (or rather, set its default) |
132 | 132 | // API clients will just need to look to fields with rendered formats to know if these have |
133 | 133 | // been redacted. Sorry. |
134 | - $entity[ $field_name ] = $replacement_value; |
|
134 | + $entity[$field_name] = $replacement_value; |
|
135 | 135 | } |
136 | 136 | } |
137 | 137 | } |
@@ -160,11 +160,11 @@ discard block |
||
160 | 160 | foreach ($model->field_settings() as $field_name => $field_obj) { |
161 | 161 | if ( |
162 | 162 | $model_version_info->fieldHasRenderedFormat($field_obj) |
163 | - && isset($entity[ $field_name ]) |
|
164 | - && is_array($entity[ $field_name ]) |
|
165 | - && isset($entity[ $field_name ]['raw']) |
|
163 | + && isset($entity[$field_name]) |
|
164 | + && is_array($entity[$field_name]) |
|
165 | + && isset($entity[$field_name]['raw']) |
|
166 | 166 | ) { |
167 | - unset($entity[ $field_name ]['raw']); |
|
167 | + unset($entity[$field_name]['raw']); |
|
168 | 168 | } |
169 | 169 | } |
170 | 170 | // theoretically we may want to filter out specific fields for specific models |
@@ -190,7 +190,7 @@ discard block |
||
190 | 190 | */ |
191 | 191 | public static function verifyAtLeastPartialAccessTo($model, $model_action_context, $action_name = 'list') |
192 | 192 | { |
193 | - if (! Capabilities::currentUserHasPartialAccessTo($model, $model_action_context)) { |
|
193 | + if ( ! Capabilities::currentUserHasPartialAccessTo($model, $model_action_context)) { |
|
194 | 194 | $model_name_plural = EEH_Inflector::pluralize_and_lower($model->get_this_model_name()); |
195 | 195 | throw new RestException( |
196 | 196 | sprintf('rest_cannot_%s_%s', strtolower($action_name), $model_name_plural), |
@@ -17,190 +17,190 @@ |
||
17 | 17 | */ |
18 | 18 | class Capabilities |
19 | 19 | { |
20 | - /** |
|
21 | - * The current user can see at least SOME of these entities. |
|
22 | - * |
|
23 | - * @param EEM_Base $model |
|
24 | - * @param string $model_context one of the return values from EEM_Base::valid_cap_contexts() |
|
25 | - * @return boolean |
|
26 | - */ |
|
27 | - public static function currentUserHasPartialAccessTo($model, $model_context = EEM_Base::caps_read) |
|
28 | - { |
|
29 | - if ( |
|
30 | - apply_filters( |
|
31 | - 'FHEE__Capabilities__current_user_has_partial_access_to__override_begin', |
|
32 | - false, |
|
33 | - $model, |
|
34 | - $model |
|
35 | - ) |
|
36 | - ) { |
|
37 | - return true; |
|
38 | - } |
|
39 | - foreach ($model->caps_missing($model_context) as $capability_name => $restriction_obj) { |
|
40 | - if ($restriction_obj instanceof \EE_Return_None_Where_Conditions) { |
|
41 | - return false; |
|
42 | - } |
|
43 | - } |
|
44 | - if ( |
|
45 | - apply_filters( |
|
46 | - 'FHEE__Capabilities__current_user_has_partial_access_to__override_end', |
|
47 | - false, |
|
48 | - $model, |
|
49 | - $model |
|
50 | - ) |
|
51 | - ) { |
|
52 | - return false; |
|
53 | - } |
|
54 | - return true; |
|
55 | - } |
|
20 | + /** |
|
21 | + * The current user can see at least SOME of these entities. |
|
22 | + * |
|
23 | + * @param EEM_Base $model |
|
24 | + * @param string $model_context one of the return values from EEM_Base::valid_cap_contexts() |
|
25 | + * @return boolean |
|
26 | + */ |
|
27 | + public static function currentUserHasPartialAccessTo($model, $model_context = EEM_Base::caps_read) |
|
28 | + { |
|
29 | + if ( |
|
30 | + apply_filters( |
|
31 | + 'FHEE__Capabilities__current_user_has_partial_access_to__override_begin', |
|
32 | + false, |
|
33 | + $model, |
|
34 | + $model |
|
35 | + ) |
|
36 | + ) { |
|
37 | + return true; |
|
38 | + } |
|
39 | + foreach ($model->caps_missing($model_context) as $capability_name => $restriction_obj) { |
|
40 | + if ($restriction_obj instanceof \EE_Return_None_Where_Conditions) { |
|
41 | + return false; |
|
42 | + } |
|
43 | + } |
|
44 | + if ( |
|
45 | + apply_filters( |
|
46 | + 'FHEE__Capabilities__current_user_has_partial_access_to__override_end', |
|
47 | + false, |
|
48 | + $model, |
|
49 | + $model |
|
50 | + ) |
|
51 | + ) { |
|
52 | + return false; |
|
53 | + } |
|
54 | + return true; |
|
55 | + } |
|
56 | 56 | |
57 | 57 | |
58 | - /** |
|
59 | - * Gets an array of all the capabilities the current user is missing that affected |
|
60 | - * the query |
|
61 | - * |
|
62 | - * @param EEM_Base $model |
|
63 | - * @param string $request_type one of the constants on WP_JSON_Server |
|
64 | - * @return array |
|
65 | - */ |
|
66 | - public static function getMissingPermissions($model, $request_type = EEM_Base::caps_read) |
|
67 | - { |
|
68 | - return $model->caps_missing($request_type); |
|
69 | - } |
|
58 | + /** |
|
59 | + * Gets an array of all the capabilities the current user is missing that affected |
|
60 | + * the query |
|
61 | + * |
|
62 | + * @param EEM_Base $model |
|
63 | + * @param string $request_type one of the constants on WP_JSON_Server |
|
64 | + * @return array |
|
65 | + */ |
|
66 | + public static function getMissingPermissions($model, $request_type = EEM_Base::caps_read) |
|
67 | + { |
|
68 | + return $model->caps_missing($request_type); |
|
69 | + } |
|
70 | 70 | |
71 | 71 | |
72 | - /** |
|
73 | - * Gets a string of all the capabilities the current user is missing that affected |
|
74 | - * the query |
|
75 | - * |
|
76 | - * @param EEM_Base $model |
|
77 | - * @param string $model_context one of the return values from EEM_Base::valid_cap_contexts() |
|
78 | - * @return string |
|
79 | - */ |
|
80 | - public static function getMissingPermissionsString($model, $model_context = EEM_Base::caps_read) |
|
81 | - { |
|
82 | - return implode(',', array_keys(self::getMissingPermissions($model, $model_context))); |
|
83 | - } |
|
72 | + /** |
|
73 | + * Gets a string of all the capabilities the current user is missing that affected |
|
74 | + * the query |
|
75 | + * |
|
76 | + * @param EEM_Base $model |
|
77 | + * @param string $model_context one of the return values from EEM_Base::valid_cap_contexts() |
|
78 | + * @return string |
|
79 | + */ |
|
80 | + public static function getMissingPermissionsString($model, $model_context = EEM_Base::caps_read) |
|
81 | + { |
|
82 | + return implode(',', array_keys(self::getMissingPermissions($model, $model_context))); |
|
83 | + } |
|
84 | 84 | |
85 | - /** |
|
86 | - * "Removes" password-protected fields. Currently that means setting their values to their default. |
|
87 | - * @since 4.9.74.p |
|
88 | - * @param array $entity |
|
89 | - * @param EEM_Base $model |
|
90 | - * @param ModelVersionInfo $model_version_info |
|
91 | - * @return array |
|
92 | - * @throws EE_Error |
|
93 | - */ |
|
94 | - public static function filterOutPasswordProtectedFields( |
|
95 | - $entity, |
|
96 | - EEM_Base $model, |
|
97 | - ModelVersionInfo $model_version_info |
|
98 | - ) { |
|
99 | - $has_password = $model->hasPassword(); |
|
100 | - if ($has_password) { |
|
101 | - $entity[ $model->getPasswordField()->get_name() ] = ModelDataTranslator::prepareFieldValueForJson( |
|
102 | - $model->getPasswordField(), |
|
103 | - $model->getPasswordField()->get_default_value(), |
|
104 | - $model_version_info->requestedVersion() |
|
105 | - ); |
|
106 | - } |
|
107 | - foreach ($model->field_settings() as $field_name => $field_obj) { |
|
108 | - if ( |
|
109 | - $has_password |
|
110 | - && $model->getPasswordField()->fieldIsProtected($field_name) |
|
111 | - && $entity[ $field_name ] |
|
112 | - ) { |
|
113 | - $replacement_value = ModelDataTranslator::prepareFieldValueForJson( |
|
114 | - $field_obj, |
|
115 | - $field_obj->get_default_value(), |
|
116 | - $model_version_info->requestedVersion() |
|
117 | - ); |
|
118 | - if ($model_version_info->fieldHasRenderedFormat($field_obj)) { |
|
119 | - $entity[ $field_name ]['rendered'] = $replacement_value; |
|
120 | - } elseif ($model_version_info->fieldHasPrettyFormat($field_obj)) { |
|
121 | - $entity[ $field_name ]['raw'] = $replacement_value; |
|
122 | - $entity[ $field_name ]['pretty'] = ModelDataTranslator::prepareFieldValueForJson( |
|
123 | - $field_obj, |
|
124 | - $field_obj->prepare_for_pretty_echoing($field_obj->get_default_value()), |
|
125 | - $model_version_info->requestedVersion() |
|
126 | - ); |
|
127 | - } else { |
|
128 | - // this is most likely an excerpt field. (These should have also had "rendered" and "raw" |
|
129 | - // versions, but we missed that, and can't change it without breaking backward compatibility) |
|
130 | - // so just remove it (or rather, set its default) |
|
131 | - // API clients will just need to look to fields with rendered formats to know if these have |
|
132 | - // been redacted. Sorry. |
|
133 | - $entity[ $field_name ] = $replacement_value; |
|
134 | - } |
|
135 | - } |
|
136 | - } |
|
137 | - return $entity; |
|
138 | - } |
|
85 | + /** |
|
86 | + * "Removes" password-protected fields. Currently that means setting their values to their default. |
|
87 | + * @since 4.9.74.p |
|
88 | + * @param array $entity |
|
89 | + * @param EEM_Base $model |
|
90 | + * @param ModelVersionInfo $model_version_info |
|
91 | + * @return array |
|
92 | + * @throws EE_Error |
|
93 | + */ |
|
94 | + public static function filterOutPasswordProtectedFields( |
|
95 | + $entity, |
|
96 | + EEM_Base $model, |
|
97 | + ModelVersionInfo $model_version_info |
|
98 | + ) { |
|
99 | + $has_password = $model->hasPassword(); |
|
100 | + if ($has_password) { |
|
101 | + $entity[ $model->getPasswordField()->get_name() ] = ModelDataTranslator::prepareFieldValueForJson( |
|
102 | + $model->getPasswordField(), |
|
103 | + $model->getPasswordField()->get_default_value(), |
|
104 | + $model_version_info->requestedVersion() |
|
105 | + ); |
|
106 | + } |
|
107 | + foreach ($model->field_settings() as $field_name => $field_obj) { |
|
108 | + if ( |
|
109 | + $has_password |
|
110 | + && $model->getPasswordField()->fieldIsProtected($field_name) |
|
111 | + && $entity[ $field_name ] |
|
112 | + ) { |
|
113 | + $replacement_value = ModelDataTranslator::prepareFieldValueForJson( |
|
114 | + $field_obj, |
|
115 | + $field_obj->get_default_value(), |
|
116 | + $model_version_info->requestedVersion() |
|
117 | + ); |
|
118 | + if ($model_version_info->fieldHasRenderedFormat($field_obj)) { |
|
119 | + $entity[ $field_name ]['rendered'] = $replacement_value; |
|
120 | + } elseif ($model_version_info->fieldHasPrettyFormat($field_obj)) { |
|
121 | + $entity[ $field_name ]['raw'] = $replacement_value; |
|
122 | + $entity[ $field_name ]['pretty'] = ModelDataTranslator::prepareFieldValueForJson( |
|
123 | + $field_obj, |
|
124 | + $field_obj->prepare_for_pretty_echoing($field_obj->get_default_value()), |
|
125 | + $model_version_info->requestedVersion() |
|
126 | + ); |
|
127 | + } else { |
|
128 | + // this is most likely an excerpt field. (These should have also had "rendered" and "raw" |
|
129 | + // versions, but we missed that, and can't change it without breaking backward compatibility) |
|
130 | + // so just remove it (or rather, set its default) |
|
131 | + // API clients will just need to look to fields with rendered formats to know if these have |
|
132 | + // been redacted. Sorry. |
|
133 | + $entity[ $field_name ] = $replacement_value; |
|
134 | + } |
|
135 | + } |
|
136 | + } |
|
137 | + return $entity; |
|
138 | + } |
|
139 | 139 | |
140 | 140 | |
141 | - /** |
|
142 | - * Takes a entity that's ready to be returned and removes fields which the user shouldn't be able to access. |
|
143 | - * |
|
144 | - * @param array $entity |
|
145 | - * @param EEM_Base $model |
|
146 | - * @param string $request_type one of the return values from EEM_Base::valid_cap_contexts() |
|
147 | - * @param ModelVersionInfo $model_version_info |
|
148 | - * @param string $primary_key_string result of EEM_Base::get_index_primary_key_string(), so that we can |
|
149 | - * use this with models that have no primary key |
|
150 | - * @return array ready for converting into json |
|
151 | - */ |
|
152 | - public static function filterOutInaccessibleEntityFields( |
|
153 | - $entity, |
|
154 | - $model, |
|
155 | - $request_type, |
|
156 | - $model_version_info, |
|
157 | - $primary_key_string = null |
|
158 | - ) { |
|
159 | - foreach ($model->field_settings() as $field_name => $field_obj) { |
|
160 | - if ( |
|
161 | - $model_version_info->fieldHasRenderedFormat($field_obj) |
|
162 | - && isset($entity[ $field_name ]) |
|
163 | - && is_array($entity[ $field_name ]) |
|
164 | - && isset($entity[ $field_name ]['raw']) |
|
165 | - ) { |
|
166 | - unset($entity[ $field_name ]['raw']); |
|
167 | - } |
|
168 | - } |
|
169 | - // theoretically we may want to filter out specific fields for specific models |
|
170 | - return apply_filters( |
|
171 | - 'FHEE__Capabilities__filter_out_inaccessible_entity_fields', |
|
172 | - $entity, |
|
173 | - $model, |
|
174 | - $request_type |
|
175 | - ); |
|
176 | - } |
|
141 | + /** |
|
142 | + * Takes a entity that's ready to be returned and removes fields which the user shouldn't be able to access. |
|
143 | + * |
|
144 | + * @param array $entity |
|
145 | + * @param EEM_Base $model |
|
146 | + * @param string $request_type one of the return values from EEM_Base::valid_cap_contexts() |
|
147 | + * @param ModelVersionInfo $model_version_info |
|
148 | + * @param string $primary_key_string result of EEM_Base::get_index_primary_key_string(), so that we can |
|
149 | + * use this with models that have no primary key |
|
150 | + * @return array ready for converting into json |
|
151 | + */ |
|
152 | + public static function filterOutInaccessibleEntityFields( |
|
153 | + $entity, |
|
154 | + $model, |
|
155 | + $request_type, |
|
156 | + $model_version_info, |
|
157 | + $primary_key_string = null |
|
158 | + ) { |
|
159 | + foreach ($model->field_settings() as $field_name => $field_obj) { |
|
160 | + if ( |
|
161 | + $model_version_info->fieldHasRenderedFormat($field_obj) |
|
162 | + && isset($entity[ $field_name ]) |
|
163 | + && is_array($entity[ $field_name ]) |
|
164 | + && isset($entity[ $field_name ]['raw']) |
|
165 | + ) { |
|
166 | + unset($entity[ $field_name ]['raw']); |
|
167 | + } |
|
168 | + } |
|
169 | + // theoretically we may want to filter out specific fields for specific models |
|
170 | + return apply_filters( |
|
171 | + 'FHEE__Capabilities__filter_out_inaccessible_entity_fields', |
|
172 | + $entity, |
|
173 | + $model, |
|
174 | + $request_type |
|
175 | + ); |
|
176 | + } |
|
177 | 177 | |
178 | 178 | |
179 | - /** |
|
180 | - * Verifies the current user has at least partial access to do this action on this model. |
|
181 | - * If not, throws an exception (so we can define the code that sets up this error object |
|
182 | - * once) |
|
183 | - * |
|
184 | - * @param EEM_Base $model |
|
185 | - * @param string $model_action_context |
|
186 | - * @param string $action_name |
|
187 | - * @return void |
|
188 | - * @throws RestException |
|
189 | - */ |
|
190 | - public static function verifyAtLeastPartialAccessTo($model, $model_action_context, $action_name = 'list') |
|
191 | - { |
|
192 | - if (! Capabilities::currentUserHasPartialAccessTo($model, $model_action_context)) { |
|
193 | - $model_name_plural = EEH_Inflector::pluralize_and_lower($model->get_this_model_name()); |
|
194 | - throw new RestException( |
|
195 | - sprintf('rest_cannot_%s_%s', strtolower($action_name), $model_name_plural), |
|
196 | - sprintf( |
|
197 | - esc_html__('Sorry, you are not allowed to %1$s %2$s. Missing permissions: %3$s', 'event_espresso'), |
|
198 | - $action_name, |
|
199 | - $model_name_plural, |
|
200 | - Capabilities::getMissingPermissionsString($model, $model_action_context) |
|
201 | - ), |
|
202 | - array('status' => 403) |
|
203 | - ); |
|
204 | - } |
|
205 | - } |
|
179 | + /** |
|
180 | + * Verifies the current user has at least partial access to do this action on this model. |
|
181 | + * If not, throws an exception (so we can define the code that sets up this error object |
|
182 | + * once) |
|
183 | + * |
|
184 | + * @param EEM_Base $model |
|
185 | + * @param string $model_action_context |
|
186 | + * @param string $action_name |
|
187 | + * @return void |
|
188 | + * @throws RestException |
|
189 | + */ |
|
190 | + public static function verifyAtLeastPartialAccessTo($model, $model_action_context, $action_name = 'list') |
|
191 | + { |
|
192 | + if (! Capabilities::currentUserHasPartialAccessTo($model, $model_action_context)) { |
|
193 | + $model_name_plural = EEH_Inflector::pluralize_and_lower($model->get_this_model_name()); |
|
194 | + throw new RestException( |
|
195 | + sprintf('rest_cannot_%s_%s', strtolower($action_name), $model_name_plural), |
|
196 | + sprintf( |
|
197 | + esc_html__('Sorry, you are not allowed to %1$s %2$s. Missing permissions: %3$s', 'event_espresso'), |
|
198 | + $action_name, |
|
199 | + $model_name_plural, |
|
200 | + Capabilities::getMissingPermissionsString($model, $model_action_context) |
|
201 | + ), |
|
202 | + array('status' => 403) |
|
203 | + ); |
|
204 | + } |
|
205 | + } |
|
206 | 206 | } |
@@ -12,39 +12,39 @@ |
||
12 | 12 | class ChangesIn40834 extends ChangesInBase |
13 | 13 | { |
14 | 14 | |
15 | - /** |
|
16 | - * Adds hooks so requests to 4.8.29 don't have the checkin endpoints |
|
17 | - */ |
|
18 | - public function setHooks() |
|
19 | - { |
|
20 | - // set a hook to remove the checkout/checkout endpoints if the request |
|
21 | - // is for lower than 4.8.33 |
|
22 | - add_filter( |
|
23 | - 'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers', |
|
24 | - array($this, 'removeResponseHeaders'), |
|
25 | - 10, |
|
26 | - 3 |
|
27 | - ); |
|
28 | - } |
|
15 | + /** |
|
16 | + * Adds hooks so requests to 4.8.29 don't have the checkin endpoints |
|
17 | + */ |
|
18 | + public function setHooks() |
|
19 | + { |
|
20 | + // set a hook to remove the checkout/checkout endpoints if the request |
|
21 | + // is for lower than 4.8.33 |
|
22 | + add_filter( |
|
23 | + 'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers', |
|
24 | + array($this, 'removeResponseHeaders'), |
|
25 | + 10, |
|
26 | + 3 |
|
27 | + ); |
|
28 | + } |
|
29 | 29 | |
30 | 30 | |
31 | - /** |
|
32 | - * Removes the checkin and checkout endpoints from the index for requests |
|
33 | - * to api versions lowers than 4.8.33 |
|
34 | - * |
|
35 | - * @param array $response_headers |
|
36 | - * @param Base $controller |
|
37 | - * @param string $requested_version |
|
38 | - * @return array like $routes_on_this_version |
|
39 | - */ |
|
40 | - public function removeResponseHeaders($response_headers, $controller, $requested_version) |
|
41 | - { |
|
42 | - if ( |
|
43 | - $controller instanceof Base |
|
44 | - && $this->appliesToVersion($requested_version) |
|
45 | - ) { |
|
46 | - return array(); |
|
47 | - } |
|
48 | - return $response_headers; |
|
49 | - } |
|
31 | + /** |
|
32 | + * Removes the checkin and checkout endpoints from the index for requests |
|
33 | + * to api versions lowers than 4.8.33 |
|
34 | + * |
|
35 | + * @param array $response_headers |
|
36 | + * @param Base $controller |
|
37 | + * @param string $requested_version |
|
38 | + * @return array like $routes_on_this_version |
|
39 | + */ |
|
40 | + public function removeResponseHeaders($response_headers, $controller, $requested_version) |
|
41 | + { |
|
42 | + if ( |
|
43 | + $controller instanceof Base |
|
44 | + && $this->appliesToVersion($requested_version) |
|
45 | + ) { |
|
46 | + return array(); |
|
47 | + } |
|
48 | + return $response_headers; |
|
49 | + } |
|
50 | 50 | } |
@@ -96,7 +96,7 @@ |
||
96 | 96 | $status_pretty = 'NEVER'; |
97 | 97 | break; |
98 | 98 | } |
99 | - $checkin_stati[ $datetime_id ] = $status_pretty; |
|
99 | + $checkin_stati[$datetime_id] = $status_pretty; |
|
100 | 100 | } |
101 | 101 | return $checkin_stati; |
102 | 102 | } |
@@ -24,109 +24,109 @@ |
||
24 | 24 | */ |
25 | 25 | class Registration extends RegistrationCalculationBase |
26 | 26 | { |
27 | - /** |
|
28 | - * @var EEM_Registration |
|
29 | - */ |
|
30 | - protected $registration_model; |
|
27 | + /** |
|
28 | + * @var EEM_Registration |
|
29 | + */ |
|
30 | + protected $registration_model; |
|
31 | 31 | |
32 | - /** |
|
33 | - * Registration constructor. |
|
34 | - * @param EEM_Registration $registration_model |
|
35 | - */ |
|
36 | - public function __construct(EEM_Registration $registration_model) |
|
37 | - { |
|
38 | - $this->registration_model = $registration_model; |
|
39 | - } |
|
32 | + /** |
|
33 | + * Registration constructor. |
|
34 | + * @param EEM_Registration $registration_model |
|
35 | + */ |
|
36 | + public function __construct(EEM_Registration $registration_model) |
|
37 | + { |
|
38 | + $this->registration_model = $registration_model; |
|
39 | + } |
|
40 | 40 | |
41 | - /** |
|
42 | - * Calculates the checkin status for each datetime this registration has access to |
|
43 | - * |
|
44 | - * @param array $wpdb_row |
|
45 | - * @param WP_REST_Request $request |
|
46 | - * @param RegistrationControllerBase $controller |
|
47 | - * @return array |
|
48 | - * @throws EE_Error |
|
49 | - * @throws InvalidDataTypeException |
|
50 | - * @throws InvalidInterfaceException |
|
51 | - * @throws InvalidArgumentException |
|
52 | - */ |
|
53 | - public function datetimeCheckinStati($wpdb_row, $request, $controller) |
|
54 | - { |
|
55 | - if (is_array($wpdb_row) && isset($wpdb_row['Registration.REG_ID'])) { |
|
56 | - $reg = $this->registration_model->get_one_by_ID($wpdb_row['Registration.REG_ID']); |
|
57 | - } else { |
|
58 | - $reg = null; |
|
59 | - } |
|
60 | - if ( |
|
61 | - ! $reg instanceof EE_Registration |
|
62 | - ) { |
|
63 | - throw new EE_Error( |
|
64 | - sprintf( |
|
65 | - esc_html__( |
|
66 | - // @codingStandardsIgnoreStart |
|
67 | - 'Cannot calculate datetime_checkin_stati because the registration with ID %1$s (from database row %2$s) was not found', |
|
68 | - // @codingStandardsIgnoreEnd |
|
69 | - 'event_espresso' |
|
70 | - ), |
|
71 | - $wpdb_row['Registration.REG_ID'], |
|
72 | - print_r($wpdb_row, true) |
|
73 | - ) |
|
74 | - ); |
|
75 | - } |
|
76 | - $datetime_ids = EEM_Datetime::instance()->get_col( |
|
77 | - [ |
|
78 | - [ |
|
79 | - 'Ticket.TKT_ID' => $reg->ticket_ID(), |
|
80 | - ], |
|
81 | - 'default_where_conditions' => EEM_Base::default_where_conditions_minimum_all, |
|
82 | - ] |
|
83 | - ); |
|
84 | - $checkin_stati = array(); |
|
85 | - foreach ($datetime_ids as $datetime_id) { |
|
86 | - $status = $reg->check_in_status_for_datetime($datetime_id); |
|
87 | - switch ($status) { |
|
88 | - case EE_Checkin::status_checked_out: |
|
89 | - $status_pretty = 'OUT'; |
|
90 | - break; |
|
91 | - case EE_Checkin::status_checked_in: |
|
92 | - $status_pretty = 'IN'; |
|
93 | - break; |
|
94 | - case EE_Checkin::status_checked_never: |
|
95 | - default: |
|
96 | - $status_pretty = 'NEVER'; |
|
97 | - break; |
|
98 | - } |
|
99 | - $checkin_stati[ $datetime_id ] = $status_pretty; |
|
100 | - } |
|
101 | - return $checkin_stati; |
|
102 | - } |
|
41 | + /** |
|
42 | + * Calculates the checkin status for each datetime this registration has access to |
|
43 | + * |
|
44 | + * @param array $wpdb_row |
|
45 | + * @param WP_REST_Request $request |
|
46 | + * @param RegistrationControllerBase $controller |
|
47 | + * @return array |
|
48 | + * @throws EE_Error |
|
49 | + * @throws InvalidDataTypeException |
|
50 | + * @throws InvalidInterfaceException |
|
51 | + * @throws InvalidArgumentException |
|
52 | + */ |
|
53 | + public function datetimeCheckinStati($wpdb_row, $request, $controller) |
|
54 | + { |
|
55 | + if (is_array($wpdb_row) && isset($wpdb_row['Registration.REG_ID'])) { |
|
56 | + $reg = $this->registration_model->get_one_by_ID($wpdb_row['Registration.REG_ID']); |
|
57 | + } else { |
|
58 | + $reg = null; |
|
59 | + } |
|
60 | + if ( |
|
61 | + ! $reg instanceof EE_Registration |
|
62 | + ) { |
|
63 | + throw new EE_Error( |
|
64 | + sprintf( |
|
65 | + esc_html__( |
|
66 | + // @codingStandardsIgnoreStart |
|
67 | + 'Cannot calculate datetime_checkin_stati because the registration with ID %1$s (from database row %2$s) was not found', |
|
68 | + // @codingStandardsIgnoreEnd |
|
69 | + 'event_espresso' |
|
70 | + ), |
|
71 | + $wpdb_row['Registration.REG_ID'], |
|
72 | + print_r($wpdb_row, true) |
|
73 | + ) |
|
74 | + ); |
|
75 | + } |
|
76 | + $datetime_ids = EEM_Datetime::instance()->get_col( |
|
77 | + [ |
|
78 | + [ |
|
79 | + 'Ticket.TKT_ID' => $reg->ticket_ID(), |
|
80 | + ], |
|
81 | + 'default_where_conditions' => EEM_Base::default_where_conditions_minimum_all, |
|
82 | + ] |
|
83 | + ); |
|
84 | + $checkin_stati = array(); |
|
85 | + foreach ($datetime_ids as $datetime_id) { |
|
86 | + $status = $reg->check_in_status_for_datetime($datetime_id); |
|
87 | + switch ($status) { |
|
88 | + case EE_Checkin::status_checked_out: |
|
89 | + $status_pretty = 'OUT'; |
|
90 | + break; |
|
91 | + case EE_Checkin::status_checked_in: |
|
92 | + $status_pretty = 'IN'; |
|
93 | + break; |
|
94 | + case EE_Checkin::status_checked_never: |
|
95 | + default: |
|
96 | + $status_pretty = 'NEVER'; |
|
97 | + break; |
|
98 | + } |
|
99 | + $checkin_stati[ $datetime_id ] = $status_pretty; |
|
100 | + } |
|
101 | + return $checkin_stati; |
|
102 | + } |
|
103 | 103 | |
104 | 104 | |
105 | - /** |
|
106 | - * Provides an array for all the calculations possible that outlines a json schema for those calculations. |
|
107 | - * Array is indexed by calculation (snake case) and value is the schema for that calculation. |
|
108 | - * |
|
109 | - * @since 4.9.68.p |
|
110 | - * @return array |
|
111 | - */ |
|
112 | - public function schemaForCalculations() |
|
113 | - { |
|
114 | - return array( |
|
115 | - 'datetime_checkin_stati' => array( |
|
116 | - 'description' => esc_html__( |
|
117 | - 'Returns the checkin status for each datetime this registration has access to.', |
|
118 | - 'event_espresso' |
|
119 | - ), |
|
120 | - 'type' => 'object', |
|
121 | - 'properties' => array(), |
|
122 | - 'additionalProperties' => array( |
|
123 | - 'description' => esc_html__( |
|
124 | - 'Keys are date-time ids and values are the check-in status', |
|
125 | - 'event_espresso' |
|
126 | - ), |
|
127 | - 'type' => 'string' |
|
128 | - ), |
|
129 | - ), |
|
130 | - ); |
|
131 | - } |
|
105 | + /** |
|
106 | + * Provides an array for all the calculations possible that outlines a json schema for those calculations. |
|
107 | + * Array is indexed by calculation (snake case) and value is the schema for that calculation. |
|
108 | + * |
|
109 | + * @since 4.9.68.p |
|
110 | + * @return array |
|
111 | + */ |
|
112 | + public function schemaForCalculations() |
|
113 | + { |
|
114 | + return array( |
|
115 | + 'datetime_checkin_stati' => array( |
|
116 | + 'description' => esc_html__( |
|
117 | + 'Returns the checkin status for each datetime this registration has access to.', |
|
118 | + 'event_espresso' |
|
119 | + ), |
|
120 | + 'type' => 'object', |
|
121 | + 'properties' => array(), |
|
122 | + 'additionalProperties' => array( |
|
123 | + 'description' => esc_html__( |
|
124 | + 'Keys are date-time ids and values are the check-in status', |
|
125 | + 'event_espresso' |
|
126 | + ), |
|
127 | + 'type' => 'string' |
|
128 | + ), |
|
129 | + ), |
|
130 | + ); |
|
131 | + } |
|
132 | 132 | } |