@@ -11,72 +11,72 @@ |
||
11 | 11 | */ |
12 | 12 | class EE_Messages_Email_Newsletter_Validator extends EE_Messages_Validator |
13 | 13 | { |
14 | - /** |
|
15 | - * EE_Messages_Email_Newsletter_Validator constructor. |
|
16 | - * |
|
17 | - * @param array $fields |
|
18 | - * @param string $context |
|
19 | - * @throws EE_Error |
|
20 | - * @throws ReflectionException |
|
21 | - */ |
|
22 | - public function __construct(array $fields, $context) |
|
23 | - { |
|
24 | - $this->_m_name = 'email'; |
|
25 | - $this->_mt_name = 'newsletter'; |
|
14 | + /** |
|
15 | + * EE_Messages_Email_Newsletter_Validator constructor. |
|
16 | + * |
|
17 | + * @param array $fields |
|
18 | + * @param string $context |
|
19 | + * @throws EE_Error |
|
20 | + * @throws ReflectionException |
|
21 | + */ |
|
22 | + public function __construct(array $fields, $context) |
|
23 | + { |
|
24 | + $this->_m_name = 'email'; |
|
25 | + $this->_mt_name = 'newsletter'; |
|
26 | 26 | |
27 | - parent::__construct($fields, $context); |
|
28 | - } |
|
27 | + parent::__construct($fields, $context); |
|
28 | + } |
|
29 | 29 | |
30 | - /** |
|
31 | - * custom validator (restricting what was originally set by the messenger) |
|
32 | - */ |
|
33 | - protected function _modify_validator() |
|
34 | - { |
|
35 | - if ($this->_context === 'attendee') { |
|
36 | - $this->_valid_shortcodes_modifier[ $this->_context ]['from'] = array( |
|
37 | - 'recipient_details', |
|
38 | - 'email', |
|
39 | - 'organization', |
|
40 | - ); |
|
41 | - } |
|
30 | + /** |
|
31 | + * custom validator (restricting what was originally set by the messenger) |
|
32 | + */ |
|
33 | + protected function _modify_validator() |
|
34 | + { |
|
35 | + if ($this->_context === 'attendee') { |
|
36 | + $this->_valid_shortcodes_modifier[ $this->_context ]['from'] = array( |
|
37 | + 'recipient_details', |
|
38 | + 'email', |
|
39 | + 'organization', |
|
40 | + ); |
|
41 | + } |
|
42 | 42 | |
43 | - // excluded shortcodes |
|
44 | - $fields = array('to', 'from', 'subject', 'content', 'newsletter_content'); |
|
45 | - foreach ($fields as $field) { |
|
46 | - $this->_specific_shortcode_excludes[ $field ] = array( |
|
47 | - '[RECIPIENT_REGISTRATION_CODE]', |
|
48 | - '[EVENT_AUTHOR_FORMATTED_EMAIL]', |
|
49 | - '[EVENT_AUTHOR_EMAIL]', |
|
50 | - ); |
|
51 | - } |
|
52 | - $add_excludes = array( |
|
53 | - '[RECIPIENT_FNAME]', |
|
54 | - '[RECIPIENT_LNAME]', |
|
55 | - '[RECIPIENT_EMAIL]', |
|
56 | - '[COMPANY]', |
|
57 | - '[CO_ADD1]', |
|
58 | - '[CO_ADD2]', |
|
59 | - '[CO_CITY]', |
|
60 | - '[CO_STATE]', |
|
61 | - '[CO_ZIP]', |
|
62 | - '[CO_LOGO]', |
|
63 | - '[CO_PHONE]', |
|
64 | - '[CO_LOGO_URL]', |
|
65 | - '[CO_FACEBOOK_URL]', |
|
66 | - '[CO_TWITTER_URL]', |
|
67 | - '[CO_PINTEREST_URL]', |
|
68 | - '[CO_GOOGLE_URL]', |
|
69 | - '[CO_LINKEDIN_URL]', |
|
70 | - '[CO_INSTAGRAM_URL]', |
|
71 | - ); |
|
72 | - $this->_specific_shortcode_excludes['from'] = |
|
73 | - array_merge( |
|
74 | - $this->_specific_shortcode_excludes['from'], |
|
75 | - $add_excludes |
|
76 | - ); |
|
77 | - $this->_specific_shortcode_excludes['content'] = array_merge( |
|
78 | - $this->_specific_shortcode_excludes['content'], |
|
79 | - array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]') |
|
80 | - ); |
|
81 | - } |
|
43 | + // excluded shortcodes |
|
44 | + $fields = array('to', 'from', 'subject', 'content', 'newsletter_content'); |
|
45 | + foreach ($fields as $field) { |
|
46 | + $this->_specific_shortcode_excludes[ $field ] = array( |
|
47 | + '[RECIPIENT_REGISTRATION_CODE]', |
|
48 | + '[EVENT_AUTHOR_FORMATTED_EMAIL]', |
|
49 | + '[EVENT_AUTHOR_EMAIL]', |
|
50 | + ); |
|
51 | + } |
|
52 | + $add_excludes = array( |
|
53 | + '[RECIPIENT_FNAME]', |
|
54 | + '[RECIPIENT_LNAME]', |
|
55 | + '[RECIPIENT_EMAIL]', |
|
56 | + '[COMPANY]', |
|
57 | + '[CO_ADD1]', |
|
58 | + '[CO_ADD2]', |
|
59 | + '[CO_CITY]', |
|
60 | + '[CO_STATE]', |
|
61 | + '[CO_ZIP]', |
|
62 | + '[CO_LOGO]', |
|
63 | + '[CO_PHONE]', |
|
64 | + '[CO_LOGO_URL]', |
|
65 | + '[CO_FACEBOOK_URL]', |
|
66 | + '[CO_TWITTER_URL]', |
|
67 | + '[CO_PINTEREST_URL]', |
|
68 | + '[CO_GOOGLE_URL]', |
|
69 | + '[CO_LINKEDIN_URL]', |
|
70 | + '[CO_INSTAGRAM_URL]', |
|
71 | + ); |
|
72 | + $this->_specific_shortcode_excludes['from'] = |
|
73 | + array_merge( |
|
74 | + $this->_specific_shortcode_excludes['from'], |
|
75 | + $add_excludes |
|
76 | + ); |
|
77 | + $this->_specific_shortcode_excludes['content'] = array_merge( |
|
78 | + $this->_specific_shortcode_excludes['content'], |
|
79 | + array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]') |
|
80 | + ); |
|
81 | + } |
|
82 | 82 | } |
@@ -33,7 +33,7 @@ discard block |
||
33 | 33 | protected function _modify_validator() |
34 | 34 | { |
35 | 35 | if ($this->_context === 'attendee') { |
36 | - $this->_valid_shortcodes_modifier[ $this->_context ]['from'] = array( |
|
36 | + $this->_valid_shortcodes_modifier[$this->_context]['from'] = array( |
|
37 | 37 | 'recipient_details', |
38 | 38 | 'email', |
39 | 39 | 'organization', |
@@ -43,7 +43,7 @@ discard block |
||
43 | 43 | // excluded shortcodes |
44 | 44 | $fields = array('to', 'from', 'subject', 'content', 'newsletter_content'); |
45 | 45 | foreach ($fields as $field) { |
46 | - $this->_specific_shortcode_excludes[ $field ] = array( |
|
46 | + $this->_specific_shortcode_excludes[$field] = array( |
|
47 | 47 | '[RECIPIENT_REGISTRATION_CODE]', |
48 | 48 | '[EVENT_AUTHOR_FORMATTED_EMAIL]', |
49 | 49 | '[EVENT_AUTHOR_EMAIL]', |
@@ -114,11 +114,11 @@ discard block |
||
114 | 114 | |
115 | 115 | foreach ($this->_valid_shortcodes as $context => $shortcodes) { |
116 | 116 | foreach ($shortcodes as $key => $shortcode) { |
117 | - if (! in_array($shortcode, $included_shortcodes, true)) { |
|
118 | - unset($this->_valid_shortcodes[ $context ][ $key ]); |
|
117 | + if ( ! in_array($shortcode, $included_shortcodes, true)) { |
|
118 | + unset($this->_valid_shortcodes[$context][$key]); |
|
119 | 119 | } |
120 | 120 | } |
121 | - $this->_valid_shortcodes[ $context ][] = 'newsletter'; |
|
121 | + $this->_valid_shortcodes[$context][] = 'newsletter'; |
|
122 | 122 | } |
123 | 123 | } |
124 | 124 | |
@@ -148,23 +148,23 @@ discard block |
||
148 | 148 | ? $details['att_obj'] |
149 | 149 | : null; |
150 | 150 | |
151 | - if (! $attendee instanceof EE_Attendee) { |
|
151 | + if ( ! $attendee instanceof EE_Attendee) { |
|
152 | 152 | continue; |
153 | 153 | } |
154 | 154 | |
155 | 155 | // set $aee from attendee object |
156 | 156 | $aee['att_obj'] = $attendee; |
157 | - $aee['reg_objs'] = isset($this->_data->attendees[ $attendee->ID() ]['reg_objs']) |
|
158 | - ? $this->_data->attendees[ $attendee->ID() ]['reg_objs'] |
|
157 | + $aee['reg_objs'] = isset($this->_data->attendees[$attendee->ID()]['reg_objs']) |
|
158 | + ? $this->_data->attendees[$attendee->ID()]['reg_objs'] |
|
159 | 159 | : array(); |
160 | 160 | $aee['attendee_email'] = $attendee->email(); |
161 | - $aee['tkt_objs'] = isset($this->_data->attendees[ $attendee->ID() ]['tkt_objs']) |
|
162 | - ? $this->_data->attendees[ $attendee->ID() ]['tkt_objs'] |
|
161 | + $aee['tkt_objs'] = isset($this->_data->attendees[$attendee->ID()]['tkt_objs']) |
|
162 | + ? $this->_data->attendees[$attendee->ID()]['tkt_objs'] |
|
163 | 163 | : array(); |
164 | 164 | |
165 | - if (isset($this->_data->attendees[ $attendee->ID() ]['evt_objs'])) { |
|
166 | - $aee['evt_objs'] = $this->_data->attendees[ $attendee->ID() ]['evt_objs']; |
|
167 | - $aee['events'] = $this->_data->attendees[ $attendee->ID() ]['evt_objs']; |
|
165 | + if (isset($this->_data->attendees[$attendee->ID()]['evt_objs'])) { |
|
166 | + $aee['evt_objs'] = $this->_data->attendees[$attendee->ID()]['evt_objs']; |
|
167 | + $aee['events'] = $this->_data->attendees[$attendee->ID()]['evt_objs']; |
|
168 | 168 | } else { |
169 | 169 | $aee['evt_objs'] = $aee['events'] = array(); |
170 | 170 | } |
@@ -199,8 +199,8 @@ discard block |
||
199 | 199 | $excluded_fields = array( |
200 | 200 | 'email' => array('cc') |
201 | 201 | ); |
202 | - return isset($excluded_fields[ $messenger_name ]) |
|
203 | - ? $excluded_fields[ $messenger_name ] |
|
202 | + return isset($excluded_fields[$messenger_name]) |
|
203 | + ? $excluded_fields[$messenger_name] |
|
204 | 204 | : parent::excludedFieldsForMessenger($messenger_name); |
205 | 205 | } |
206 | 206 | } |
@@ -12,194 +12,194 @@ |
||
12 | 12 | */ |
13 | 13 | class EE_Newsletter_message_type extends EE_message_type |
14 | 14 | { |
15 | - public function __construct() |
|
16 | - { |
|
17 | - $this->name = 'newsletter'; |
|
18 | - $this->description = esc_html__( |
|
19 | - 'Batch message type messages are triggered manually by the admin for sending notifications to a selected group of recipients. This should only be used for more general notification type messages that contain information specific for the recipients. For "newsletter" type messages we recommend using an email list service like MailChimp, because sending non-related mail-outs to contacts increases the risk of your site domain getting added to spam lists, which will prevent messages getting to users.', |
|
20 | - 'event_espresso' |
|
21 | - ); |
|
22 | - $this->label = array( |
|
23 | - 'singular' => esc_html__('batch', 'event_espresso'), |
|
24 | - 'plural' => esc_html__('batches', 'event_espresso'), |
|
25 | - ); |
|
26 | - $this->_master_templates = array( |
|
27 | - 'email' => 'registration', |
|
28 | - ); |
|
29 | - |
|
30 | - parent::__construct(); |
|
31 | - } |
|
32 | - |
|
33 | - |
|
34 | - /** |
|
35 | - * Sets admin_registered_pages property |
|
36 | - */ |
|
37 | - protected function _set_admin_pages() |
|
38 | - { |
|
39 | - $this->admin_registered_pages = array(); // no admin pages to register this with. |
|
40 | - } |
|
41 | - |
|
42 | - |
|
43 | - /** |
|
44 | - * Sets property related to data handler. |
|
45 | - */ |
|
46 | - protected function _set_data_handler() |
|
47 | - { |
|
48 | - $this->_data_handler = 'Registrations'; |
|
49 | - $this->_single_message = $this->_data instanceof EE_Registration; |
|
50 | - } |
|
51 | - |
|
52 | - |
|
53 | - /** |
|
54 | - * Returns the data for the given context for this message type. |
|
55 | - * @param string $context |
|
56 | - * @param EE_Registration $registration |
|
57 | - * @param int $id |
|
58 | - * @return array|mixed |
|
59 | - */ |
|
60 | - protected function _get_data_for_context($context, EE_Registration $registration, $id) |
|
61 | - { |
|
62 | - // newsletter message type data handler is 'Registrations' and it expects an array of EE_Registration objects. |
|
63 | - return array($registration); |
|
64 | - } |
|
65 | - |
|
66 | - |
|
67 | - /** |
|
68 | - * Sets the admin settings fields property for this message type. |
|
69 | - */ |
|
70 | - protected function _set_admin_settings_fields() |
|
71 | - { |
|
72 | - $this->_admin_settings_fields = array(); |
|
73 | - } |
|
74 | - |
|
75 | - |
|
76 | - /** |
|
77 | - * Sets the contexts for this message type. |
|
78 | - */ |
|
79 | - protected function _set_contexts() |
|
80 | - { |
|
81 | - $this->_context_label = array( |
|
82 | - 'label' => esc_html__('recipient', 'event_espresso'), |
|
83 | - 'plural' => esc_html__('recipients', 'event_espresso'), |
|
84 | - 'description' => esc_html__('Recipient\'s are who will receive the message.', 'event_espresso'), |
|
85 | - ); |
|
86 | - |
|
87 | - $this->_contexts = array( |
|
88 | - 'attendee' => array( |
|
89 | - 'label' => esc_html__('Registrant', 'event_espresso'), |
|
90 | - 'description' => esc_html__('This template goes to selected registrants.', 'event_espresso'), |
|
91 | - ), |
|
92 | - ); |
|
93 | - } |
|
94 | - |
|
95 | - |
|
96 | - /** |
|
97 | - * used to set the valid shortcodes. |
|
98 | - * For the newsletter message type we only have two valid shortcode libraries in use, recipient details and |
|
99 | - * organization. That's it! |
|
100 | - * |
|
101 | - * @since 4.3.0 |
|
102 | - * @return void |
|
103 | - */ |
|
104 | - protected function _set_valid_shortcodes() |
|
105 | - { |
|
106 | - parent::_set_valid_shortcodes(); |
|
107 | - |
|
108 | - $included_shortcodes = array( |
|
109 | - 'recipient_details', |
|
110 | - 'organization', |
|
111 | - 'newsletter', |
|
112 | - ); |
|
113 | - |
|
114 | - foreach ($this->_valid_shortcodes as $context => $shortcodes) { |
|
115 | - foreach ($shortcodes as $key => $shortcode) { |
|
116 | - if (! in_array($shortcode, $included_shortcodes, true)) { |
|
117 | - unset($this->_valid_shortcodes[ $context ][ $key ]); |
|
118 | - } |
|
119 | - } |
|
120 | - $this->_valid_shortcodes[ $context ][] = 'newsletter'; |
|
121 | - } |
|
122 | - } |
|
123 | - |
|
124 | - |
|
125 | - /** |
|
126 | - * Override default _attendee_addressees in EE_message_type because we want to loop through the registrations |
|
127 | - * for EE_message_type. |
|
128 | - * |
|
129 | - * @return array |
|
130 | - * @throws EE_Error |
|
131 | - * @throws InvalidArgumentException |
|
132 | - * @throws ReflectionException |
|
133 | - * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
134 | - * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
135 | - */ |
|
136 | - protected function _attendee_addressees() |
|
137 | - { |
|
138 | - $addressee = array(); |
|
139 | - |
|
140 | - // looping through registrations |
|
141 | - foreach ($this->_data->registrations as $reg_id => $details) { |
|
142 | - // set $attendee array to blank on each loop |
|
143 | - $aee = array(); |
|
144 | - |
|
145 | - // need to get the attendee from this registration. |
|
146 | - $attendee = isset($details['att_obj']) && $details['att_obj'] instanceof EE_Attendee |
|
147 | - ? $details['att_obj'] |
|
148 | - : null; |
|
149 | - |
|
150 | - if (! $attendee instanceof EE_Attendee) { |
|
151 | - continue; |
|
152 | - } |
|
153 | - |
|
154 | - // set $aee from attendee object |
|
155 | - $aee['att_obj'] = $attendee; |
|
156 | - $aee['reg_objs'] = isset($this->_data->attendees[ $attendee->ID() ]['reg_objs']) |
|
157 | - ? $this->_data->attendees[ $attendee->ID() ]['reg_objs'] |
|
158 | - : array(); |
|
159 | - $aee['attendee_email'] = $attendee->email(); |
|
160 | - $aee['tkt_objs'] = isset($this->_data->attendees[ $attendee->ID() ]['tkt_objs']) |
|
161 | - ? $this->_data->attendees[ $attendee->ID() ]['tkt_objs'] |
|
162 | - : array(); |
|
163 | - |
|
164 | - if (isset($this->_data->attendees[ $attendee->ID() ]['evt_objs'])) { |
|
165 | - $aee['evt_objs'] = $this->_data->attendees[ $attendee->ID() ]['evt_objs']; |
|
166 | - $aee['events'] = $this->_data->attendees[ $attendee->ID() ]['evt_objs']; |
|
167 | - } else { |
|
168 | - $aee['evt_objs'] = $aee['events'] = array(); |
|
169 | - } |
|
170 | - |
|
171 | - $aee['reg_obj'] = isset($details['reg_obj']) |
|
172 | - ? $details['reg_obj'] |
|
173 | - : null; |
|
174 | - $aee['attendees'] = $this->_data->attendees; |
|
175 | - |
|
176 | - // merge in the primary attendee data |
|
177 | - $aee = array_merge($this->_default_addressee_data, $aee); |
|
178 | - |
|
179 | - // make sure txn is set |
|
180 | - if (empty($aee['txn']) && $aee['reg_obj'] instanceof EE_Registration) { |
|
181 | - $aee['txn'] = $aee['reg_obj']->transaction(); |
|
182 | - } |
|
183 | - |
|
184 | - $addressee[] = new EE_Messages_Addressee($aee); |
|
185 | - } |
|
186 | - return $addressee; |
|
187 | - } |
|
188 | - |
|
189 | - /** |
|
190 | - * Allows a message type to specifically exclude template fields for the provided messenger. |
|
191 | - * Filtered so this can be programmatically altered as well. |
|
192 | - * |
|
193 | - * @param string $messenger_name name of messenger |
|
194 | - * @return array |
|
195 | - */ |
|
196 | - public function excludedFieldsForMessenger($messenger_name) |
|
197 | - { |
|
198 | - $excluded_fields = array( |
|
199 | - 'email' => array('cc') |
|
200 | - ); |
|
201 | - return isset($excluded_fields[ $messenger_name ]) |
|
202 | - ? $excluded_fields[ $messenger_name ] |
|
203 | - : parent::excludedFieldsForMessenger($messenger_name); |
|
204 | - } |
|
15 | + public function __construct() |
|
16 | + { |
|
17 | + $this->name = 'newsletter'; |
|
18 | + $this->description = esc_html__( |
|
19 | + 'Batch message type messages are triggered manually by the admin for sending notifications to a selected group of recipients. This should only be used for more general notification type messages that contain information specific for the recipients. For "newsletter" type messages we recommend using an email list service like MailChimp, because sending non-related mail-outs to contacts increases the risk of your site domain getting added to spam lists, which will prevent messages getting to users.', |
|
20 | + 'event_espresso' |
|
21 | + ); |
|
22 | + $this->label = array( |
|
23 | + 'singular' => esc_html__('batch', 'event_espresso'), |
|
24 | + 'plural' => esc_html__('batches', 'event_espresso'), |
|
25 | + ); |
|
26 | + $this->_master_templates = array( |
|
27 | + 'email' => 'registration', |
|
28 | + ); |
|
29 | + |
|
30 | + parent::__construct(); |
|
31 | + } |
|
32 | + |
|
33 | + |
|
34 | + /** |
|
35 | + * Sets admin_registered_pages property |
|
36 | + */ |
|
37 | + protected function _set_admin_pages() |
|
38 | + { |
|
39 | + $this->admin_registered_pages = array(); // no admin pages to register this with. |
|
40 | + } |
|
41 | + |
|
42 | + |
|
43 | + /** |
|
44 | + * Sets property related to data handler. |
|
45 | + */ |
|
46 | + protected function _set_data_handler() |
|
47 | + { |
|
48 | + $this->_data_handler = 'Registrations'; |
|
49 | + $this->_single_message = $this->_data instanceof EE_Registration; |
|
50 | + } |
|
51 | + |
|
52 | + |
|
53 | + /** |
|
54 | + * Returns the data for the given context for this message type. |
|
55 | + * @param string $context |
|
56 | + * @param EE_Registration $registration |
|
57 | + * @param int $id |
|
58 | + * @return array|mixed |
|
59 | + */ |
|
60 | + protected function _get_data_for_context($context, EE_Registration $registration, $id) |
|
61 | + { |
|
62 | + // newsletter message type data handler is 'Registrations' and it expects an array of EE_Registration objects. |
|
63 | + return array($registration); |
|
64 | + } |
|
65 | + |
|
66 | + |
|
67 | + /** |
|
68 | + * Sets the admin settings fields property for this message type. |
|
69 | + */ |
|
70 | + protected function _set_admin_settings_fields() |
|
71 | + { |
|
72 | + $this->_admin_settings_fields = array(); |
|
73 | + } |
|
74 | + |
|
75 | + |
|
76 | + /** |
|
77 | + * Sets the contexts for this message type. |
|
78 | + */ |
|
79 | + protected function _set_contexts() |
|
80 | + { |
|
81 | + $this->_context_label = array( |
|
82 | + 'label' => esc_html__('recipient', 'event_espresso'), |
|
83 | + 'plural' => esc_html__('recipients', 'event_espresso'), |
|
84 | + 'description' => esc_html__('Recipient\'s are who will receive the message.', 'event_espresso'), |
|
85 | + ); |
|
86 | + |
|
87 | + $this->_contexts = array( |
|
88 | + 'attendee' => array( |
|
89 | + 'label' => esc_html__('Registrant', 'event_espresso'), |
|
90 | + 'description' => esc_html__('This template goes to selected registrants.', 'event_espresso'), |
|
91 | + ), |
|
92 | + ); |
|
93 | + } |
|
94 | + |
|
95 | + |
|
96 | + /** |
|
97 | + * used to set the valid shortcodes. |
|
98 | + * For the newsletter message type we only have two valid shortcode libraries in use, recipient details and |
|
99 | + * organization. That's it! |
|
100 | + * |
|
101 | + * @since 4.3.0 |
|
102 | + * @return void |
|
103 | + */ |
|
104 | + protected function _set_valid_shortcodes() |
|
105 | + { |
|
106 | + parent::_set_valid_shortcodes(); |
|
107 | + |
|
108 | + $included_shortcodes = array( |
|
109 | + 'recipient_details', |
|
110 | + 'organization', |
|
111 | + 'newsletter', |
|
112 | + ); |
|
113 | + |
|
114 | + foreach ($this->_valid_shortcodes as $context => $shortcodes) { |
|
115 | + foreach ($shortcodes as $key => $shortcode) { |
|
116 | + if (! in_array($shortcode, $included_shortcodes, true)) { |
|
117 | + unset($this->_valid_shortcodes[ $context ][ $key ]); |
|
118 | + } |
|
119 | + } |
|
120 | + $this->_valid_shortcodes[ $context ][] = 'newsletter'; |
|
121 | + } |
|
122 | + } |
|
123 | + |
|
124 | + |
|
125 | + /** |
|
126 | + * Override default _attendee_addressees in EE_message_type because we want to loop through the registrations |
|
127 | + * for EE_message_type. |
|
128 | + * |
|
129 | + * @return array |
|
130 | + * @throws EE_Error |
|
131 | + * @throws InvalidArgumentException |
|
132 | + * @throws ReflectionException |
|
133 | + * @throws \EventEspresso\core\exceptions\InvalidDataTypeException |
|
134 | + * @throws \EventEspresso\core\exceptions\InvalidInterfaceException |
|
135 | + */ |
|
136 | + protected function _attendee_addressees() |
|
137 | + { |
|
138 | + $addressee = array(); |
|
139 | + |
|
140 | + // looping through registrations |
|
141 | + foreach ($this->_data->registrations as $reg_id => $details) { |
|
142 | + // set $attendee array to blank on each loop |
|
143 | + $aee = array(); |
|
144 | + |
|
145 | + // need to get the attendee from this registration. |
|
146 | + $attendee = isset($details['att_obj']) && $details['att_obj'] instanceof EE_Attendee |
|
147 | + ? $details['att_obj'] |
|
148 | + : null; |
|
149 | + |
|
150 | + if (! $attendee instanceof EE_Attendee) { |
|
151 | + continue; |
|
152 | + } |
|
153 | + |
|
154 | + // set $aee from attendee object |
|
155 | + $aee['att_obj'] = $attendee; |
|
156 | + $aee['reg_objs'] = isset($this->_data->attendees[ $attendee->ID() ]['reg_objs']) |
|
157 | + ? $this->_data->attendees[ $attendee->ID() ]['reg_objs'] |
|
158 | + : array(); |
|
159 | + $aee['attendee_email'] = $attendee->email(); |
|
160 | + $aee['tkt_objs'] = isset($this->_data->attendees[ $attendee->ID() ]['tkt_objs']) |
|
161 | + ? $this->_data->attendees[ $attendee->ID() ]['tkt_objs'] |
|
162 | + : array(); |
|
163 | + |
|
164 | + if (isset($this->_data->attendees[ $attendee->ID() ]['evt_objs'])) { |
|
165 | + $aee['evt_objs'] = $this->_data->attendees[ $attendee->ID() ]['evt_objs']; |
|
166 | + $aee['events'] = $this->_data->attendees[ $attendee->ID() ]['evt_objs']; |
|
167 | + } else { |
|
168 | + $aee['evt_objs'] = $aee['events'] = array(); |
|
169 | + } |
|
170 | + |
|
171 | + $aee['reg_obj'] = isset($details['reg_obj']) |
|
172 | + ? $details['reg_obj'] |
|
173 | + : null; |
|
174 | + $aee['attendees'] = $this->_data->attendees; |
|
175 | + |
|
176 | + // merge in the primary attendee data |
|
177 | + $aee = array_merge($this->_default_addressee_data, $aee); |
|
178 | + |
|
179 | + // make sure txn is set |
|
180 | + if (empty($aee['txn']) && $aee['reg_obj'] instanceof EE_Registration) { |
|
181 | + $aee['txn'] = $aee['reg_obj']->transaction(); |
|
182 | + } |
|
183 | + |
|
184 | + $addressee[] = new EE_Messages_Addressee($aee); |
|
185 | + } |
|
186 | + return $addressee; |
|
187 | + } |
|
188 | + |
|
189 | + /** |
|
190 | + * Allows a message type to specifically exclude template fields for the provided messenger. |
|
191 | + * Filtered so this can be programmatically altered as well. |
|
192 | + * |
|
193 | + * @param string $messenger_name name of messenger |
|
194 | + * @return array |
|
195 | + */ |
|
196 | + public function excludedFieldsForMessenger($messenger_name) |
|
197 | + { |
|
198 | + $excluded_fields = array( |
|
199 | + 'email' => array('cc') |
|
200 | + ); |
|
201 | + return isset($excluded_fields[ $messenger_name ]) |
|
202 | + ? $excluded_fields[ $messenger_name ] |
|
203 | + : parent::excludedFieldsForMessenger($messenger_name); |
|
204 | + } |
|
205 | 205 | } |
@@ -67,8 +67,8 @@ |
||
67 | 67 | |
68 | 68 | // remove unwanted transaction shortcode |
69 | 69 | foreach ($this->_valid_shortcodes as $context => $shortcodes) { |
70 | - if (($key = array_search('transaction', $shortcodes) ) !== false) { |
|
71 | - unset($this->_valid_shortcodes[ $context ][ $key ]); |
|
70 | + if (($key = array_search('transaction', $shortcodes)) !== false) { |
|
71 | + unset($this->_valid_shortcodes[$context][$key]); |
|
72 | 72 | } |
73 | 73 | } |
74 | 74 | } |
@@ -15,61 +15,61 @@ |
||
15 | 15 | class EE_Cancelled_Registration_message_type extends EE_Registration_Base_message_type |
16 | 16 | { |
17 | 17 | |
18 | - public function __construct() |
|
19 | - { |
|
20 | - $this->name = 'cancelled_registration'; |
|
21 | - $this->description = esc_html__('This message type is for messages sent to registrants when their registration is cancelled.', 'event_espresso'); |
|
22 | - $this->label = array( |
|
23 | - 'singular' => esc_html__('registration cancelled', 'event_espresso'), |
|
24 | - 'plural' => esc_html__('registrations cancelled', 'event_espresso') |
|
25 | - ); |
|
26 | - $this->_master_templates = array( |
|
27 | - 'email' => 'not_approved_registration' |
|
28 | - ); |
|
29 | - parent::__construct(); |
|
30 | - } |
|
18 | + public function __construct() |
|
19 | + { |
|
20 | + $this->name = 'cancelled_registration'; |
|
21 | + $this->description = esc_html__('This message type is for messages sent to registrants when their registration is cancelled.', 'event_espresso'); |
|
22 | + $this->label = array( |
|
23 | + 'singular' => esc_html__('registration cancelled', 'event_espresso'), |
|
24 | + 'plural' => esc_html__('registrations cancelled', 'event_espresso') |
|
25 | + ); |
|
26 | + $this->_master_templates = array( |
|
27 | + 'email' => 'not_approved_registration' |
|
28 | + ); |
|
29 | + parent::__construct(); |
|
30 | + } |
|
31 | 31 | |
32 | 32 | |
33 | 33 | |
34 | 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' => esc_html__('recipient', 'event_espresso'), |
|
46 | - 'plural' => esc_html__('recipients', 'event_espresso'), |
|
47 | - 'description' => esc_html__('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 | - ); |
|
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' => esc_html__('recipient', 'event_espresso'), |
|
46 | + 'plural' => esc_html__('recipients', 'event_espresso'), |
|
47 | + 'description' => esc_html__('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 | 49 | |
50 | - $this->_contexts = array( |
|
51 | - 'admin' => array( |
|
52 | - 'label' => esc_html__('Event Admin', 'event_espresso'), |
|
53 | - 'description' => esc_html__('This template is what event administrators will receive with an cancelled registration', 'event_espresso') |
|
54 | - ), |
|
55 | - 'attendee' => array( |
|
56 | - 'label' => esc_html__('Registrant', 'event_espresso'), |
|
57 | - 'description' => esc_html__('This template is what each registrant for the event will receive when their registration is cancelled.', 'event_espresso') |
|
58 | - ) |
|
59 | - ); |
|
60 | - } |
|
50 | + $this->_contexts = array( |
|
51 | + 'admin' => array( |
|
52 | + 'label' => esc_html__('Event Admin', 'event_espresso'), |
|
53 | + 'description' => esc_html__('This template is what event administrators will receive with an cancelled registration', 'event_espresso') |
|
54 | + ), |
|
55 | + 'attendee' => array( |
|
56 | + 'label' => esc_html__('Registrant', 'event_espresso'), |
|
57 | + 'description' => esc_html__('This template is what each registrant for the event will receive when their registration is cancelled.', 'event_espresso') |
|
58 | + ) |
|
59 | + ); |
|
60 | + } |
|
61 | 61 | |
62 | 62 | |
63 | 63 | |
64 | - protected function _set_valid_shortcodes() |
|
65 | - { |
|
66 | - parent::_set_valid_shortcodes(); |
|
64 | + protected function _set_valid_shortcodes() |
|
65 | + { |
|
66 | + parent::_set_valid_shortcodes(); |
|
67 | 67 | |
68 | - // remove unwanted transaction shortcode |
|
69 | - foreach ($this->_valid_shortcodes as $context => $shortcodes) { |
|
70 | - if (($key = array_search('transaction', $shortcodes) ) !== false) { |
|
71 | - unset($this->_valid_shortcodes[ $context ][ $key ]); |
|
72 | - } |
|
73 | - } |
|
74 | - } |
|
68 | + // remove unwanted transaction shortcode |
|
69 | + foreach ($this->_valid_shortcodes as $context => $shortcodes) { |
|
70 | + if (($key = array_search('transaction', $shortcodes) ) !== false) { |
|
71 | + unset($this->_valid_shortcodes[ $context ][ $key ]); |
|
72 | + } |
|
73 | + } |
|
74 | + } |
|
75 | 75 | } |
@@ -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 |
@@ -17,85 +17,85 @@ |
||
17 | 17 | */ |
18 | 18 | class EE_Question_Shortcodes extends EE_Shortcodes |
19 | 19 | { |
20 | - /** |
|
21 | - * _init_props |
|
22 | - * |
|
23 | - * @access protected |
|
24 | - * @return void |
|
25 | - */ |
|
26 | - protected function _init_props() |
|
27 | - { |
|
28 | - $this->label = esc_html__('Attendee Shortcodes', 'event_espresso'); |
|
29 | - $this->description = esc_html__('All shortcodes specific to attendee related data', 'event_espresso'); |
|
30 | - $this->_shortcodes = array( |
|
31 | - '[QUESTION]' => esc_html__('Will parse to a question.', 'event_espresso'), |
|
32 | - '[ANSWER]' => esc_html__('Will parse to the answer for a question', 'event_espresso'), |
|
33 | - ); |
|
34 | - } |
|
20 | + /** |
|
21 | + * _init_props |
|
22 | + * |
|
23 | + * @access protected |
|
24 | + * @return void |
|
25 | + */ |
|
26 | + protected function _init_props() |
|
27 | + { |
|
28 | + $this->label = esc_html__('Attendee Shortcodes', 'event_espresso'); |
|
29 | + $this->description = esc_html__('All shortcodes specific to attendee related data', 'event_espresso'); |
|
30 | + $this->_shortcodes = array( |
|
31 | + '[QUESTION]' => esc_html__('Will parse to a question.', 'event_espresso'), |
|
32 | + '[ANSWER]' => esc_html__('Will parse to the answer for a question', 'event_espresso'), |
|
33 | + ); |
|
34 | + } |
|
35 | 35 | |
36 | 36 | |
37 | - /** |
|
38 | - * This method will give parsing instructions for each shortcode defined in the _shortcodes array. Child methods |
|
39 | - * will have to take care of handling. |
|
40 | - * |
|
41 | - * @access protected |
|
42 | - * |
|
43 | - * @param string $shortcode the shortcode to be parsed. |
|
44 | - * |
|
45 | - * @return string parsed shortcode |
|
46 | - */ |
|
47 | - protected function _parser($shortcode) |
|
48 | - { |
|
37 | + /** |
|
38 | + * This method will give parsing instructions for each shortcode defined in the _shortcodes array. Child methods |
|
39 | + * will have to take care of handling. |
|
40 | + * |
|
41 | + * @access protected |
|
42 | + * |
|
43 | + * @param string $shortcode the shortcode to be parsed. |
|
44 | + * |
|
45 | + * @return string parsed shortcode |
|
46 | + */ |
|
47 | + protected function _parser($shortcode) |
|
48 | + { |
|
49 | 49 | |
50 | - if (! $this->_data instanceof EE_Answer || ! isset($this->_extra_data['data']) || ! $this->_extra_data['data'] instanceof EE_Messages_Addressee) { |
|
51 | - return ''; |
|
52 | - } |
|
50 | + if (! $this->_data instanceof EE_Answer || ! isset($this->_extra_data['data']) || ! $this->_extra_data['data'] instanceof EE_Messages_Addressee) { |
|
51 | + return ''; |
|
52 | + } |
|
53 | 53 | |
54 | - switch ($shortcode) { |
|
55 | - case '[QUESTION]': |
|
56 | - $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
57 | - ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
58 | - if (! $question instanceof EE_Question) { |
|
59 | - return ''; // get out because we can't figure out what the question is. |
|
60 | - } |
|
54 | + switch ($shortcode) { |
|
55 | + case '[QUESTION]': |
|
56 | + $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
57 | + ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
58 | + if (! $question instanceof EE_Question) { |
|
59 | + return ''; // get out because we can't figure out what the question is. |
|
60 | + } |
|
61 | 61 | |
62 | - return $question->get('QST_display_text'); |
|
63 | - break; |
|
62 | + return $question->get('QST_display_text'); |
|
63 | + break; |
|
64 | 64 | |
65 | - case '[ANSWER]': |
|
66 | - // need to get the question to determine the type of question (some questions require translation of the answer). |
|
67 | - $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
68 | - ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
69 | - if (! $question instanceof EE_Question) { |
|
70 | - return ''; // get out cause we can't figure out what the question type is! |
|
71 | - } |
|
65 | + case '[ANSWER]': |
|
66 | + // need to get the question to determine the type of question (some questions require translation of the answer). |
|
67 | + $question = isset($this->_extra_data['data']->questions[ $this->_data->ID() ]) |
|
68 | + ? $this->_extra_data['data']->questions[ $this->_data->ID() ] : $this->_data->question(); |
|
69 | + if (! $question instanceof EE_Question) { |
|
70 | + return ''; // get out cause we can't figure out what the question type is! |
|
71 | + } |
|
72 | 72 | |
73 | - // what we show for the answer depends on the question type! |
|
74 | - switch ($question->get('QST_type')) { |
|
75 | - case 'STATE': |
|
76 | - $state = EEM_State::instance()->get_one_by_ID($this->_data->get('ANS_value')); |
|
77 | - $answer = $state instanceof EE_State ? $state->name() : ''; |
|
78 | - break; |
|
73 | + // what we show for the answer depends on the question type! |
|
74 | + switch ($question->get('QST_type')) { |
|
75 | + case 'STATE': |
|
76 | + $state = EEM_State::instance()->get_one_by_ID($this->_data->get('ANS_value')); |
|
77 | + $answer = $state instanceof EE_State ? $state->name() : ''; |
|
78 | + break; |
|
79 | 79 | |
80 | - case 'COUNTRY': |
|
81 | - $country = EEM_Country::instance()->get_one_by_ID($this->_data->get('ANS_value')); |
|
82 | - $answer = $country instanceof EE_Country ? $country->name() : ''; |
|
83 | - break; |
|
80 | + case 'COUNTRY': |
|
81 | + $country = EEM_Country::instance()->get_one_by_ID($this->_data->get('ANS_value')); |
|
82 | + $answer = $country instanceof EE_Country ? $country->name() : ''; |
|
83 | + break; |
|
84 | 84 | |
85 | - default: |
|
86 | - $answer = $this->_data->get_pretty('ANS_value', 'no_wpautop'); |
|
87 | - break; |
|
88 | - } |
|
85 | + default: |
|
86 | + $answer = $this->_data->get_pretty('ANS_value', 'no_wpautop'); |
|
87 | + break; |
|
88 | + } |
|
89 | 89 | |
90 | - return apply_filters( |
|
91 | - 'FHEE__EE_Question_Shortcodes___parser__answer', |
|
92 | - $answer, |
|
93 | - $question, |
|
94 | - $this->_data |
|
95 | - ); |
|
96 | - break; |
|
97 | - } |
|
90 | + return apply_filters( |
|
91 | + 'FHEE__EE_Question_Shortcodes___parser__answer', |
|
92 | + $answer, |
|
93 | + $question, |
|
94 | + $this->_data |
|
95 | + ); |
|
96 | + break; |
|
97 | + } |
|
98 | 98 | |
99 | - return ''; |
|
100 | - } |
|
99 | + return ''; |
|
100 | + } |
|
101 | 101 | } |
@@ -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; |
@@ -13,610 +13,610 @@ |
||
13 | 13 | */ |
14 | 14 | class EEG_Paypal_Pro extends EE_Onsite_Gateway |
15 | 15 | { |
16 | - /** |
|
17 | - * @var $_paypal_api_username string |
|
18 | - */ |
|
19 | - protected $_api_username = null; |
|
20 | - |
|
21 | - /** |
|
22 | - * @var $_api_password string |
|
23 | - */ |
|
24 | - protected $_api_password = null; |
|
25 | - |
|
26 | - /** |
|
27 | - * @var $_api_signature string |
|
28 | - */ |
|
29 | - protected $_api_signature = null; |
|
30 | - |
|
31 | - /** |
|
32 | - * @var $_credit_card_types array with the keys for credit card types accepted on this account |
|
33 | - */ |
|
34 | - protected $_credit_card_types = null; |
|
35 | - |
|
36 | - protected $_currencies_supported = array( |
|
37 | - 'USD', |
|
38 | - 'GBP', |
|
39 | - 'CAD', |
|
40 | - 'AUD', |
|
41 | - 'BRL', |
|
42 | - 'CHF', |
|
43 | - 'CZK', |
|
44 | - 'DKK', |
|
45 | - 'EUR', |
|
46 | - 'HKD', |
|
47 | - 'HUF', |
|
48 | - 'ILS', |
|
49 | - 'JPY', |
|
50 | - 'MXN', |
|
51 | - 'MYR', |
|
52 | - 'NOK', |
|
53 | - 'NZD', |
|
54 | - 'PHP', |
|
55 | - 'PLN', |
|
56 | - 'SEK', |
|
57 | - 'SGD', |
|
58 | - 'THB', |
|
59 | - 'TRY', |
|
60 | - 'TWD', |
|
61 | - 'RUB', |
|
62 | - 'INR', |
|
63 | - ); |
|
64 | - |
|
65 | - |
|
66 | - |
|
67 | - /** |
|
68 | - * @param EEI_Payment $payment |
|
69 | - * @param array $billing_info { |
|
70 | - * @type string $credit_card |
|
71 | - * @type string $credit_card_type |
|
72 | - * @type string $exp_month always 2 characters |
|
73 | - * @type string $exp_year always 4 characters |
|
74 | - * @type string $cvv |
|
75 | - * } |
|
76 | - * @see parent::do_direct_payment for more info |
|
77 | - * @return EE_Payment|EEI_Payment |
|
78 | - * @throws EE_Error |
|
79 | - */ |
|
80 | - public function do_direct_payment($payment, $billing_info = null) |
|
81 | - { |
|
82 | - $transaction = $payment->transaction(); |
|
83 | - if (! $transaction instanceof EEI_Transaction) { |
|
84 | - throw new EE_Error( |
|
85 | - esc_html__('No transaction for payment while paying with PayPal Pro.', 'event_espresso') |
|
86 | - ); |
|
87 | - } |
|
88 | - $primary_registrant = $transaction->primary_registration(); |
|
89 | - if (! $primary_registrant instanceof EEI_Registration) { |
|
90 | - throw new EE_Error( |
|
91 | - esc_html__( |
|
92 | - 'No primary registration on transaction while paying with PayPal Pro.', |
|
93 | - 'event_espresso' |
|
94 | - ) |
|
95 | - ); |
|
96 | - } |
|
97 | - $attendee = $primary_registrant->attendee(); |
|
98 | - if (! $attendee instanceof EEI_Attendee) { |
|
99 | - throw new EE_Error( |
|
100 | - esc_html__( |
|
101 | - 'No attendee on primary registration while paying with PayPal Pro.', |
|
102 | - 'event_espresso' |
|
103 | - ) |
|
104 | - ); |
|
105 | - } |
|
106 | - $gateway_formatter = $this->_get_gateway_formatter(); |
|
107 | - $order_description = substr($gateway_formatter->formatOrderDescription($payment), 0, 127); |
|
108 | - // charge for the full amount. Show itemized list |
|
109 | - if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) { |
|
110 | - $item_num = 1; |
|
111 | - $total_line_item = $transaction->total_line_item(); |
|
112 | - $order_items = array(); |
|
113 | - foreach ($total_line_item->get_items() as $line_item) { |
|
114 | - // ignore line items with a quantity of 0 |
|
115 | - if ($line_item->quantity() == 0) { |
|
116 | - continue; |
|
117 | - } |
|
118 | - // For percent items, whose unit_price is 0, use the total instead. |
|
119 | - if ($line_item->is_percent()) { |
|
120 | - $unit_price = $line_item->total(); |
|
121 | - $line_item_quantity = 1; |
|
122 | - } else { |
|
123 | - $unit_price = $line_item->unit_price(); |
|
124 | - $line_item_quantity = $line_item->quantity(); |
|
125 | - } |
|
126 | - $item = array( |
|
127 | - // Item Name. 127 char max. |
|
128 | - 'l_name' => substr( |
|
129 | - $gateway_formatter->formatLineItemName($line_item, $payment), |
|
130 | - 0, |
|
131 | - 127 |
|
132 | - ), |
|
133 | - // Item description. 127 char max. |
|
134 | - 'l_desc' => substr( |
|
135 | - $gateway_formatter->formatLineItemDesc($line_item, $payment), |
|
136 | - 0, |
|
137 | - 127 |
|
138 | - ), |
|
139 | - // Cost of individual item. |
|
140 | - 'l_amt' => $unit_price, |
|
141 | - // Item Number. 127 char max. |
|
142 | - 'l_number' => $item_num++, |
|
143 | - // Item quantity. Must be any positive integer. |
|
144 | - 'l_qty' => $line_item_quantity, |
|
145 | - // Item's sales tax amount. |
|
146 | - 'l_taxamt' => '', |
|
147 | - // eBay auction number of item. |
|
148 | - 'l_ebayitemnumber' => '', |
|
149 | - // eBay transaction ID of purchased item. |
|
150 | - 'l_ebayitemauctiontxnid' => '', |
|
151 | - // eBay order ID for the item. |
|
152 | - 'l_ebayitemorderid' => '', |
|
153 | - ); |
|
154 | - // add to array of all items |
|
155 | - array_push($order_items, $item); |
|
156 | - } |
|
157 | - $item_amount = $total_line_item->get_items_total(); |
|
158 | - $tax_amount = $total_line_item->get_total_tax(); |
|
159 | - } else { |
|
160 | - $order_items = array(); |
|
161 | - $item_amount = $payment->amount(); |
|
162 | - $tax_amount = 0; |
|
163 | - array_push($order_items, array( |
|
164 | - // Item Name. 127 char max. |
|
165 | - 'l_name' => substr( |
|
166 | - $gateway_formatter->formatPartialPaymentLineItemName($payment), |
|
167 | - 0, |
|
168 | - 127 |
|
169 | - ), |
|
170 | - // Item description. 127 char max. |
|
171 | - 'l_desc' => substr( |
|
172 | - $gateway_formatter->formatPartialPaymentLineItemDesc($payment), |
|
173 | - 0, |
|
174 | - 127 |
|
175 | - ), |
|
176 | - // Cost of individual item. |
|
177 | - 'l_amt' => $payment->amount(), |
|
178 | - // Item Number. 127 char max. |
|
179 | - 'l_number' => 1, |
|
180 | - // Item quantity. Must be any positive integer. |
|
181 | - 'l_qty' => 1, |
|
182 | - )); |
|
183 | - } |
|
184 | - |
|
185 | - |
|
186 | - /** @var RequestInterface $request */ |
|
187 | - $request = LoaderFactory::getLoader()->getShared(RequestInterface::class); |
|
188 | - // Populate data arrays with order data. |
|
189 | - $DPFields = array( |
|
190 | - // How you want to obtain payment ? |
|
191 | - // Authorization indicates the payment is a basic auth subject to settlement with Auth & Capture. |
|
192 | - // Sale indicates that this is a final sale for which you are requesting payment. Default is Sale. |
|
193 | - 'paymentaction' => 'Sale', |
|
194 | - // Required. IP address of the payer's browser. |
|
195 | - 'ipaddress' => $request->ipAddress(), |
|
196 | - // Flag to determine whether you want the results returned by FMF. 1 or 0. Default is 0. |
|
197 | - 'returnfmfdetails' => '1', |
|
198 | - ); |
|
199 | - $CCDetails = array( |
|
200 | - // Required. Type of credit card. Visa, MasterCard, Discover, Amex, Maestro, Solo. |
|
201 | - // If Maestro or Solo, the currency code must be GBP. |
|
202 | - // In addition, either start date or issue number must be specified. |
|
203 | - 'creditcardtype' => $billing_info['credit_card_type'], |
|
204 | - // Required. Credit card number. No spaces or punctuation. |
|
205 | - 'acct' => $billing_info['credit_card'], |
|
206 | - // Required. Credit card expiration date. Format is MMYYYY |
|
207 | - 'expdate' => $billing_info['exp_month'] . $billing_info['exp_year'], |
|
208 | - // Requirements determined by your PayPal account settings. Security digits for credit card. |
|
209 | - 'cvv2' => $billing_info['cvv'], |
|
210 | - ); |
|
211 | - $PayerInfo = array( |
|
212 | - // Email address of payer. |
|
213 | - 'email' => $billing_info['email'], |
|
214 | - // Unique PayPal customer ID for payer. |
|
215 | - 'payerid' => '', |
|
216 | - // Status of payer. Values are verified or unverified |
|
217 | - 'payerstatus' => '', |
|
218 | - // Payer's business name. |
|
219 | - 'business' => '', |
|
220 | - ); |
|
221 | - $PayerName = array( |
|
222 | - // Payer's salutation. 20 char max. |
|
223 | - 'salutation' => '', |
|
224 | - // Payer's first name. 25 char max. |
|
225 | - 'firstname' => substr($billing_info['first_name'], 0, 25), |
|
226 | - // Payer's middle name. 25 char max. |
|
227 | - 'middlename' => '', |
|
228 | - // Payer's last name. 25 char max. |
|
229 | - 'lastname' => substr($billing_info['last_name'], 0, 25), |
|
230 | - // Payer's suffix. 12 char max. |
|
231 | - 'suffix' => '', |
|
232 | - ); |
|
233 | - $BillingAddress = array( |
|
234 | - // Required. First street address. |
|
235 | - 'street' => $billing_info['address'], |
|
236 | - // Second street address. |
|
237 | - 'street2' => $billing_info['address2'], |
|
238 | - // Required. Name of City. |
|
239 | - 'city' => $billing_info['city'], |
|
240 | - // Required. Name of State or Province. |
|
241 | - 'state' => substr($billing_info['state'], 0, 40), |
|
242 | - // Required. Country code. |
|
243 | - 'countrycode' => $billing_info['country'], |
|
244 | - // Required. Postal code of payer. |
|
245 | - 'zip' => $billing_info['zip'], |
|
246 | - ); |
|
247 | - // check if the registration info contains the needed fields for paypal pro |
|
248 | - // (see https://developer.paypal.com/docs/classic/api/merchant/DoDirectPayment_API_Operation_NVP/) |
|
249 | - if ($attendee->address() && $attendee->city() && $attendee->country_ID()) { |
|
250 | - $use_registration_address_info = true; |
|
251 | - } else { |
|
252 | - $use_registration_address_info = false; |
|
253 | - } |
|
254 | - // so if the attendee has enough data to fill out PayPal Pro's shipping info, use it. |
|
255 | - // If not, use the billing info again |
|
256 | - $ShippingAddress = array( |
|
257 | - 'shiptoname' => substr($use_registration_address_info |
|
258 | - ? $attendee->full_name() |
|
259 | - : $billing_info['first_name'] . ' ' . $billing_info['last_name'], 0, 32), |
|
260 | - 'shiptostreet' => substr($use_registration_address_info |
|
261 | - ? $attendee->address() |
|
262 | - : $billing_info['address'], 0, 100), |
|
263 | - 'shiptostreet2' => substr($use_registration_address_info |
|
264 | - ? $attendee->address2() : $billing_info['address2'], 0, 100), |
|
265 | - 'shiptocity' => substr($use_registration_address_info |
|
266 | - ? $attendee->city() |
|
267 | - : $billing_info['city'], 0, 40), |
|
268 | - 'shiptostate' => substr($use_registration_address_info |
|
269 | - ? $attendee->state_name() |
|
270 | - : $billing_info['state'], 0, 40), |
|
271 | - 'shiptocountry' => $use_registration_address_info |
|
272 | - ? $attendee->country_ID() |
|
273 | - : $billing_info['country'], |
|
274 | - 'shiptozip' => substr($use_registration_address_info |
|
275 | - ? $attendee->zip() |
|
276 | - : $billing_info['zip'], 0, 20), |
|
277 | - 'shiptophonenum' => substr($use_registration_address_info |
|
278 | - ? $attendee->phone() |
|
279 | - : $billing_info['phone'], 0, 20), |
|
280 | - ); |
|
281 | - $PaymentDetails = array( |
|
282 | - // Required. Total amount of order, including shipping, handling, and tax. |
|
283 | - 'amt' => $gateway_formatter->formatCurrency($payment->amount()), |
|
284 | - // Required. Three-letter currency code. Default is USD. |
|
285 | - 'currencycode' => $payment->currency_code(), |
|
286 | - // Required if you include itemized cart details. (L_AMTn, etc.) |
|
287 | - // Subtotal of items not including S&H, or tax. |
|
288 | - 'itemamt' => $gateway_formatter->formatCurrency($item_amount),// |
|
289 | - // Total shipping costs for the order. If you specify shippingamt, you must also specify itemamt. |
|
290 | - 'shippingamt' => '', |
|
291 | - // Total handling costs for the order. If you specify handlingamt, you must also specify itemamt. |
|
292 | - 'handlingamt' => '', |
|
293 | - // Required if you specify itemized cart tax details. |
|
294 | - // Sum of tax for all items on the order. Total sales tax. |
|
295 | - 'taxamt' => $gateway_formatter->formatCurrency($tax_amount), |
|
296 | - // Description of the order the customer is purchasing. 127 char max. |
|
297 | - 'desc' => $order_description, |
|
298 | - // Free-form field for your own use. 256 char max. |
|
299 | - 'custom' => $primary_registrant ? $primary_registrant->ID() : '', |
|
300 | - // Your own invoice or tracking number |
|
301 | - 'invnum' => wp_generate_password(12, false),// $transaction->ID(), |
|
302 | - // URL for receiving Instant Payment Notifications. This overrides what your profile is set to use. |
|
303 | - 'notifyurl' => '', |
|
304 | - 'buttonsource' => 'EventEspresso_SP',// EE will blow up if you change this |
|
305 | - ); |
|
306 | - // Wrap all data arrays into a single, "master" array which will be passed into the class function. |
|
307 | - $PayPalRequestData = array( |
|
308 | - 'DPFields' => $DPFields, |
|
309 | - 'CCDetails' => $CCDetails, |
|
310 | - 'PayerInfo' => $PayerInfo, |
|
311 | - 'PayerName' => $PayerName, |
|
312 | - 'BillingAddress' => $BillingAddress, |
|
313 | - 'ShippingAddress' => $ShippingAddress, |
|
314 | - 'PaymentDetails' => $PaymentDetails, |
|
315 | - 'OrderItems' => $order_items, |
|
316 | - ); |
|
317 | - $this->_log_clean_request($PayPalRequestData, $payment); |
|
318 | - try { |
|
319 | - $PayPalResult = $this->prep_and_curl_request($PayPalRequestData); |
|
320 | - // remove PCI-sensitive data so it doesn't get stored |
|
321 | - $PayPalResult = $this->_log_clean_response($PayPalResult, $payment); |
|
322 | - if (isset($PayPalResult['L_ERRORCODE0']) && $PayPalResult['L_ERRORCODE0'] === '10002') { |
|
323 | - $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'); |
|
324 | - } elseif (isset($PayPalResult['L_LONGMESSAGE0'])) { |
|
325 | - $message = $PayPalResult['L_LONGMESSAGE0']; |
|
326 | - } else { |
|
327 | - $message = $PayPalResult['ACK']; |
|
328 | - } |
|
329 | - if (empty($PayPalResult['RAWRESPONSE'])) { |
|
330 | - $payment->set_status($this->_pay_model->failed_status()); |
|
331 | - $payment->set_gateway_response(esc_html__('No response received from Paypal Pro', 'event_espresso')); |
|
332 | - $payment->set_details($PayPalResult); |
|
333 | - } else { |
|
334 | - if ($this->_APICallSuccessful($PayPalResult)) { |
|
335 | - $payment->set_status($this->_pay_model->approved_status()); |
|
336 | - } else { |
|
337 | - $payment->set_status($this->_pay_model->declined_status()); |
|
338 | - } |
|
339 | - // make sure we interpret the AMT as a float, not an international string |
|
340 | - // (where periods are thousand separators) |
|
341 | - $payment->set_amount(isset($PayPalResult['AMT']) ? floatval($PayPalResult['AMT']) : 0); |
|
342 | - $payment->set_gateway_response($message); |
|
343 | - $payment->set_txn_id_chq_nmbr(isset($PayPalResult['TRANSACTIONID']) |
|
344 | - ? $PayPalResult['TRANSACTIONID'] |
|
345 | - : null); |
|
346 | - $primary_registration_code = $primary_registrant instanceof EE_Registration |
|
347 | - ? $primary_registrant->reg_code() |
|
348 | - : ''; |
|
349 | - $payment->set_extra_accntng($primary_registration_code); |
|
350 | - $payment->set_details($PayPalResult); |
|
351 | - } |
|
352 | - } catch (Exception $e) { |
|
353 | - $payment->set_status($this->_pay_model->failed_status()); |
|
354 | - $payment->set_gateway_response($e->getMessage()); |
|
355 | - } |
|
356 | - // $payment->set_status( $this->_pay_model->declined_status() ); |
|
357 | - // $payment->set_gateway_response( '' ); |
|
358 | - return $payment; |
|
359 | - } |
|
360 | - |
|
361 | - |
|
362 | - |
|
363 | - /** |
|
364 | - * CLeans out sensitive CC data and then logs it, and returns the cleaned request |
|
365 | - * |
|
366 | - * @param array $request |
|
367 | - * @param EEI_Payment $payment |
|
368 | - * @return void |
|
369 | - */ |
|
370 | - private function _log_clean_request($request, $payment) |
|
371 | - { |
|
372 | - $cleaned_request_data = $request; |
|
373 | - unset($cleaned_request_data['CCDetails']['acct']); |
|
374 | - unset($cleaned_request_data['CCDetails']['cvv2']); |
|
375 | - unset($cleaned_request_data['CCDetails']['expdate']); |
|
376 | - $this->log(array('Paypal Request' => $cleaned_request_data), $payment); |
|
377 | - } |
|
378 | - |
|
379 | - |
|
380 | - |
|
381 | - /** |
|
382 | - * Cleans the response, logs it, and returns it |
|
383 | - * |
|
384 | - * @param array $response |
|
385 | - * @param EEI_Payment $payment |
|
386 | - * @return array cleaned |
|
387 | - */ |
|
388 | - private function _log_clean_response($response, $payment) |
|
389 | - { |
|
390 | - unset($response['REQUESTDATA']['CREDITCARDTYPE']); |
|
391 | - unset($response['REQUESTDATA']['ACCT']); |
|
392 | - unset($response['REQUESTDATA']['EXPDATE']); |
|
393 | - unset($response['REQUESTDATA']['CVV2']); |
|
394 | - unset($response['RAWREQUEST']); |
|
395 | - $this->log(array('Paypal Response' => $response), $payment); |
|
396 | - return $response; |
|
397 | - } |
|
398 | - |
|
399 | - |
|
400 | - |
|
401 | - /** |
|
402 | - * @param $DataArray |
|
403 | - * @return array |
|
404 | - */ |
|
405 | - private function prep_and_curl_request($DataArray) |
|
406 | - { |
|
407 | - // Create empty holders for each portion of the NVP string |
|
408 | - $DPFieldsNVP = '&METHOD=DoDirectPayment&BUTTONSOURCE=AngellEYE_PHP_Class_DDP'; |
|
409 | - $CCDetailsNVP = ''; |
|
410 | - $PayerInfoNVP = ''; |
|
411 | - $PayerNameNVP = ''; |
|
412 | - $BillingAddressNVP = ''; |
|
413 | - $ShippingAddressNVP = ''; |
|
414 | - $PaymentDetailsNVP = ''; |
|
415 | - $OrderItemsNVP = ''; |
|
416 | - $Secure3DNVP = ''; |
|
417 | - // DP Fields |
|
418 | - $DPFields = isset($DataArray['DPFields']) ? $DataArray['DPFields'] : array(); |
|
419 | - foreach ($DPFields as $DPFieldsVar => $DPFieldsVal) { |
|
420 | - $DPFieldsNVP .= '&' . strtoupper($DPFieldsVar) . '=' . urlencode($DPFieldsVal); |
|
421 | - } |
|
422 | - // CC Details Fields |
|
423 | - $CCDetails = isset($DataArray['CCDetails']) ? $DataArray['CCDetails'] : array(); |
|
424 | - foreach ($CCDetails as $CCDetailsVar => $CCDetailsVal) { |
|
425 | - $CCDetailsNVP .= '&' . strtoupper($CCDetailsVar) . '=' . urlencode($CCDetailsVal); |
|
426 | - } |
|
427 | - // PayerInfo Type Fields |
|
428 | - $PayerInfo = isset($DataArray['PayerInfo']) ? $DataArray['PayerInfo'] : array(); |
|
429 | - foreach ($PayerInfo as $PayerInfoVar => $PayerInfoVal) { |
|
430 | - $PayerInfoNVP .= '&' . strtoupper($PayerInfoVar) . '=' . urlencode($PayerInfoVal); |
|
431 | - } |
|
432 | - // Payer Name Fields |
|
433 | - $PayerName = isset($DataArray['PayerName']) ? $DataArray['PayerName'] : array(); |
|
434 | - foreach ($PayerName as $PayerNameVar => $PayerNameVal) { |
|
435 | - $PayerNameNVP .= '&' . strtoupper($PayerNameVar) . '=' . urlencode($PayerNameVal); |
|
436 | - } |
|
437 | - // Address Fields (Billing) |
|
438 | - $BillingAddress = isset($DataArray['BillingAddress']) ? $DataArray['BillingAddress'] : array(); |
|
439 | - foreach ($BillingAddress as $BillingAddressVar => $BillingAddressVal) { |
|
440 | - $BillingAddressNVP .= '&' . strtoupper($BillingAddressVar) . '=' . urlencode($BillingAddressVal); |
|
441 | - } |
|
442 | - // Payment Details Type Fields |
|
443 | - $PaymentDetails = isset($DataArray['PaymentDetails']) ? $DataArray['PaymentDetails'] : array(); |
|
444 | - foreach ($PaymentDetails as $PaymentDetailsVar => $PaymentDetailsVal) { |
|
445 | - $PaymentDetailsNVP .= '&' . strtoupper($PaymentDetailsVar) . '=' . urlencode($PaymentDetailsVal); |
|
446 | - } |
|
447 | - // Payment Details Item Type Fields |
|
448 | - $OrderItems = isset($DataArray['OrderItems']) ? $DataArray['OrderItems'] : array(); |
|
449 | - $n = 0; |
|
450 | - foreach ($OrderItems as $OrderItemsVar => $OrderItemsVal) { |
|
451 | - $CurrentItem = $OrderItems[ $OrderItemsVar ]; |
|
452 | - foreach ($CurrentItem as $CurrentItemVar => $CurrentItemVal) { |
|
453 | - $OrderItemsNVP .= '&' . strtoupper($CurrentItemVar) . $n . '=' . urlencode($CurrentItemVal); |
|
454 | - } |
|
455 | - $n++; |
|
456 | - } |
|
457 | - // Ship To Address Fields |
|
458 | - $ShippingAddress = isset($DataArray['ShippingAddress']) ? $DataArray['ShippingAddress'] : array(); |
|
459 | - foreach ($ShippingAddress as $ShippingAddressVar => $ShippingAddressVal) { |
|
460 | - $ShippingAddressNVP .= '&' . strtoupper($ShippingAddressVar) . '=' . urlencode($ShippingAddressVal); |
|
461 | - } |
|
462 | - // 3D Secure Fields |
|
463 | - $Secure3D = isset($DataArray['Secure3D']) ? $DataArray['Secure3D'] : array(); |
|
464 | - foreach ($Secure3D as $Secure3DVar => $Secure3DVal) { |
|
465 | - $Secure3DNVP .= '&' . strtoupper($Secure3DVar) . '=' . urlencode($Secure3DVal); |
|
466 | - } |
|
467 | - // Now that we have each chunk we need to go ahead and append them all together for our entire NVP string |
|
468 | - $NVPRequest = 'USER=' |
|
469 | - . $this->_api_username |
|
470 | - . '&PWD=' |
|
471 | - . $this->_api_password |
|
472 | - . '&VERSION=64.0' |
|
473 | - . '&SIGNATURE=' |
|
474 | - . $this->_api_signature |
|
475 | - . $DPFieldsNVP |
|
476 | - . $CCDetailsNVP |
|
477 | - . $PayerInfoNVP |
|
478 | - . $PayerNameNVP |
|
479 | - . $BillingAddressNVP |
|
480 | - . $PaymentDetailsNVP |
|
481 | - . $OrderItemsNVP |
|
482 | - . $ShippingAddressNVP |
|
483 | - . $Secure3DNVP; |
|
484 | - $NVPResponse = $this->_CURLRequest($NVPRequest); |
|
485 | - $NVPRequestArray = $this->_NVPToArray($NVPRequest); |
|
486 | - $NVPResponseArray = $this->_NVPToArray($NVPResponse); |
|
487 | - $Errors = $this->_GetErrors($NVPResponseArray); |
|
488 | - $NVPResponseArray['ERRORS'] = $Errors; |
|
489 | - $NVPResponseArray['REQUESTDATA'] = $NVPRequestArray; |
|
490 | - $NVPResponseArray['RAWREQUEST'] = $NVPRequest; |
|
491 | - $NVPResponseArray['RAWRESPONSE'] = $NVPResponse; |
|
492 | - return $NVPResponseArray; |
|
493 | - } |
|
494 | - |
|
495 | - |
|
496 | - |
|
497 | - /** |
|
498 | - * @param $Request |
|
499 | - * @return mixed |
|
500 | - */ |
|
501 | - private function _CURLRequest($Request) |
|
502 | - { |
|
503 | - $EndPointURL = $this->_debug_mode ? 'https://api-3t.sandbox.paypal.com/nvp' : 'https://api-3t.paypal.com/nvp'; |
|
504 | - $curl = curl_init(); |
|
505 | - curl_setopt($curl, CURLOPT_VERBOSE, apply_filters('FHEE__EEG_Paypal_Pro__CurlRequest__CURLOPT_VERBOSE', true)); |
|
506 | - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
507 | - curl_setopt($curl, CURLOPT_TIMEOUT, 60); |
|
508 | - curl_setopt($curl, CURLOPT_URL, $EndPointURL); |
|
509 | - curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
|
510 | - curl_setopt($curl, CURLOPT_POSTFIELDS, $Request); |
|
511 | - curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
512 | - // execute the curl POST |
|
513 | - $Response = curl_exec($curl); |
|
514 | - curl_close($curl); |
|
515 | - return $Response; |
|
516 | - } |
|
517 | - |
|
518 | - |
|
519 | - |
|
520 | - /** |
|
521 | - * @param $NVPString |
|
522 | - * @return array |
|
523 | - */ |
|
524 | - private function _NVPToArray($NVPString) |
|
525 | - { |
|
526 | - // prepare responses into array |
|
527 | - $proArray = array(); |
|
528 | - while (strlen($NVPString)) { |
|
529 | - // name |
|
530 | - $keypos = strpos($NVPString, '='); |
|
531 | - $keyval = substr($NVPString, 0, $keypos); |
|
532 | - // value |
|
533 | - $valuepos = strpos($NVPString, '&') ? strpos($NVPString, '&') : strlen($NVPString); |
|
534 | - $valval = substr($NVPString, $keypos + 1, $valuepos - $keypos - 1); |
|
535 | - // decoding the response |
|
536 | - $proArray[ $keyval ] = urldecode($valval); |
|
537 | - $NVPString = substr($NVPString, $valuepos + 1, strlen($NVPString)); |
|
538 | - } |
|
539 | - return $proArray; |
|
540 | - } |
|
541 | - |
|
542 | - |
|
543 | - |
|
544 | - /** |
|
545 | - * @param array $PayPalResult |
|
546 | - * @return bool |
|
547 | - */ |
|
548 | - private function _APICallSuccessful($PayPalResult) |
|
549 | - { |
|
550 | - $approved = false; |
|
551 | - // check main response message from PayPal |
|
552 | - if (isset($PayPalResult['ACK']) && ! empty($PayPalResult['ACK'])) { |
|
553 | - $ack = strtoupper($PayPalResult['ACK']); |
|
554 | - $approved = ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING' || $ack == 'PARTIALSUCCESS') ? true : false; |
|
555 | - } |
|
556 | - return $approved; |
|
557 | - } |
|
558 | - |
|
559 | - |
|
560 | - |
|
561 | - /** |
|
562 | - * @param $DataArray |
|
563 | - * @return array |
|
564 | - */ |
|
565 | - private function _GetErrors($DataArray) |
|
566 | - { |
|
567 | - $Errors = array(); |
|
568 | - $n = 0; |
|
569 | - while (isset($DataArray[ 'L_ERRORCODE' . $n . '' ])) { |
|
570 | - $LErrorCode = isset($DataArray[ 'L_ERRORCODE' . $n . '' ]) ? $DataArray[ 'L_ERRORCODE' . $n . '' ] : ''; |
|
571 | - $LShortMessage = isset($DataArray[ 'L_SHORTMESSAGE' . $n . '' ]) |
|
572 | - ? $DataArray[ 'L_SHORTMESSAGE' . $n . '' ] |
|
573 | - : ''; |
|
574 | - $LLongMessage = isset($DataArray[ 'L_LONGMESSAGE' . $n . '' ]) |
|
575 | - ? $DataArray[ 'L_LONGMESSAGE' . $n . '' ] |
|
576 | - : ''; |
|
577 | - $LSeverityCode = isset($DataArray[ 'L_SEVERITYCODE' . $n . '' ]) |
|
578 | - ? $DataArray[ 'L_SEVERITYCODE' . $n . '' ] |
|
579 | - : ''; |
|
580 | - $CurrentItem = array( |
|
581 | - 'L_ERRORCODE' => $LErrorCode, |
|
582 | - 'L_SHORTMESSAGE' => $LShortMessage, |
|
583 | - 'L_LONGMESSAGE' => $LLongMessage, |
|
584 | - 'L_SEVERITYCODE' => $LSeverityCode, |
|
585 | - ); |
|
586 | - array_push($Errors, $CurrentItem); |
|
587 | - $n++; |
|
588 | - } |
|
589 | - return $Errors; |
|
590 | - } |
|
591 | - |
|
592 | - |
|
593 | - |
|
594 | - /** |
|
595 | - * nothing to see here... move along.... |
|
596 | - * |
|
597 | - * @access protected |
|
598 | - * @param $Errors |
|
599 | - * @return string |
|
600 | - */ |
|
601 | - private function _DisplayErrors($Errors) |
|
602 | - { |
|
603 | - $error = ''; |
|
604 | - foreach ($Errors as $ErrorVar => $ErrorVal) { |
|
605 | - $CurrentError = $Errors[ $ErrorVar ]; |
|
606 | - foreach ($CurrentError as $CurrentErrorVar => $CurrentErrorVal) { |
|
607 | - $CurrentVarName = ''; |
|
608 | - if ($CurrentErrorVar == 'L_ERRORCODE') { |
|
609 | - $CurrentVarName = 'Error Code'; |
|
610 | - } elseif ($CurrentErrorVar == 'L_SHORTMESSAGE') { |
|
611 | - $CurrentVarName = 'Short Message'; |
|
612 | - } elseif ($CurrentErrorVar == 'L_LONGMESSAGE') { |
|
613 | - $CurrentVarName = 'Long Message'; |
|
614 | - } elseif ($CurrentErrorVar == 'L_SEVERITYCODE') { |
|
615 | - $CurrentVarName = 'Severity Code'; |
|
616 | - } |
|
617 | - $error .= '<br />' . $CurrentVarName . ': ' . $CurrentErrorVal; |
|
618 | - } |
|
619 | - } |
|
620 | - return $error; |
|
621 | - } |
|
16 | + /** |
|
17 | + * @var $_paypal_api_username string |
|
18 | + */ |
|
19 | + protected $_api_username = null; |
|
20 | + |
|
21 | + /** |
|
22 | + * @var $_api_password string |
|
23 | + */ |
|
24 | + protected $_api_password = null; |
|
25 | + |
|
26 | + /** |
|
27 | + * @var $_api_signature string |
|
28 | + */ |
|
29 | + protected $_api_signature = null; |
|
30 | + |
|
31 | + /** |
|
32 | + * @var $_credit_card_types array with the keys for credit card types accepted on this account |
|
33 | + */ |
|
34 | + protected $_credit_card_types = null; |
|
35 | + |
|
36 | + protected $_currencies_supported = array( |
|
37 | + 'USD', |
|
38 | + 'GBP', |
|
39 | + 'CAD', |
|
40 | + 'AUD', |
|
41 | + 'BRL', |
|
42 | + 'CHF', |
|
43 | + 'CZK', |
|
44 | + 'DKK', |
|
45 | + 'EUR', |
|
46 | + 'HKD', |
|
47 | + 'HUF', |
|
48 | + 'ILS', |
|
49 | + 'JPY', |
|
50 | + 'MXN', |
|
51 | + 'MYR', |
|
52 | + 'NOK', |
|
53 | + 'NZD', |
|
54 | + 'PHP', |
|
55 | + 'PLN', |
|
56 | + 'SEK', |
|
57 | + 'SGD', |
|
58 | + 'THB', |
|
59 | + 'TRY', |
|
60 | + 'TWD', |
|
61 | + 'RUB', |
|
62 | + 'INR', |
|
63 | + ); |
|
64 | + |
|
65 | + |
|
66 | + |
|
67 | + /** |
|
68 | + * @param EEI_Payment $payment |
|
69 | + * @param array $billing_info { |
|
70 | + * @type string $credit_card |
|
71 | + * @type string $credit_card_type |
|
72 | + * @type string $exp_month always 2 characters |
|
73 | + * @type string $exp_year always 4 characters |
|
74 | + * @type string $cvv |
|
75 | + * } |
|
76 | + * @see parent::do_direct_payment for more info |
|
77 | + * @return EE_Payment|EEI_Payment |
|
78 | + * @throws EE_Error |
|
79 | + */ |
|
80 | + public function do_direct_payment($payment, $billing_info = null) |
|
81 | + { |
|
82 | + $transaction = $payment->transaction(); |
|
83 | + if (! $transaction instanceof EEI_Transaction) { |
|
84 | + throw new EE_Error( |
|
85 | + esc_html__('No transaction for payment while paying with PayPal Pro.', 'event_espresso') |
|
86 | + ); |
|
87 | + } |
|
88 | + $primary_registrant = $transaction->primary_registration(); |
|
89 | + if (! $primary_registrant instanceof EEI_Registration) { |
|
90 | + throw new EE_Error( |
|
91 | + esc_html__( |
|
92 | + 'No primary registration on transaction while paying with PayPal Pro.', |
|
93 | + 'event_espresso' |
|
94 | + ) |
|
95 | + ); |
|
96 | + } |
|
97 | + $attendee = $primary_registrant->attendee(); |
|
98 | + if (! $attendee instanceof EEI_Attendee) { |
|
99 | + throw new EE_Error( |
|
100 | + esc_html__( |
|
101 | + 'No attendee on primary registration while paying with PayPal Pro.', |
|
102 | + 'event_espresso' |
|
103 | + ) |
|
104 | + ); |
|
105 | + } |
|
106 | + $gateway_formatter = $this->_get_gateway_formatter(); |
|
107 | + $order_description = substr($gateway_formatter->formatOrderDescription($payment), 0, 127); |
|
108 | + // charge for the full amount. Show itemized list |
|
109 | + if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) { |
|
110 | + $item_num = 1; |
|
111 | + $total_line_item = $transaction->total_line_item(); |
|
112 | + $order_items = array(); |
|
113 | + foreach ($total_line_item->get_items() as $line_item) { |
|
114 | + // ignore line items with a quantity of 0 |
|
115 | + if ($line_item->quantity() == 0) { |
|
116 | + continue; |
|
117 | + } |
|
118 | + // For percent items, whose unit_price is 0, use the total instead. |
|
119 | + if ($line_item->is_percent()) { |
|
120 | + $unit_price = $line_item->total(); |
|
121 | + $line_item_quantity = 1; |
|
122 | + } else { |
|
123 | + $unit_price = $line_item->unit_price(); |
|
124 | + $line_item_quantity = $line_item->quantity(); |
|
125 | + } |
|
126 | + $item = array( |
|
127 | + // Item Name. 127 char max. |
|
128 | + 'l_name' => substr( |
|
129 | + $gateway_formatter->formatLineItemName($line_item, $payment), |
|
130 | + 0, |
|
131 | + 127 |
|
132 | + ), |
|
133 | + // Item description. 127 char max. |
|
134 | + 'l_desc' => substr( |
|
135 | + $gateway_formatter->formatLineItemDesc($line_item, $payment), |
|
136 | + 0, |
|
137 | + 127 |
|
138 | + ), |
|
139 | + // Cost of individual item. |
|
140 | + 'l_amt' => $unit_price, |
|
141 | + // Item Number. 127 char max. |
|
142 | + 'l_number' => $item_num++, |
|
143 | + // Item quantity. Must be any positive integer. |
|
144 | + 'l_qty' => $line_item_quantity, |
|
145 | + // Item's sales tax amount. |
|
146 | + 'l_taxamt' => '', |
|
147 | + // eBay auction number of item. |
|
148 | + 'l_ebayitemnumber' => '', |
|
149 | + // eBay transaction ID of purchased item. |
|
150 | + 'l_ebayitemauctiontxnid' => '', |
|
151 | + // eBay order ID for the item. |
|
152 | + 'l_ebayitemorderid' => '', |
|
153 | + ); |
|
154 | + // add to array of all items |
|
155 | + array_push($order_items, $item); |
|
156 | + } |
|
157 | + $item_amount = $total_line_item->get_items_total(); |
|
158 | + $tax_amount = $total_line_item->get_total_tax(); |
|
159 | + } else { |
|
160 | + $order_items = array(); |
|
161 | + $item_amount = $payment->amount(); |
|
162 | + $tax_amount = 0; |
|
163 | + array_push($order_items, array( |
|
164 | + // Item Name. 127 char max. |
|
165 | + 'l_name' => substr( |
|
166 | + $gateway_formatter->formatPartialPaymentLineItemName($payment), |
|
167 | + 0, |
|
168 | + 127 |
|
169 | + ), |
|
170 | + // Item description. 127 char max. |
|
171 | + 'l_desc' => substr( |
|
172 | + $gateway_formatter->formatPartialPaymentLineItemDesc($payment), |
|
173 | + 0, |
|
174 | + 127 |
|
175 | + ), |
|
176 | + // Cost of individual item. |
|
177 | + 'l_amt' => $payment->amount(), |
|
178 | + // Item Number. 127 char max. |
|
179 | + 'l_number' => 1, |
|
180 | + // Item quantity. Must be any positive integer. |
|
181 | + 'l_qty' => 1, |
|
182 | + )); |
|
183 | + } |
|
184 | + |
|
185 | + |
|
186 | + /** @var RequestInterface $request */ |
|
187 | + $request = LoaderFactory::getLoader()->getShared(RequestInterface::class); |
|
188 | + // Populate data arrays with order data. |
|
189 | + $DPFields = array( |
|
190 | + // How you want to obtain payment ? |
|
191 | + // Authorization indicates the payment is a basic auth subject to settlement with Auth & Capture. |
|
192 | + // Sale indicates that this is a final sale for which you are requesting payment. Default is Sale. |
|
193 | + 'paymentaction' => 'Sale', |
|
194 | + // Required. IP address of the payer's browser. |
|
195 | + 'ipaddress' => $request->ipAddress(), |
|
196 | + // Flag to determine whether you want the results returned by FMF. 1 or 0. Default is 0. |
|
197 | + 'returnfmfdetails' => '1', |
|
198 | + ); |
|
199 | + $CCDetails = array( |
|
200 | + // Required. Type of credit card. Visa, MasterCard, Discover, Amex, Maestro, Solo. |
|
201 | + // If Maestro or Solo, the currency code must be GBP. |
|
202 | + // In addition, either start date or issue number must be specified. |
|
203 | + 'creditcardtype' => $billing_info['credit_card_type'], |
|
204 | + // Required. Credit card number. No spaces or punctuation. |
|
205 | + 'acct' => $billing_info['credit_card'], |
|
206 | + // Required. Credit card expiration date. Format is MMYYYY |
|
207 | + 'expdate' => $billing_info['exp_month'] . $billing_info['exp_year'], |
|
208 | + // Requirements determined by your PayPal account settings. Security digits for credit card. |
|
209 | + 'cvv2' => $billing_info['cvv'], |
|
210 | + ); |
|
211 | + $PayerInfo = array( |
|
212 | + // Email address of payer. |
|
213 | + 'email' => $billing_info['email'], |
|
214 | + // Unique PayPal customer ID for payer. |
|
215 | + 'payerid' => '', |
|
216 | + // Status of payer. Values are verified or unverified |
|
217 | + 'payerstatus' => '', |
|
218 | + // Payer's business name. |
|
219 | + 'business' => '', |
|
220 | + ); |
|
221 | + $PayerName = array( |
|
222 | + // Payer's salutation. 20 char max. |
|
223 | + 'salutation' => '', |
|
224 | + // Payer's first name. 25 char max. |
|
225 | + 'firstname' => substr($billing_info['first_name'], 0, 25), |
|
226 | + // Payer's middle name. 25 char max. |
|
227 | + 'middlename' => '', |
|
228 | + // Payer's last name. 25 char max. |
|
229 | + 'lastname' => substr($billing_info['last_name'], 0, 25), |
|
230 | + // Payer's suffix. 12 char max. |
|
231 | + 'suffix' => '', |
|
232 | + ); |
|
233 | + $BillingAddress = array( |
|
234 | + // Required. First street address. |
|
235 | + 'street' => $billing_info['address'], |
|
236 | + // Second street address. |
|
237 | + 'street2' => $billing_info['address2'], |
|
238 | + // Required. Name of City. |
|
239 | + 'city' => $billing_info['city'], |
|
240 | + // Required. Name of State or Province. |
|
241 | + 'state' => substr($billing_info['state'], 0, 40), |
|
242 | + // Required. Country code. |
|
243 | + 'countrycode' => $billing_info['country'], |
|
244 | + // Required. Postal code of payer. |
|
245 | + 'zip' => $billing_info['zip'], |
|
246 | + ); |
|
247 | + // check if the registration info contains the needed fields for paypal pro |
|
248 | + // (see https://developer.paypal.com/docs/classic/api/merchant/DoDirectPayment_API_Operation_NVP/) |
|
249 | + if ($attendee->address() && $attendee->city() && $attendee->country_ID()) { |
|
250 | + $use_registration_address_info = true; |
|
251 | + } else { |
|
252 | + $use_registration_address_info = false; |
|
253 | + } |
|
254 | + // so if the attendee has enough data to fill out PayPal Pro's shipping info, use it. |
|
255 | + // If not, use the billing info again |
|
256 | + $ShippingAddress = array( |
|
257 | + 'shiptoname' => substr($use_registration_address_info |
|
258 | + ? $attendee->full_name() |
|
259 | + : $billing_info['first_name'] . ' ' . $billing_info['last_name'], 0, 32), |
|
260 | + 'shiptostreet' => substr($use_registration_address_info |
|
261 | + ? $attendee->address() |
|
262 | + : $billing_info['address'], 0, 100), |
|
263 | + 'shiptostreet2' => substr($use_registration_address_info |
|
264 | + ? $attendee->address2() : $billing_info['address2'], 0, 100), |
|
265 | + 'shiptocity' => substr($use_registration_address_info |
|
266 | + ? $attendee->city() |
|
267 | + : $billing_info['city'], 0, 40), |
|
268 | + 'shiptostate' => substr($use_registration_address_info |
|
269 | + ? $attendee->state_name() |
|
270 | + : $billing_info['state'], 0, 40), |
|
271 | + 'shiptocountry' => $use_registration_address_info |
|
272 | + ? $attendee->country_ID() |
|
273 | + : $billing_info['country'], |
|
274 | + 'shiptozip' => substr($use_registration_address_info |
|
275 | + ? $attendee->zip() |
|
276 | + : $billing_info['zip'], 0, 20), |
|
277 | + 'shiptophonenum' => substr($use_registration_address_info |
|
278 | + ? $attendee->phone() |
|
279 | + : $billing_info['phone'], 0, 20), |
|
280 | + ); |
|
281 | + $PaymentDetails = array( |
|
282 | + // Required. Total amount of order, including shipping, handling, and tax. |
|
283 | + 'amt' => $gateway_formatter->formatCurrency($payment->amount()), |
|
284 | + // Required. Three-letter currency code. Default is USD. |
|
285 | + 'currencycode' => $payment->currency_code(), |
|
286 | + // Required if you include itemized cart details. (L_AMTn, etc.) |
|
287 | + // Subtotal of items not including S&H, or tax. |
|
288 | + 'itemamt' => $gateway_formatter->formatCurrency($item_amount),// |
|
289 | + // Total shipping costs for the order. If you specify shippingamt, you must also specify itemamt. |
|
290 | + 'shippingamt' => '', |
|
291 | + // Total handling costs for the order. If you specify handlingamt, you must also specify itemamt. |
|
292 | + 'handlingamt' => '', |
|
293 | + // Required if you specify itemized cart tax details. |
|
294 | + // Sum of tax for all items on the order. Total sales tax. |
|
295 | + 'taxamt' => $gateway_formatter->formatCurrency($tax_amount), |
|
296 | + // Description of the order the customer is purchasing. 127 char max. |
|
297 | + 'desc' => $order_description, |
|
298 | + // Free-form field for your own use. 256 char max. |
|
299 | + 'custom' => $primary_registrant ? $primary_registrant->ID() : '', |
|
300 | + // Your own invoice or tracking number |
|
301 | + 'invnum' => wp_generate_password(12, false),// $transaction->ID(), |
|
302 | + // URL for receiving Instant Payment Notifications. This overrides what your profile is set to use. |
|
303 | + 'notifyurl' => '', |
|
304 | + 'buttonsource' => 'EventEspresso_SP',// EE will blow up if you change this |
|
305 | + ); |
|
306 | + // Wrap all data arrays into a single, "master" array which will be passed into the class function. |
|
307 | + $PayPalRequestData = array( |
|
308 | + 'DPFields' => $DPFields, |
|
309 | + 'CCDetails' => $CCDetails, |
|
310 | + 'PayerInfo' => $PayerInfo, |
|
311 | + 'PayerName' => $PayerName, |
|
312 | + 'BillingAddress' => $BillingAddress, |
|
313 | + 'ShippingAddress' => $ShippingAddress, |
|
314 | + 'PaymentDetails' => $PaymentDetails, |
|
315 | + 'OrderItems' => $order_items, |
|
316 | + ); |
|
317 | + $this->_log_clean_request($PayPalRequestData, $payment); |
|
318 | + try { |
|
319 | + $PayPalResult = $this->prep_and_curl_request($PayPalRequestData); |
|
320 | + // remove PCI-sensitive data so it doesn't get stored |
|
321 | + $PayPalResult = $this->_log_clean_response($PayPalResult, $payment); |
|
322 | + if (isset($PayPalResult['L_ERRORCODE0']) && $PayPalResult['L_ERRORCODE0'] === '10002') { |
|
323 | + $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'); |
|
324 | + } elseif (isset($PayPalResult['L_LONGMESSAGE0'])) { |
|
325 | + $message = $PayPalResult['L_LONGMESSAGE0']; |
|
326 | + } else { |
|
327 | + $message = $PayPalResult['ACK']; |
|
328 | + } |
|
329 | + if (empty($PayPalResult['RAWRESPONSE'])) { |
|
330 | + $payment->set_status($this->_pay_model->failed_status()); |
|
331 | + $payment->set_gateway_response(esc_html__('No response received from Paypal Pro', 'event_espresso')); |
|
332 | + $payment->set_details($PayPalResult); |
|
333 | + } else { |
|
334 | + if ($this->_APICallSuccessful($PayPalResult)) { |
|
335 | + $payment->set_status($this->_pay_model->approved_status()); |
|
336 | + } else { |
|
337 | + $payment->set_status($this->_pay_model->declined_status()); |
|
338 | + } |
|
339 | + // make sure we interpret the AMT as a float, not an international string |
|
340 | + // (where periods are thousand separators) |
|
341 | + $payment->set_amount(isset($PayPalResult['AMT']) ? floatval($PayPalResult['AMT']) : 0); |
|
342 | + $payment->set_gateway_response($message); |
|
343 | + $payment->set_txn_id_chq_nmbr(isset($PayPalResult['TRANSACTIONID']) |
|
344 | + ? $PayPalResult['TRANSACTIONID'] |
|
345 | + : null); |
|
346 | + $primary_registration_code = $primary_registrant instanceof EE_Registration |
|
347 | + ? $primary_registrant->reg_code() |
|
348 | + : ''; |
|
349 | + $payment->set_extra_accntng($primary_registration_code); |
|
350 | + $payment->set_details($PayPalResult); |
|
351 | + } |
|
352 | + } catch (Exception $e) { |
|
353 | + $payment->set_status($this->_pay_model->failed_status()); |
|
354 | + $payment->set_gateway_response($e->getMessage()); |
|
355 | + } |
|
356 | + // $payment->set_status( $this->_pay_model->declined_status() ); |
|
357 | + // $payment->set_gateway_response( '' ); |
|
358 | + return $payment; |
|
359 | + } |
|
360 | + |
|
361 | + |
|
362 | + |
|
363 | + /** |
|
364 | + * CLeans out sensitive CC data and then logs it, and returns the cleaned request |
|
365 | + * |
|
366 | + * @param array $request |
|
367 | + * @param EEI_Payment $payment |
|
368 | + * @return void |
|
369 | + */ |
|
370 | + private function _log_clean_request($request, $payment) |
|
371 | + { |
|
372 | + $cleaned_request_data = $request; |
|
373 | + unset($cleaned_request_data['CCDetails']['acct']); |
|
374 | + unset($cleaned_request_data['CCDetails']['cvv2']); |
|
375 | + unset($cleaned_request_data['CCDetails']['expdate']); |
|
376 | + $this->log(array('Paypal Request' => $cleaned_request_data), $payment); |
|
377 | + } |
|
378 | + |
|
379 | + |
|
380 | + |
|
381 | + /** |
|
382 | + * Cleans the response, logs it, and returns it |
|
383 | + * |
|
384 | + * @param array $response |
|
385 | + * @param EEI_Payment $payment |
|
386 | + * @return array cleaned |
|
387 | + */ |
|
388 | + private function _log_clean_response($response, $payment) |
|
389 | + { |
|
390 | + unset($response['REQUESTDATA']['CREDITCARDTYPE']); |
|
391 | + unset($response['REQUESTDATA']['ACCT']); |
|
392 | + unset($response['REQUESTDATA']['EXPDATE']); |
|
393 | + unset($response['REQUESTDATA']['CVV2']); |
|
394 | + unset($response['RAWREQUEST']); |
|
395 | + $this->log(array('Paypal Response' => $response), $payment); |
|
396 | + return $response; |
|
397 | + } |
|
398 | + |
|
399 | + |
|
400 | + |
|
401 | + /** |
|
402 | + * @param $DataArray |
|
403 | + * @return array |
|
404 | + */ |
|
405 | + private function prep_and_curl_request($DataArray) |
|
406 | + { |
|
407 | + // Create empty holders for each portion of the NVP string |
|
408 | + $DPFieldsNVP = '&METHOD=DoDirectPayment&BUTTONSOURCE=AngellEYE_PHP_Class_DDP'; |
|
409 | + $CCDetailsNVP = ''; |
|
410 | + $PayerInfoNVP = ''; |
|
411 | + $PayerNameNVP = ''; |
|
412 | + $BillingAddressNVP = ''; |
|
413 | + $ShippingAddressNVP = ''; |
|
414 | + $PaymentDetailsNVP = ''; |
|
415 | + $OrderItemsNVP = ''; |
|
416 | + $Secure3DNVP = ''; |
|
417 | + // DP Fields |
|
418 | + $DPFields = isset($DataArray['DPFields']) ? $DataArray['DPFields'] : array(); |
|
419 | + foreach ($DPFields as $DPFieldsVar => $DPFieldsVal) { |
|
420 | + $DPFieldsNVP .= '&' . strtoupper($DPFieldsVar) . '=' . urlencode($DPFieldsVal); |
|
421 | + } |
|
422 | + // CC Details Fields |
|
423 | + $CCDetails = isset($DataArray['CCDetails']) ? $DataArray['CCDetails'] : array(); |
|
424 | + foreach ($CCDetails as $CCDetailsVar => $CCDetailsVal) { |
|
425 | + $CCDetailsNVP .= '&' . strtoupper($CCDetailsVar) . '=' . urlencode($CCDetailsVal); |
|
426 | + } |
|
427 | + // PayerInfo Type Fields |
|
428 | + $PayerInfo = isset($DataArray['PayerInfo']) ? $DataArray['PayerInfo'] : array(); |
|
429 | + foreach ($PayerInfo as $PayerInfoVar => $PayerInfoVal) { |
|
430 | + $PayerInfoNVP .= '&' . strtoupper($PayerInfoVar) . '=' . urlencode($PayerInfoVal); |
|
431 | + } |
|
432 | + // Payer Name Fields |
|
433 | + $PayerName = isset($DataArray['PayerName']) ? $DataArray['PayerName'] : array(); |
|
434 | + foreach ($PayerName as $PayerNameVar => $PayerNameVal) { |
|
435 | + $PayerNameNVP .= '&' . strtoupper($PayerNameVar) . '=' . urlencode($PayerNameVal); |
|
436 | + } |
|
437 | + // Address Fields (Billing) |
|
438 | + $BillingAddress = isset($DataArray['BillingAddress']) ? $DataArray['BillingAddress'] : array(); |
|
439 | + foreach ($BillingAddress as $BillingAddressVar => $BillingAddressVal) { |
|
440 | + $BillingAddressNVP .= '&' . strtoupper($BillingAddressVar) . '=' . urlencode($BillingAddressVal); |
|
441 | + } |
|
442 | + // Payment Details Type Fields |
|
443 | + $PaymentDetails = isset($DataArray['PaymentDetails']) ? $DataArray['PaymentDetails'] : array(); |
|
444 | + foreach ($PaymentDetails as $PaymentDetailsVar => $PaymentDetailsVal) { |
|
445 | + $PaymentDetailsNVP .= '&' . strtoupper($PaymentDetailsVar) . '=' . urlencode($PaymentDetailsVal); |
|
446 | + } |
|
447 | + // Payment Details Item Type Fields |
|
448 | + $OrderItems = isset($DataArray['OrderItems']) ? $DataArray['OrderItems'] : array(); |
|
449 | + $n = 0; |
|
450 | + foreach ($OrderItems as $OrderItemsVar => $OrderItemsVal) { |
|
451 | + $CurrentItem = $OrderItems[ $OrderItemsVar ]; |
|
452 | + foreach ($CurrentItem as $CurrentItemVar => $CurrentItemVal) { |
|
453 | + $OrderItemsNVP .= '&' . strtoupper($CurrentItemVar) . $n . '=' . urlencode($CurrentItemVal); |
|
454 | + } |
|
455 | + $n++; |
|
456 | + } |
|
457 | + // Ship To Address Fields |
|
458 | + $ShippingAddress = isset($DataArray['ShippingAddress']) ? $DataArray['ShippingAddress'] : array(); |
|
459 | + foreach ($ShippingAddress as $ShippingAddressVar => $ShippingAddressVal) { |
|
460 | + $ShippingAddressNVP .= '&' . strtoupper($ShippingAddressVar) . '=' . urlencode($ShippingAddressVal); |
|
461 | + } |
|
462 | + // 3D Secure Fields |
|
463 | + $Secure3D = isset($DataArray['Secure3D']) ? $DataArray['Secure3D'] : array(); |
|
464 | + foreach ($Secure3D as $Secure3DVar => $Secure3DVal) { |
|
465 | + $Secure3DNVP .= '&' . strtoupper($Secure3DVar) . '=' . urlencode($Secure3DVal); |
|
466 | + } |
|
467 | + // Now that we have each chunk we need to go ahead and append them all together for our entire NVP string |
|
468 | + $NVPRequest = 'USER=' |
|
469 | + . $this->_api_username |
|
470 | + . '&PWD=' |
|
471 | + . $this->_api_password |
|
472 | + . '&VERSION=64.0' |
|
473 | + . '&SIGNATURE=' |
|
474 | + . $this->_api_signature |
|
475 | + . $DPFieldsNVP |
|
476 | + . $CCDetailsNVP |
|
477 | + . $PayerInfoNVP |
|
478 | + . $PayerNameNVP |
|
479 | + . $BillingAddressNVP |
|
480 | + . $PaymentDetailsNVP |
|
481 | + . $OrderItemsNVP |
|
482 | + . $ShippingAddressNVP |
|
483 | + . $Secure3DNVP; |
|
484 | + $NVPResponse = $this->_CURLRequest($NVPRequest); |
|
485 | + $NVPRequestArray = $this->_NVPToArray($NVPRequest); |
|
486 | + $NVPResponseArray = $this->_NVPToArray($NVPResponse); |
|
487 | + $Errors = $this->_GetErrors($NVPResponseArray); |
|
488 | + $NVPResponseArray['ERRORS'] = $Errors; |
|
489 | + $NVPResponseArray['REQUESTDATA'] = $NVPRequestArray; |
|
490 | + $NVPResponseArray['RAWREQUEST'] = $NVPRequest; |
|
491 | + $NVPResponseArray['RAWRESPONSE'] = $NVPResponse; |
|
492 | + return $NVPResponseArray; |
|
493 | + } |
|
494 | + |
|
495 | + |
|
496 | + |
|
497 | + /** |
|
498 | + * @param $Request |
|
499 | + * @return mixed |
|
500 | + */ |
|
501 | + private function _CURLRequest($Request) |
|
502 | + { |
|
503 | + $EndPointURL = $this->_debug_mode ? 'https://api-3t.sandbox.paypal.com/nvp' : 'https://api-3t.paypal.com/nvp'; |
|
504 | + $curl = curl_init(); |
|
505 | + curl_setopt($curl, CURLOPT_VERBOSE, apply_filters('FHEE__EEG_Paypal_Pro__CurlRequest__CURLOPT_VERBOSE', true)); |
|
506 | + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
507 | + curl_setopt($curl, CURLOPT_TIMEOUT, 60); |
|
508 | + curl_setopt($curl, CURLOPT_URL, $EndPointURL); |
|
509 | + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
|
510 | + curl_setopt($curl, CURLOPT_POSTFIELDS, $Request); |
|
511 | + curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
512 | + // execute the curl POST |
|
513 | + $Response = curl_exec($curl); |
|
514 | + curl_close($curl); |
|
515 | + return $Response; |
|
516 | + } |
|
517 | + |
|
518 | + |
|
519 | + |
|
520 | + /** |
|
521 | + * @param $NVPString |
|
522 | + * @return array |
|
523 | + */ |
|
524 | + private function _NVPToArray($NVPString) |
|
525 | + { |
|
526 | + // prepare responses into array |
|
527 | + $proArray = array(); |
|
528 | + while (strlen($NVPString)) { |
|
529 | + // name |
|
530 | + $keypos = strpos($NVPString, '='); |
|
531 | + $keyval = substr($NVPString, 0, $keypos); |
|
532 | + // value |
|
533 | + $valuepos = strpos($NVPString, '&') ? strpos($NVPString, '&') : strlen($NVPString); |
|
534 | + $valval = substr($NVPString, $keypos + 1, $valuepos - $keypos - 1); |
|
535 | + // decoding the response |
|
536 | + $proArray[ $keyval ] = urldecode($valval); |
|
537 | + $NVPString = substr($NVPString, $valuepos + 1, strlen($NVPString)); |
|
538 | + } |
|
539 | + return $proArray; |
|
540 | + } |
|
541 | + |
|
542 | + |
|
543 | + |
|
544 | + /** |
|
545 | + * @param array $PayPalResult |
|
546 | + * @return bool |
|
547 | + */ |
|
548 | + private function _APICallSuccessful($PayPalResult) |
|
549 | + { |
|
550 | + $approved = false; |
|
551 | + // check main response message from PayPal |
|
552 | + if (isset($PayPalResult['ACK']) && ! empty($PayPalResult['ACK'])) { |
|
553 | + $ack = strtoupper($PayPalResult['ACK']); |
|
554 | + $approved = ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING' || $ack == 'PARTIALSUCCESS') ? true : false; |
|
555 | + } |
|
556 | + return $approved; |
|
557 | + } |
|
558 | + |
|
559 | + |
|
560 | + |
|
561 | + /** |
|
562 | + * @param $DataArray |
|
563 | + * @return array |
|
564 | + */ |
|
565 | + private function _GetErrors($DataArray) |
|
566 | + { |
|
567 | + $Errors = array(); |
|
568 | + $n = 0; |
|
569 | + while (isset($DataArray[ 'L_ERRORCODE' . $n . '' ])) { |
|
570 | + $LErrorCode = isset($DataArray[ 'L_ERRORCODE' . $n . '' ]) ? $DataArray[ 'L_ERRORCODE' . $n . '' ] : ''; |
|
571 | + $LShortMessage = isset($DataArray[ 'L_SHORTMESSAGE' . $n . '' ]) |
|
572 | + ? $DataArray[ 'L_SHORTMESSAGE' . $n . '' ] |
|
573 | + : ''; |
|
574 | + $LLongMessage = isset($DataArray[ 'L_LONGMESSAGE' . $n . '' ]) |
|
575 | + ? $DataArray[ 'L_LONGMESSAGE' . $n . '' ] |
|
576 | + : ''; |
|
577 | + $LSeverityCode = isset($DataArray[ 'L_SEVERITYCODE' . $n . '' ]) |
|
578 | + ? $DataArray[ 'L_SEVERITYCODE' . $n . '' ] |
|
579 | + : ''; |
|
580 | + $CurrentItem = array( |
|
581 | + 'L_ERRORCODE' => $LErrorCode, |
|
582 | + 'L_SHORTMESSAGE' => $LShortMessage, |
|
583 | + 'L_LONGMESSAGE' => $LLongMessage, |
|
584 | + 'L_SEVERITYCODE' => $LSeverityCode, |
|
585 | + ); |
|
586 | + array_push($Errors, $CurrentItem); |
|
587 | + $n++; |
|
588 | + } |
|
589 | + return $Errors; |
|
590 | + } |
|
591 | + |
|
592 | + |
|
593 | + |
|
594 | + /** |
|
595 | + * nothing to see here... move along.... |
|
596 | + * |
|
597 | + * @access protected |
|
598 | + * @param $Errors |
|
599 | + * @return string |
|
600 | + */ |
|
601 | + private function _DisplayErrors($Errors) |
|
602 | + { |
|
603 | + $error = ''; |
|
604 | + foreach ($Errors as $ErrorVar => $ErrorVal) { |
|
605 | + $CurrentError = $Errors[ $ErrorVar ]; |
|
606 | + foreach ($CurrentError as $CurrentErrorVar => $CurrentErrorVal) { |
|
607 | + $CurrentVarName = ''; |
|
608 | + if ($CurrentErrorVar == 'L_ERRORCODE') { |
|
609 | + $CurrentVarName = 'Error Code'; |
|
610 | + } elseif ($CurrentErrorVar == 'L_SHORTMESSAGE') { |
|
611 | + $CurrentVarName = 'Short Message'; |
|
612 | + } elseif ($CurrentErrorVar == 'L_LONGMESSAGE') { |
|
613 | + $CurrentVarName = 'Long Message'; |
|
614 | + } elseif ($CurrentErrorVar == 'L_SEVERITYCODE') { |
|
615 | + $CurrentVarName = 'Severity Code'; |
|
616 | + } |
|
617 | + $error .= '<br />' . $CurrentVarName . ': ' . $CurrentErrorVal; |
|
618 | + } |
|
619 | + } |
|
620 | + return $error; |
|
621 | + } |
|
622 | 622 | } |
@@ -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]'); |
@@ -13,37 +13,37 @@ |
||
13 | 13 | */ |
14 | 14 | class EE_Messages_Email_Payment_Reminder_Validator extends EE_Messages_Validator |
15 | 15 | { |
16 | - public function __construct($fields, $context) |
|
17 | - { |
|
18 | - $this->_m_name = 'email'; |
|
19 | - $this->_mt_name = 'payment_reminder'; |
|
16 | + public function __construct($fields, $context) |
|
17 | + { |
|
18 | + $this->_m_name = 'email'; |
|
19 | + $this->_mt_name = 'payment_reminder'; |
|
20 | 20 | |
21 | - parent::__construct($fields, $context); |
|
22 | - } |
|
21 | + parent::__construct($fields, $context); |
|
22 | + } |
|
23 | 23 | |
24 | - /** |
|
25 | - * at this point no custom validation needed for this messenger/message_type combo. |
|
26 | - */ |
|
27 | - protected function _modify_validator() |
|
28 | - { |
|
29 | - $new_config = $this->_messenger->get_validator_config(); |
|
24 | + /** |
|
25 | + * at this point no custom validation needed for this messenger/message_type combo. |
|
26 | + */ |
|
27 | + protected function _modify_validator() |
|
28 | + { |
|
29 | + $new_config = $this->_messenger->get_validator_config(); |
|
30 | 30 | |
31 | - // modify just event_list |
|
32 | - $new_config['event_list'] = array( |
|
33 | - 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
34 | - ); |
|
35 | - $new_config['ticket_list'] = array( |
|
36 | - 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
|
37 | - ); |
|
38 | - $new_config['content'] = array( |
|
39 | - 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
40 | - ); |
|
41 | - $this->_messenger->set_validator_config($new_config); |
|
31 | + // modify just event_list |
|
32 | + $new_config['event_list'] = array( |
|
33 | + 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
34 | + ); |
|
35 | + $new_config['ticket_list'] = array( |
|
36 | + 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
|
37 | + ); |
|
38 | + $new_config['content'] = array( |
|
39 | + 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
40 | + ); |
|
41 | + $this->_messenger->set_validator_config($new_config); |
|
42 | 42 | |
43 | - if ($this->_context != 'admin') { |
|
44 | - $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'); |
|
45 | - } |
|
43 | + if ($this->_context != 'admin') { |
|
44 | + $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'); |
|
45 | + } |
|
46 | 46 | |
47 | - $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
|
48 | - } |
|
47 | + $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
|
48 | + } |
|
49 | 49 | } |
@@ -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]'); |
@@ -13,37 +13,37 @@ |
||
13 | 13 | */ |
14 | 14 | class EE_Messages_Email_Payment_Declined_Validator extends EE_Messages_Validator |
15 | 15 | { |
16 | - public function __construct($fields, $context) |
|
17 | - { |
|
18 | - $this->_m_name = 'email'; |
|
19 | - $this->_mt_name = 'payment_declined'; |
|
16 | + public function __construct($fields, $context) |
|
17 | + { |
|
18 | + $this->_m_name = 'email'; |
|
19 | + $this->_mt_name = 'payment_declined'; |
|
20 | 20 | |
21 | - parent::__construct($fields, $context); |
|
22 | - } |
|
21 | + parent::__construct($fields, $context); |
|
22 | + } |
|
23 | 23 | |
24 | - /** |
|
25 | - * at this point no custom validation needed for this messenger/message_type combo. |
|
26 | - */ |
|
27 | - protected function _modify_validator() |
|
28 | - { |
|
29 | - $new_config = $this->_messenger->get_validator_config(); |
|
24 | + /** |
|
25 | + * at this point no custom validation needed for this messenger/message_type combo. |
|
26 | + */ |
|
27 | + protected function _modify_validator() |
|
28 | + { |
|
29 | + $new_config = $this->_messenger->get_validator_config(); |
|
30 | 30 | |
31 | - // modify just event_list |
|
32 | - $new_config['event_list'] = array( |
|
33 | - 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
34 | - ); |
|
35 | - $new_config['ticket_list'] = array( |
|
36 | - 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
|
37 | - ); |
|
38 | - $new_config['content'] = array( |
|
39 | - 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
40 | - ); |
|
41 | - $this->_messenger->set_validator_config($new_config); |
|
31 | + // modify just event_list |
|
32 | + $new_config['event_list'] = array( |
|
33 | + 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
34 | + ); |
|
35 | + $new_config['ticket_list'] = array( |
|
36 | + 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
|
37 | + ); |
|
38 | + $new_config['content'] = array( |
|
39 | + 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
40 | + ); |
|
41 | + $this->_messenger->set_validator_config($new_config); |
|
42 | 42 | |
43 | - if ($this->_context != 'admin') { |
|
44 | - $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'); |
|
45 | - } |
|
43 | + if ($this->_context != 'admin') { |
|
44 | + $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'); |
|
45 | + } |
|
46 | 46 | |
47 | - $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
|
48 | - } |
|
47 | + $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
|
48 | + } |
|
49 | 49 | } |
@@ -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]'); |
@@ -14,37 +14,37 @@ |
||
14 | 14 | */ |
15 | 15 | class EE_Messages_Email_Payment_Cancelled_Validator extends EE_Messages_Validator |
16 | 16 | { |
17 | - public function __construct($fields, $context) |
|
18 | - { |
|
19 | - $this->_m_name = 'email'; |
|
20 | - $this->_mt_name = 'payment_cancelled'; |
|
17 | + public function __construct($fields, $context) |
|
18 | + { |
|
19 | + $this->_m_name = 'email'; |
|
20 | + $this->_mt_name = 'payment_cancelled'; |
|
21 | 21 | |
22 | - parent::__construct($fields, $context); |
|
23 | - } |
|
22 | + parent::__construct($fields, $context); |
|
23 | + } |
|
24 | 24 | |
25 | - /** |
|
26 | - * at this point no custom validation needed for this messenger/message_type combo. |
|
27 | - */ |
|
28 | - protected function _modify_validator() |
|
29 | - { |
|
30 | - $new_config = $this->_messenger->get_validator_config(); |
|
25 | + /** |
|
26 | + * at this point no custom validation needed for this messenger/message_type combo. |
|
27 | + */ |
|
28 | + protected function _modify_validator() |
|
29 | + { |
|
30 | + $new_config = $this->_messenger->get_validator_config(); |
|
31 | 31 | |
32 | - // modify just event_list |
|
33 | - $new_config['event_list'] = array( |
|
34 | - 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
35 | - ); |
|
36 | - $new_config['ticket_list'] = array( |
|
37 | - 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
|
38 | - ); |
|
39 | - $new_config['content'] = array( |
|
40 | - 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
41 | - ); |
|
42 | - $this->_messenger->set_validator_config($new_config); |
|
32 | + // modify just event_list |
|
33 | + $new_config['event_list'] = array( |
|
34 | + 'shortcodes' => array('event', 'attendee_list', 'ticket_list', 'datetime_list', 'venue', 'organization','recipient_details', 'recipient_list', 'event_author', 'primary_registration_details', 'primary_registration_list') |
|
35 | + ); |
|
36 | + $new_config['ticket_list'] = array( |
|
37 | + 'shortcodes' => array('event_list', 'attendee_list', 'ticket', 'datetime_list', 'recipient_details', 'transaction') |
|
38 | + ); |
|
39 | + $new_config['content'] = array( |
|
40 | + 'shortcodes' => array('event_list','attendee_list', 'ticket_list', 'organization', 'recipient_details', 'recipient_list', 'transaction', 'primary_registration_details', 'primary_registration_list', 'messenger') |
|
41 | + ); |
|
42 | + $this->_messenger->set_validator_config($new_config); |
|
43 | 43 | |
44 | - if ($this->_context != 'admin') { |
|
45 | - $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 | - } |
|
44 | + if ($this->_context != 'admin') { |
|
45 | + $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 | + } |
|
47 | 47 | |
48 | - $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
|
49 | - } |
|
48 | + $this->_specific_shortcode_excludes['content'] = array('[DISPLAY_PDF_URL]', '[DISPLAY_PDF_BUTTON]'); |
|
49 | + } |
|
50 | 50 | } |