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
@returnannotation 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.