@@ -15,47 +15,47 @@ |
||
15 | 15 | class EE_Declined_Registration_message_type extends EE_Registration_Base_message_type |
16 | 16 | { |
17 | 17 | |
18 | - public function __construct() |
|
19 | - { |
|
20 | - $this->name = 'declined_registration'; |
|
21 | - $this->description = __('This message type is for messages sent to registrants when their registration is declined.', 'event_espresso'); |
|
22 | - $this->label = array( |
|
23 | - 'singular' => __('registration declined', 'event_espresso'), |
|
24 | - 'plural' => __('registrations declined', 'event_espresso') |
|
25 | - ); |
|
26 | - $this->_master_templates = array( |
|
27 | - 'email' => 'not_approved_registration' |
|
28 | - ); |
|
29 | - parent::__construct(); |
|
30 | - } |
|
31 | - |
|
32 | - |
|
33 | - |
|
34 | - |
|
35 | - /** |
|
36 | - * _set_contexts |
|
37 | - * This sets up the contexts associated with the message_type |
|
38 | - * |
|
39 | - * @access protected |
|
40 | - * @return void |
|
41 | - */ |
|
42 | - protected function _set_contexts() |
|
43 | - { |
|
44 | - $this->_context_label = array( |
|
45 | - 'label' => __('recipient', 'event_espresso'), |
|
46 | - 'plural' => __('recipients', 'event_espresso'), |
|
47 | - 'description' => __('Recipient\'s are who will receive the template. You may want different registration details sent out depending on who the recipient is', 'event_espresso') |
|
48 | - ); |
|
49 | - |
|
50 | - $this->_contexts = array( |
|
51 | - 'admin' => array( |
|
52 | - 'label' => __('Event Admin', 'event_espresso'), |
|
53 | - 'description' => __('This template is what event administrators will receive with an declined registration', 'event_espresso') |
|
54 | - ), |
|
55 | - 'attendee' => array( |
|
56 | - 'label' => __('Registrant', 'event_espresso'), |
|
57 | - 'description' => __('This template is what each registrant for the event will receive when their registration is declined.', 'event_espresso') |
|
58 | - ) |
|
59 | - ); |
|
60 | - } |
|
18 | + public function __construct() |
|
19 | + { |
|
20 | + $this->name = 'declined_registration'; |
|
21 | + $this->description = __('This message type is for messages sent to registrants when their registration is declined.', 'event_espresso'); |
|
22 | + $this->label = array( |
|
23 | + 'singular' => __('registration declined', 'event_espresso'), |
|
24 | + 'plural' => __('registrations declined', 'event_espresso') |
|
25 | + ); |
|
26 | + $this->_master_templates = array( |
|
27 | + 'email' => 'not_approved_registration' |
|
28 | + ); |
|
29 | + parent::__construct(); |
|
30 | + } |
|
31 | + |
|
32 | + |
|
33 | + |
|
34 | + |
|
35 | + /** |
|
36 | + * _set_contexts |
|
37 | + * This sets up the contexts associated with the message_type |
|
38 | + * |
|
39 | + * @access protected |
|
40 | + * @return void |
|
41 | + */ |
|
42 | + protected function _set_contexts() |
|
43 | + { |
|
44 | + $this->_context_label = array( |
|
45 | + 'label' => __('recipient', 'event_espresso'), |
|
46 | + 'plural' => __('recipients', 'event_espresso'), |
|
47 | + 'description' => __('Recipient\'s are who will receive the template. You may want different registration details sent out depending on who the recipient is', 'event_espresso') |
|
48 | + ); |
|
49 | + |
|
50 | + $this->_contexts = array( |
|
51 | + 'admin' => array( |
|
52 | + 'label' => __('Event Admin', 'event_espresso'), |
|
53 | + 'description' => __('This template is what event administrators will receive with an declined registration', 'event_espresso') |
|
54 | + ), |
|
55 | + 'attendee' => array( |
|
56 | + 'label' => __('Registrant', 'event_espresso'), |
|
57 | + 'description' => __('This template is what each registrant for the event will receive when their registration is declined.', 'event_espresso') |
|
58 | + ) |
|
59 | + ); |
|
60 | + } |
|
61 | 61 | } |
@@ -15,49 +15,49 @@ |
||
15 | 15 | class EE_Payment_Reminder_message_type extends EE_Payment_Base_message_type |
16 | 16 | { |
17 | 17 | |
18 | - public function __construct() |
|
19 | - { |
|
20 | - |
|
21 | - // setup type details for reference |
|
22 | - $this->name = 'payment_reminder'; |
|
23 | - $this->description = __('This message type is used for all payment reminder messages. These are triggered when an offline gateway registration is completed or when manually triggered via event administrators via the transaction admin page(s).', 'event_espresso'); |
|
24 | - $this->label = array( |
|
25 | - 'singular' => __('payment reminder', 'event_espresso'), |
|
26 | - 'plural' => __('payment reminders', 'event_espresso') |
|
27 | - ); |
|
28 | - $this->_master_templates = array( |
|
29 | - 'email' => 'payment' |
|
30 | - ); |
|
31 | - |
|
32 | - parent::__construct(); |
|
33 | - } |
|
34 | - |
|
35 | - |
|
36 | - |
|
37 | - /** |
|
38 | - * _set_contexts |
|
39 | - * This sets up the contexts associated with the message_type |
|
40 | - * |
|
41 | - * @access protected |
|
42 | - * @return void |
|
43 | - */ |
|
44 | - protected function _set_contexts() |
|
45 | - { |
|
46 | - $this->_context_label = array( |
|
47 | - 'label' => __('recipient', 'event_espresso'), |
|
48 | - 'plural' => __('recipients', 'event_espresso'), |
|
49 | - 'description' => __('Recipient\'s are who will receive the template. You may want different payment details sent out depending on who the recipient is', 'event_espresso') |
|
50 | - ); |
|
51 | - |
|
52 | - $this->_contexts = array( |
|
53 | - 'admin' => array( |
|
54 | - 'label' => __('Event Admin', 'event_espresso'), |
|
55 | - 'description' => __('This template is what event administrators will receive on a successful payment', 'event_espresso') |
|
56 | - ), |
|
57 | - 'primary_attendee' => array( |
|
58 | - 'label' => __('Primary Registrant', 'event_espresso'), |
|
59 | - 'description' => __('This template is what the primary registrant (the person who made the main registration) will receive on successful payment', 'event_espresso') |
|
60 | - ) |
|
61 | - ); |
|
62 | - } |
|
18 | + public function __construct() |
|
19 | + { |
|
20 | + |
|
21 | + // setup type details for reference |
|
22 | + $this->name = 'payment_reminder'; |
|
23 | + $this->description = __('This message type is used for all payment reminder messages. These are triggered when an offline gateway registration is completed or when manually triggered via event administrators via the transaction admin page(s).', 'event_espresso'); |
|
24 | + $this->label = array( |
|
25 | + 'singular' => __('payment reminder', 'event_espresso'), |
|
26 | + 'plural' => __('payment reminders', 'event_espresso') |
|
27 | + ); |
|
28 | + $this->_master_templates = array( |
|
29 | + 'email' => 'payment' |
|
30 | + ); |
|
31 | + |
|
32 | + parent::__construct(); |
|
33 | + } |
|
34 | + |
|
35 | + |
|
36 | + |
|
37 | + /** |
|
38 | + * _set_contexts |
|
39 | + * This sets up the contexts associated with the message_type |
|
40 | + * |
|
41 | + * @access protected |
|
42 | + * @return void |
|
43 | + */ |
|
44 | + protected function _set_contexts() |
|
45 | + { |
|
46 | + $this->_context_label = array( |
|
47 | + 'label' => __('recipient', 'event_espresso'), |
|
48 | + 'plural' => __('recipients', 'event_espresso'), |
|
49 | + 'description' => __('Recipient\'s are who will receive the template. You may want different payment details sent out depending on who the recipient is', 'event_espresso') |
|
50 | + ); |
|
51 | + |
|
52 | + $this->_contexts = array( |
|
53 | + 'admin' => array( |
|
54 | + 'label' => __('Event Admin', 'event_espresso'), |
|
55 | + 'description' => __('This template is what event administrators will receive on a successful payment', 'event_espresso') |
|
56 | + ), |
|
57 | + 'primary_attendee' => array( |
|
58 | + 'label' => __('Primary Registrant', 'event_espresso'), |
|
59 | + 'description' => __('This template is what the primary registrant (the person who made the main registration) will receive on successful payment', 'event_espresso') |
|
60 | + ) |
|
61 | + ); |
|
62 | + } |
|
63 | 63 | } |
@@ -15,37 +15,37 @@ |
||
15 | 15 | { |
16 | 16 | |
17 | 17 | |
18 | - public function __construct($fields, $context) |
|
19 | - { |
|
20 | - $this->_m_name = 'email'; |
|
21 | - $this->_mt_name = 'payment_reminder'; |
|
22 | - |
|
23 | - parent::__construct($fields, $context); |
|
24 | - } |
|
25 | - |
|
26 | - /** |
|
27 | - * at this point no custom validation needed for this messenger/message_type combo. |
|
28 | - */ |
|
29 | - protected function _modify_validator() |
|
30 | - { |
|
31 | - $new_config = $this->_messenger->get_validator_config(); |
|
32 | - |
|
33 | - // modify just event_list |
|
34 | - $new_config['event_list'] = array( |
|
35 | - 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
36 | - ); |
|
37 | - $new_config['ticket_list'] = array( |
|
38 | - 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
|
39 | - ); |
|
40 | - $new_config['content'] = array( |
|
41 | - 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
42 | - ); |
|
43 | - $this->_messenger->set_validator_config($new_config); |
|
44 | - |
|
45 | - if ($this->_context != 'admin') { |
|
46 | - $this->_valid_shortcodes_modifier[ $this->_context ]['event_list'] = array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization', 'event_author', 'primary_registration_details', 'primary_registration_list', 'recipient_details', 'recipient_list'); |
|
47 | - } |
|
48 | - |
|
49 | - $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
|
50 | - } |
|
18 | + public function __construct($fields, $context) |
|
19 | + { |
|
20 | + $this->_m_name = 'email'; |
|
21 | + $this->_mt_name = 'payment_reminder'; |
|
22 | + |
|
23 | + parent::__construct($fields, $context); |
|
24 | + } |
|
25 | + |
|
26 | + /** |
|
27 | + * at this point no custom validation needed for this messenger/message_type combo. |
|
28 | + */ |
|
29 | + protected function _modify_validator() |
|
30 | + { |
|
31 | + $new_config = $this->_messenger->get_validator_config(); |
|
32 | + |
|
33 | + // modify just event_list |
|
34 | + $new_config['event_list'] = array( |
|
35 | + 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
36 | + ); |
|
37 | + $new_config['ticket_list'] = array( |
|
38 | + 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
|
39 | + ); |
|
40 | + $new_config['content'] = array( |
|
41 | + 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
42 | + ); |
|
43 | + $this->_messenger->set_validator_config($new_config); |
|
44 | + |
|
45 | + if ($this->_context != 'admin') { |
|
46 | + $this->_valid_shortcodes_modifier[ $this->_context ]['event_list'] = array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization', 'event_author', 'primary_registration_details', 'primary_registration_list', 'recipient_details', 'recipient_list'); |
|
47 | + } |
|
48 | + |
|
49 | + $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
|
50 | + } |
|
51 | 51 | } |
@@ -32,18 +32,18 @@ |
||
32 | 32 | |
33 | 33 | // modify just event_list |
34 | 34 | $new_config['event_list'] = array( |
35 | - 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
35 | + 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization', 'recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
36 | 36 | ); |
37 | 37 | $new_config['ticket_list'] = array( |
38 | 38 | 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
39 | 39 | ); |
40 | 40 | $new_config['content'] = array( |
41 | - 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
41 | + 'shortcodes' => array('event_list', 'attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
42 | 42 | ); |
43 | 43 | $this->_messenger->set_validator_config($new_config); |
44 | 44 | |
45 | 45 | if ($this->_context != 'admin') { |
46 | - $this->_valid_shortcodes_modifier[ $this->_context ]['event_list'] = array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization', 'event_author', 'primary_registration_details', 'primary_registration_list', 'recipient_details', 'recipient_list'); |
|
46 | + $this->_valid_shortcodes_modifier[$this->_context]['event_list'] = array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization', 'event_author', 'primary_registration_details', 'primary_registration_list', 'recipient_details', 'recipient_list'); |
|
47 | 47 | } |
48 | 48 | |
49 | 49 | $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
@@ -49,15 +49,15 @@ discard block |
||
49 | 49 | protected function _parser($shortcode) |
50 | 50 | { |
51 | 51 | |
52 | - if (! $this->_data instanceof EE_Answer || ! isset($this->_extra_data['data']) || ! $this->_extra_data['data'] instanceof EE_Messages_Addressee) { |
|
52 | + if ( ! $this->_data instanceof EE_Answer || ! isset($this->_extra_data['data']) || ! $this->_extra_data['data'] instanceof EE_Messages_Addressee) { |
|
53 | 53 | return ''; |
54 | 54 | } |
55 | 55 | |
56 | 56 | switch ($shortcode) { |
57 | 57 | case '[QUESTION]': |
58 | - $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
59 | - ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
60 | - if (! $question instanceof EE_Question) { |
|
58 | + $question = isset($this->_extra_data['data']->questions[$this->_data->ID()]) |
|
59 | + ? $this->_extra_data['data']->questions[$this->_data->ID()] : $this->_data->question(); |
|
60 | + if ( ! $question instanceof EE_Question) { |
|
61 | 61 | return ''; // get out because we can't figure out what the question is. |
62 | 62 | } |
63 | 63 | |
@@ -66,9 +66,9 @@ discard block |
||
66 | 66 | |
67 | 67 | case '[ANSWER]': |
68 | 68 | // need to get the question to determine the type of question (some questions require translation of the answer). |
69 | - $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
70 | - ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
71 | - if (! $question instanceof EE_Question) { |
|
69 | + $question = isset($this->_extra_data['data']->questions[$this->_data->ID()]) |
|
70 | + ? $this->_extra_data['data']->questions[$this->_data->ID()] : $this->_data->question(); |
|
71 | + if ( ! $question instanceof EE_Question) { |
|
72 | 72 | return ''; // get out cause we can't figure out what the question type is! |
73 | 73 | } |
74 | 74 |
@@ -19,85 +19,85 @@ |
||
19 | 19 | { |
20 | 20 | |
21 | 21 | |
22 | - /** |
|
23 | - * _init_props |
|
24 | - * |
|
25 | - * @access protected |
|
26 | - * @return void |
|
27 | - */ |
|
28 | - protected function _init_props() |
|
29 | - { |
|
30 | - $this->label = esc_html__('Attendee Shortcodes', 'event_espresso'); |
|
31 | - $this->description = esc_html__('All shortcodes specific to attendee related data', 'event_espresso'); |
|
32 | - $this->_shortcodes = array( |
|
33 | - '[QUESTION]' => esc_html__('Will parse to a question.', 'event_espresso'), |
|
34 | - '[ANSWER]' => esc_html__('Will parse to the answer for a question', 'event_espresso'), |
|
35 | - ); |
|
36 | - } |
|
22 | + /** |
|
23 | + * _init_props |
|
24 | + * |
|
25 | + * @access protected |
|
26 | + * @return void |
|
27 | + */ |
|
28 | + protected function _init_props() |
|
29 | + { |
|
30 | + $this->label = esc_html__('Attendee Shortcodes', 'event_espresso'); |
|
31 | + $this->description = esc_html__('All shortcodes specific to attendee related data', 'event_espresso'); |
|
32 | + $this->_shortcodes = array( |
|
33 | + '[QUESTION]' => esc_html__('Will parse to a question.', 'event_espresso'), |
|
34 | + '[ANSWER]' => esc_html__('Will parse to the answer for a question', 'event_espresso'), |
|
35 | + ); |
|
36 | + } |
|
37 | 37 | |
38 | 38 | |
39 | - /** |
|
40 | - * This method will give parsing instructions for each shortcode defined in the _shortcodes array. Child methods |
|
41 | - * will have to take care of handling. |
|
42 | - * |
|
43 | - * @access protected |
|
44 | - * |
|
45 | - * @param string $shortcode the shortcode to be parsed. |
|
46 | - * |
|
47 | - * @return string parsed shortcode |
|
48 | - */ |
|
49 | - protected function _parser($shortcode) |
|
50 | - { |
|
39 | + /** |
|
40 | + * This method will give parsing instructions for each shortcode defined in the _shortcodes array. Child methods |
|
41 | + * will have to take care of handling. |
|
42 | + * |
|
43 | + * @access protected |
|
44 | + * |
|
45 | + * @param string $shortcode the shortcode to be parsed. |
|
46 | + * |
|
47 | + * @return string parsed shortcode |
|
48 | + */ |
|
49 | + protected function _parser($shortcode) |
|
50 | + { |
|
51 | 51 | |
52 | - if (! $this->_data instanceof EE_Answer || ! isset($this->_extra_data['data']) || ! $this->_extra_data['data'] instanceof EE_Messages_Addressee) { |
|
53 | - return ''; |
|
54 | - } |
|
52 | + if (! $this->_data instanceof EE_Answer || ! isset($this->_extra_data['data']) || ! $this->_extra_data['data'] instanceof EE_Messages_Addressee) { |
|
53 | + return ''; |
|
54 | + } |
|
55 | 55 | |
56 | - switch ($shortcode) { |
|
57 | - case '[QUESTION]': |
|
58 | - $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
59 | - ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
60 | - if (! $question instanceof EE_Question) { |
|
61 | - return ''; // get out because we can't figure out what the question is. |
|
62 | - } |
|
56 | + switch ($shortcode) { |
|
57 | + case '[QUESTION]': |
|
58 | + $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
59 | + ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
60 | + if (! $question instanceof EE_Question) { |
|
61 | + return ''; // get out because we can't figure out what the question is. |
|
62 | + } |
|
63 | 63 | |
64 | - return $question->get('QST_display_text'); |
|
65 | - break; |
|
64 | + return $question->get('QST_display_text'); |
|
65 | + break; |
|
66 | 66 | |
67 | - case '[ANSWER]': |
|
68 | - // need to get the question to determine the type of question (some questions require translation of the answer). |
|
69 | - $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
70 | - ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
71 | - if (! $question instanceof EE_Question) { |
|
72 | - return ''; // get out cause we can't figure out what the question type is! |
|
73 | - } |
|
67 | + case '[ANSWER]': |
|
68 | + // need to get the question to determine the type of question (some questions require translation of the answer). |
|
69 | + $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
70 | + ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
71 | + if (! $question instanceof EE_Question) { |
|
72 | + return ''; // get out cause we can't figure out what the question type is! |
|
73 | + } |
|
74 | 74 | |
75 | - // what we show for the answer depends on the question type! |
|
76 | - switch ($question->get('QST_type')) { |
|
77 | - case 'STATE': |
|
78 | - $state = EEM_State::instance()->get_one_by_ID($this->_data->get('ANS_value')); |
|
79 | - $answer = $state instanceof EE_State ? $state->name() : ''; |
|
80 | - break; |
|
75 | + // what we show for the answer depends on the question type! |
|
76 | + switch ($question->get('QST_type')) { |
|
77 | + case 'STATE': |
|
78 | + $state = EEM_State::instance()->get_one_by_ID($this->_data->get('ANS_value')); |
|
79 | + $answer = $state instanceof EE_State ? $state->name() : ''; |
|
80 | + break; |
|
81 | 81 | |
82 | - case 'COUNTRY': |
|
83 | - $country = EEM_Country::instance()->get_one_by_ID($this->_data->get('ANS_value')); |
|
84 | - $answer = $country instanceof EE_Country ? $country->name() : ''; |
|
85 | - break; |
|
82 | + case 'COUNTRY': |
|
83 | + $country = EEM_Country::instance()->get_one_by_ID($this->_data->get('ANS_value')); |
|
84 | + $answer = $country instanceof EE_Country ? $country->name() : ''; |
|
85 | + break; |
|
86 | 86 | |
87 | - default: |
|
88 | - $answer = $this->_data->get_pretty('ANS_value', 'no_wpautop'); |
|
89 | - break; |
|
90 | - } |
|
87 | + default: |
|
88 | + $answer = $this->_data->get_pretty('ANS_value', 'no_wpautop'); |
|
89 | + break; |
|
90 | + } |
|
91 | 91 | |
92 | - return apply_filters( |
|
93 | - 'FHEE__EE_Question_Shortcodes___parser__answer', |
|
94 | - $answer, |
|
95 | - $question, |
|
96 | - $this->_data |
|
97 | - ); |
|
98 | - break; |
|
99 | - } |
|
92 | + return apply_filters( |
|
93 | + 'FHEE__EE_Question_Shortcodes___parser__answer', |
|
94 | + $answer, |
|
95 | + $question, |
|
96 | + $this->_data |
|
97 | + ); |
|
98 | + break; |
|
99 | + } |
|
100 | 100 | |
101 | - return ''; |
|
102 | - } |
|
101 | + return ''; |
|
102 | + } |
|
103 | 103 | } |
@@ -14,93 +14,93 @@ |
||
14 | 14 | class EE_Newsletter_Shortcodes extends EE_Shortcodes |
15 | 15 | { |
16 | 16 | |
17 | - protected function _init_props() |
|
18 | - { |
|
19 | - $this->label = __("Batch Messages Shortcodes", 'event_espresso'); |
|
20 | - $this->description = __('All shortcodes used for the batch message type', 'event_espresso'); |
|
21 | - $this->_shortcodes = array( |
|
22 | - '[NEWSLETTER_CONTENT]' => __( |
|
23 | - 'This will parse to whatever is found in the related [newsletter_content] field. Note that when triggering a batch message, whatever is added for the custom message will be inserted where this shortcode is placed.', |
|
24 | - 'event_espresso' |
|
25 | - ), |
|
26 | - ); |
|
27 | - } |
|
17 | + protected function _init_props() |
|
18 | + { |
|
19 | + $this->label = __("Batch Messages Shortcodes", 'event_espresso'); |
|
20 | + $this->description = __('All shortcodes used for the batch message type', 'event_espresso'); |
|
21 | + $this->_shortcodes = array( |
|
22 | + '[NEWSLETTER_CONTENT]' => __( |
|
23 | + 'This will parse to whatever is found in the related [newsletter_content] field. Note that when triggering a batch message, whatever is added for the custom message will be inserted where this shortcode is placed.', |
|
24 | + 'event_espresso' |
|
25 | + ), |
|
26 | + ); |
|
27 | + } |
|
28 | 28 | |
29 | 29 | |
30 | - protected function _parser($shortcode) |
|
31 | - { |
|
32 | - if ($shortcode == '[NEWSLETTER_CONTENT]') { |
|
33 | - $this->_validate_list_requirements(); |
|
34 | - $valid_shortcodes = array('recipient_details', 'organization'); |
|
35 | - $template = $this->_data['template']['newsletter_content']; |
|
36 | - $data = $this->_data; |
|
37 | - return $this->_shortcode_helper->parse_message_template( |
|
38 | - $template, |
|
39 | - $data['data'], |
|
40 | - $valid_shortcodes, |
|
41 | - $this->_message_type, |
|
42 | - $this->_messenger, |
|
43 | - $this->_message |
|
44 | - ); |
|
45 | - } |
|
46 | - } |
|
30 | + protected function _parser($shortcode) |
|
31 | + { |
|
32 | + if ($shortcode == '[NEWSLETTER_CONTENT]') { |
|
33 | + $this->_validate_list_requirements(); |
|
34 | + $valid_shortcodes = array('recipient_details', 'organization'); |
|
35 | + $template = $this->_data['template']['newsletter_content']; |
|
36 | + $data = $this->_data; |
|
37 | + return $this->_shortcode_helper->parse_message_template( |
|
38 | + $template, |
|
39 | + $data['data'], |
|
40 | + $valid_shortcodes, |
|
41 | + $this->_message_type, |
|
42 | + $this->_messenger, |
|
43 | + $this->_message |
|
44 | + ); |
|
45 | + } |
|
46 | + } |
|
47 | 47 | |
48 | 48 | |
49 | - /** |
|
50 | - * Callback set in args for EE_Register_Messages_Shortcode_Library::register for 'msgr_validator_callback'. |
|
51 | - * |
|
52 | - * EE_Register_Messages_Shortcode_Library::register registers this callback with the |
|
53 | - * 'FHEE__EE_messenger__get_validator_config' filter. |
|
54 | - * |
|
55 | - * @since 4.3.0 |
|
56 | - * @param array $validator_config current validator configuration array |
|
57 | - * @param EE_messenger $messenger |
|
58 | - * @return array new validator config. |
|
59 | - */ |
|
60 | - public static function messenger_validator_config($validator_config, EE_messenger $messenger) |
|
61 | - { |
|
62 | - if ($messenger->name !== 'email') { |
|
63 | - return $validator_config; |
|
64 | - } |
|
49 | + /** |
|
50 | + * Callback set in args for EE_Register_Messages_Shortcode_Library::register for 'msgr_validator_callback'. |
|
51 | + * |
|
52 | + * EE_Register_Messages_Shortcode_Library::register registers this callback with the |
|
53 | + * 'FHEE__EE_messenger__get_validator_config' filter. |
|
54 | + * |
|
55 | + * @since 4.3.0 |
|
56 | + * @param array $validator_config current validator configuration array |
|
57 | + * @param EE_messenger $messenger |
|
58 | + * @return array new validator config. |
|
59 | + */ |
|
60 | + public static function messenger_validator_config($validator_config, EE_messenger $messenger) |
|
61 | + { |
|
62 | + if ($messenger->name !== 'email') { |
|
63 | + return $validator_config; |
|
64 | + } |
|
65 | 65 | |
66 | - $validator_config['content']['shortcodes'][] = 'newsletter'; |
|
67 | - $validator_config['newsletter_content'] = array( |
|
68 | - 'shortcodes' => array('recipient_details', 'organization'), |
|
69 | - 'required' => array('[NEWSLETTER_CONTENT]'), |
|
70 | - ); |
|
71 | - return $validator_config; |
|
72 | - } |
|
66 | + $validator_config['content']['shortcodes'][] = 'newsletter'; |
|
67 | + $validator_config['newsletter_content'] = array( |
|
68 | + 'shortcodes' => array('recipient_details', 'organization'), |
|
69 | + 'required' => array('[NEWSLETTER_CONTENT]'), |
|
70 | + ); |
|
71 | + return $validator_config; |
|
72 | + } |
|
73 | 73 | |
74 | 74 | |
75 | - /** |
|
76 | - * Callback set in args for EE_Register_Messages_Shortcode_Library::register for |
|
77 | - * 'msgr_template_fields_callback'. |
|
78 | - * |
|
79 | - * EE_Register_Messages_Shortcode_Library::register registers this callback with the |
|
80 | - * FHEE__EE_messenger__get_template_fields filter. |
|
81 | - * |
|
82 | - * @since 4.3.0 |
|
83 | - * |
|
84 | - * @param array $template_fields current template fields setup array. |
|
85 | - * @param EE_messenger $messenger |
|
86 | - * @return array new/modified template fields array. |
|
87 | - */ |
|
88 | - public static function messenger_template_fields($template_fields, EE_messenger $messenger) |
|
89 | - { |
|
90 | - if ($messenger->name !== 'email') { |
|
91 | - return $template_fields; |
|
92 | - } |
|
75 | + /** |
|
76 | + * Callback set in args for EE_Register_Messages_Shortcode_Library::register for |
|
77 | + * 'msgr_template_fields_callback'. |
|
78 | + * |
|
79 | + * EE_Register_Messages_Shortcode_Library::register registers this callback with the |
|
80 | + * FHEE__EE_messenger__get_template_fields filter. |
|
81 | + * |
|
82 | + * @since 4.3.0 |
|
83 | + * |
|
84 | + * @param array $template_fields current template fields setup array. |
|
85 | + * @param EE_messenger $messenger |
|
86 | + * @return array new/modified template fields array. |
|
87 | + */ |
|
88 | + public static function messenger_template_fields($template_fields, EE_messenger $messenger) |
|
89 | + { |
|
90 | + if ($messenger->name !== 'email') { |
|
91 | + return $template_fields; |
|
92 | + } |
|
93 | 93 | |
94 | - $template_fields['extra']['content']['newsletter_content'] = array( |
|
95 | - 'input' => 'wp_editor', |
|
96 | - 'label' => '[NEWSLETTER_CONTENT]', |
|
97 | - 'type' => 'string', |
|
98 | - 'required' => true, |
|
99 | - 'validation' => true, |
|
100 | - 'format' => '%s', |
|
101 | - 'rows' => '15', |
|
102 | - 'shortcodes_required' => array('[NEWSLETTER_CONTENT]'), |
|
103 | - ); |
|
104 | - return $template_fields; |
|
105 | - } |
|
94 | + $template_fields['extra']['content']['newsletter_content'] = array( |
|
95 | + 'input' => 'wp_editor', |
|
96 | + 'label' => '[NEWSLETTER_CONTENT]', |
|
97 | + 'type' => 'string', |
|
98 | + 'required' => true, |
|
99 | + 'validation' => true, |
|
100 | + 'format' => '%s', |
|
101 | + 'rows' => '15', |
|
102 | + 'shortcodes_required' => array('[NEWSLETTER_CONTENT]'), |
|
103 | + ); |
|
104 | + return $template_fields; |
|
105 | + } |
|
106 | 106 | } |
@@ -83,12 +83,12 @@ |
||
83 | 83 | $template = empty($template) && isset($this->_extra_data['template']['question_list']) |
84 | 84 | ? $this->_extra_data['template']['question_list'] : $template; |
85 | 85 | $ans_result = ''; |
86 | - $answers = ! empty($this->_extra_data['data']->registrations[ $reg_obj->ID() ]['ans_objs']) |
|
87 | - ? $this->_extra_data['data']->registrations[ $reg_obj->ID() ]['ans_objs'] : array(); |
|
86 | + $answers = ! empty($this->_extra_data['data']->registrations[$reg_obj->ID()]['ans_objs']) |
|
87 | + ? $this->_extra_data['data']->registrations[$reg_obj->ID()]['ans_objs'] : array(); |
|
88 | 88 | $questions = ! empty($this->_extra_data['data']->questions) ? $this->_extra_data['data']->questions : array(); |
89 | 89 | foreach ($answers as $answer) { |
90 | 90 | // first see if the question is in our $questions array. If not then try to get from answer object |
91 | - $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
91 | + $question = isset($questions[$answer->ID()]) ? $questions[$answer->ID()] : null; |
|
92 | 92 | $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
93 | 93 | if ($question instanceof EE_Question and $question->admin_only()) { |
94 | 94 | continue; |
@@ -16,96 +16,96 @@ |
||
16 | 16 | class EE_Question_List_Shortcodes extends EE_Shortcodes |
17 | 17 | { |
18 | 18 | |
19 | - protected function _init_props() |
|
20 | - { |
|
21 | - $this->label = __('Questions and Answers Shortcodes', 'event_espresso'); |
|
22 | - $this->description = __('All shortcodes related to custom questions and answers', 'event_espresso'); |
|
23 | - $this->_shortcodes = array( |
|
24 | - '[QUESTION_LIST]' => __( |
|
25 | - 'This is used to indicate where you want the list of questions and answers to show for the registrant. You place this within the "[attendee_list]" field.', |
|
26 | - 'event_espresso' |
|
27 | - ), |
|
28 | - ); |
|
29 | - } |
|
19 | + protected function _init_props() |
|
20 | + { |
|
21 | + $this->label = __('Questions and Answers Shortcodes', 'event_espresso'); |
|
22 | + $this->description = __('All shortcodes related to custom questions and answers', 'event_espresso'); |
|
23 | + $this->_shortcodes = array( |
|
24 | + '[QUESTION_LIST]' => __( |
|
25 | + 'This is used to indicate where you want the list of questions and answers to show for the registrant. You place this within the "[attendee_list]" field.', |
|
26 | + 'event_espresso' |
|
27 | + ), |
|
28 | + ); |
|
29 | + } |
|
30 | 30 | |
31 | 31 | |
32 | - /** |
|
33 | - * @param string $shortcode |
|
34 | - * @return string |
|
35 | - * @throws EE_Error |
|
36 | - * @throws ReflectionException |
|
37 | - */ |
|
38 | - protected function _parser($shortcode) |
|
39 | - { |
|
40 | - switch ($shortcode) { |
|
41 | - case '[QUESTION_LIST]': |
|
42 | - return $this->_get_question_list(); |
|
43 | - break; |
|
44 | - } |
|
32 | + /** |
|
33 | + * @param string $shortcode |
|
34 | + * @return string |
|
35 | + * @throws EE_Error |
|
36 | + * @throws ReflectionException |
|
37 | + */ |
|
38 | + protected function _parser($shortcode) |
|
39 | + { |
|
40 | + switch ($shortcode) { |
|
41 | + case '[QUESTION_LIST]': |
|
42 | + return $this->_get_question_list(); |
|
43 | + break; |
|
44 | + } |
|
45 | 45 | |
46 | - return ''; |
|
47 | - } |
|
46 | + return ''; |
|
47 | + } |
|
48 | 48 | |
49 | 49 | |
50 | - /** |
|
51 | - * @return string |
|
52 | - * @throws EE_Error |
|
53 | - * @throws ReflectionException |
|
54 | - */ |
|
55 | - protected function _get_question_list() |
|
56 | - { |
|
57 | - $this->_validate_list_requirements(); |
|
50 | + /** |
|
51 | + * @return string |
|
52 | + * @throws EE_Error |
|
53 | + * @throws ReflectionException |
|
54 | + */ |
|
55 | + protected function _get_question_list() |
|
56 | + { |
|
57 | + $this->_validate_list_requirements(); |
|
58 | 58 | |
59 | - if ($this->_data['data'] instanceof EE_Registration) { |
|
60 | - // for when [QUESTION_LIST] is used in the [attendee_list] field. |
|
61 | - return $this->_get_question_answer_list_for_attendee(); |
|
62 | - } elseif ( |
|
63 | - $this->_data['data'] instanceof EE_Messages_Addressee |
|
64 | - && $this->_data['data']->reg_obj instanceof EE_Registration |
|
65 | - ) { |
|
66 | - // for when [QUESTION_LIST] is used in the main content field. |
|
67 | - return $this->_get_question_answer_list_for_attendee($this->_data['data']->reg_obj); |
|
68 | - } |
|
69 | - return ''; |
|
70 | - } |
|
59 | + if ($this->_data['data'] instanceof EE_Registration) { |
|
60 | + // for when [QUESTION_LIST] is used in the [attendee_list] field. |
|
61 | + return $this->_get_question_answer_list_for_attendee(); |
|
62 | + } elseif ( |
|
63 | + $this->_data['data'] instanceof EE_Messages_Addressee |
|
64 | + && $this->_data['data']->reg_obj instanceof EE_Registration |
|
65 | + ) { |
|
66 | + // for when [QUESTION_LIST] is used in the main content field. |
|
67 | + return $this->_get_question_answer_list_for_attendee($this->_data['data']->reg_obj); |
|
68 | + } |
|
69 | + return ''; |
|
70 | + } |
|
71 | 71 | |
72 | 72 | |
73 | - /** |
|
74 | - * Note when we parse the "[question_list]" shortcode for attendees we're actually going to retrieve the list of |
|
75 | - * answers for that attendee since that is what we really need (we can derive the questions from the answers); |
|
76 | - * |
|
77 | - * @param null $reg_obj |
|
78 | - * @return string parsed template. |
|
79 | - * @throws EE_Error |
|
80 | - * @throws ReflectionException |
|
81 | - */ |
|
82 | - private function _get_question_answer_list_for_attendee($reg_obj = null) |
|
83 | - { |
|
84 | - $valid_shortcodes = array('question'); |
|
85 | - $reg_obj = $reg_obj instanceof EE_Registration ? $reg_obj : $this->_data['data']; |
|
86 | - $template = is_array($this->_data['template']) && isset($this->_data['template']['question_list']) |
|
87 | - ? $this->_data['template']['question_list'] : ''; |
|
88 | - $template = empty($template) && isset($this->_extra_data['template']['question_list']) |
|
89 | - ? $this->_extra_data['template']['question_list'] : $template; |
|
90 | - $ans_result = ''; |
|
91 | - $answers = ! empty($this->_extra_data['data']->registrations[ $reg_obj->ID() ]['ans_objs']) |
|
92 | - ? $this->_extra_data['data']->registrations[ $reg_obj->ID() ]['ans_objs'] : array(); |
|
93 | - $questions = ! empty($this->_extra_data['data']->questions) ? $this->_extra_data['data']->questions : array(); |
|
94 | - foreach ($answers as $answer) { |
|
95 | - // first see if the question is in our $questions array. If not then try to get from answer object |
|
96 | - $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
97 | - $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
|
98 | - if ($question instanceof EE_Question and $question->admin_only()) { |
|
99 | - continue; |
|
100 | - } |
|
101 | - $ans_result .= $this->_shortcode_helper->parse_question_list_template( |
|
102 | - $template, |
|
103 | - $answer, |
|
104 | - $valid_shortcodes, |
|
105 | - $this->_extra_data |
|
106 | - ); |
|
107 | - } |
|
73 | + /** |
|
74 | + * Note when we parse the "[question_list]" shortcode for attendees we're actually going to retrieve the list of |
|
75 | + * answers for that attendee since that is what we really need (we can derive the questions from the answers); |
|
76 | + * |
|
77 | + * @param null $reg_obj |
|
78 | + * @return string parsed template. |
|
79 | + * @throws EE_Error |
|
80 | + * @throws ReflectionException |
|
81 | + */ |
|
82 | + private function _get_question_answer_list_for_attendee($reg_obj = null) |
|
83 | + { |
|
84 | + $valid_shortcodes = array('question'); |
|
85 | + $reg_obj = $reg_obj instanceof EE_Registration ? $reg_obj : $this->_data['data']; |
|
86 | + $template = is_array($this->_data['template']) && isset($this->_data['template']['question_list']) |
|
87 | + ? $this->_data['template']['question_list'] : ''; |
|
88 | + $template = empty($template) && isset($this->_extra_data['template']['question_list']) |
|
89 | + ? $this->_extra_data['template']['question_list'] : $template; |
|
90 | + $ans_result = ''; |
|
91 | + $answers = ! empty($this->_extra_data['data']->registrations[ $reg_obj->ID() ]['ans_objs']) |
|
92 | + ? $this->_extra_data['data']->registrations[ $reg_obj->ID() ]['ans_objs'] : array(); |
|
93 | + $questions = ! empty($this->_extra_data['data']->questions) ? $this->_extra_data['data']->questions : array(); |
|
94 | + foreach ($answers as $answer) { |
|
95 | + // first see if the question is in our $questions array. If not then try to get from answer object |
|
96 | + $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null; |
|
97 | + $question = ! $question instanceof EE_Question ? $answer->question() : $question; |
|
98 | + if ($question instanceof EE_Question and $question->admin_only()) { |
|
99 | + continue; |
|
100 | + } |
|
101 | + $ans_result .= $this->_shortcode_helper->parse_question_list_template( |
|
102 | + $template, |
|
103 | + $answer, |
|
104 | + $valid_shortcodes, |
|
105 | + $this->_extra_data |
|
106 | + ); |
|
107 | + } |
|
108 | 108 | |
109 | - return $ans_result; |
|
110 | - } |
|
109 | + return $ans_result; |
|
110 | + } |
|
111 | 111 | } |
@@ -50,7 +50,7 @@ |
||
50 | 50 | </label> |
51 | 51 | </th> |
52 | 52 | <td> |
53 | - <p><?php echo site_url() . '/ ' |
|
53 | + <p><?php echo site_url().'/ ' |
|
54 | 54 | . EEH_Form_Fields::text( |
55 | 55 | 'not_used', |
56 | 56 | EE_Registry::instance()->CFG->core->event_cpt_slug, |
@@ -2,18 +2,18 @@ discard block |
||
2 | 2 | add_filter('FHEE__EEH_Form_Fields__label_html', '__return_empty_string'); |
3 | 3 | |
4 | 4 | $values = EEH_Form_Fields::prep_answer_options( |
5 | - array( |
|
6 | - array('id' => 1, 'text' => __('Yes', 'event_espresso')), |
|
7 | - array('id' => 0, 'text' => __('No', 'event_espresso')), |
|
8 | - ) |
|
5 | + array( |
|
6 | + array('id' => 1, 'text' => __('Yes', 'event_espresso')), |
|
7 | + array('id' => 0, 'text' => __('No', 'event_espresso')), |
|
8 | + ) |
|
9 | 9 | ); |
10 | 10 | |
11 | 11 | $description = EEH_Form_Fields::prep_answer_options( |
12 | - array( |
|
13 | - array('id' => 0, 'text' => __('none', 'event_espresso')), |
|
14 | - array('id' => 1, 'text' => __('excerpt (short desc)', 'event_espresso')), |
|
15 | - array('id' => 2, 'text' => __('full description', 'event_espresso')), |
|
16 | - ) |
|
12 | + array( |
|
13 | + array('id' => 0, 'text' => __('none', 'event_espresso')), |
|
14 | + array('id' => 1, 'text' => __('excerpt (short desc)', 'event_espresso')), |
|
15 | + array('id' => 2, 'text' => __('full description', 'event_espresso')), |
|
16 | + ) |
|
17 | 17 | ); |
18 | 18 | |
19 | 19 | ?> |
@@ -32,14 +32,14 @@ discard block |
||
32 | 32 | <th> |
33 | 33 | <label for="event_listings_url"> |
34 | 34 | <?php _e('Event Listings URL', 'event_espresso'); ?><?php echo EEH_Template::get_help_tab_link( |
35 | - 'event_listings_url_info' |
|
36 | - ); ?> |
|
35 | + 'event_listings_url_info' |
|
36 | + ); ?> |
|
37 | 37 | </label> |
38 | 38 | </th> |
39 | 39 | <td> |
40 | 40 | <a id="event_listings_url" class="ee-admin-settings-hdr-lnk small-text" |
41 | 41 | href="<?php echo EEH_Event_View::event_archive_url(); ?>"><?php |
42 | - echo EEH_Event_View::event_archive_url(); ?></a> |
|
42 | + echo EEH_Event_View::event_archive_url(); ?></a> |
|
43 | 43 | </td> |
44 | 44 | </tr> |
45 | 45 | |
@@ -51,30 +51,30 @@ discard block |
||
51 | 51 | </th> |
52 | 52 | <td> |
53 | 53 | <p><?php echo site_url() . '/ ' |
54 | - . EEH_Form_Fields::text( |
|
55 | - 'not_used', |
|
56 | - EE_Registry::instance()->CFG->core->event_cpt_slug, |
|
57 | - 'event_cpt_slug', |
|
58 | - 'event_cpt_slug', |
|
59 | - 'regular' |
|
60 | - ); ?></p> |
|
54 | + . EEH_Form_Fields::text( |
|
55 | + 'not_used', |
|
56 | + EE_Registry::instance()->CFG->core->event_cpt_slug, |
|
57 | + 'event_cpt_slug', |
|
58 | + 'event_cpt_slug', |
|
59 | + 'regular' |
|
60 | + ); ?></p> |
|
61 | 61 | <p class="description"><?php |
62 | - _e( |
|
63 | - 'This allows you to configure what slug is used for the url of all event pages.', |
|
64 | - 'event_espresso' |
|
65 | - ); ?></p> |
|
62 | + _e( |
|
63 | + 'This allows you to configure what slug is used for the url of all event pages.', |
|
64 | + 'event_espresso' |
|
65 | + ); ?></p> |
|
66 | 66 | <?php if (has_filter('FHEE__EE_Register_CPTs__register_CPT__rewrite')) : ?> |
67 | 67 | <p class="important-notice"> |
68 | 68 | <?php |
69 | - sprintf( |
|
70 | - __( |
|
71 | - 'Usage of the %1$s FHEE__EE_Register_CPTs__register_CPT__rewrite %2$s filter has been detected. Please be aware that while this filter is being used, this setting has no affect.', |
|
72 | - 'event_espresso' |
|
73 | - ), |
|
74 | - '<code>', |
|
75 | - '</code>' |
|
76 | - ); |
|
77 | - ?> |
|
69 | + sprintf( |
|
70 | + __( |
|
71 | + 'Usage of the %1$s FHEE__EE_Register_CPTs__register_CPT__rewrite %2$s filter has been detected. Please be aware that while this filter is being used, this setting has no affect.', |
|
72 | + 'event_espresso' |
|
73 | + ), |
|
74 | + '<code>', |
|
75 | + '</code>' |
|
76 | + ); |
|
77 | + ?> |
|
78 | 78 | </p> |
79 | 79 | <?php endif; ?> |
80 | 80 | </td> |
@@ -88,17 +88,17 @@ discard block |
||
88 | 88 | </th> |
89 | 89 | <td> |
90 | 90 | <?php echo EEH_Form_Fields::select( |
91 | - 'display_status_banner', |
|
92 | - $display_status_banner, |
|
93 | - $values, |
|
94 | - 'EED_Events_Archive_display_status_banner', |
|
95 | - 'EED_Events_Archive_display_status_banner' |
|
96 | - ); ?> |
|
91 | + 'display_status_banner', |
|
92 | + $display_status_banner, |
|
93 | + $values, |
|
94 | + 'EED_Events_Archive_display_status_banner', |
|
95 | + 'EED_Events_Archive_display_status_banner' |
|
96 | + ); ?> |
|
97 | 97 | <p class="description"><?php |
98 | - _e( |
|
99 | - 'Selecting "Yes" will inject an Event Status banner with the title whenever Events are displaying on the events archive page.', |
|
100 | - 'event_espresso' |
|
101 | - ); ?></p> |
|
98 | + _e( |
|
99 | + 'Selecting "Yes" will inject an Event Status banner with the title whenever Events are displaying on the events archive page.', |
|
100 | + 'event_espresso' |
|
101 | + ); ?></p> |
|
102 | 102 | </td> |
103 | 103 | </tr> |
104 | 104 | |
@@ -106,18 +106,18 @@ discard block |
||
106 | 106 | <th> |
107 | 107 | <label for="EED_Events_Archive_display_description"> |
108 | 108 | <?php _e('Display Description', 'event_espresso'); ?><?php echo EEH_Template::get_help_tab_link( |
109 | - 'display_description_info' |
|
110 | - ); ?> |
|
109 | + 'display_description_info' |
|
110 | + ); ?> |
|
111 | 111 | </label> |
112 | 112 | </th> |
113 | 113 | <td> |
114 | 114 | <?php echo EEH_Form_Fields::select( |
115 | - 'description', |
|
116 | - $display_description, |
|
117 | - $description, |
|
118 | - 'EED_Events_Archive_display_description', |
|
119 | - 'EED_Events_Archive_display_description' |
|
120 | - ); ?> |
|
115 | + 'description', |
|
116 | + $display_description, |
|
117 | + $description, |
|
118 | + 'EED_Events_Archive_display_description', |
|
119 | + 'EED_Events_Archive_display_description' |
|
120 | + ); ?> |
|
121 | 121 | </td> |
122 | 122 | </tr> |
123 | 123 | |
@@ -125,18 +125,18 @@ discard block |
||
125 | 125 | <th> |
126 | 126 | <label for="EED_Events_Archive_display_ticket_selector"> |
127 | 127 | <?php _e('Display Ticket Selector', 'event_espresso'); ?><?php echo EEH_Template::get_help_tab_link( |
128 | - 'display_ticket_selector_info' |
|
129 | - ); ?> |
|
128 | + 'display_ticket_selector_info' |
|
129 | + ); ?> |
|
130 | 130 | </label> |
131 | 131 | </th> |
132 | 132 | <td> |
133 | 133 | <?php echo EEH_Form_Fields::select( |
134 | - 'ticket_selector', |
|
135 | - $display_ticket_selector, |
|
136 | - $values, |
|
137 | - 'EED_Events_Archive_display_ticket_selector', |
|
138 | - 'EED_Events_Archive_display_ticket_selector' |
|
139 | - ); ?> |
|
134 | + 'ticket_selector', |
|
135 | + $display_ticket_selector, |
|
136 | + $values, |
|
137 | + 'EED_Events_Archive_display_ticket_selector', |
|
138 | + 'EED_Events_Archive_display_ticket_selector' |
|
139 | + ); ?> |
|
140 | 140 | </td> |
141 | 141 | </tr> |
142 | 142 | |
@@ -144,18 +144,18 @@ discard block |
||
144 | 144 | <th> |
145 | 145 | <label for="EED_Events_Archive_display_datetimes"> |
146 | 146 | <?php _e('Display Datetimes', 'event_espresso'); ?><?php echo EEH_Template::get_help_tab_link( |
147 | - 'display_datetimes_info' |
|
148 | - ); ?> |
|
147 | + 'display_datetimes_info' |
|
148 | + ); ?> |
|
149 | 149 | </label> |
150 | 150 | </th> |
151 | 151 | <td> |
152 | 152 | <?php echo EEH_Form_Fields::select( |
153 | - 'venue_details', |
|
154 | - $display_datetimes, |
|
155 | - $values, |
|
156 | - 'EED_Events_Archive_display_datetimes', |
|
157 | - 'EED_Events_Archive_display_datetimes' |
|
158 | - ); ?> |
|
153 | + 'venue_details', |
|
154 | + $display_datetimes, |
|
155 | + $values, |
|
156 | + 'EED_Events_Archive_display_datetimes', |
|
157 | + 'EED_Events_Archive_display_datetimes' |
|
158 | + ); ?> |
|
159 | 159 | </td> |
160 | 160 | </tr> |
161 | 161 | |
@@ -163,18 +163,18 @@ discard block |
||
163 | 163 | <th> |
164 | 164 | <label for="EED_Events_Archive_display_venue"> |
165 | 165 | <?php _e('Display Venue Details', 'event_espresso'); ?><?php echo EEH_Template::get_help_tab_link( |
166 | - 'display_venue_details_info' |
|
167 | - ); ?> |
|
166 | + 'display_venue_details_info' |
|
167 | + ); ?> |
|
168 | 168 | </label> |
169 | 169 | </th> |
170 | 170 | <td> |
171 | 171 | <?php echo EEH_Form_Fields::select( |
172 | - 'display_venue', |
|
173 | - $display_venue, |
|
174 | - $values, |
|
175 | - 'EED_Events_Archive_display_venue', |
|
176 | - 'EED_Events_Archive_display_venue' |
|
177 | - ); ?> |
|
172 | + 'display_venue', |
|
173 | + $display_venue, |
|
174 | + $values, |
|
175 | + 'EED_Events_Archive_display_venue', |
|
176 | + 'EED_Events_Archive_display_venue' |
|
177 | + ); ?> |
|
178 | 178 | </td> |
179 | 179 | </tr> |
180 | 180 | |
@@ -182,18 +182,18 @@ discard block |
||
182 | 182 | <th> |
183 | 183 | <label for="EED_Events_Archive_display_expired_events"> |
184 | 184 | <?php _e('Display Expired Events', 'event_espresso'); ?><?php echo EEH_Template::get_help_tab_link( |
185 | - 'display_expired_events_info' |
|
186 | - ); ?> |
|
185 | + 'display_expired_events_info' |
|
186 | + ); ?> |
|
187 | 187 | </label> |
188 | 188 | </th> |
189 | 189 | <td> |
190 | 190 | <?php echo EEH_Form_Fields::select( |
191 | - 'expired_events', |
|
192 | - $display_expired_events, |
|
193 | - $values, |
|
194 | - 'EED_Events_Archive_display_expired_events', |
|
195 | - 'EED_Events_Archive_display_expired_events' |
|
196 | - ); ?> |
|
191 | + 'expired_events', |
|
192 | + $display_expired_events, |
|
193 | + $values, |
|
194 | + 'EED_Events_Archive_display_expired_events', |
|
195 | + 'EED_Events_Archive_display_expired_events' |
|
196 | + ); ?> |
|
197 | 197 | </td> |
198 | 198 | </tr> |
199 | 199 | |
@@ -201,43 +201,43 @@ discard block |
||
201 | 201 | <th> |
202 | 202 | <label for="EED_Events_Archive_use_sortable_display_order"> |
203 | 203 | <?php _e( |
204 | - 'Use Custom Display Order?', |
|
205 | - 'event_espresso' |
|
206 | - ); ?><?php // echo EEH_Template::get_help_tab_link('use_sortable_display_order_info');?> |
|
204 | + 'Use Custom Display Order?', |
|
205 | + 'event_espresso' |
|
206 | + ); ?><?php // echo EEH_Template::get_help_tab_link('use_sortable_display_order_info');?> |
|
207 | 207 | </label> |
208 | 208 | </th> |
209 | 209 | <td> |
210 | 210 | <?php echo EEH_Form_Fields::select( |
211 | - 'use_sortable_display_order', |
|
212 | - $use_sortable_display_order, |
|
213 | - $values, |
|
214 | - 'EED_Events_Archive_use_sortable_display_order', |
|
215 | - 'EED_Events_Archive_use_sortable_display_order' |
|
216 | - ); ?> |
|
211 | + 'use_sortable_display_order', |
|
212 | + $use_sortable_display_order, |
|
213 | + $values, |
|
214 | + 'EED_Events_Archive_use_sortable_display_order', |
|
215 | + 'EED_Events_Archive_use_sortable_display_order' |
|
216 | + ); ?> |
|
217 | 217 | </td> |
218 | 218 | </tr> |
219 | 219 | |
220 | 220 | <tr> |
221 | 221 | <th> |
222 | 222 | <?php _e( |
223 | - 'Display Order', |
|
224 | - 'event_espresso' |
|
225 | - ); ?><?php // echo EEH_Template::get_help_tab_link( 'event_archive_order_info' ); ?> |
|
223 | + 'Display Order', |
|
224 | + 'event_espresso' |
|
225 | + ); ?><?php // echo EEH_Template::get_help_tab_link( 'event_archive_order_info' ); ?> |
|
226 | 226 | </th> |
227 | 227 | <td> |
228 | 228 | |
229 | 229 | <?php wp_nonce_field( |
230 | - 'espresso_update_event_archive_order', |
|
231 | - 'espresso_update_event_archive_order_nonce', |
|
232 | - false |
|
233 | - ); ?> |
|
230 | + 'espresso_update_event_archive_order', |
|
231 | + 'espresso_update_event_archive_order_nonce', |
|
232 | + false |
|
233 | + ); ?> |
|
234 | 234 | <?php echo $event_archive_display_order; ?> |
235 | 235 | |
236 | 236 | <p class="description"><?php |
237 | - _e( |
|
238 | - 'Drag and Drop the above to determine the display order of the Event Description, Date and Times, Ticket Selector, and Venue Information on the event archive page.', |
|
239 | - 'event_espresso' |
|
240 | - ); ?></p> |
|
237 | + _e( |
|
238 | + 'Drag and Drop the above to determine the display order of the Event Description, Date and Times, Ticket Selector, and Venue Information on the event archive page.', |
|
239 | + 'event_espresso' |
|
240 | + ); ?></p> |
|
241 | 241 | |
242 | 242 | </td> |
243 | 243 | </tr> |
@@ -250,12 +250,12 @@ discard block |
||
250 | 250 | </th> |
251 | 251 | <td> |
252 | 252 | <?php echo EEH_Form_Fields::select( |
253 | - 'reset_event_list_settings', |
|
254 | - 0, |
|
255 | - $values, |
|
256 | - 'EED_Events_Archive_reset_event_list_settings', |
|
257 | - 'EED_Events_Archive_reset_event_list_settings' |
|
258 | - ); ?> |
|
253 | + 'reset_event_list_settings', |
|
254 | + 0, |
|
255 | + $values, |
|
256 | + 'EED_Events_Archive_reset_event_list_settings', |
|
257 | + 'EED_Events_Archive_reset_event_list_settings' |
|
258 | + ); ?> |
|
259 | 259 | </td> |
260 | 260 | </tr> |
261 | 261 |
@@ -1,6 +1,6 @@ |
||
1 | 1 | <?php |
2 | 2 | if (! defined('EVENT_ESPRESSO_VERSION')) { |
3 | - exit('No direct script access allowed'); |
|
3 | + exit('No direct script access allowed'); |
|
4 | 4 | } |
5 | 5 | /** @type string $recaptcha_language */ |
6 | 6 | /** @type string $recaptcha_publickey */ |
@@ -1,5 +1,5 @@ |
||
1 | 1 | <?php |
2 | -if (! defined('EVENT_ESPRESSO_VERSION')) { |
|
2 | +if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
|
3 | 3 | exit('No direct script access allowed'); |
4 | 4 | } |
5 | 5 | /** @type string $recaptcha_language */ |
@@ -77,13 +77,13 @@ discard block |
||
77 | 77 | public function do_direct_payment($payment, $billing_info = null) |
78 | 78 | { |
79 | 79 | $transaction = $payment->transaction(); |
80 | - if (! $transaction instanceof EEI_Transaction) { |
|
80 | + if ( ! $transaction instanceof EEI_Transaction) { |
|
81 | 81 | throw new EE_Error( |
82 | 82 | esc_html__('No transaction for payment while paying with PayPal Pro.', 'event_espresso') |
83 | 83 | ); |
84 | 84 | } |
85 | 85 | $primary_registrant = $transaction->primary_registration(); |
86 | - if (! $primary_registrant instanceof EEI_Registration) { |
|
86 | + if ( ! $primary_registrant instanceof EEI_Registration) { |
|
87 | 87 | throw new EE_Error( |
88 | 88 | esc_html__( |
89 | 89 | 'No primary registration on transaction while paying with PayPal Pro.', |
@@ -92,7 +92,7 @@ discard block |
||
92 | 92 | ); |
93 | 93 | } |
94 | 94 | $attendee = $primary_registrant->attendee(); |
95 | - if (! $attendee instanceof EEI_Attendee) { |
|
95 | + if ( ! $attendee instanceof EEI_Attendee) { |
|
96 | 96 | throw new EE_Error( |
97 | 97 | esc_html__( |
98 | 98 | 'No attendee on primary registration while paying with PayPal Pro.', |
@@ -189,7 +189,7 @@ discard block |
||
189 | 189 | // Required. Credit card number. No spaces or punctuation. |
190 | 190 | 'acct' => $billing_info['credit_card'], |
191 | 191 | // Required. Credit card expiration date. Format is MMYYYY |
192 | - 'expdate' => $billing_info['exp_month'] . $billing_info['exp_year'], |
|
192 | + 'expdate' => $billing_info['exp_month'].$billing_info['exp_year'], |
|
193 | 193 | // Requirements determined by your PayPal account settings. Security digits for credit card. |
194 | 194 | 'cvv2' => $billing_info['cvv'], |
195 | 195 | ); |
@@ -241,7 +241,7 @@ discard block |
||
241 | 241 | $ShippingAddress = array( |
242 | 242 | 'shiptoname' => substr($use_registration_address_info |
243 | 243 | ? $attendee->full_name() |
244 | - : $billing_info['first_name'] . ' ' . $billing_info['last_name'], 0, 32), |
|
244 | + : $billing_info['first_name'].' '.$billing_info['last_name'], 0, 32), |
|
245 | 245 | 'shiptostreet' => substr($use_registration_address_info |
246 | 246 | ? $attendee->address() |
247 | 247 | : $billing_info['address'], 0, 100), |
@@ -270,7 +270,7 @@ discard block |
||
270 | 270 | 'currencycode' => $payment->currency_code(), |
271 | 271 | // Required if you include itemized cart details. (L_AMTn, etc.) |
272 | 272 | // Subtotal of items not including S&H, or tax. |
273 | - 'itemamt' => $gateway_formatter->formatCurrency($item_amount),// |
|
273 | + 'itemamt' => $gateway_formatter->formatCurrency($item_amount), // |
|
274 | 274 | // Total shipping costs for the order. If you specify shippingamt, you must also specify itemamt. |
275 | 275 | 'shippingamt' => '', |
276 | 276 | // Total handling costs for the order. If you specify handlingamt, you must also specify itemamt. |
@@ -283,10 +283,10 @@ discard block |
||
283 | 283 | // Free-form field for your own use. 256 char max. |
284 | 284 | 'custom' => $primary_registrant ? $primary_registrant->ID() : '', |
285 | 285 | // Your own invoice or tracking number |
286 | - 'invnum' => wp_generate_password(12, false),// $transaction->ID(), |
|
286 | + 'invnum' => wp_generate_password(12, false), // $transaction->ID(), |
|
287 | 287 | // URL for receiving Instant Payment Notifications. This overrides what your profile is set to use. |
288 | 288 | 'notifyurl' => '', |
289 | - 'buttonsource' => 'EventEspresso_SP',// EE will blow up if you change this |
|
289 | + 'buttonsource' => 'EventEspresso_SP', // EE will blow up if you change this |
|
290 | 290 | ); |
291 | 291 | // Wrap all data arrays into a single, "master" array which will be passed into the class function. |
292 | 292 | $PayPalRequestData = array( |
@@ -396,52 +396,52 @@ discard block |
||
396 | 396 | // DP Fields |
397 | 397 | $DPFields = isset($DataArray['DPFields']) ? $DataArray['DPFields'] : array(); |
398 | 398 | foreach ($DPFields as $DPFieldsVar => $DPFieldsVal) { |
399 | - $DPFieldsNVP .= '&' . strtoupper($DPFieldsVar) . '=' . urlencode($DPFieldsVal); |
|
399 | + $DPFieldsNVP .= '&'.strtoupper($DPFieldsVar).'='.urlencode($DPFieldsVal); |
|
400 | 400 | } |
401 | 401 | // CC Details Fields |
402 | 402 | $CCDetails = isset($DataArray['CCDetails']) ? $DataArray['CCDetails'] : array(); |
403 | 403 | foreach ($CCDetails as $CCDetailsVar => $CCDetailsVal) { |
404 | - $CCDetailsNVP .= '&' . strtoupper($CCDetailsVar) . '=' . urlencode($CCDetailsVal); |
|
404 | + $CCDetailsNVP .= '&'.strtoupper($CCDetailsVar).'='.urlencode($CCDetailsVal); |
|
405 | 405 | } |
406 | 406 | // PayerInfo Type Fields |
407 | 407 | $PayerInfo = isset($DataArray['PayerInfo']) ? $DataArray['PayerInfo'] : array(); |
408 | 408 | foreach ($PayerInfo as $PayerInfoVar => $PayerInfoVal) { |
409 | - $PayerInfoNVP .= '&' . strtoupper($PayerInfoVar) . '=' . urlencode($PayerInfoVal); |
|
409 | + $PayerInfoNVP .= '&'.strtoupper($PayerInfoVar).'='.urlencode($PayerInfoVal); |
|
410 | 410 | } |
411 | 411 | // Payer Name Fields |
412 | 412 | $PayerName = isset($DataArray['PayerName']) ? $DataArray['PayerName'] : array(); |
413 | 413 | foreach ($PayerName as $PayerNameVar => $PayerNameVal) { |
414 | - $PayerNameNVP .= '&' . strtoupper($PayerNameVar) . '=' . urlencode($PayerNameVal); |
|
414 | + $PayerNameNVP .= '&'.strtoupper($PayerNameVar).'='.urlencode($PayerNameVal); |
|
415 | 415 | } |
416 | 416 | // Address Fields (Billing) |
417 | 417 | $BillingAddress = isset($DataArray['BillingAddress']) ? $DataArray['BillingAddress'] : array(); |
418 | 418 | foreach ($BillingAddress as $BillingAddressVar => $BillingAddressVal) { |
419 | - $BillingAddressNVP .= '&' . strtoupper($BillingAddressVar) . '=' . urlencode($BillingAddressVal); |
|
419 | + $BillingAddressNVP .= '&'.strtoupper($BillingAddressVar).'='.urlencode($BillingAddressVal); |
|
420 | 420 | } |
421 | 421 | // Payment Details Type Fields |
422 | 422 | $PaymentDetails = isset($DataArray['PaymentDetails']) ? $DataArray['PaymentDetails'] : array(); |
423 | 423 | foreach ($PaymentDetails as $PaymentDetailsVar => $PaymentDetailsVal) { |
424 | - $PaymentDetailsNVP .= '&' . strtoupper($PaymentDetailsVar) . '=' . urlencode($PaymentDetailsVal); |
|
424 | + $PaymentDetailsNVP .= '&'.strtoupper($PaymentDetailsVar).'='.urlencode($PaymentDetailsVal); |
|
425 | 425 | } |
426 | 426 | // Payment Details Item Type Fields |
427 | 427 | $OrderItems = isset($DataArray['OrderItems']) ? $DataArray['OrderItems'] : array(); |
428 | 428 | $n = 0; |
429 | 429 | foreach ($OrderItems as $OrderItemsVar => $OrderItemsVal) { |
430 | - $CurrentItem = $OrderItems[ $OrderItemsVar ]; |
|
430 | + $CurrentItem = $OrderItems[$OrderItemsVar]; |
|
431 | 431 | foreach ($CurrentItem as $CurrentItemVar => $CurrentItemVal) { |
432 | - $OrderItemsNVP .= '&' . strtoupper($CurrentItemVar) . $n . '=' . urlencode($CurrentItemVal); |
|
432 | + $OrderItemsNVP .= '&'.strtoupper($CurrentItemVar).$n.'='.urlencode($CurrentItemVal); |
|
433 | 433 | } |
434 | 434 | $n++; |
435 | 435 | } |
436 | 436 | // Ship To Address Fields |
437 | 437 | $ShippingAddress = isset($DataArray['ShippingAddress']) ? $DataArray['ShippingAddress'] : array(); |
438 | 438 | foreach ($ShippingAddress as $ShippingAddressVar => $ShippingAddressVal) { |
439 | - $ShippingAddressNVP .= '&' . strtoupper($ShippingAddressVar) . '=' . urlencode($ShippingAddressVal); |
|
439 | + $ShippingAddressNVP .= '&'.strtoupper($ShippingAddressVar).'='.urlencode($ShippingAddressVal); |
|
440 | 440 | } |
441 | 441 | // 3D Secure Fields |
442 | 442 | $Secure3D = isset($DataArray['Secure3D']) ? $DataArray['Secure3D'] : array(); |
443 | 443 | foreach ($Secure3D as $Secure3DVar => $Secure3DVal) { |
444 | - $Secure3DNVP .= '&' . strtoupper($Secure3DVar) . '=' . urlencode($Secure3DVal); |
|
444 | + $Secure3DNVP .= '&'.strtoupper($Secure3DVar).'='.urlencode($Secure3DVal); |
|
445 | 445 | } |
446 | 446 | // Now that we have each chunk we need to go ahead and append them all together for our entire NVP string |
447 | 447 | $NVPRequest = 'USER=' |
@@ -512,7 +512,7 @@ discard block |
||
512 | 512 | $valuepos = strpos($NVPString, '&') ? strpos($NVPString, '&') : strlen($NVPString); |
513 | 513 | $valval = substr($NVPString, $keypos + 1, $valuepos - $keypos - 1); |
514 | 514 | // decoding the response |
515 | - $proArray[ $keyval ] = urldecode($valval); |
|
515 | + $proArray[$keyval] = urldecode($valval); |
|
516 | 516 | $NVPString = substr($NVPString, $valuepos + 1, strlen($NVPString)); |
517 | 517 | } |
518 | 518 | return $proArray; |
@@ -545,16 +545,16 @@ discard block |
||
545 | 545 | { |
546 | 546 | $Errors = array(); |
547 | 547 | $n = 0; |
548 | - while (isset($DataArray[ 'L_ERRORCODE' . $n . '' ])) { |
|
549 | - $LErrorCode = isset($DataArray[ 'L_ERRORCODE' . $n . '' ]) ? $DataArray[ 'L_ERRORCODE' . $n . '' ] : ''; |
|
550 | - $LShortMessage = isset($DataArray[ 'L_SHORTMESSAGE' . $n . '' ]) |
|
551 | - ? $DataArray[ 'L_SHORTMESSAGE' . $n . '' ] |
|
548 | + while (isset($DataArray['L_ERRORCODE'.$n.''])) { |
|
549 | + $LErrorCode = isset($DataArray['L_ERRORCODE'.$n.'']) ? $DataArray['L_ERRORCODE'.$n.''] : ''; |
|
550 | + $LShortMessage = isset($DataArray['L_SHORTMESSAGE'.$n.'']) |
|
551 | + ? $DataArray['L_SHORTMESSAGE'.$n.''] |
|
552 | 552 | : ''; |
553 | - $LLongMessage = isset($DataArray[ 'L_LONGMESSAGE' . $n . '' ]) |
|
554 | - ? $DataArray[ 'L_LONGMESSAGE' . $n . '' ] |
|
553 | + $LLongMessage = isset($DataArray['L_LONGMESSAGE'.$n.'']) |
|
554 | + ? $DataArray['L_LONGMESSAGE'.$n.''] |
|
555 | 555 | : ''; |
556 | - $LSeverityCode = isset($DataArray[ 'L_SEVERITYCODE' . $n . '' ]) |
|
557 | - ? $DataArray[ 'L_SEVERITYCODE' . $n . '' ] |
|
556 | + $LSeverityCode = isset($DataArray['L_SEVERITYCODE'.$n.'']) |
|
557 | + ? $DataArray['L_SEVERITYCODE'.$n.''] |
|
558 | 558 | : ''; |
559 | 559 | $CurrentItem = array( |
560 | 560 | 'L_ERRORCODE' => $LErrorCode, |
@@ -581,7 +581,7 @@ discard block |
||
581 | 581 | { |
582 | 582 | $error = ''; |
583 | 583 | foreach ($Errors as $ErrorVar => $ErrorVal) { |
584 | - $CurrentError = $Errors[ $ErrorVar ]; |
|
584 | + $CurrentError = $Errors[$ErrorVar]; |
|
585 | 585 | foreach ($CurrentError as $CurrentErrorVar => $CurrentErrorVal) { |
586 | 586 | $CurrentVarName = ''; |
587 | 587 | if ($CurrentErrorVar == 'L_ERRORCODE') { |
@@ -593,7 +593,7 @@ discard block |
||
593 | 593 | } elseif ($CurrentErrorVar == 'L_SEVERITYCODE') { |
594 | 594 | $CurrentVarName = 'Severity Code'; |
595 | 595 | } |
596 | - $error .= '<br />' . $CurrentVarName . ': ' . $CurrentErrorVal; |
|
596 | + $error .= '<br />'.$CurrentVarName.': '.$CurrentErrorVal; |
|
597 | 597 | } |
598 | 598 | } |
599 | 599 | return $error; |
@@ -11,606 +11,606 @@ |
||
11 | 11 | class EEG_Paypal_Pro extends EE_Onsite_Gateway |
12 | 12 | { |
13 | 13 | |
14 | - /** |
|
15 | - * @var $_paypal_api_username string |
|
16 | - */ |
|
17 | - protected $_api_username = null; |
|
18 | - |
|
19 | - /** |
|
20 | - * @var $_api_password string |
|
21 | - */ |
|
22 | - protected $_api_password = null; |
|
23 | - |
|
24 | - /** |
|
25 | - * @var $_api_signature string |
|
26 | - */ |
|
27 | - protected $_api_signature = null; |
|
28 | - |
|
29 | - /** |
|
30 | - * @var $_credit_card_types array with the keys for credit card types accepted on this account |
|
31 | - */ |
|
32 | - protected $_credit_card_types = null; |
|
33 | - |
|
34 | - protected $_currencies_supported = array( |
|
35 | - 'USD', |
|
36 | - 'GBP', |
|
37 | - 'CAD', |
|
38 | - 'AUD', |
|
39 | - 'BRL', |
|
40 | - 'CHF', |
|
41 | - 'CZK', |
|
42 | - 'DKK', |
|
43 | - 'EUR', |
|
44 | - 'HKD', |
|
45 | - 'HUF', |
|
46 | - 'ILS', |
|
47 | - 'JPY', |
|
48 | - 'MXN', |
|
49 | - 'MYR', |
|
50 | - 'NOK', |
|
51 | - 'NZD', |
|
52 | - 'PHP', |
|
53 | - 'PLN', |
|
54 | - 'SEK', |
|
55 | - 'SGD', |
|
56 | - 'THB', |
|
57 | - 'TRY', |
|
58 | - 'TWD', |
|
59 | - 'RUB', |
|
60 | - 'INR', |
|
61 | - ); |
|
62 | - |
|
63 | - |
|
64 | - |
|
65 | - /** |
|
66 | - * @param EEI_Payment $payment |
|
67 | - * @param array $billing_info { |
|
68 | - * @type string $credit_card |
|
69 | - * @type string $credit_card_type |
|
70 | - * @type string $exp_month always 2 characters |
|
71 | - * @type string $exp_year always 4 characters |
|
72 | - * @type string $cvv |
|
73 | - * } |
|
74 | - * @see parent::do_direct_payment for more info |
|
75 | - * @return EE_Payment|EEI_Payment |
|
76 | - * @throws EE_Error |
|
77 | - */ |
|
78 | - public function do_direct_payment($payment, $billing_info = null) |
|
79 | - { |
|
80 | - $transaction = $payment->transaction(); |
|
81 | - if (! $transaction instanceof EEI_Transaction) { |
|
82 | - throw new EE_Error( |
|
83 | - esc_html__('No transaction for payment while paying with PayPal Pro.', 'event_espresso') |
|
84 | - ); |
|
85 | - } |
|
86 | - $primary_registrant = $transaction->primary_registration(); |
|
87 | - if (! $primary_registrant instanceof EEI_Registration) { |
|
88 | - throw new EE_Error( |
|
89 | - esc_html__( |
|
90 | - 'No primary registration on transaction while paying with PayPal Pro.', |
|
91 | - 'event_espresso' |
|
92 | - ) |
|
93 | - ); |
|
94 | - } |
|
95 | - $attendee = $primary_registrant->attendee(); |
|
96 | - if (! $attendee instanceof EEI_Attendee) { |
|
97 | - throw new EE_Error( |
|
98 | - esc_html__( |
|
99 | - 'No attendee on primary registration while paying with PayPal Pro.', |
|
100 | - 'event_espresso' |
|
101 | - ) |
|
102 | - ); |
|
103 | - } |
|
104 | - $gateway_formatter = $this->_get_gateway_formatter(); |
|
105 | - $order_description = substr($gateway_formatter->formatOrderDescription($payment), 0, 127); |
|
106 | - // charge for the full amount. Show itemized list |
|
107 | - if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) { |
|
108 | - $item_num = 1; |
|
109 | - $total_line_item = $transaction->total_line_item(); |
|
110 | - $order_items = array(); |
|
111 | - foreach ($total_line_item->get_items() as $line_item) { |
|
112 | - // ignore line items with a quantity of 0 |
|
113 | - if ($line_item->quantity() == 0) { |
|
114 | - continue; |
|
115 | - } |
|
116 | - // For percent items, whose unit_price is 0, use the total instead. |
|
117 | - if ($line_item->is_percent()) { |
|
118 | - $unit_price = $line_item->total(); |
|
119 | - $line_item_quantity = 1; |
|
120 | - } else { |
|
121 | - $unit_price = $line_item->unit_price(); |
|
122 | - $line_item_quantity = $line_item->quantity(); |
|
123 | - } |
|
124 | - $item = array( |
|
125 | - // Item Name. 127 char max. |
|
126 | - 'l_name' => substr( |
|
127 | - $gateway_formatter->formatLineItemName($line_item, $payment), |
|
128 | - 0, |
|
129 | - 127 |
|
130 | - ), |
|
131 | - // Item description. 127 char max. |
|
132 | - 'l_desc' => substr( |
|
133 | - $gateway_formatter->formatLineItemDesc($line_item, $payment), |
|
134 | - 0, |
|
135 | - 127 |
|
136 | - ), |
|
137 | - // Cost of individual item. |
|
138 | - 'l_amt' => $unit_price, |
|
139 | - // Item Number. 127 char max. |
|
140 | - 'l_number' => $item_num++, |
|
141 | - // Item quantity. Must be any positive integer. |
|
142 | - 'l_qty' => $line_item_quantity, |
|
143 | - // Item's sales tax amount. |
|
144 | - 'l_taxamt' => '', |
|
145 | - // eBay auction number of item. |
|
146 | - 'l_ebayitemnumber' => '', |
|
147 | - // eBay transaction ID of purchased item. |
|
148 | - 'l_ebayitemauctiontxnid' => '', |
|
149 | - // eBay order ID for the item. |
|
150 | - 'l_ebayitemorderid' => '', |
|
151 | - ); |
|
152 | - // add to array of all items |
|
153 | - array_push($order_items, $item); |
|
154 | - } |
|
155 | - $item_amount = $total_line_item->get_items_total(); |
|
156 | - $tax_amount = $total_line_item->get_total_tax(); |
|
157 | - } else { |
|
158 | - $order_items = array(); |
|
159 | - $item_amount = $payment->amount(); |
|
160 | - $tax_amount = 0; |
|
161 | - array_push($order_items, array( |
|
162 | - // Item Name. 127 char max. |
|
163 | - 'l_name' => substr( |
|
164 | - $gateway_formatter->formatPartialPaymentLineItemName($payment), |
|
165 | - 0, |
|
166 | - 127 |
|
167 | - ), |
|
168 | - // Item description. 127 char max. |
|
169 | - 'l_desc' => substr( |
|
170 | - $gateway_formatter->formatPartialPaymentLineItemDesc($payment), |
|
171 | - 0, |
|
172 | - 127 |
|
173 | - ), |
|
174 | - // Cost of individual item. |
|
175 | - 'l_amt' => $payment->amount(), |
|
176 | - // Item Number. 127 char max. |
|
177 | - 'l_number' => 1, |
|
178 | - // Item quantity. Must be any positive integer. |
|
179 | - 'l_qty' => 1, |
|
180 | - )); |
|
181 | - } |
|
182 | - // Populate data arrays with order data. |
|
183 | - $DPFields = array( |
|
184 | - // How you want to obtain payment ? |
|
185 | - // Authorization indicates the payment is a basic auth subject to settlement with Auth & Capture. |
|
186 | - // Sale indicates that this is a final sale for which you are requesting payment. Default is Sale. |
|
187 | - 'paymentaction' => 'Sale', |
|
188 | - // Required. IP address of the payer's browser. |
|
189 | - 'ipaddress' => $_SERVER['REMOTE_ADDR'], |
|
190 | - // Flag to determine whether you want the results returned by FMF. 1 or 0. Default is 0. |
|
191 | - 'returnfmfdetails' => '1', |
|
192 | - ); |
|
193 | - $CCDetails = array( |
|
194 | - // Required. Type of credit card. Visa, MasterCard, Discover, Amex, Maestro, Solo. |
|
195 | - // If Maestro or Solo, the currency code must be GBP. |
|
196 | - // In addition, either start date or issue number must be specified. |
|
197 | - 'creditcardtype' => $billing_info['credit_card_type'], |
|
198 | - // Required. Credit card number. No spaces or punctuation. |
|
199 | - 'acct' => $billing_info['credit_card'], |
|
200 | - // Required. Credit card expiration date. Format is MMYYYY |
|
201 | - 'expdate' => $billing_info['exp_month'] . $billing_info['exp_year'], |
|
202 | - // Requirements determined by your PayPal account settings. Security digits for credit card. |
|
203 | - 'cvv2' => $billing_info['cvv'], |
|
204 | - ); |
|
205 | - $PayerInfo = array( |
|
206 | - // Email address of payer. |
|
207 | - 'email' => $billing_info['email'], |
|
208 | - // Unique PayPal customer ID for payer. |
|
209 | - 'payerid' => '', |
|
210 | - // Status of payer. Values are verified or unverified |
|
211 | - 'payerstatus' => '', |
|
212 | - // Payer's business name. |
|
213 | - 'business' => '', |
|
214 | - ); |
|
215 | - $PayerName = array( |
|
216 | - // Payer's salutation. 20 char max. |
|
217 | - 'salutation' => '', |
|
218 | - // Payer's first name. 25 char max. |
|
219 | - 'firstname' => substr($billing_info['first_name'], 0, 25), |
|
220 | - // Payer's middle name. 25 char max. |
|
221 | - 'middlename' => '', |
|
222 | - // Payer's last name. 25 char max. |
|
223 | - 'lastname' => substr($billing_info['last_name'], 0, 25), |
|
224 | - // Payer's suffix. 12 char max. |
|
225 | - 'suffix' => '', |
|
226 | - ); |
|
227 | - $BillingAddress = array( |
|
228 | - // Required. First street address. |
|
229 | - 'street' => $billing_info['address'], |
|
230 | - // Second street address. |
|
231 | - 'street2' => $billing_info['address2'], |
|
232 | - // Required. Name of City. |
|
233 | - 'city' => $billing_info['city'], |
|
234 | - // Required. Name of State or Province. |
|
235 | - 'state' => substr($billing_info['state'], 0, 40), |
|
236 | - // Required. Country code. |
|
237 | - 'countrycode' => $billing_info['country'], |
|
238 | - // Required. Postal code of payer. |
|
239 | - 'zip' => $billing_info['zip'], |
|
240 | - ); |
|
241 | - // check if the registration info contains the needed fields for paypal pro |
|
242 | - // (see https://developer.paypal.com/docs/classic/api/merchant/DoDirectPayment_API_Operation_NVP/) |
|
243 | - if ($attendee->address() && $attendee->city() && $attendee->country_ID()) { |
|
244 | - $use_registration_address_info = true; |
|
245 | - } else { |
|
246 | - $use_registration_address_info = false; |
|
247 | - } |
|
248 | - // so if the attendee has enough data to fill out PayPal Pro's shipping info, use it. |
|
249 | - // If not, use the billing info again |
|
250 | - $ShippingAddress = array( |
|
251 | - 'shiptoname' => substr($use_registration_address_info |
|
252 | - ? $attendee->full_name() |
|
253 | - : $billing_info['first_name'] . ' ' . $billing_info['last_name'], 0, 32), |
|
254 | - 'shiptostreet' => substr($use_registration_address_info |
|
255 | - ? $attendee->address() |
|
256 | - : $billing_info['address'], 0, 100), |
|
257 | - 'shiptostreet2' => substr($use_registration_address_info |
|
258 | - ? $attendee->address2() : $billing_info['address2'], 0, 100), |
|
259 | - 'shiptocity' => substr($use_registration_address_info |
|
260 | - ? $attendee->city() |
|
261 | - : $billing_info['city'], 0, 40), |
|
262 | - 'shiptostate' => substr($use_registration_address_info |
|
263 | - ? $attendee->state_name() |
|
264 | - : $billing_info['state'], 0, 40), |
|
265 | - 'shiptocountry' => $use_registration_address_info |
|
266 | - ? $attendee->country_ID() |
|
267 | - : $billing_info['country'], |
|
268 | - 'shiptozip' => substr($use_registration_address_info |
|
269 | - ? $attendee->zip() |
|
270 | - : $billing_info['zip'], 0, 20), |
|
271 | - 'shiptophonenum' => substr($use_registration_address_info |
|
272 | - ? $attendee->phone() |
|
273 | - : $billing_info['phone'], 0, 20), |
|
274 | - ); |
|
275 | - $PaymentDetails = array( |
|
276 | - // Required. Total amount of order, including shipping, handling, and tax. |
|
277 | - 'amt' => $gateway_formatter->formatCurrency($payment->amount()), |
|
278 | - // Required. Three-letter currency code. Default is USD. |
|
279 | - 'currencycode' => $payment->currency_code(), |
|
280 | - // Required if you include itemized cart details. (L_AMTn, etc.) |
|
281 | - // Subtotal of items not including S&H, or tax. |
|
282 | - 'itemamt' => $gateway_formatter->formatCurrency($item_amount),// |
|
283 | - // Total shipping costs for the order. If you specify shippingamt, you must also specify itemamt. |
|
284 | - 'shippingamt' => '', |
|
285 | - // Total handling costs for the order. If you specify handlingamt, you must also specify itemamt. |
|
286 | - 'handlingamt' => '', |
|
287 | - // Required if you specify itemized cart tax details. |
|
288 | - // Sum of tax for all items on the order. Total sales tax. |
|
289 | - 'taxamt' => $gateway_formatter->formatCurrency($tax_amount), |
|
290 | - // Description of the order the customer is purchasing. 127 char max. |
|
291 | - 'desc' => $order_description, |
|
292 | - // Free-form field for your own use. 256 char max. |
|
293 | - 'custom' => $primary_registrant ? $primary_registrant->ID() : '', |
|
294 | - // Your own invoice or tracking number |
|
295 | - 'invnum' => wp_generate_password(12, false),// $transaction->ID(), |
|
296 | - // URL for receiving Instant Payment Notifications. This overrides what your profile is set to use. |
|
297 | - 'notifyurl' => '', |
|
298 | - 'buttonsource' => 'EventEspresso_SP',// EE will blow up if you change this |
|
299 | - ); |
|
300 | - // Wrap all data arrays into a single, "master" array which will be passed into the class function. |
|
301 | - $PayPalRequestData = array( |
|
302 | - 'DPFields' => $DPFields, |
|
303 | - 'CCDetails' => $CCDetails, |
|
304 | - 'PayerInfo' => $PayerInfo, |
|
305 | - 'PayerName' => $PayerName, |
|
306 | - 'BillingAddress' => $BillingAddress, |
|
307 | - 'ShippingAddress' => $ShippingAddress, |
|
308 | - 'PaymentDetails' => $PaymentDetails, |
|
309 | - 'OrderItems' => $order_items, |
|
310 | - ); |
|
311 | - $this->_log_clean_request($PayPalRequestData, $payment); |
|
312 | - try { |
|
313 | - $PayPalResult = $this->prep_and_curl_request($PayPalRequestData); |
|
314 | - // remove PCI-sensitive data so it doesn't get stored |
|
315 | - $PayPalResult = $this->_log_clean_response($PayPalResult, $payment); |
|
316 | - if (isset($PayPalResult['L_ERRORCODE0']) && $PayPalResult['L_ERRORCODE0'] === '10002') { |
|
317 | - $message = esc_html__('PayPal did not accept your API username, password, or signature. Please double-check these credentials and if debug mode is on.', 'event_espresso'); |
|
318 | - } elseif (isset($PayPalResult['L_LONGMESSAGE0'])) { |
|
319 | - $message = $PayPalResult['L_LONGMESSAGE0']; |
|
320 | - } else { |
|
321 | - $message = $PayPalResult['ACK']; |
|
322 | - } |
|
323 | - if (empty($PayPalResult['RAWRESPONSE'])) { |
|
324 | - $payment->set_status($this->_pay_model->failed_status()); |
|
325 | - $payment->set_gateway_response(esc_html__('No response received from Paypal Pro', 'event_espresso')); |
|
326 | - $payment->set_details($PayPalResult); |
|
327 | - } else { |
|
328 | - if ($this->_APICallSuccessful($PayPalResult)) { |
|
329 | - $payment->set_status($this->_pay_model->approved_status()); |
|
330 | - } else { |
|
331 | - $payment->set_status($this->_pay_model->declined_status()); |
|
332 | - } |
|
333 | - // make sure we interpret the AMT as a float, not an international string |
|
334 | - // (where periods are thousand separators) |
|
335 | - $payment->set_amount(isset($PayPalResult['AMT']) ? floatval($PayPalResult['AMT']) : 0); |
|
336 | - $payment->set_gateway_response($message); |
|
337 | - $payment->set_txn_id_chq_nmbr(isset($PayPalResult['TRANSACTIONID']) |
|
338 | - ? $PayPalResult['TRANSACTIONID'] |
|
339 | - : null); |
|
340 | - $primary_registration_code = $primary_registrant instanceof EE_Registration |
|
341 | - ? $primary_registrant->reg_code() |
|
342 | - : ''; |
|
343 | - $payment->set_extra_accntng($primary_registration_code); |
|
344 | - $payment->set_details($PayPalResult); |
|
345 | - } |
|
346 | - } catch (Exception $e) { |
|
347 | - $payment->set_status($this->_pay_model->failed_status()); |
|
348 | - $payment->set_gateway_response($e->getMessage()); |
|
349 | - } |
|
350 | - // $payment->set_status( $this->_pay_model->declined_status() ); |
|
351 | - // $payment->set_gateway_response( '' ); |
|
352 | - return $payment; |
|
353 | - } |
|
354 | - |
|
355 | - |
|
356 | - |
|
357 | - /** |
|
358 | - * CLeans out sensitive CC data and then logs it, and returns the cleaned request |
|
359 | - * |
|
360 | - * @param array $request |
|
361 | - * @param EEI_Payment $payment |
|
362 | - * @return void |
|
363 | - */ |
|
364 | - private function _log_clean_request($request, $payment) |
|
365 | - { |
|
366 | - $cleaned_request_data = $request; |
|
367 | - unset($cleaned_request_data['CCDetails']['acct']); |
|
368 | - unset($cleaned_request_data['CCDetails']['cvv2']); |
|
369 | - unset($cleaned_request_data['CCDetails']['expdate']); |
|
370 | - $this->log(array('Paypal Request' => $cleaned_request_data), $payment); |
|
371 | - } |
|
372 | - |
|
373 | - |
|
374 | - |
|
375 | - /** |
|
376 | - * Cleans the response, logs it, and returns it |
|
377 | - * |
|
378 | - * @param array $response |
|
379 | - * @param EEI_Payment $payment |
|
380 | - * @return array cleaned |
|
381 | - */ |
|
382 | - private function _log_clean_response($response, $payment) |
|
383 | - { |
|
384 | - unset($response['REQUESTDATA']['CREDITCARDTYPE']); |
|
385 | - unset($response['REQUESTDATA']['ACCT']); |
|
386 | - unset($response['REQUESTDATA']['EXPDATE']); |
|
387 | - unset($response['REQUESTDATA']['CVV2']); |
|
388 | - unset($response['RAWREQUEST']); |
|
389 | - $this->log(array('Paypal Response' => $response), $payment); |
|
390 | - return $response; |
|
391 | - } |
|
392 | - |
|
393 | - |
|
394 | - |
|
395 | - /** |
|
396 | - * @param $DataArray |
|
397 | - * @return array |
|
398 | - */ |
|
399 | - private function prep_and_curl_request($DataArray) |
|
400 | - { |
|
401 | - // Create empty holders for each portion of the NVP string |
|
402 | - $DPFieldsNVP = '&METHOD=DoDirectPayment&BUTTONSOURCE=AngellEYE_PHP_Class_DDP'; |
|
403 | - $CCDetailsNVP = ''; |
|
404 | - $PayerInfoNVP = ''; |
|
405 | - $PayerNameNVP = ''; |
|
406 | - $BillingAddressNVP = ''; |
|
407 | - $ShippingAddressNVP = ''; |
|
408 | - $PaymentDetailsNVP = ''; |
|
409 | - $OrderItemsNVP = ''; |
|
410 | - $Secure3DNVP = ''; |
|
411 | - // DP Fields |
|
412 | - $DPFields = isset($DataArray['DPFields']) ? $DataArray['DPFields'] : array(); |
|
413 | - foreach ($DPFields as $DPFieldsVar => $DPFieldsVal) { |
|
414 | - $DPFieldsNVP .= '&' . strtoupper($DPFieldsVar) . '=' . urlencode($DPFieldsVal); |
|
415 | - } |
|
416 | - // CC Details Fields |
|
417 | - $CCDetails = isset($DataArray['CCDetails']) ? $DataArray['CCDetails'] : array(); |
|
418 | - foreach ($CCDetails as $CCDetailsVar => $CCDetailsVal) { |
|
419 | - $CCDetailsNVP .= '&' . strtoupper($CCDetailsVar) . '=' . urlencode($CCDetailsVal); |
|
420 | - } |
|
421 | - // PayerInfo Type Fields |
|
422 | - $PayerInfo = isset($DataArray['PayerInfo']) ? $DataArray['PayerInfo'] : array(); |
|
423 | - foreach ($PayerInfo as $PayerInfoVar => $PayerInfoVal) { |
|
424 | - $PayerInfoNVP .= '&' . strtoupper($PayerInfoVar) . '=' . urlencode($PayerInfoVal); |
|
425 | - } |
|
426 | - // Payer Name Fields |
|
427 | - $PayerName = isset($DataArray['PayerName']) ? $DataArray['PayerName'] : array(); |
|
428 | - foreach ($PayerName as $PayerNameVar => $PayerNameVal) { |
|
429 | - $PayerNameNVP .= '&' . strtoupper($PayerNameVar) . '=' . urlencode($PayerNameVal); |
|
430 | - } |
|
431 | - // Address Fields (Billing) |
|
432 | - $BillingAddress = isset($DataArray['BillingAddress']) ? $DataArray['BillingAddress'] : array(); |
|
433 | - foreach ($BillingAddress as $BillingAddressVar => $BillingAddressVal) { |
|
434 | - $BillingAddressNVP .= '&' . strtoupper($BillingAddressVar) . '=' . urlencode($BillingAddressVal); |
|
435 | - } |
|
436 | - // Payment Details Type Fields |
|
437 | - $PaymentDetails = isset($DataArray['PaymentDetails']) ? $DataArray['PaymentDetails'] : array(); |
|
438 | - foreach ($PaymentDetails as $PaymentDetailsVar => $PaymentDetailsVal) { |
|
439 | - $PaymentDetailsNVP .= '&' . strtoupper($PaymentDetailsVar) . '=' . urlencode($PaymentDetailsVal); |
|
440 | - } |
|
441 | - // Payment Details Item Type Fields |
|
442 | - $OrderItems = isset($DataArray['OrderItems']) ? $DataArray['OrderItems'] : array(); |
|
443 | - $n = 0; |
|
444 | - foreach ($OrderItems as $OrderItemsVar => $OrderItemsVal) { |
|
445 | - $CurrentItem = $OrderItems[ $OrderItemsVar ]; |
|
446 | - foreach ($CurrentItem as $CurrentItemVar => $CurrentItemVal) { |
|
447 | - $OrderItemsNVP .= '&' . strtoupper($CurrentItemVar) . $n . '=' . urlencode($CurrentItemVal); |
|
448 | - } |
|
449 | - $n++; |
|
450 | - } |
|
451 | - // Ship To Address Fields |
|
452 | - $ShippingAddress = isset($DataArray['ShippingAddress']) ? $DataArray['ShippingAddress'] : array(); |
|
453 | - foreach ($ShippingAddress as $ShippingAddressVar => $ShippingAddressVal) { |
|
454 | - $ShippingAddressNVP .= '&' . strtoupper($ShippingAddressVar) . '=' . urlencode($ShippingAddressVal); |
|
455 | - } |
|
456 | - // 3D Secure Fields |
|
457 | - $Secure3D = isset($DataArray['Secure3D']) ? $DataArray['Secure3D'] : array(); |
|
458 | - foreach ($Secure3D as $Secure3DVar => $Secure3DVal) { |
|
459 | - $Secure3DNVP .= '&' . strtoupper($Secure3DVar) . '=' . urlencode($Secure3DVal); |
|
460 | - } |
|
461 | - // Now that we have each chunk we need to go ahead and append them all together for our entire NVP string |
|
462 | - $NVPRequest = 'USER=' |
|
463 | - . $this->_api_username |
|
464 | - . '&PWD=' |
|
465 | - . $this->_api_password |
|
466 | - . '&VERSION=64.0' |
|
467 | - . '&SIGNATURE=' |
|
468 | - . $this->_api_signature |
|
469 | - . $DPFieldsNVP |
|
470 | - . $CCDetailsNVP |
|
471 | - . $PayerInfoNVP |
|
472 | - . $PayerNameNVP |
|
473 | - . $BillingAddressNVP |
|
474 | - . $PaymentDetailsNVP |
|
475 | - . $OrderItemsNVP |
|
476 | - . $ShippingAddressNVP |
|
477 | - . $Secure3DNVP; |
|
478 | - $NVPResponse = $this->_CURLRequest($NVPRequest); |
|
479 | - $NVPRequestArray = $this->_NVPToArray($NVPRequest); |
|
480 | - $NVPResponseArray = $this->_NVPToArray($NVPResponse); |
|
481 | - $Errors = $this->_GetErrors($NVPResponseArray); |
|
482 | - $NVPResponseArray['ERRORS'] = $Errors; |
|
483 | - $NVPResponseArray['REQUESTDATA'] = $NVPRequestArray; |
|
484 | - $NVPResponseArray['RAWREQUEST'] = $NVPRequest; |
|
485 | - $NVPResponseArray['RAWRESPONSE'] = $NVPResponse; |
|
486 | - return $NVPResponseArray; |
|
487 | - } |
|
488 | - |
|
489 | - |
|
490 | - |
|
491 | - /** |
|
492 | - * @param $Request |
|
493 | - * @return mixed |
|
494 | - */ |
|
495 | - private function _CURLRequest($Request) |
|
496 | - { |
|
497 | - $EndPointURL = $this->_debug_mode ? 'https://api-3t.sandbox.paypal.com/nvp' : 'https://api-3t.paypal.com/nvp'; |
|
498 | - $curl = curl_init(); |
|
499 | - curl_setopt($curl, CURLOPT_VERBOSE, apply_filters('FHEE__EEG_Paypal_Pro__CurlRequest__CURLOPT_VERBOSE', true)); |
|
500 | - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
501 | - curl_setopt($curl, CURLOPT_TIMEOUT, 60); |
|
502 | - curl_setopt($curl, CURLOPT_URL, $EndPointURL); |
|
503 | - curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
|
504 | - curl_setopt($curl, CURLOPT_POSTFIELDS, $Request); |
|
505 | - curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
506 | - // execute the curl POST |
|
507 | - $Response = curl_exec($curl); |
|
508 | - curl_close($curl); |
|
509 | - return $Response; |
|
510 | - } |
|
511 | - |
|
512 | - |
|
513 | - |
|
514 | - /** |
|
515 | - * @param $NVPString |
|
516 | - * @return array |
|
517 | - */ |
|
518 | - private function _NVPToArray($NVPString) |
|
519 | - { |
|
520 | - // prepare responses into array |
|
521 | - $proArray = array(); |
|
522 | - while (strlen($NVPString)) { |
|
523 | - // name |
|
524 | - $keypos = strpos($NVPString, '='); |
|
525 | - $keyval = substr($NVPString, 0, $keypos); |
|
526 | - // value |
|
527 | - $valuepos = strpos($NVPString, '&') ? strpos($NVPString, '&') : strlen($NVPString); |
|
528 | - $valval = substr($NVPString, $keypos + 1, $valuepos - $keypos - 1); |
|
529 | - // decoding the response |
|
530 | - $proArray[ $keyval ] = urldecode($valval); |
|
531 | - $NVPString = substr($NVPString, $valuepos + 1, strlen($NVPString)); |
|
532 | - } |
|
533 | - return $proArray; |
|
534 | - } |
|
535 | - |
|
536 | - |
|
537 | - |
|
538 | - /** |
|
539 | - * @param array $PayPalResult |
|
540 | - * @return bool |
|
541 | - */ |
|
542 | - private function _APICallSuccessful($PayPalResult) |
|
543 | - { |
|
544 | - $approved = false; |
|
545 | - // check main response message from PayPal |
|
546 | - if (isset($PayPalResult['ACK']) && ! empty($PayPalResult['ACK'])) { |
|
547 | - $ack = strtoupper($PayPalResult['ACK']); |
|
548 | - $approved = ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING' || $ack == 'PARTIALSUCCESS') ? true : false; |
|
549 | - } |
|
550 | - return $approved; |
|
551 | - } |
|
552 | - |
|
553 | - |
|
554 | - |
|
555 | - /** |
|
556 | - * @param $DataArray |
|
557 | - * @return array |
|
558 | - */ |
|
559 | - private function _GetErrors($DataArray) |
|
560 | - { |
|
561 | - $Errors = array(); |
|
562 | - $n = 0; |
|
563 | - while (isset($DataArray[ 'L_ERRORCODE' . $n . '' ])) { |
|
564 | - $LErrorCode = isset($DataArray[ 'L_ERRORCODE' . $n . '' ]) ? $DataArray[ 'L_ERRORCODE' . $n . '' ] : ''; |
|
565 | - $LShortMessage = isset($DataArray[ 'L_SHORTMESSAGE' . $n . '' ]) |
|
566 | - ? $DataArray[ 'L_SHORTMESSAGE' . $n . '' ] |
|
567 | - : ''; |
|
568 | - $LLongMessage = isset($DataArray[ 'L_LONGMESSAGE' . $n . '' ]) |
|
569 | - ? $DataArray[ 'L_LONGMESSAGE' . $n . '' ] |
|
570 | - : ''; |
|
571 | - $LSeverityCode = isset($DataArray[ 'L_SEVERITYCODE' . $n . '' ]) |
|
572 | - ? $DataArray[ 'L_SEVERITYCODE' . $n . '' ] |
|
573 | - : ''; |
|
574 | - $CurrentItem = array( |
|
575 | - 'L_ERRORCODE' => $LErrorCode, |
|
576 | - 'L_SHORTMESSAGE' => $LShortMessage, |
|
577 | - 'L_LONGMESSAGE' => $LLongMessage, |
|
578 | - 'L_SEVERITYCODE' => $LSeverityCode, |
|
579 | - ); |
|
580 | - array_push($Errors, $CurrentItem); |
|
581 | - $n++; |
|
582 | - } |
|
583 | - return $Errors; |
|
584 | - } |
|
585 | - |
|
586 | - |
|
587 | - |
|
588 | - /** |
|
589 | - * nothing to see here... move along.... |
|
590 | - * |
|
591 | - * @access protected |
|
592 | - * @param $Errors |
|
593 | - * @return string |
|
594 | - */ |
|
595 | - private function _DisplayErrors($Errors) |
|
596 | - { |
|
597 | - $error = ''; |
|
598 | - foreach ($Errors as $ErrorVar => $ErrorVal) { |
|
599 | - $CurrentError = $Errors[ $ErrorVar ]; |
|
600 | - foreach ($CurrentError as $CurrentErrorVar => $CurrentErrorVal) { |
|
601 | - $CurrentVarName = ''; |
|
602 | - if ($CurrentErrorVar == 'L_ERRORCODE') { |
|
603 | - $CurrentVarName = 'Error Code'; |
|
604 | - } elseif ($CurrentErrorVar == 'L_SHORTMESSAGE') { |
|
605 | - $CurrentVarName = 'Short Message'; |
|
606 | - } elseif ($CurrentErrorVar == 'L_LONGMESSAGE') { |
|
607 | - $CurrentVarName = 'Long Message'; |
|
608 | - } elseif ($CurrentErrorVar == 'L_SEVERITYCODE') { |
|
609 | - $CurrentVarName = 'Severity Code'; |
|
610 | - } |
|
611 | - $error .= '<br />' . $CurrentVarName . ': ' . $CurrentErrorVal; |
|
612 | - } |
|
613 | - } |
|
614 | - return $error; |
|
615 | - } |
|
14 | + /** |
|
15 | + * @var $_paypal_api_username string |
|
16 | + */ |
|
17 | + protected $_api_username = null; |
|
18 | + |
|
19 | + /** |
|
20 | + * @var $_api_password string |
|
21 | + */ |
|
22 | + protected $_api_password = null; |
|
23 | + |
|
24 | + /** |
|
25 | + * @var $_api_signature string |
|
26 | + */ |
|
27 | + protected $_api_signature = null; |
|
28 | + |
|
29 | + /** |
|
30 | + * @var $_credit_card_types array with the keys for credit card types accepted on this account |
|
31 | + */ |
|
32 | + protected $_credit_card_types = null; |
|
33 | + |
|
34 | + protected $_currencies_supported = array( |
|
35 | + 'USD', |
|
36 | + 'GBP', |
|
37 | + 'CAD', |
|
38 | + 'AUD', |
|
39 | + 'BRL', |
|
40 | + 'CHF', |
|
41 | + 'CZK', |
|
42 | + 'DKK', |
|
43 | + 'EUR', |
|
44 | + 'HKD', |
|
45 | + 'HUF', |
|
46 | + 'ILS', |
|
47 | + 'JPY', |
|
48 | + 'MXN', |
|
49 | + 'MYR', |
|
50 | + 'NOK', |
|
51 | + 'NZD', |
|
52 | + 'PHP', |
|
53 | + 'PLN', |
|
54 | + 'SEK', |
|
55 | + 'SGD', |
|
56 | + 'THB', |
|
57 | + 'TRY', |
|
58 | + 'TWD', |
|
59 | + 'RUB', |
|
60 | + 'INR', |
|
61 | + ); |
|
62 | + |
|
63 | + |
|
64 | + |
|
65 | + /** |
|
66 | + * @param EEI_Payment $payment |
|
67 | + * @param array $billing_info { |
|
68 | + * @type string $credit_card |
|
69 | + * @type string $credit_card_type |
|
70 | + * @type string $exp_month always 2 characters |
|
71 | + * @type string $exp_year always 4 characters |
|
72 | + * @type string $cvv |
|
73 | + * } |
|
74 | + * @see parent::do_direct_payment for more info |
|
75 | + * @return EE_Payment|EEI_Payment |
|
76 | + * @throws EE_Error |
|
77 | + */ |
|
78 | + public function do_direct_payment($payment, $billing_info = null) |
|
79 | + { |
|
80 | + $transaction = $payment->transaction(); |
|
81 | + if (! $transaction instanceof EEI_Transaction) { |
|
82 | + throw new EE_Error( |
|
83 | + esc_html__('No transaction for payment while paying with PayPal Pro.', 'event_espresso') |
|
84 | + ); |
|
85 | + } |
|
86 | + $primary_registrant = $transaction->primary_registration(); |
|
87 | + if (! $primary_registrant instanceof EEI_Registration) { |
|
88 | + throw new EE_Error( |
|
89 | + esc_html__( |
|
90 | + 'No primary registration on transaction while paying with PayPal Pro.', |
|
91 | + 'event_espresso' |
|
92 | + ) |
|
93 | + ); |
|
94 | + } |
|
95 | + $attendee = $primary_registrant->attendee(); |
|
96 | + if (! $attendee instanceof EEI_Attendee) { |
|
97 | + throw new EE_Error( |
|
98 | + esc_html__( |
|
99 | + 'No attendee on primary registration while paying with PayPal Pro.', |
|
100 | + 'event_espresso' |
|
101 | + ) |
|
102 | + ); |
|
103 | + } |
|
104 | + $gateway_formatter = $this->_get_gateway_formatter(); |
|
105 | + $order_description = substr($gateway_formatter->formatOrderDescription($payment), 0, 127); |
|
106 | + // charge for the full amount. Show itemized list |
|
107 | + if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) { |
|
108 | + $item_num = 1; |
|
109 | + $total_line_item = $transaction->total_line_item(); |
|
110 | + $order_items = array(); |
|
111 | + foreach ($total_line_item->get_items() as $line_item) { |
|
112 | + // ignore line items with a quantity of 0 |
|
113 | + if ($line_item->quantity() == 0) { |
|
114 | + continue; |
|
115 | + } |
|
116 | + // For percent items, whose unit_price is 0, use the total instead. |
|
117 | + if ($line_item->is_percent()) { |
|
118 | + $unit_price = $line_item->total(); |
|
119 | + $line_item_quantity = 1; |
|
120 | + } else { |
|
121 | + $unit_price = $line_item->unit_price(); |
|
122 | + $line_item_quantity = $line_item->quantity(); |
|
123 | + } |
|
124 | + $item = array( |
|
125 | + // Item Name. 127 char max. |
|
126 | + 'l_name' => substr( |
|
127 | + $gateway_formatter->formatLineItemName($line_item, $payment), |
|
128 | + 0, |
|
129 | + 127 |
|
130 | + ), |
|
131 | + // Item description. 127 char max. |
|
132 | + 'l_desc' => substr( |
|
133 | + $gateway_formatter->formatLineItemDesc($line_item, $payment), |
|
134 | + 0, |
|
135 | + 127 |
|
136 | + ), |
|
137 | + // Cost of individual item. |
|
138 | + 'l_amt' => $unit_price, |
|
139 | + // Item Number. 127 char max. |
|
140 | + 'l_number' => $item_num++, |
|
141 | + // Item quantity. Must be any positive integer. |
|
142 | + 'l_qty' => $line_item_quantity, |
|
143 | + // Item's sales tax amount. |
|
144 | + 'l_taxamt' => '', |
|
145 | + // eBay auction number of item. |
|
146 | + 'l_ebayitemnumber' => '', |
|
147 | + // eBay transaction ID of purchased item. |
|
148 | + 'l_ebayitemauctiontxnid' => '', |
|
149 | + // eBay order ID for the item. |
|
150 | + 'l_ebayitemorderid' => '', |
|
151 | + ); |
|
152 | + // add to array of all items |
|
153 | + array_push($order_items, $item); |
|
154 | + } |
|
155 | + $item_amount = $total_line_item->get_items_total(); |
|
156 | + $tax_amount = $total_line_item->get_total_tax(); |
|
157 | + } else { |
|
158 | + $order_items = array(); |
|
159 | + $item_amount = $payment->amount(); |
|
160 | + $tax_amount = 0; |
|
161 | + array_push($order_items, array( |
|
162 | + // Item Name. 127 char max. |
|
163 | + 'l_name' => substr( |
|
164 | + $gateway_formatter->formatPartialPaymentLineItemName($payment), |
|
165 | + 0, |
|
166 | + 127 |
|
167 | + ), |
|
168 | + // Item description. 127 char max. |
|
169 | + 'l_desc' => substr( |
|
170 | + $gateway_formatter->formatPartialPaymentLineItemDesc($payment), |
|
171 | + 0, |
|
172 | + 127 |
|
173 | + ), |
|
174 | + // Cost of individual item. |
|
175 | + 'l_amt' => $payment->amount(), |
|
176 | + // Item Number. 127 char max. |
|
177 | + 'l_number' => 1, |
|
178 | + // Item quantity. Must be any positive integer. |
|
179 | + 'l_qty' => 1, |
|
180 | + )); |
|
181 | + } |
|
182 | + // Populate data arrays with order data. |
|
183 | + $DPFields = array( |
|
184 | + // How you want to obtain payment ? |
|
185 | + // Authorization indicates the payment is a basic auth subject to settlement with Auth & Capture. |
|
186 | + // Sale indicates that this is a final sale for which you are requesting payment. Default is Sale. |
|
187 | + 'paymentaction' => 'Sale', |
|
188 | + // Required. IP address of the payer's browser. |
|
189 | + 'ipaddress' => $_SERVER['REMOTE_ADDR'], |
|
190 | + // Flag to determine whether you want the results returned by FMF. 1 or 0. Default is 0. |
|
191 | + 'returnfmfdetails' => '1', |
|
192 | + ); |
|
193 | + $CCDetails = array( |
|
194 | + // Required. Type of credit card. Visa, MasterCard, Discover, Amex, Maestro, Solo. |
|
195 | + // If Maestro or Solo, the currency code must be GBP. |
|
196 | + // In addition, either start date or issue number must be specified. |
|
197 | + 'creditcardtype' => $billing_info['credit_card_type'], |
|
198 | + // Required. Credit card number. No spaces or punctuation. |
|
199 | + 'acct' => $billing_info['credit_card'], |
|
200 | + // Required. Credit card expiration date. Format is MMYYYY |
|
201 | + 'expdate' => $billing_info['exp_month'] . $billing_info['exp_year'], |
|
202 | + // Requirements determined by your PayPal account settings. Security digits for credit card. |
|
203 | + 'cvv2' => $billing_info['cvv'], |
|
204 | + ); |
|
205 | + $PayerInfo = array( |
|
206 | + // Email address of payer. |
|
207 | + 'email' => $billing_info['email'], |
|
208 | + // Unique PayPal customer ID for payer. |
|
209 | + 'payerid' => '', |
|
210 | + // Status of payer. Values are verified or unverified |
|
211 | + 'payerstatus' => '', |
|
212 | + // Payer's business name. |
|
213 | + 'business' => '', |
|
214 | + ); |
|
215 | + $PayerName = array( |
|
216 | + // Payer's salutation. 20 char max. |
|
217 | + 'salutation' => '', |
|
218 | + // Payer's first name. 25 char max. |
|
219 | + 'firstname' => substr($billing_info['first_name'], 0, 25), |
|
220 | + // Payer's middle name. 25 char max. |
|
221 | + 'middlename' => '', |
|
222 | + // Payer's last name. 25 char max. |
|
223 | + 'lastname' => substr($billing_info['last_name'], 0, 25), |
|
224 | + // Payer's suffix. 12 char max. |
|
225 | + 'suffix' => '', |
|
226 | + ); |
|
227 | + $BillingAddress = array( |
|
228 | + // Required. First street address. |
|
229 | + 'street' => $billing_info['address'], |
|
230 | + // Second street address. |
|
231 | + 'street2' => $billing_info['address2'], |
|
232 | + // Required. Name of City. |
|
233 | + 'city' => $billing_info['city'], |
|
234 | + // Required. Name of State or Province. |
|
235 | + 'state' => substr($billing_info['state'], 0, 40), |
|
236 | + // Required. Country code. |
|
237 | + 'countrycode' => $billing_info['country'], |
|
238 | + // Required. Postal code of payer. |
|
239 | + 'zip' => $billing_info['zip'], |
|
240 | + ); |
|
241 | + // check if the registration info contains the needed fields for paypal pro |
|
242 | + // (see https://developer.paypal.com/docs/classic/api/merchant/DoDirectPayment_API_Operation_NVP/) |
|
243 | + if ($attendee->address() && $attendee->city() && $attendee->country_ID()) { |
|
244 | + $use_registration_address_info = true; |
|
245 | + } else { |
|
246 | + $use_registration_address_info = false; |
|
247 | + } |
|
248 | + // so if the attendee has enough data to fill out PayPal Pro's shipping info, use it. |
|
249 | + // If not, use the billing info again |
|
250 | + $ShippingAddress = array( |
|
251 | + 'shiptoname' => substr($use_registration_address_info |
|
252 | + ? $attendee->full_name() |
|
253 | + : $billing_info['first_name'] . ' ' . $billing_info['last_name'], 0, 32), |
|
254 | + 'shiptostreet' => substr($use_registration_address_info |
|
255 | + ? $attendee->address() |
|
256 | + : $billing_info['address'], 0, 100), |
|
257 | + 'shiptostreet2' => substr($use_registration_address_info |
|
258 | + ? $attendee->address2() : $billing_info['address2'], 0, 100), |
|
259 | + 'shiptocity' => substr($use_registration_address_info |
|
260 | + ? $attendee->city() |
|
261 | + : $billing_info['city'], 0, 40), |
|
262 | + 'shiptostate' => substr($use_registration_address_info |
|
263 | + ? $attendee->state_name() |
|
264 | + : $billing_info['state'], 0, 40), |
|
265 | + 'shiptocountry' => $use_registration_address_info |
|
266 | + ? $attendee->country_ID() |
|
267 | + : $billing_info['country'], |
|
268 | + 'shiptozip' => substr($use_registration_address_info |
|
269 | + ? $attendee->zip() |
|
270 | + : $billing_info['zip'], 0, 20), |
|
271 | + 'shiptophonenum' => substr($use_registration_address_info |
|
272 | + ? $attendee->phone() |
|
273 | + : $billing_info['phone'], 0, 20), |
|
274 | + ); |
|
275 | + $PaymentDetails = array( |
|
276 | + // Required. Total amount of order, including shipping, handling, and tax. |
|
277 | + 'amt' => $gateway_formatter->formatCurrency($payment->amount()), |
|
278 | + // Required. Three-letter currency code. Default is USD. |
|
279 | + 'currencycode' => $payment->currency_code(), |
|
280 | + // Required if you include itemized cart details. (L_AMTn, etc.) |
|
281 | + // Subtotal of items not including S&H, or tax. |
|
282 | + 'itemamt' => $gateway_formatter->formatCurrency($item_amount),// |
|
283 | + // Total shipping costs for the order. If you specify shippingamt, you must also specify itemamt. |
|
284 | + 'shippingamt' => '', |
|
285 | + // Total handling costs for the order. If you specify handlingamt, you must also specify itemamt. |
|
286 | + 'handlingamt' => '', |
|
287 | + // Required if you specify itemized cart tax details. |
|
288 | + // Sum of tax for all items on the order. Total sales tax. |
|
289 | + 'taxamt' => $gateway_formatter->formatCurrency($tax_amount), |
|
290 | + // Description of the order the customer is purchasing. 127 char max. |
|
291 | + 'desc' => $order_description, |
|
292 | + // Free-form field for your own use. 256 char max. |
|
293 | + 'custom' => $primary_registrant ? $primary_registrant->ID() : '', |
|
294 | + // Your own invoice or tracking number |
|
295 | + 'invnum' => wp_generate_password(12, false),// $transaction->ID(), |
|
296 | + // URL for receiving Instant Payment Notifications. This overrides what your profile is set to use. |
|
297 | + 'notifyurl' => '', |
|
298 | + 'buttonsource' => 'EventEspresso_SP',// EE will blow up if you change this |
|
299 | + ); |
|
300 | + // Wrap all data arrays into a single, "master" array which will be passed into the class function. |
|
301 | + $PayPalRequestData = array( |
|
302 | + 'DPFields' => $DPFields, |
|
303 | + 'CCDetails' => $CCDetails, |
|
304 | + 'PayerInfo' => $PayerInfo, |
|
305 | + 'PayerName' => $PayerName, |
|
306 | + 'BillingAddress' => $BillingAddress, |
|
307 | + 'ShippingAddress' => $ShippingAddress, |
|
308 | + 'PaymentDetails' => $PaymentDetails, |
|
309 | + 'OrderItems' => $order_items, |
|
310 | + ); |
|
311 | + $this->_log_clean_request($PayPalRequestData, $payment); |
|
312 | + try { |
|
313 | + $PayPalResult = $this->prep_and_curl_request($PayPalRequestData); |
|
314 | + // remove PCI-sensitive data so it doesn't get stored |
|
315 | + $PayPalResult = $this->_log_clean_response($PayPalResult, $payment); |
|
316 | + if (isset($PayPalResult['L_ERRORCODE0']) && $PayPalResult['L_ERRORCODE0'] === '10002') { |
|
317 | + $message = esc_html__('PayPal did not accept your API username, password, or signature. Please double-check these credentials and if debug mode is on.', 'event_espresso'); |
|
318 | + } elseif (isset($PayPalResult['L_LONGMESSAGE0'])) { |
|
319 | + $message = $PayPalResult['L_LONGMESSAGE0']; |
|
320 | + } else { |
|
321 | + $message = $PayPalResult['ACK']; |
|
322 | + } |
|
323 | + if (empty($PayPalResult['RAWRESPONSE'])) { |
|
324 | + $payment->set_status($this->_pay_model->failed_status()); |
|
325 | + $payment->set_gateway_response(esc_html__('No response received from Paypal Pro', 'event_espresso')); |
|
326 | + $payment->set_details($PayPalResult); |
|
327 | + } else { |
|
328 | + if ($this->_APICallSuccessful($PayPalResult)) { |
|
329 | + $payment->set_status($this->_pay_model->approved_status()); |
|
330 | + } else { |
|
331 | + $payment->set_status($this->_pay_model->declined_status()); |
|
332 | + } |
|
333 | + // make sure we interpret the AMT as a float, not an international string |
|
334 | + // (where periods are thousand separators) |
|
335 | + $payment->set_amount(isset($PayPalResult['AMT']) ? floatval($PayPalResult['AMT']) : 0); |
|
336 | + $payment->set_gateway_response($message); |
|
337 | + $payment->set_txn_id_chq_nmbr(isset($PayPalResult['TRANSACTIONID']) |
|
338 | + ? $PayPalResult['TRANSACTIONID'] |
|
339 | + : null); |
|
340 | + $primary_registration_code = $primary_registrant instanceof EE_Registration |
|
341 | + ? $primary_registrant->reg_code() |
|
342 | + : ''; |
|
343 | + $payment->set_extra_accntng($primary_registration_code); |
|
344 | + $payment->set_details($PayPalResult); |
|
345 | + } |
|
346 | + } catch (Exception $e) { |
|
347 | + $payment->set_status($this->_pay_model->failed_status()); |
|
348 | + $payment->set_gateway_response($e->getMessage()); |
|
349 | + } |
|
350 | + // $payment->set_status( $this->_pay_model->declined_status() ); |
|
351 | + // $payment->set_gateway_response( '' ); |
|
352 | + return $payment; |
|
353 | + } |
|
354 | + |
|
355 | + |
|
356 | + |
|
357 | + /** |
|
358 | + * CLeans out sensitive CC data and then logs it, and returns the cleaned request |
|
359 | + * |
|
360 | + * @param array $request |
|
361 | + * @param EEI_Payment $payment |
|
362 | + * @return void |
|
363 | + */ |
|
364 | + private function _log_clean_request($request, $payment) |
|
365 | + { |
|
366 | + $cleaned_request_data = $request; |
|
367 | + unset($cleaned_request_data['CCDetails']['acct']); |
|
368 | + unset($cleaned_request_data['CCDetails']['cvv2']); |
|
369 | + unset($cleaned_request_data['CCDetails']['expdate']); |
|
370 | + $this->log(array('Paypal Request' => $cleaned_request_data), $payment); |
|
371 | + } |
|
372 | + |
|
373 | + |
|
374 | + |
|
375 | + /** |
|
376 | + * Cleans the response, logs it, and returns it |
|
377 | + * |
|
378 | + * @param array $response |
|
379 | + * @param EEI_Payment $payment |
|
380 | + * @return array cleaned |
|
381 | + */ |
|
382 | + private function _log_clean_response($response, $payment) |
|
383 | + { |
|
384 | + unset($response['REQUESTDATA']['CREDITCARDTYPE']); |
|
385 | + unset($response['REQUESTDATA']['ACCT']); |
|
386 | + unset($response['REQUESTDATA']['EXPDATE']); |
|
387 | + unset($response['REQUESTDATA']['CVV2']); |
|
388 | + unset($response['RAWREQUEST']); |
|
389 | + $this->log(array('Paypal Response' => $response), $payment); |
|
390 | + return $response; |
|
391 | + } |
|
392 | + |
|
393 | + |
|
394 | + |
|
395 | + /** |
|
396 | + * @param $DataArray |
|
397 | + * @return array |
|
398 | + */ |
|
399 | + private function prep_and_curl_request($DataArray) |
|
400 | + { |
|
401 | + // Create empty holders for each portion of the NVP string |
|
402 | + $DPFieldsNVP = '&METHOD=DoDirectPayment&BUTTONSOURCE=AngellEYE_PHP_Class_DDP'; |
|
403 | + $CCDetailsNVP = ''; |
|
404 | + $PayerInfoNVP = ''; |
|
405 | + $PayerNameNVP = ''; |
|
406 | + $BillingAddressNVP = ''; |
|
407 | + $ShippingAddressNVP = ''; |
|
408 | + $PaymentDetailsNVP = ''; |
|
409 | + $OrderItemsNVP = ''; |
|
410 | + $Secure3DNVP = ''; |
|
411 | + // DP Fields |
|
412 | + $DPFields = isset($DataArray['DPFields']) ? $DataArray['DPFields'] : array(); |
|
413 | + foreach ($DPFields as $DPFieldsVar => $DPFieldsVal) { |
|
414 | + $DPFieldsNVP .= '&' . strtoupper($DPFieldsVar) . '=' . urlencode($DPFieldsVal); |
|
415 | + } |
|
416 | + // CC Details Fields |
|
417 | + $CCDetails = isset($DataArray['CCDetails']) ? $DataArray['CCDetails'] : array(); |
|
418 | + foreach ($CCDetails as $CCDetailsVar => $CCDetailsVal) { |
|
419 | + $CCDetailsNVP .= '&' . strtoupper($CCDetailsVar) . '=' . urlencode($CCDetailsVal); |
|
420 | + } |
|
421 | + // PayerInfo Type Fields |
|
422 | + $PayerInfo = isset($DataArray['PayerInfo']) ? $DataArray['PayerInfo'] : array(); |
|
423 | + foreach ($PayerInfo as $PayerInfoVar => $PayerInfoVal) { |
|
424 | + $PayerInfoNVP .= '&' . strtoupper($PayerInfoVar) . '=' . urlencode($PayerInfoVal); |
|
425 | + } |
|
426 | + // Payer Name Fields |
|
427 | + $PayerName = isset($DataArray['PayerName']) ? $DataArray['PayerName'] : array(); |
|
428 | + foreach ($PayerName as $PayerNameVar => $PayerNameVal) { |
|
429 | + $PayerNameNVP .= '&' . strtoupper($PayerNameVar) . '=' . urlencode($PayerNameVal); |
|
430 | + } |
|
431 | + // Address Fields (Billing) |
|
432 | + $BillingAddress = isset($DataArray['BillingAddress']) ? $DataArray['BillingAddress'] : array(); |
|
433 | + foreach ($BillingAddress as $BillingAddressVar => $BillingAddressVal) { |
|
434 | + $BillingAddressNVP .= '&' . strtoupper($BillingAddressVar) . '=' . urlencode($BillingAddressVal); |
|
435 | + } |
|
436 | + // Payment Details Type Fields |
|
437 | + $PaymentDetails = isset($DataArray['PaymentDetails']) ? $DataArray['PaymentDetails'] : array(); |
|
438 | + foreach ($PaymentDetails as $PaymentDetailsVar => $PaymentDetailsVal) { |
|
439 | + $PaymentDetailsNVP .= '&' . strtoupper($PaymentDetailsVar) . '=' . urlencode($PaymentDetailsVal); |
|
440 | + } |
|
441 | + // Payment Details Item Type Fields |
|
442 | + $OrderItems = isset($DataArray['OrderItems']) ? $DataArray['OrderItems'] : array(); |
|
443 | + $n = 0; |
|
444 | + foreach ($OrderItems as $OrderItemsVar => $OrderItemsVal) { |
|
445 | + $CurrentItem = $OrderItems[ $OrderItemsVar ]; |
|
446 | + foreach ($CurrentItem as $CurrentItemVar => $CurrentItemVal) { |
|
447 | + $OrderItemsNVP .= '&' . strtoupper($CurrentItemVar) . $n . '=' . urlencode($CurrentItemVal); |
|
448 | + } |
|
449 | + $n++; |
|
450 | + } |
|
451 | + // Ship To Address Fields |
|
452 | + $ShippingAddress = isset($DataArray['ShippingAddress']) ? $DataArray['ShippingAddress'] : array(); |
|
453 | + foreach ($ShippingAddress as $ShippingAddressVar => $ShippingAddressVal) { |
|
454 | + $ShippingAddressNVP .= '&' . strtoupper($ShippingAddressVar) . '=' . urlencode($ShippingAddressVal); |
|
455 | + } |
|
456 | + // 3D Secure Fields |
|
457 | + $Secure3D = isset($DataArray['Secure3D']) ? $DataArray['Secure3D'] : array(); |
|
458 | + foreach ($Secure3D as $Secure3DVar => $Secure3DVal) { |
|
459 | + $Secure3DNVP .= '&' . strtoupper($Secure3DVar) . '=' . urlencode($Secure3DVal); |
|
460 | + } |
|
461 | + // Now that we have each chunk we need to go ahead and append them all together for our entire NVP string |
|
462 | + $NVPRequest = 'USER=' |
|
463 | + . $this->_api_username |
|
464 | + . '&PWD=' |
|
465 | + . $this->_api_password |
|
466 | + . '&VERSION=64.0' |
|
467 | + . '&SIGNATURE=' |
|
468 | + . $this->_api_signature |
|
469 | + . $DPFieldsNVP |
|
470 | + . $CCDetailsNVP |
|
471 | + . $PayerInfoNVP |
|
472 | + . $PayerNameNVP |
|
473 | + . $BillingAddressNVP |
|
474 | + . $PaymentDetailsNVP |
|
475 | + . $OrderItemsNVP |
|
476 | + . $ShippingAddressNVP |
|
477 | + . $Secure3DNVP; |
|
478 | + $NVPResponse = $this->_CURLRequest($NVPRequest); |
|
479 | + $NVPRequestArray = $this->_NVPToArray($NVPRequest); |
|
480 | + $NVPResponseArray = $this->_NVPToArray($NVPResponse); |
|
481 | + $Errors = $this->_GetErrors($NVPResponseArray); |
|
482 | + $NVPResponseArray['ERRORS'] = $Errors; |
|
483 | + $NVPResponseArray['REQUESTDATA'] = $NVPRequestArray; |
|
484 | + $NVPResponseArray['RAWREQUEST'] = $NVPRequest; |
|
485 | + $NVPResponseArray['RAWRESPONSE'] = $NVPResponse; |
|
486 | + return $NVPResponseArray; |
|
487 | + } |
|
488 | + |
|
489 | + |
|
490 | + |
|
491 | + /** |
|
492 | + * @param $Request |
|
493 | + * @return mixed |
|
494 | + */ |
|
495 | + private function _CURLRequest($Request) |
|
496 | + { |
|
497 | + $EndPointURL = $this->_debug_mode ? 'https://api-3t.sandbox.paypal.com/nvp' : 'https://api-3t.paypal.com/nvp'; |
|
498 | + $curl = curl_init(); |
|
499 | + curl_setopt($curl, CURLOPT_VERBOSE, apply_filters('FHEE__EEG_Paypal_Pro__CurlRequest__CURLOPT_VERBOSE', true)); |
|
500 | + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
501 | + curl_setopt($curl, CURLOPT_TIMEOUT, 60); |
|
502 | + curl_setopt($curl, CURLOPT_URL, $EndPointURL); |
|
503 | + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
|
504 | + curl_setopt($curl, CURLOPT_POSTFIELDS, $Request); |
|
505 | + curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
506 | + // execute the curl POST |
|
507 | + $Response = curl_exec($curl); |
|
508 | + curl_close($curl); |
|
509 | + return $Response; |
|
510 | + } |
|
511 | + |
|
512 | + |
|
513 | + |
|
514 | + /** |
|
515 | + * @param $NVPString |
|
516 | + * @return array |
|
517 | + */ |
|
518 | + private function _NVPToArray($NVPString) |
|
519 | + { |
|
520 | + // prepare responses into array |
|
521 | + $proArray = array(); |
|
522 | + while (strlen($NVPString)) { |
|
523 | + // name |
|
524 | + $keypos = strpos($NVPString, '='); |
|
525 | + $keyval = substr($NVPString, 0, $keypos); |
|
526 | + // value |
|
527 | + $valuepos = strpos($NVPString, '&') ? strpos($NVPString, '&') : strlen($NVPString); |
|
528 | + $valval = substr($NVPString, $keypos + 1, $valuepos - $keypos - 1); |
|
529 | + // decoding the response |
|
530 | + $proArray[ $keyval ] = urldecode($valval); |
|
531 | + $NVPString = substr($NVPString, $valuepos + 1, strlen($NVPString)); |
|
532 | + } |
|
533 | + return $proArray; |
|
534 | + } |
|
535 | + |
|
536 | + |
|
537 | + |
|
538 | + /** |
|
539 | + * @param array $PayPalResult |
|
540 | + * @return bool |
|
541 | + */ |
|
542 | + private function _APICallSuccessful($PayPalResult) |
|
543 | + { |
|
544 | + $approved = false; |
|
545 | + // check main response message from PayPal |
|
546 | + if (isset($PayPalResult['ACK']) && ! empty($PayPalResult['ACK'])) { |
|
547 | + $ack = strtoupper($PayPalResult['ACK']); |
|
548 | + $approved = ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING' || $ack == 'PARTIALSUCCESS') ? true : false; |
|
549 | + } |
|
550 | + return $approved; |
|
551 | + } |
|
552 | + |
|
553 | + |
|
554 | + |
|
555 | + /** |
|
556 | + * @param $DataArray |
|
557 | + * @return array |
|
558 | + */ |
|
559 | + private function _GetErrors($DataArray) |
|
560 | + { |
|
561 | + $Errors = array(); |
|
562 | + $n = 0; |
|
563 | + while (isset($DataArray[ 'L_ERRORCODE' . $n . '' ])) { |
|
564 | + $LErrorCode = isset($DataArray[ 'L_ERRORCODE' . $n . '' ]) ? $DataArray[ 'L_ERRORCODE' . $n . '' ] : ''; |
|
565 | + $LShortMessage = isset($DataArray[ 'L_SHORTMESSAGE' . $n . '' ]) |
|
566 | + ? $DataArray[ 'L_SHORTMESSAGE' . $n . '' ] |
|
567 | + : ''; |
|
568 | + $LLongMessage = isset($DataArray[ 'L_LONGMESSAGE' . $n . '' ]) |
|
569 | + ? $DataArray[ 'L_LONGMESSAGE' . $n . '' ] |
|
570 | + : ''; |
|
571 | + $LSeverityCode = isset($DataArray[ 'L_SEVERITYCODE' . $n . '' ]) |
|
572 | + ? $DataArray[ 'L_SEVERITYCODE' . $n . '' ] |
|
573 | + : ''; |
|
574 | + $CurrentItem = array( |
|
575 | + 'L_ERRORCODE' => $LErrorCode, |
|
576 | + 'L_SHORTMESSAGE' => $LShortMessage, |
|
577 | + 'L_LONGMESSAGE' => $LLongMessage, |
|
578 | + 'L_SEVERITYCODE' => $LSeverityCode, |
|
579 | + ); |
|
580 | + array_push($Errors, $CurrentItem); |
|
581 | + $n++; |
|
582 | + } |
|
583 | + return $Errors; |
|
584 | + } |
|
585 | + |
|
586 | + |
|
587 | + |
|
588 | + /** |
|
589 | + * nothing to see here... move along.... |
|
590 | + * |
|
591 | + * @access protected |
|
592 | + * @param $Errors |
|
593 | + * @return string |
|
594 | + */ |
|
595 | + private function _DisplayErrors($Errors) |
|
596 | + { |
|
597 | + $error = ''; |
|
598 | + foreach ($Errors as $ErrorVar => $ErrorVal) { |
|
599 | + $CurrentError = $Errors[ $ErrorVar ]; |
|
600 | + foreach ($CurrentError as $CurrentErrorVar => $CurrentErrorVal) { |
|
601 | + $CurrentVarName = ''; |
|
602 | + if ($CurrentErrorVar == 'L_ERRORCODE') { |
|
603 | + $CurrentVarName = 'Error Code'; |
|
604 | + } elseif ($CurrentErrorVar == 'L_SHORTMESSAGE') { |
|
605 | + $CurrentVarName = 'Short Message'; |
|
606 | + } elseif ($CurrentErrorVar == 'L_LONGMESSAGE') { |
|
607 | + $CurrentVarName = 'Long Message'; |
|
608 | + } elseif ($CurrentErrorVar == 'L_SEVERITYCODE') { |
|
609 | + $CurrentVarName = 'Severity Code'; |
|
610 | + } |
|
611 | + $error .= '<br />' . $CurrentVarName . ': ' . $CurrentErrorVal; |
|
612 | + } |
|
613 | + } |
|
614 | + return $error; |
|
615 | + } |
|
616 | 616 | } |