Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like Transactions_Admin_Page often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use Transactions_Admin_Page, and based on these observations, apply Extract Interface, too.
1 | <?php if ( ! defined('EVENT_ESPRESSO_VERSION')) exit('No direct script access allowed'); |
||
24 | class Transactions_Admin_Page extends EE_Admin_Page { |
||
25 | |||
26 | /** |
||
27 | * @var EE_Transaction |
||
28 | */ |
||
29 | private $_transaction; |
||
30 | |||
31 | /** |
||
32 | * @var EE_Session |
||
33 | */ |
||
34 | private $_session; |
||
35 | |||
36 | /** |
||
37 | * @var array $_txn_status |
||
38 | */ |
||
39 | private static $_txn_status; |
||
40 | |||
41 | /** |
||
42 | * @var array $_pay_status |
||
43 | */ |
||
44 | private static $_pay_status; |
||
45 | |||
46 | /** |
||
47 | * @var array $_existing_reg_payment_REG_IDs |
||
48 | */ |
||
49 | protected $_existing_reg_payment_REG_IDs = null; |
||
50 | |||
51 | |||
52 | |||
53 | /** |
||
54 | * @Constructor |
||
55 | * @access public |
||
56 | * @param bool $routing |
||
57 | * @return Transactions_Admin_Page |
||
|
|||
58 | */ |
||
59 | public function __construct( $routing = TRUE ) { |
||
60 | parent::__construct( $routing ); |
||
61 | } |
||
62 | |||
63 | |||
64 | |||
65 | /** |
||
66 | * _init_page_props |
||
67 | * @return void |
||
68 | */ |
||
69 | View Code Duplication | protected function _init_page_props() { |
|
70 | $this->page_slug = TXN_PG_SLUG; |
||
71 | $this->page_label = __('Transactions', 'event_espresso'); |
||
72 | $this->_admin_base_url = TXN_ADMIN_URL; |
||
73 | $this->_admin_base_path = TXN_ADMIN; |
||
74 | } |
||
75 | |||
76 | |||
77 | |||
78 | /** |
||
79 | * _ajax_hooks |
||
80 | * @return void |
||
81 | */ |
||
82 | protected function _ajax_hooks() { |
||
83 | add_action('wp_ajax_espresso_apply_payment', array( $this, 'apply_payments_or_refunds')); |
||
84 | add_action('wp_ajax_espresso_apply_refund', array( $this, 'apply_payments_or_refunds')); |
||
85 | add_action('wp_ajax_espresso_delete_payment', array( $this, 'delete_payment')); |
||
86 | } |
||
87 | |||
88 | |||
89 | |||
90 | /** |
||
91 | * _define_page_props |
||
92 | * @return void |
||
93 | */ |
||
94 | View Code Duplication | protected function _define_page_props() { |
|
95 | $this->_admin_page_title = $this->page_label; |
||
96 | $this->_labels = array( |
||
97 | 'buttons' => array( |
||
98 | 'add' => __('Add New Transaction', 'event_espresso'), |
||
99 | 'edit' => __('Edit Transaction', 'event_espresso'), |
||
100 | 'delete' => __('Delete Transaction','event_espresso') |
||
101 | ) |
||
102 | ); |
||
103 | } |
||
104 | |||
105 | |||
106 | |||
107 | /** |
||
108 | * grab url requests and route them |
||
109 | * @access private |
||
110 | * @return void |
||
111 | */ |
||
112 | public function _set_page_routes() { |
||
113 | |||
114 | $this->_set_transaction_status_array(); |
||
115 | |||
116 | $txn_id = ! empty( $this->_req_data['TXN_ID'] ) && ! is_array( $this->_req_data['TXN_ID'] ) ? $this->_req_data['TXN_ID'] : 0; |
||
117 | |||
118 | $this->_page_routes = array( |
||
119 | |||
120 | 'default' => array( |
||
121 | 'func' => '_transactions_overview_list_table', |
||
122 | 'capability' => 'ee_read_transactions' |
||
123 | ), |
||
124 | |||
125 | 'view_transaction' => array( |
||
126 | 'func' => '_transaction_details', |
||
127 | 'capability' => 'ee_read_transaction', |
||
128 | 'obj_id' => $txn_id |
||
129 | ), |
||
130 | |||
131 | 'send_payment_reminder' => array( |
||
132 | 'func' => '_send_payment_reminder', |
||
133 | 'noheader' => TRUE, |
||
134 | 'capability' => 'ee_send_message' |
||
135 | ), |
||
136 | |||
137 | 'espresso_apply_payment' => array( |
||
138 | 'func' => 'apply_payments_or_refunds', |
||
139 | 'noheader' => TRUE, |
||
140 | 'capability' => 'ee_edit_payments' |
||
141 | ), |
||
142 | |||
143 | 'espresso_apply_refund' => array( |
||
144 | 'func' => 'apply_payments_or_refunds', |
||
145 | 'noheader' => TRUE, |
||
146 | 'capability' => 'ee_edit_payments' |
||
147 | ), |
||
148 | |||
149 | 'espresso_delete_payment' => array( |
||
150 | 'func' => 'delete_payment', |
||
151 | 'noheader' => TRUE, |
||
152 | 'capability' => 'ee_delete_payments' |
||
153 | ), |
||
154 | |||
155 | ); |
||
156 | |||
157 | } |
||
158 | |||
159 | |||
160 | |||
161 | |||
162 | |||
163 | |||
164 | |||
165 | |||
166 | protected function _set_page_config() { |
||
167 | $this->_page_config = array( |
||
168 | 'default' => array( |
||
169 | 'nav' => array( |
||
170 | 'label' => __('Overview', 'event_espresso'), |
||
171 | 'order' => 10 |
||
172 | ), |
||
173 | 'list_table' => 'EE_Admin_Transactions_List_Table', |
||
174 | 'help_tabs' => array( |
||
175 | 'transactions_overview_help_tab' => array( |
||
176 | 'title' => __('Transactions Overview', 'event_espresso'), |
||
177 | 'filename' => 'transactions_overview' |
||
178 | ), |
||
179 | 'transactions_overview_table_column_headings_help_tab' => array( |
||
180 | 'title' => __('Transactions Table Column Headings', 'event_espresso'), |
||
181 | 'filename' => 'transactions_overview_table_column_headings' |
||
182 | ), |
||
183 | 'transactions_overview_views_filters_help_tab' => array( |
||
184 | 'title' => __('Transaction Views & Filters & Search', 'event_espresso'), |
||
185 | 'filename' => 'transactions_overview_views_filters_search' |
||
186 | ), |
||
187 | ), |
||
188 | 'help_tour' => array( 'Transactions_Overview_Help_Tour' ), |
||
189 | /** |
||
190 | * commented out because currently we are not displaying tips for transaction list table status but this |
||
191 | * may change in a later iteration so want to keep the code for then. |
||
192 | */ |
||
193 | //'qtips' => array( 'Transactions_List_Table_Tips' ), |
||
194 | 'require_nonce' => FALSE |
||
195 | ), |
||
196 | 'view_transaction' => array( |
||
197 | 'nav' => array( |
||
198 | 'label' => __('View Transaction', 'event_espresso'), |
||
199 | 'order' => 5, |
||
200 | 'url' => isset($this->_req_data['TXN_ID']) ? add_query_arg(array('TXN_ID' => $this->_req_data['TXN_ID'] ), $this->_current_page_view_url ) : $this->_admin_base_url, |
||
201 | 'persistent' => FALSE |
||
202 | ), |
||
203 | 'help_tabs' => array( |
||
204 | 'transactions_view_transaction_help_tab' => array( |
||
205 | 'title' => __('View Transaction', 'event_espresso'), |
||
206 | 'filename' => 'transactions_view_transaction' |
||
207 | ), |
||
208 | 'transactions_view_transaction_transaction_details_table_help_tab' => array( |
||
209 | 'title' => __('Transaction Details Table', 'event_espresso'), |
||
210 | 'filename' => 'transactions_view_transaction_transaction_details_table' |
||
211 | ), |
||
212 | 'transactions_view_transaction_attendees_registered_help_tab' => array( |
||
213 | 'title' => __('Attendees Registered', 'event_espresso'), |
||
214 | 'filename' => 'transactions_view_transaction_attendees_registered' |
||
215 | ), |
||
216 | 'transactions_view_transaction_views_primary_registrant_billing_information_help_tab' => array( |
||
217 | 'title' => __('Primary Registrant & Billing Information', 'event_espresso'), |
||
218 | 'filename' => 'transactions_view_transaction_primary_registrant_billing_information' |
||
219 | ), |
||
220 | ), |
||
221 | 'qtips' => array( 'Transaction_Details_Tips' ), |
||
222 | 'help_tour' => array( 'Transaction_Details_Help_Tour' ), |
||
223 | 'metaboxes' => array('_transaction_details_metaboxes'), |
||
224 | |||
225 | 'require_nonce' => FALSE |
||
226 | ) |
||
227 | ); |
||
228 | } |
||
229 | |||
230 | |||
231 | /** |
||
232 | * The below methods aren't used by this class currently |
||
233 | */ |
||
234 | protected function _add_screen_options() {} |
||
235 | protected function _add_feature_pointers() {} |
||
236 | public function admin_init() { |
||
237 | EE_Registry::$i18n_js_strings[ 'invalid_server_response' ] = __( 'An error occurred! Your request may have been processed, but a valid response from the server was not received. Please refresh the page and try again.', 'event_espresso' ); |
||
238 | EE_Registry::$i18n_js_strings[ 'error_occurred' ] = __( 'An error occurred! Please refresh the page and try again.', 'event_espresso' ); |
||
239 | EE_Registry::$i18n_js_strings[ 'txn_status_array' ] = self::$_txn_status; |
||
240 | EE_Registry::$i18n_js_strings[ 'pay_status_array' ] = self::$_pay_status; |
||
241 | } |
||
242 | public function admin_notices() {} |
||
243 | public function admin_footer_scripts() {} |
||
244 | |||
245 | |||
246 | |||
247 | /** |
||
248 | * _set_transaction_status_array |
||
249 | * sets list of transaction statuses |
||
250 | * |
||
251 | * @access private |
||
252 | * @return void |
||
253 | */ |
||
254 | private function _set_transaction_status_array() { |
||
255 | self::$_txn_status = EEM_Transaction::instance()->status_array(TRUE); |
||
256 | } |
||
257 | |||
258 | |||
259 | |||
260 | /** |
||
261 | * get_transaction_status_array |
||
262 | * return the transaction status array for wp_list_table |
||
263 | * |
||
264 | * @access public |
||
265 | * @return array |
||
266 | */ |
||
267 | public function get_transaction_status_array() { |
||
268 | return self::$_txn_status; |
||
269 | } |
||
270 | |||
271 | |||
272 | |||
273 | /** |
||
274 | * get list of payment statuses |
||
275 | * |
||
276 | * @access private |
||
277 | * @return void |
||
278 | */ |
||
279 | private function _get_payment_status_array() { |
||
280 | self::$_pay_status = EEM_Payment::instance()->status_array(TRUE); |
||
281 | $this->_template_args['payment_status'] = self::$_pay_status; |
||
282 | |||
283 | } |
||
284 | |||
285 | |||
286 | |||
287 | /** |
||
288 | * _add_screen_options_default |
||
289 | * |
||
290 | * @access protected |
||
291 | * @return void |
||
292 | */ |
||
293 | protected function _add_screen_options_default() { |
||
294 | $this->_per_page_screen_option(); |
||
295 | } |
||
296 | |||
297 | |||
298 | |||
299 | /** |
||
300 | * load_scripts_styles |
||
301 | * |
||
302 | * @access public |
||
303 | * @return void |
||
304 | */ |
||
305 | public function load_scripts_styles() { |
||
306 | //enqueue style |
||
307 | wp_register_style( 'espresso_txn', TXN_ASSETS_URL . 'espresso_transactions_admin.css', array(), EVENT_ESPRESSO_VERSION ); |
||
308 | wp_enqueue_style('espresso_txn'); |
||
309 | |||
310 | //scripts |
||
311 | add_filter('FHEE_load_accounting_js', '__return_true'); |
||
312 | |||
313 | //scripts |
||
314 | wp_register_script('espresso_txn', TXN_ASSETS_URL . 'espresso_transactions_admin.js', array('ee_admin_js', 'ee-datepicker', 'jquery-ui-datepicker', 'jquery-ui-draggable', 'ee-dialog', 'ee-accounting', 'ee-serialize-full-array'), EVENT_ESPRESSO_VERSION, TRUE); |
||
315 | wp_enqueue_script('espresso_txn'); |
||
316 | |||
317 | } |
||
318 | |||
319 | |||
320 | |||
321 | /** |
||
322 | * load_scripts_styles_view_transaction |
||
323 | * |
||
324 | * @access public |
||
325 | * @return void |
||
326 | */ |
||
327 | public function load_scripts_styles_view_transaction() { |
||
328 | //styles |
||
329 | wp_enqueue_style('espresso-ui-theme'); |
||
330 | } |
||
331 | |||
332 | |||
333 | |||
334 | /** |
||
335 | * load_scripts_styles_default |
||
336 | * |
||
337 | * @access public |
||
338 | * @return void |
||
339 | */ |
||
340 | public function load_scripts_styles_default() { |
||
341 | //styles |
||
342 | wp_enqueue_style('espresso-ui-theme'); |
||
343 | } |
||
344 | |||
345 | |||
346 | |||
347 | /** |
||
348 | * _set_list_table_views_default |
||
349 | * |
||
350 | * @access protected |
||
351 | * @return void |
||
352 | */ |
||
353 | protected function _set_list_table_views_default() { |
||
354 | $this->_views = array ( |
||
355 | 'all' => array ( |
||
356 | 'slug' => 'all', |
||
357 | 'label' => __('View All Transactions', 'event_espresso'), |
||
358 | 'count' => 0 |
||
359 | ), |
||
360 | 'abandoned' => array( |
||
361 | 'slug' => 'abandoned', |
||
362 | 'label' => __('Abandoned Transactions', 'event_espresso'), |
||
363 | 'count' => 0 |
||
364 | ), |
||
365 | 'failed' => array( |
||
366 | 'slug' => 'failed', |
||
367 | 'label' => __('Failed Transactions', 'event_espresso'), |
||
368 | 'count' => 0 |
||
369 | ) |
||
370 | ); |
||
371 | } |
||
372 | |||
373 | |||
374 | |||
375 | /** |
||
376 | * _set_transaction_object |
||
377 | * This sets the _transaction property for the transaction details screen |
||
378 | * |
||
379 | * @access private |
||
380 | * @return void |
||
381 | */ |
||
382 | private function _set_transaction_object() { |
||
383 | if ( is_object( $this->_transaction) ) |
||
384 | return; //get out we've already set the object |
||
385 | |||
386 | $TXN = EEM_Transaction::instance(); |
||
387 | |||
388 | $TXN_ID = ( ! empty( $this->_req_data['TXN_ID'] )) ? absint( $this->_req_data['TXN_ID'] ) : FALSE; |
||
389 | |||
390 | //get transaction object |
||
391 | $this->_transaction = $TXN->get_one_by_ID($TXN_ID); |
||
392 | $this->_session = !empty( $this->_transaction ) ? $this->_transaction->get('TXN_session_data') : NULL; |
||
393 | |||
394 | if ( empty( $this->_transaction ) ) { |
||
395 | $error_msg = __('An error occurred and the details for Transaction ID #', 'event_espresso') . $TXN_ID . __(' could not be retrieved.', 'event_espresso'); |
||
396 | EE_Error::add_error( $error_msg, __FILE__, __FUNCTION__, __LINE__ ); |
||
397 | } |
||
398 | } |
||
399 | |||
400 | |||
401 | |||
402 | /** |
||
403 | * _transaction_legend_items |
||
404 | * |
||
405 | * @access protected |
||
406 | * @return array |
||
407 | */ |
||
408 | protected function _transaction_legend_items() { |
||
409 | $items = apply_filters( |
||
410 | 'FHEE__Transactions_Admin_Page___transaction_legend_items__items', |
||
411 | array( |
||
412 | 'view_details' => array( |
||
413 | 'class' => 'dashicons dashicons-cart', |
||
414 | 'desc' => __('View Transaction Details', 'event_espresso') |
||
415 | ), |
||
416 | 'view_invoice' => array( |
||
417 | 'class' => 'dashicons dashicons-media-spreadsheet', |
||
418 | 'desc' => __('View Transaction Invoice', 'event_espresso') |
||
419 | ), |
||
420 | 'view_receipt' => array( |
||
421 | 'class' => 'dashicons dashicons-media-default', |
||
422 | 'desc' => __('View Transaction Receipt', 'event_espresso' ) |
||
423 | ), |
||
424 | 'view_registration' => array( |
||
425 | 'class' => 'dashicons dashicons-clipboard', |
||
426 | 'desc' => __('View Registration Details', 'event_espresso') |
||
427 | ) |
||
428 | ) |
||
429 | ); |
||
430 | |||
431 | if ( EE_Registry::instance()->CAP->current_user_can( 'ee_send_message', 'espresso_transactions_send_payment_reminder' ) ) { |
||
432 | |||
433 | EE_Registry::instance()->load_helper( 'MSG_Template' ); |
||
434 | if ( EEH_MSG_Template::is_mt_active( 'payment_reminder' ) ) { |
||
435 | $items['send_payment_reminder'] = array( |
||
436 | 'class' => 'dashicons dashicons-email-alt', |
||
437 | 'desc' => __('Send Payment Reminder', 'event_espresso') |
||
438 | ); |
||
439 | } else { |
||
440 | $items['blank*'] = array( |
||
441 | 'class'=> '', |
||
442 | 'desc' => '' |
||
443 | ); |
||
444 | } |
||
445 | } else { |
||
446 | $items['blank*'] = array( |
||
447 | 'class'=> '', |
||
448 | 'desc' => '' |
||
449 | ); |
||
450 | } |
||
451 | $more_items = apply_filters( |
||
452 | 'FHEE__Transactions_Admin_Page___transaction_legend_items__more_items', |
||
453 | array( |
||
454 | 'overpaid' => array( |
||
455 | 'class' => 'ee-status-legend ee-status-legend-' . EEM_Transaction::overpaid_status_code, |
||
456 | 'desc' => EEH_Template::pretty_status( EEM_Transaction::overpaid_status_code, FALSE, 'sentence' ) |
||
457 | ), |
||
458 | 'complete' => array( |
||
459 | 'class' => 'ee-status-legend ee-status-legend-' . EEM_Transaction::complete_status_code, |
||
460 | 'desc' => EEH_Template::pretty_status( EEM_Transaction::complete_status_code, FALSE, 'sentence' ) |
||
461 | ), |
||
462 | 'incomplete' => array( |
||
463 | 'class' => 'ee-status-legend ee-status-legend-' . EEM_Transaction::incomplete_status_code, |
||
464 | 'desc' => EEH_Template::pretty_status( EEM_Transaction::incomplete_status_code, FALSE, 'sentence' ) |
||
465 | ), |
||
466 | 'abandoned' => array( |
||
467 | 'class' => 'ee-status-legend ee-status-legend-' . EEM_Transaction::abandoned_status_code, |
||
468 | 'desc' => EEH_Template::pretty_status( EEM_Transaction::abandoned_status_code, FALSE, 'sentence' ) |
||
469 | ), |
||
470 | 'failed' => array( |
||
471 | 'class' => 'ee-status-legend ee-status-legend-' . EEM_Transaction::failed_status_code, |
||
472 | 'desc' => EEH_Template::pretty_status( EEM_Transaction::failed_status_code, FALSE, 'sentence' ) |
||
473 | ) |
||
474 | ) |
||
475 | ); |
||
476 | |||
477 | return array_merge( $items, $more_items); |
||
478 | } |
||
479 | |||
480 | |||
481 | |||
482 | /** |
||
483 | * _transactions_overview_list_table |
||
484 | * |
||
485 | * @access protected |
||
486 | * @return void |
||
487 | */ |
||
488 | protected function _transactions_overview_list_table() { |
||
489 | $this->_admin_page_title = __('Transactions', 'event_espresso'); |
||
490 | $event = isset($this->_req_data['EVT_ID']) ? EEM_Event::instance()->get_one_by_ID($this->_req_data['EVT_ID'] ) : NULL; |
||
491 | $this->_template_args['admin_page_header'] = $event instanceof EE_Event ? sprintf( __('%sViewing Transactions for the Event: %s%s', 'event_espresso'), '<h3>', '<a href="' . EE_Admin_Page::add_query_args_and_nonce(array('action' => 'edit', 'post' => $event->ID()), EVENTS_ADMIN_URL ) . '" title="' . esc_attr__('Click to Edit event', 'event_espresso') . '">' . $event->get('EVT_name') . '</a>', '</h3>' ) : ''; |
||
492 | $this->_template_args['after_list_table'] = $this->_display_legend( $this->_transaction_legend_items() ); |
||
493 | $this->display_admin_list_table_page_with_no_sidebar(); |
||
494 | } |
||
495 | |||
496 | |||
497 | |||
498 | /** |
||
499 | * _transaction_details |
||
500 | * generates HTML for the View Transaction Details Admin page |
||
501 | * |
||
502 | * @access protected |
||
503 | * @return void |
||
504 | */ |
||
505 | protected function _transaction_details() { |
||
506 | do_action( 'AHEE__Transactions_Admin_Page__transaction_details__start', $this->_transaction ); |
||
507 | EE_Registry::instance()->load_helper( 'MSG_Template' ); |
||
508 | |||
509 | $this->_set_transaction_status_array(); |
||
510 | |||
511 | $this->_template_args = array(); |
||
512 | $this->_template_args['transactions_page'] = $this->_wp_page_slug; |
||
513 | |||
514 | $this->_set_transaction_object(); |
||
515 | |||
516 | $primary_registration = $this->_transaction->primary_registration(); |
||
517 | $attendee = $primary_registration instanceof EE_Registration ? $primary_registration->attendee() : NULL; |
||
518 | |||
519 | $this->_template_args['txn_nmbr']['value'] = $this->_transaction->ID(); |
||
520 | $this->_template_args['txn_nmbr']['label'] = __( 'Transaction Number', 'event_espresso' ); |
||
521 | |||
522 | $this->_template_args['txn_datetime']['value'] = $this->_transaction->get_datetime('TXN_timestamp', 'l F j, Y', 'g:i:s a' ); |
||
523 | $this->_template_args['txn_datetime']['label'] = __( 'Date', 'event_espresso' ); |
||
524 | |||
525 | $this->_template_args['txn_status']['value'] = self::$_txn_status[ $this->_transaction->get('STS_ID') ]; |
||
526 | $this->_template_args['txn_status']['label'] = __( 'Transaction Status', 'event_espresso' ); |
||
527 | $this->_template_args['txn_status']['class'] = 'status-' . $this->_transaction->get('STS_ID'); |
||
528 | |||
529 | $this->_template_args['grand_total'] = $this->_transaction->get('TXN_total'); |
||
530 | $this->_template_args['total_paid'] = $this->_transaction->get('TXN_paid'); |
||
531 | |||
532 | if ( $attendee instanceof EE_Attendee && EE_Registry::instance()->CAP->current_user_can( 'ee_send_message', 'espresso_transactions_send_payment_reminder' ) ) { |
||
533 | EE_Registry::instance()->load_helper( 'MSG_Template' ); |
||
534 | $this->_template_args['send_payment_reminder_button'] = EEH_MSG_Template::is_mt_active( 'payment_reminder' ) |
||
535 | && $this->_transaction->get('STS_ID') != EEM_Transaction::complete_status_code |
||
536 | && $this->_transaction->get('STS_ID') != EEM_Transaction::overpaid_status_code |
||
537 | ? EEH_Template::get_button_or_link( EE_Admin_Page::add_query_args_and_nonce( array( 'action'=>'send_payment_reminder', 'TXN_ID'=>$this->_transaction->ID(), 'redirect_to' => 'view_transaction' ), TXN_ADMIN_URL ), __(' Send Payment Reminder'), 'button secondary-button right', 'dashicons dashicons-email-alt' ) |
||
538 | : ''; |
||
539 | } else { |
||
540 | $this->_template_args['send_payment_reminder_button'] = ''; |
||
541 | } |
||
542 | |||
543 | $amount_due = $this->_transaction->get('TXN_total') - $this->_transaction->get('TXN_paid'); |
||
544 | $this->_template_args['amount_due'] = EEH_Template::format_currency( $amount_due, TRUE ); |
||
545 | if ( EE_Registry::instance()->CFG->currency->sign_b4 ) { |
||
546 | $this->_template_args['amount_due'] = EE_Registry::instance()->CFG->currency->sign . $this->_template_args['amount_due']; |
||
547 | } else { |
||
548 | $this->_template_args['amount_due'] = $this->_template_args['amount_due'] . EE_Registry::instance()->CFG->currency->sign; |
||
549 | } |
||
550 | $this->_template_args['amount_due_class'] = ''; |
||
551 | |||
552 | if ( $this->_transaction->get('TXN_paid') == $this->_transaction->get('TXN_total') ) { |
||
553 | // paid in full |
||
554 | $this->_template_args['amount_due'] = FALSE; |
||
555 | View Code Duplication | } elseif ( $this->_transaction->get('TXN_paid') > $this->_transaction->get('TXN_total') ) { |
|
556 | // overpaid |
||
557 | $this->_template_args['amount_due_class'] = 'txn-overview-no-payment-spn'; |
||
558 | } elseif (( $this->_transaction->get('TXN_total') > 0 ) && ( $this->_transaction->get('TXN_paid') > 0 )) { |
||
559 | // monies owing |
||
560 | $this->_template_args['amount_due_class'] = 'txn-overview-part-payment-spn'; |
||
561 | View Code Duplication | } elseif (( $this->_transaction->get('TXN_total') > 0 ) && ( $this->_transaction->get('TXN_paid') == 0 )) { |
|
562 | // no payments made yet |
||
563 | $this->_template_args['amount_due_class'] = 'txn-overview-no-payment-spn'; |
||
564 | } elseif ( $this->_transaction->get('TXN_total') == 0 ) { |
||
565 | // free event |
||
566 | $this->_template_args['amount_due'] = FALSE; |
||
567 | } |
||
568 | |||
569 | $payment_method = $this->_transaction->payment_method(); |
||
570 | |||
571 | $this->_template_args['method_of_payment_name'] = $payment_method instanceof EE_Payment_Method ? $payment_method->admin_name() : __( 'Unknown', 'event_espresso' ); |
||
572 | $this->_template_args['currency_sign'] = EE_Registry::instance()->CFG->currency->sign; |
||
573 | // link back to overview |
||
574 | $this->_template_args['txn_overview_url'] = ! empty ( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : TXN_ADMIN_URL; |
||
575 | |||
576 | |||
577 | //next and previous links |
||
578 | $next_txn = $this->_transaction->next(null, array( array( 'STS_ID' => array( '!=', EEM_Transaction::failed_status_code ) ) ), 'TXN_ID' ); |
||
579 | $this->_template_args['next_transaction'] = $next_txn ? $this->_next_link( EE_Admin_Page::add_query_args_and_nonce( array( 'action' => 'view_transaction', 'TXN_ID' => $next_txn['TXN_ID'] ), TXN_ADMIN_URL ), 'dashicons dashicons-arrow-right ee-icon-size-22' ) : ''; |
||
580 | $previous_txn = $this->_transaction->previous( null, array( array( 'STS_ID' => array( '!=', EEM_Transaction::failed_status_code ) ) ), 'TXN_ID' ); |
||
581 | $this->_template_args['previous_transaction'] = $previous_txn ? $this->_previous_link( EE_Admin_Page::add_query_args_and_nonce( array( 'action' => 'view_transaction', 'TXN_ID' => $previous_txn['TXN_ID'] ), TXN_ADMIN_URL ), 'dashicons dashicons-arrow-left ee-icon-size-22' ) : ''; |
||
582 | |||
583 | |||
584 | // grab messages at the last second |
||
585 | $this->_template_args['notices'] = EE_Error::get_notices(); |
||
586 | // path to template |
||
587 | $template_path = TXN_TEMPLATE_PATH . 'txn_admin_details_header.template.php'; |
||
588 | $this->_template_args['admin_page_header'] = EEH_Template::display_template( $template_path, $this->_template_args, TRUE ); |
||
589 | |||
590 | // the details template wrapper |
||
591 | $this->display_admin_page_with_sidebar(); |
||
592 | |||
593 | } |
||
594 | |||
595 | |||
596 | |||
597 | /** |
||
598 | * _transaction_details_metaboxes |
||
599 | * |
||
600 | * @access protected |
||
601 | * @return void |
||
602 | */ |
||
603 | protected function _transaction_details_metaboxes() { |
||
604 | |||
605 | $this->_set_transaction_object(); |
||
606 | |||
607 | add_meta_box( 'edit-txn-details-mbox', __( 'Transaction Details', 'event_espresso' ), array( $this, 'txn_details_meta_box' ), $this->_wp_page_slug, 'normal', 'high' ); |
||
608 | add_meta_box( |
||
609 | 'edit-txn-attendees-mbox', |
||
610 | __( 'Attendees Registered in this Transaction', 'event_espresso' ), |
||
611 | array( $this, 'txn_attendees_meta_box' ), |
||
612 | $this->_wp_page_slug, |
||
613 | 'normal', |
||
614 | 'high', |
||
615 | array( 'TXN_ID' => $this->_transaction->ID() ) |
||
616 | ); |
||
617 | add_meta_box( 'edit-txn-registrant-mbox', __( 'Primary Contact', 'event_espresso' ), array( $this, 'txn_registrant_side_meta_box' ), $this->_wp_page_slug, 'side', 'high' ); |
||
618 | add_meta_box( 'edit-txn-billing-info-mbox', __( 'Billing Information', 'event_espresso' ), array( $this, 'txn_billing_info_side_meta_box' ), $this->_wp_page_slug, 'side', 'high' ); |
||
619 | |||
620 | } |
||
621 | |||
622 | |||
623 | |||
624 | /** |
||
625 | * txn_details_meta_box |
||
626 | * generates HTML for the Transaction main meta box |
||
627 | * |
||
628 | * @access public |
||
629 | * @return void |
||
630 | */ |
||
631 | public function txn_details_meta_box() { |
||
632 | |||
633 | $this->_set_transaction_object(); |
||
634 | $this->_template_args['TXN_ID'] = $this->_transaction->ID(); |
||
635 | $this->_template_args['attendee'] = $this->_transaction->primary_registration() instanceof EE_Registration ? $this->_transaction->primary_registration()->attendee() : null; |
||
636 | |||
637 | //get line table |
||
638 | EEH_Autoloader::register_line_item_display_autoloaders(); |
||
639 | $Line_Item_Display = new EE_Line_Item_Display( 'admin_table', 'EE_Admin_Table_Line_Item_Display_Strategy' ); |
||
640 | $this->_template_args['line_item_table'] = $Line_Item_Display->display_line_item( $this->_transaction->total_line_item() ); |
||
641 | $this->_template_args['REG_code'] = $this->_transaction->get_first_related('Registration')->get('REG_code'); |
||
642 | |||
643 | // process taxes |
||
644 | $taxes = $this->_transaction->get_many_related( 'Line_Item', array( array( 'LIN_type' => EEM_Line_Item::type_tax ))); |
||
645 | $this->_template_args['taxes'] = ! empty( $taxes ) ? $taxes : FALSE; |
||
646 | |||
647 | $this->_template_args['grand_total'] = EEH_Template::format_currency($this->_transaction->get('TXN_total'), FALSE, FALSE ); |
||
648 | $this->_template_args['grand_raw_total'] = $this->_transaction->get('TXN_total'); |
||
649 | $this->_template_args['TXN_status'] = $this->_transaction->get('STS_ID'); |
||
650 | |||
651 | // $txn_status_class = 'status-' . $this->_transaction->get('STS_ID'); |
||
652 | |||
653 | // process payment details |
||
654 | $payments = $this->_transaction->get_many_related('Payment'); |
||
655 | if( ! empty( $payments ) ) { |
||
656 | $this->_template_args[ 'payments' ] = $payments; |
||
657 | $this->_template_args[ 'existing_reg_payments' ] = $this->_get_registration_payment_IDs( $payments ); |
||
658 | } else { |
||
659 | $this->_template_args[ 'payments' ] = false; |
||
660 | $this->_template_args[ 'existing_reg_payments' ] = array(); |
||
661 | } |
||
662 | |||
663 | $this->_template_args['edit_payment_url'] = add_query_arg( array( 'action' => 'edit_payment' ), TXN_ADMIN_URL ); |
||
664 | $this->_template_args['delete_payment_url'] = add_query_arg( array( 'action' => 'espresso_delete_payment' ), TXN_ADMIN_URL ); |
||
665 | |||
666 | if ( isset( $txn_details['invoice_number'] )) { |
||
667 | $this->_template_args['txn_details']['invoice_number']['value'] = $this->_template_args['REG_code']; |
||
668 | $this->_template_args['txn_details']['invoice_number']['label'] = __( 'Invoice Number', 'event_espresso' ); |
||
669 | } |
||
670 | |||
671 | $this->_template_args['txn_details']['registration_session']['value'] = $this->_transaction->get_first_related('Registration')->get('REG_session'); |
||
672 | $this->_template_args['txn_details']['registration_session']['label'] = __( 'Registration Session', 'event_espresso' ); |
||
673 | |||
674 | $this->_template_args['txn_details']['ip_address']['value'] = isset( $this->_session['ip_address'] ) ? $this->_session['ip_address'] : ''; |
||
675 | $this->_template_args['txn_details']['ip_address']['label'] = __( 'Transaction placed from IP', 'event_espresso' ); |
||
676 | |||
677 | $this->_template_args['txn_details']['user_agent']['value'] = isset( $this->_session['user_agent'] ) ? $this->_session['user_agent'] : ''; |
||
678 | $this->_template_args['txn_details']['user_agent']['label'] = __( 'Registrant User Agent', 'event_espresso' ); |
||
679 | |||
680 | $reg_steps = '<ul>'; |
||
681 | foreach ( $this->_transaction->reg_steps() as $reg_step => $reg_step_status ) { |
||
682 | if ( $reg_step_status === true ) { |
||
683 | $reg_steps .= '<li style="color:#70cc50">' . sprintf( __( '%1$s : Completed', 'event_espresso' ), ucwords( str_replace( '_', ' ', $reg_step ) ) ) . '</li>'; |
||
684 | } else if ( is_numeric( $reg_step_status ) && $reg_step_status !== false ) { |
||
685 | $reg_steps .= '<li style="color:#2EA2CC">' . sprintf( |
||
686 | __( '%1$s : Initiated %2$s', 'event_espresso' ), |
||
687 | ucwords( str_replace( '_', ' ', $reg_step ) ), |
||
688 | gmdate( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), ( $reg_step_status + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) ) |
||
689 | ) . '</li>'; |
||
690 | } else { |
||
691 | $reg_steps .= '<li style="color:#E76700">' . sprintf( __( '%1$s : Never Initiated', 'event_espresso' ), ucwords( str_replace( '_', ' ', $reg_step ) ) ) . '</li>'; |
||
692 | } |
||
693 | } |
||
694 | $reg_steps .= '</ul>'; |
||
695 | $this->_template_args['txn_details']['reg_steps']['value'] = $reg_steps; |
||
696 | $this->_template_args['txn_details']['reg_steps']['label'] = __( 'Registration Step Progress', 'event_espresso' ); |
||
697 | |||
698 | |||
699 | $this->_get_registrations_to_apply_payment_to(); |
||
700 | $this->_get_payment_methods( $payments ); |
||
701 | $this->_get_payment_status_array(); |
||
702 | $this->_get_reg_status_selection(); //sets up the template args for the reg status array for the transaction. |
||
703 | |||
704 | $this->_template_args['transaction_form_url'] = add_query_arg( array( 'action' => 'edit_transaction', 'process' => 'transaction' ), TXN_ADMIN_URL ); |
||
705 | $this->_template_args['apply_payment_form_url'] = add_query_arg( array( 'page' => 'espresso_transactions', 'action' => 'espresso_apply_payment' ), WP_AJAX_URL ); |
||
706 | $this->_template_args['delete_payment_form_url'] = add_query_arg( array( 'page' => 'espresso_transactions', 'action' => 'espresso_delete_payment' ), WP_AJAX_URL ); |
||
707 | |||
708 | // 'espresso_delete_payment_nonce' |
||
709 | |||
710 | $template_path = TXN_TEMPLATE_PATH . 'txn_admin_details_main_meta_box_txn_details.template.php'; |
||
711 | echo EEH_Template::display_template( $template_path, $this->_template_args, TRUE ); |
||
712 | |||
713 | } |
||
714 | |||
715 | |||
716 | |||
717 | /** |
||
718 | * _get_registration_payment_IDs |
||
719 | * |
||
720 | * generates an array of Payment IDs and their corresponding Registration IDs |
||
721 | * |
||
722 | * @access protected |
||
723 | * @param EE_Payment[] $payments |
||
724 | * @return array |
||
725 | */ |
||
726 | protected function _get_registration_payment_IDs( $payments = array() ) { |
||
727 | $existing_reg_payments = array(); |
||
728 | // get all reg payments for these payments |
||
729 | $reg_payments = EEM_Registration_Payment::instance()->get_all( array( |
||
730 | array( |
||
731 | 'PAY_ID' => array( |
||
732 | 'IN', |
||
733 | array_keys( $payments ) |
||
734 | ) |
||
735 | ) |
||
736 | ) ); |
||
737 | if ( ! empty( $reg_payments ) ) { |
||
738 | foreach ( $payments as $payment ) { |
||
739 | if ( ! $payment instanceof EE_Payment ) { |
||
740 | continue; |
||
741 | } else if ( ! isset( $existing_reg_payments[ $payment->ID() ] ) ) { |
||
742 | $existing_reg_payments[ $payment->ID() ] = array(); |
||
743 | } |
||
744 | foreach ( $reg_payments as $reg_payment ) { |
||
745 | if ( $reg_payment instanceof EE_Registration_Payment && $reg_payment->payment_ID() === $payment->ID() ) { |
||
746 | $existing_reg_payments[ $payment->ID() ][ ] = $reg_payment->registration_ID(); |
||
747 | } |
||
748 | } |
||
749 | } |
||
750 | } |
||
751 | return $existing_reg_payments; |
||
752 | } |
||
753 | |||
754 | |||
755 | |||
756 | /** |
||
757 | * _get_registrations_to_apply_payment_to |
||
758 | * |
||
759 | * generates HTML for displaying a series of checkboxes in the admin payment modal window |
||
760 | * which allows the admin to only apply the payment to the specific registrations |
||
761 | * |
||
762 | * @access protected |
||
763 | * @return void |
||
764 | */ |
||
765 | protected function _get_registrations_to_apply_payment_to() { |
||
766 | // we want any registration with an active status (ie: not deleted or cancelled) |
||
767 | $query_params = array( |
||
768 | array( |
||
769 | 'STS_ID' => array( |
||
770 | 'IN', |
||
771 | array( |
||
772 | EEM_Registration::status_id_approved, |
||
773 | EEM_Registration::status_id_pending_payment, |
||
774 | EEM_Registration::status_id_not_approved, |
||
775 | ) |
||
776 | ) |
||
777 | ) |
||
778 | ); |
||
779 | $registrations_to_apply_payment_to = '<br /><div id="txn-admin-apply-payment-to-registrations-dv" style="clear: both; margin: 1.5em 0 0; display: none;">'; |
||
780 | $registrations_to_apply_payment_to .= '<br /><div class="admin-primary-mbox-tbl-wrap">'; |
||
781 | $registrations_to_apply_payment_to .= '<table class="admin-primary-mbox-tbl">'; |
||
782 | $registrations_to_apply_payment_to .= '<thead><tr>'; |
||
783 | $registrations_to_apply_payment_to .= '<td>' . __( 'ID', 'event_espresso' ) . '</td>'; |
||
784 | $registrations_to_apply_payment_to .= '<td>' . __( 'Registrant', 'event_espresso' ) . '</td>'; |
||
785 | $registrations_to_apply_payment_to .= '<td>' . __( 'Ticket', 'event_espresso' ) . '</td>'; |
||
786 | $registrations_to_apply_payment_to .= '<td>' . __( 'Event', 'event_espresso' ) . '</td>'; |
||
787 | $registrations_to_apply_payment_to .= '<td class="txn-admin-payment-paid-td jst-cntr">' . __( 'Paid', 'event_espresso' ) . '</td>'; |
||
788 | $registrations_to_apply_payment_to .= '<td class="txn-admin-payment-owing-td jst-cntr">' . __( 'Owing', 'event_espresso' ) . '</td>'; |
||
789 | $registrations_to_apply_payment_to .= '<td class="jst-cntr">' . __( 'Apply', 'event_espresso' ) . '</td>'; |
||
790 | $registrations_to_apply_payment_to .= '</tr></thead><tbody>'; |
||
791 | // get registrations for TXN |
||
792 | $registrations = $this->_transaction->registrations( $query_params ); |
||
793 | foreach ( $registrations as $registration ) { |
||
794 | if ( $registration instanceof EE_Registration ) { |
||
795 | $owing = $registration->final_price() - $registration->paid(); |
||
796 | $taxable = $registration->ticket()->taxable() ? ' <span class="smaller-text lt-grey-text"> ' . __( '+ tax', 'event_espresso' ) . '</span>' : ''; |
||
797 | $checked = empty( $existing_reg_payments ) || in_array( $registration->ID(), $existing_reg_payments ) ? ' checked="checked"' : ''; |
||
798 | $registrations_to_apply_payment_to .= '<tr id="apply-payment-registration-row-' . $registration->ID() . '">'; |
||
799 | // add html for checkbox input and label |
||
800 | $registrations_to_apply_payment_to .= '<td>' . $registration->ID() . '</td>'; |
||
801 | $registrations_to_apply_payment_to .= '<td>' . $registration->attendee() instanceof EE_Attendee ? $registration->attendee()->full_name() : __( 'Unknown Attendee', 'event_espresso' ) . '</td>'; |
||
802 | $registrations_to_apply_payment_to .= '<td>' . $registration->ticket()->name() . ' : ' . $registration->ticket()->pretty_price() . $taxable . '</td>'; |
||
803 | $registrations_to_apply_payment_to .= '<td>' . $registration->event_name() . '</td>'; |
||
804 | $registrations_to_apply_payment_to .= '<td class="txn-admin-payment-paid-td jst-rght">' . $registration->pretty_paid() . '</td>'; |
||
805 | $registrations_to_apply_payment_to .= '<td class="txn-admin-payment-owing-td jst-rght">' . EEH_Template::format_currency( $owing ) . '</td>'; |
||
806 | $registrations_to_apply_payment_to .= '<td class="jst-cntr">'; |
||
807 | $disabled = $registration->final_price() > 0 ? '' : ' disabled'; |
||
808 | $registrations_to_apply_payment_to .= '<input type="checkbox" value="' . $registration->ID() . '" name="txn_admin_payment[registrations]"' . $checked . $disabled . '>'; |
||
809 | $registrations_to_apply_payment_to .= '</td>'; |
||
810 | $registrations_to_apply_payment_to .= '</tr>'; |
||
811 | } |
||
812 | } |
||
813 | $registrations_to_apply_payment_to .= '</tbody></table></div>'; |
||
814 | $registrations_to_apply_payment_to .= '<p class="clear description">' . __( 'The payment will only be applied to the registrations that have a check mark in their corresponding check box. Checkboxes for free registrations have been disabled.', 'event_espresso' ) . '</p></div>'; |
||
815 | $this->_template_args[ 'registrations_to_apply_payment_to' ] = $registrations_to_apply_payment_to; |
||
816 | } |
||
817 | |||
818 | |||
819 | |||
820 | /** |
||
821 | * _get_reg_status_selection |
||
822 | * |
||
823 | * @todo this will need to be adjusted either once MER comes along OR we move default reg status to tickets instead of events. |
||
824 | * @access protected |
||
825 | * @return void |
||
826 | */ |
||
827 | protected function _get_reg_status_selection() { |
||
828 | //first get all possible statuses |
||
829 | $statuses = EEM_Registration::reg_status_array(array(), TRUE); |
||
830 | //let's add a "don't change" option. |
||
831 | $status_array['NAN'] = __('Leave the Same', 'event_espresso'); |
||
832 | $status_array = array_merge( $status_array, $statuses ); |
||
833 | $this->_template_args['status_change_select'] = EEH_Form_Fields::select_input( 'txn_reg_status_change[reg_status]', $status_array, 'NAN', 'id="txn-admin-payment-reg-status-inp"', 'txn-reg-status-change-reg-status' ); |
||
834 | $this->_template_args['delete_status_change_select'] = EEH_Form_Fields::select_input( 'delete_txn_reg_status_change[reg_status]', $status_array, 'NAN', 'delete-txn-admin-payment-reg-status-inp', 'delete-txn-reg-status-change-reg-status' ); |
||
835 | |||
836 | } |
||
837 | |||
838 | |||
839 | |||
840 | /** |
||
841 | * _get_payment_methods |
||
842 | * Gets all the payment methods available generally, or the ones that are already |
||
843 | * selected on these payments (in case their payment methods are no longer active). |
||
844 | * Has the side-effect of updating the template args' payment_methods item |
||
845 | * @access private |
||
846 | * @param EE_Payment[] to show on this page |
||
847 | * @return void |
||
848 | */ |
||
849 | private function _get_payment_methods( $payments = array() ) { |
||
850 | $payment_methods_of_payments = array(); |
||
851 | foreach( $payments as $payment ){ |
||
852 | if( $payment instanceof EE_Payment ){ |
||
853 | $payment_methods_of_payments[] = $payment->get( 'PMD_ID' ); |
||
854 | } |
||
855 | } |
||
856 | if( $payment_methods_of_payments ){ |
||
857 | $query_args = array( array( 'OR*payment_method_for_payment' => array( |
||
858 | 'PMD_ID' => array( 'IN', $payment_methods_of_payments ), |
||
859 | 'PMD_scope' => array( 'LIKE', '%' . EEM_Payment_Method::scope_admin . '%' ) ) ) ); |
||
860 | }else{ |
||
861 | $query_args = array( array( 'PMD_scope' => array( 'LIKE', '%' . EEM_Payment_Method::scope_admin . '%' ) ) ); |
||
862 | } |
||
863 | $this->_template_args['payment_methods'] = EEM_Payment_Method::instance()->get_all( $query_args ); |
||
864 | } |
||
865 | |||
866 | |||
867 | |||
868 | /** |
||
869 | * txn_attendees_meta_box |
||
870 | * generates HTML for the Attendees Transaction main meta box |
||
871 | * |
||
872 | * @access public |
||
873 | * @param WP_Post $post |
||
874 | * @param array $metabox |
||
875 | * @return void |
||
876 | */ |
||
877 | public function txn_attendees_meta_box( $post, $metabox = array( 'args' => array() )) { |
||
878 | |||
879 | extract( $metabox['args'] ); |
||
880 | $this->_template_args['post'] = $post; |
||
881 | $this->_template_args['event_attendees'] = array(); |
||
882 | // process items in cart |
||
883 | $line_items = $this->_transaction->get_many_related('Line_Item', array( array( 'LIN_type' => 'line-item' ) ) ); |
||
884 | if ( ! empty( $line_items )) { |
||
885 | foreach ( $line_items as $item ) { |
||
886 | if ( $item instanceof EE_Line_Item ) { |
||
887 | switch( $item->OBJ_type() ) { |
||
888 | |||
889 | case 'Event' : |
||
890 | break; |
||
891 | |||
892 | case 'Ticket' : |
||
893 | $ticket = $item->ticket(); |
||
894 | if ( empty( $ticket )) { |
||
895 | continue; //right now we're only handling tickets here. Cause its expected that only tickets will have attendees right? |
||
896 | } |
||
897 | $ticket_price = EEH_Template::format_currency( $item->get( 'LIN_unit_price' )); |
||
898 | $event = $ticket->get_first_related('Registration')->get_first_related('Event'); |
||
899 | $event_name = $event instanceof EE_Event ? $event->get('EVT_name') . ' - ' . $item->get('LIN_name') : ''; |
||
900 | |||
901 | $registrations = $ticket->get_many_related('Registration', array( array('TXN_ID' => $this->_transaction->ID() ))); |
||
902 | foreach( $registrations as $registration ) { |
||
903 | $this->_template_args['event_attendees'][$registration->ID()]['att_num'] = $registration->get('REG_count'); |
||
904 | $this->_template_args['event_attendees'][$registration->ID()]['event_ticket_name'] = $event_name; |
||
905 | $this->_template_args['event_attendees'][$registration->ID()]['ticket_price'] = $ticket_price; |
||
906 | // attendee info |
||
907 | $attendee = $registration->get_first_related('Attendee'); |
||
908 | if ( $attendee instanceof EE_Attendee ) { |
||
909 | $this->_template_args['event_attendees'][$registration->ID()]['att_id'] = $attendee->ID(); |
||
910 | $this->_template_args['event_attendees'][$registration->ID()]['attendee'] = $attendee->full_name(); |
||
911 | $this->_template_args['event_attendees'][$registration->ID()]['email'] = '<a href="mailto:' . $attendee->email() . '?subject=' . $event->get('EVT_name') . __(' Event', 'event_espresso') . '">' . $attendee->email() . '</a>'; |
||
912 | $this->_template_args['event_attendees'][$registration->ID()]['address'] = implode(',<br>', $attendee->full_address_as_array() ); |
||
913 | } else { |
||
914 | $this->_template_args['event_attendees'][$registration->ID()]['att_id'] = ''; |
||
915 | $this->_template_args['event_attendees'][$registration->ID()]['attendee'] = ''; |
||
916 | $this->_template_args['event_attendees'][$registration->ID()]['email'] = ''; |
||
917 | $this->_template_args['event_attendees'][$registration->ID()]['address'] = ''; |
||
918 | } |
||
919 | } |
||
920 | break; |
||
921 | |||
922 | } |
||
923 | } |
||
924 | } |
||
925 | |||
926 | $this->_template_args['transaction_form_url'] = add_query_arg( array( 'action' => 'edit_transaction', 'process' => 'attendees' ), TXN_ADMIN_URL ); |
||
927 | echo EEH_Template::display_template( TXN_TEMPLATE_PATH . 'txn_admin_details_main_meta_box_attendees.template.php', $this->_template_args, TRUE ); |
||
928 | |||
929 | } else { |
||
930 | echo sprintf( |
||
931 | __( '%1$sFor some reason, there are no attendees registered for this transaction. Likely the registration was abandoned in process.%2$s', 'event_espresso' ), |
||
932 | '<p class="important-notice">', |
||
933 | '</p>' |
||
934 | ); |
||
935 | } |
||
936 | } |
||
937 | |||
938 | |||
939 | |||
940 | /** |
||
941 | * txn_registrant_side_meta_box |
||
942 | * generates HTML for the Edit Transaction side meta box |
||
943 | * |
||
944 | * @access public |
||
945 | * @throws \EE_Error |
||
946 | * @return void |
||
947 | */ |
||
948 | public function txn_registrant_side_meta_box() { |
||
949 | $primary_att = $this->_transaction->primary_registration() instanceof EE_Registration ? $this->_transaction->primary_registration()->get_first_related('Attendee') : null; |
||
950 | if ( ! $primary_att instanceof EE_Attendee ) { |
||
951 | $this->_template_args['no_attendee_message'] = __('There is no attached contact for this transaction. The transaction either failed due to an error or was abandoned.', 'event_espresso'); |
||
952 | $primary_att = EEM_Attendee::instance()->create_default_object(); |
||
953 | } |
||
954 | $this->_template_args['ATT_ID'] = $primary_att->ID(); |
||
955 | $this->_template_args['prime_reg_fname'] = $primary_att->fname(); |
||
956 | $this->_template_args['prime_reg_lname'] = $primary_att->lname(); |
||
957 | $this->_template_args['prime_reg_email'] = $primary_att->email(); |
||
958 | $this->_template_args['prime_reg_phone'] = $primary_att->phone(); |
||
959 | $this->_template_args['edit_attendee_url'] = EE_Admin_Page::add_query_args_and_nonce( array( 'action' => 'edit_attendee', 'post' => $primary_att->ID() ), REG_ADMIN_URL ); |
||
960 | // get formatted address for registrant |
||
961 | EE_Registry::instance()->load_helper( 'Formatter' ); |
||
962 | $this->_template_args[ 'formatted_address' ] = EEH_Address::format( $primary_att ); |
||
963 | echo EEH_Template::display_template( TXN_TEMPLATE_PATH . 'txn_admin_details_side_meta_box_registrant.template.php', $this->_template_args, TRUE ); |
||
964 | } |
||
965 | |||
966 | |||
967 | |||
968 | /** |
||
969 | * txn_billing_info_side_meta_box |
||
970 | * generates HTML for the Edit Transaction side meta box |
||
971 | * |
||
972 | * @access public |
||
973 | * @return void |
||
974 | */ |
||
975 | public function txn_billing_info_side_meta_box() { |
||
976 | |||
977 | $this->_template_args['billing_form'] = $this->_transaction->billing_info(); |
||
978 | $this->_template_args['billing_form_url'] = add_query_arg( |
||
979 | array( 'action' => 'edit_transaction', 'process' => 'billing' ), |
||
980 | TXN_ADMIN_URL |
||
981 | ); |
||
982 | |||
983 | $template_path = TXN_TEMPLATE_PATH . 'txn_admin_details_side_meta_box_billing_info.template.php'; |
||
984 | echo EEH_Template::display_template( $template_path, $this->_template_args, TRUE );/**/ |
||
985 | } |
||
986 | |||
987 | |||
988 | |||
989 | /** |
||
990 | * apply_payments_or_refunds |
||
991 | * registers a payment or refund made towards a transaction |
||
992 | * |
||
993 | * @access public |
||
994 | * @return void |
||
995 | */ |
||
996 | public function apply_payments_or_refunds() { |
||
1036 | |||
1037 | |||
1038 | |||
1039 | /** |
||
1040 | * _validate_payment_request_data |
||
1041 | * |
||
1042 | * @return array |
||
1043 | */ |
||
1044 | protected function _validate_payment_request_data() { |
||
1045 | if ( ! isset( $this->_req_data[ 'txn_admin_payment' ] ) ) { |
||
1046 | return false; |
||
1047 | } |
||
1048 | $payment_form = $this->_generate_payment_form_section(); |
||
1049 | try { |
||
1050 | if ( $payment_form->was_submitted() ) { |
||
1051 | $payment_form->receive_form_submission(); |
||
1052 | if ( ! $payment_form->is_valid() ) { |
||
1053 | $submission_error_messages = array(); |
||
1054 | foreach ( $payment_form->get_validation_errors_accumulated() as $validation_error ) { |
||
1055 | View Code Duplication | if ( $validation_error instanceof EE_Validation_Error ) { |
|
1056 | $submission_error_messages[] = sprintf( |
||
1057 | _x( '%s : %s', 'Form Section Name : Form Validation Error', 'event_espresso' ), |
||
1058 | $validation_error->get_form_section()->html_label_text(), |
||
1059 | $validation_error->getMessage() |
||
1060 | ); |
||
1061 | } |
||
1062 | } |
||
1063 | EE_Error::add_error( join( '<br />', $submission_error_messages ), __FILE__, __FUNCTION__, __LINE__ ); |
||
1064 | return array(); |
||
1065 | } |
||
1066 | } |
||
1067 | } catch ( EE_Error $e ) { |
||
1068 | EE_Error::add_error( $e->getMessage(), __FILE__, __FUNCTION__, __LINE__ ); |
||
1073 | |||
1074 | |||
1075 | |||
1076 | /** |
||
1077 | * _generate_payment_form_section |
||
1078 | * |
||
1079 | * @return EE_Form_Section_Proper |
||
1080 | */ |
||
1081 | protected function _generate_payment_form_section() { |
||
1174 | |||
1175 | |||
1176 | |||
1177 | /** |
||
1178 | * _create_payment_from_request_data |
||
1179 | * |
||
1180 | * @param array $valid_data |
||
1181 | * @return EE_Payment |
||
1182 | */ |
||
1183 | protected function _create_payment_from_request_data( $valid_data ) { |
||
1218 | |||
1219 | |||
1220 | |||
1221 | /** |
||
1222 | * _process_transaction_payments |
||
1223 | * |
||
1224 | * @param \EE_Transaction $transaction |
||
1225 | * @return array |
||
1226 | */ |
||
1227 | protected function _process_transaction_payments( EE_Transaction $transaction ) { |
||
1240 | |||
1241 | |||
1242 | |||
1243 | /** |
||
1244 | * _get_REG_IDs_to_apply_payment_to |
||
1245 | * |
||
1246 | * returns a list of registration IDs that the payment will apply to |
||
1247 | * |
||
1248 | * @param \EE_Payment $payment |
||
1249 | * @return array |
||
1250 | */ |
||
1251 | protected function _get_REG_IDs_to_apply_payment_to( EE_Payment $payment ) { |
||
1265 | |||
1266 | |||
1267 | |||
1268 | /** |
||
1269 | * @return array |
||
1270 | */ |
||
1271 | public function existing_reg_payment_REG_IDs() { |
||
1274 | |||
1275 | |||
1276 | |||
1277 | /** |
||
1278 | * @param array $existing_reg_payment_REG_IDs |
||
1279 | */ |
||
1280 | public function set_existing_reg_payment_REG_IDs( $existing_reg_payment_REG_IDs = null ) { |
||
1283 | |||
1284 | |||
1285 | |||
1286 | /** |
||
1287 | * _get_existing_reg_payment_REG_IDs |
||
1288 | * |
||
1289 | * returns a list of registration IDs that the payment is currently related to |
||
1290 | * as recorded in the database |
||
1291 | * |
||
1292 | * @param \EE_Payment $payment |
||
1293 | * @return array |
||
1294 | */ |
||
1295 | protected function _get_existing_reg_payment_REG_IDs( EE_Payment $payment ) { |
||
1305 | |||
1306 | |||
1307 | |||
1308 | /** |
||
1309 | * _remove_existing_registration_payments |
||
1310 | * |
||
1311 | * this calculates the difference between existing relations |
||
1312 | * to the supplied payment and the new list registration IDs, |
||
1313 | * removes any related registrations that no longer apply, |
||
1314 | * and then updates the registration paid fields |
||
1315 | * |
||
1316 | * @param \EE_Payment $payment |
||
1317 | * @param int $PAY_ID |
||
1318 | * @return bool; |
||
1319 | */ |
||
1320 | protected function _remove_existing_registration_payments( EE_Payment $payment, $PAY_ID = 0 ) { |
||
1341 | |||
1342 | |||
1343 | |||
1344 | /** |
||
1345 | * _update_registration_payments |
||
1346 | * |
||
1347 | * this applies the payments to the selected registrations |
||
1348 | * but only if they have not already been paid for |
||
1349 | * |
||
1350 | * @param EE_Transaction $transaction |
||
1351 | * @param \EE_Payment $payment |
||
1352 | * @param array $REG_IDs |
||
1353 | * @return bool |
||
1354 | */ |
||
1355 | protected function _update_registration_payments( EE_Transaction $transaction, EE_Payment $payment, $REG_IDs = array() ) { |
||
1376 | |||
1377 | |||
1378 | |||
1379 | /** |
||
1380 | * _process_registration_status_change |
||
1381 | * |
||
1382 | * This processes requested registration status changes for all the registrations |
||
1383 | * on a given transaction and (optionally) sends out notifications for the changes. |
||
1384 | * |
||
1385 | * @param EE_Transaction $transaction |
||
1386 | * @param array $REG_IDs |
||
1387 | * @return bool |
||
1388 | */ |
||
1389 | protected function _process_registration_status_change( EE_Transaction $transaction, $REG_IDs = array() ) { |
||
1407 | |||
1408 | |||
1409 | |||
1410 | /** |
||
1411 | * _build_payment_json_response |
||
1412 | * |
||
1413 | * @access public |
||
1414 | * @param \EE_Payment $payment |
||
1415 | * @param array $REG_IDs |
||
1416 | * @param bool | null $delete_txn_reg_status_change |
||
1417 | * @return array |
||
1418 | */ |
||
1419 | protected function _build_payment_json_response( EE_Payment $payment, $REG_IDs = array(), $delete_txn_reg_status_change = null ) { |
||
1453 | |||
1454 | |||
1455 | |||
1456 | /** |
||
1457 | * delete_payment |
||
1458 | * delete a payment or refund made towards a transaction |
||
1459 | * |
||
1460 | * @access public |
||
1461 | * @return void |
||
1462 | */ |
||
1463 | public function delete_payment() { |
||
1502 | |||
1503 | |||
1504 | |||
1505 | /** |
||
1506 | * _registration_payment_data_array |
||
1507 | * adds info for 'owing' and 'paid' for each registration to the json response |
||
1508 | * |
||
1509 | * @access protected |
||
1510 | * @param array $REG_IDs |
||
1511 | * @return array |
||
1512 | */ |
||
1513 | protected function _registration_payment_data_array( $REG_IDs ) { |
||
1530 | |||
1531 | |||
1532 | |||
1533 | /** |
||
1534 | * _maybe_send_notifications |
||
1535 | * |
||
1536 | * determines whether or not the admin has indicated that notifications should be sent. |
||
1537 | * If so, will toggle a filter switch for delivering registration notices. |
||
1538 | * If passed an EE_Payment object, then it will trigger payment notifications instead. |
||
1539 | * |
||
1540 | * @access protected |
||
1541 | * @param \EE_Payment | null $payment |
||
1542 | */ |
||
1543 | protected function _maybe_send_notifications( $payment = null ) { |
||
1571 | |||
1572 | |||
1573 | |||
1574 | /** |
||
1575 | * _send_payment_reminder |
||
1576 | * generates HTML for the View Transaction Details Admin page |
||
1577 | * |
||
1578 | * @access protected |
||
1579 | * @return void |
||
1580 | */ |
||
1581 | protected function _send_payment_reminder() { |
||
1588 | |||
1589 | |||
1590 | |||
1591 | /** |
||
1592 | * get_transactions |
||
1593 | * get transactions for given parameters (used by list table) |
||
1594 | * |
||
1595 | * @param int $perpage how many transactions displayed per page |
||
1596 | * @param boolean $count return the count or objects |
||
1597 | * @param string $view |
||
1598 | * @return mixed int = count || array of transaction objects |
||
1599 | */ |
||
1600 | public function get_transactions( $perpage, $count = FALSE, $view = '' ) { |
||
1708 | |||
1709 | |||
1710 | |||
1711 | } |
||
1712 |
Adding a
@return
annotation to a constructor is not recommended, since a constructor does not have a meaningful return value.Please refer to the PHP core documentation on constructors.