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 EE_Payment 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 EE_Payment, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 22 | class EE_Payment extends EE_Base_Class implements EEI_Payment, UsesMoneyInterface { |
||
| 23 | |||
| 24 | /** |
||
| 25 | * @param array $props_n_values incoming values |
||
| 26 | * @param string $timezone incoming timezone (if not set the timezone set for the website will be |
||
| 27 | * used.) |
||
| 28 | * @param array $date_formats incoming date_formats in an array where the first value is the |
||
| 29 | * date_format and the second value is the time format |
||
| 30 | * @param MoneyFactory $money_factory |
||
| 31 | * @return EE_Payment |
||
| 32 | * @throws InvalidArgumentException |
||
| 33 | * @throws InvalidInterfaceException |
||
| 34 | * @throws InvalidDataTypeException |
||
| 35 | * @throws EE_Error |
||
| 36 | */ |
||
| 37 | View Code Duplication | public static function new_instance( |
|
| 59 | |||
| 60 | |||
| 61 | /** |
||
| 62 | * @param array $props_n_values incoming values from the database |
||
| 63 | * @param string $timezone incoming timezone as set by the model. If not set the timezone for |
||
| 64 | * the website will be used. |
||
| 65 | * @param MoneyFactory $money_factory |
||
| 66 | * @return EE_Payment |
||
| 67 | * @throws InvalidArgumentException |
||
| 68 | * @throws InvalidInterfaceException |
||
| 69 | * @throws InvalidDataTypeException |
||
| 70 | * @throws EE_Error |
||
| 71 | */ |
||
| 72 | public static function new_instance_from_db( |
||
| 85 | |||
| 86 | |||
| 87 | /** |
||
| 88 | * basic constructor for Event Espresso classes, performs any necessary initialization, and verifies it's children |
||
| 89 | * play nice |
||
| 90 | * |
||
| 91 | * @param array $fieldValues where each key is a field (ie, array key in the 2nd layer of the model's |
||
| 92 | * _fields array, (eg, EVT_ID, TXN_amount, QST_name, etc) and values are their |
||
| 93 | * values |
||
| 94 | * @param boolean $bydb a flag for setting if the class is instantiated by the corresponding db model |
||
| 95 | * or not. |
||
| 96 | * @param string $timezone indicate what timezone you want any datetime fields to be in when |
||
| 97 | * instantiating |
||
| 98 | * a EE_Base_Class object. |
||
| 99 | * @param array $date_formats An array of date formats to set on construct where first value is the |
||
| 100 | * date_format and second value is the time format. |
||
| 101 | * @param MoneyFactory $money_factory |
||
| 102 | * @throws InvalidArgumentException |
||
| 103 | * @throws InvalidInterfaceException |
||
| 104 | * @throws InvalidDataTypeException |
||
| 105 | * @throws EE_Error |
||
| 106 | */ |
||
| 107 | View Code Duplication | protected function __construct( |
|
| 120 | |||
| 121 | |||
| 122 | /** |
||
| 123 | * Set Transaction ID |
||
| 124 | * |
||
| 125 | * @access public |
||
| 126 | * @param int $TXN_ID |
||
| 127 | * @throws EE_Error |
||
| 128 | */ |
||
| 129 | public function set_transaction_id( $TXN_ID = 0 ) { |
||
| 132 | |||
| 133 | |||
| 134 | |||
| 135 | /** |
||
| 136 | * Gets the transaction related to this payment |
||
| 137 | * |
||
| 138 | * @return EE_Transaction |
||
| 139 | * @throws EE_Error |
||
| 140 | */ |
||
| 141 | public function transaction() { |
||
| 144 | |||
| 145 | |||
| 146 | |||
| 147 | /** |
||
| 148 | * Set Status |
||
| 149 | * |
||
| 150 | * @access public |
||
| 151 | * @param string $STS_ID |
||
| 152 | * @throws EE_Error |
||
| 153 | */ |
||
| 154 | public function set_status( $STS_ID = '' ) { |
||
| 157 | |||
| 158 | |||
| 159 | |||
| 160 | /** |
||
| 161 | * Set Payment Timestamp |
||
| 162 | * |
||
| 163 | * @access public |
||
| 164 | * @param int $timestamp |
||
| 165 | * @throws EE_Error |
||
| 166 | */ |
||
| 167 | public function set_timestamp( $timestamp = 0 ) { |
||
| 170 | |||
| 171 | |||
| 172 | |||
| 173 | /** |
||
| 174 | * Set Payment Method |
||
| 175 | * |
||
| 176 | * @access public |
||
| 177 | * @param string $PAY_source |
||
| 178 | * @throws EE_Error |
||
| 179 | */ |
||
| 180 | public function set_source( $PAY_source = '' ) { |
||
| 183 | |||
| 184 | |||
| 185 | |||
| 186 | /** |
||
| 187 | * Set Payment Amount |
||
| 188 | * |
||
| 189 | * @access public |
||
| 190 | * @param float $amount |
||
| 191 | * @throws EE_Error |
||
| 192 | */ |
||
| 193 | public function set_amount( $amount = 0.00 ) { |
||
| 196 | |||
| 197 | |||
| 198 | |||
| 199 | /** |
||
| 200 | * Set Payment Gateway Response |
||
| 201 | * |
||
| 202 | * @access public |
||
| 203 | * @param string $gateway_response |
||
| 204 | * @throws EE_Error |
||
| 205 | */ |
||
| 206 | public function set_gateway_response( $gateway_response = '' ) { |
||
| 209 | |||
| 210 | |||
| 211 | |||
| 212 | /** |
||
| 213 | * Returns the name of the payment method used on this payment (previously known merely as 'gateway') |
||
| 214 | * but since 4.6.0, payment methods are models and the payment keeps a foreign key to the payment method |
||
| 215 | * used on it |
||
| 216 | * |
||
| 217 | * @deprecated |
||
| 218 | * @return string |
||
| 219 | * @throws EE_Error |
||
| 220 | */ |
||
| 221 | public function gateway() { |
||
| 232 | |||
| 233 | |||
| 234 | |||
| 235 | /** |
||
| 236 | * Set Gateway Transaction ID |
||
| 237 | * |
||
| 238 | * @access public |
||
| 239 | * @param string $txn_id_chq_nmbr |
||
| 240 | * @throws EE_Error |
||
| 241 | */ |
||
| 242 | public function set_txn_id_chq_nmbr( $txn_id_chq_nmbr = '' ) { |
||
| 245 | |||
| 246 | |||
| 247 | |||
| 248 | /** |
||
| 249 | * Set Purchase Order Number |
||
| 250 | * |
||
| 251 | * @access public |
||
| 252 | * @param string $po_number |
||
| 253 | * @throws EE_Error |
||
| 254 | */ |
||
| 255 | public function set_po_number( $po_number = '' ) { |
||
| 258 | |||
| 259 | |||
| 260 | |||
| 261 | /** |
||
| 262 | * Set Extra Accounting Field |
||
| 263 | * |
||
| 264 | * @access public |
||
| 265 | * @param string $extra_accntng |
||
| 266 | * @throws EE_Error |
||
| 267 | */ |
||
| 268 | public function set_extra_accntng( $extra_accntng = '' ) { |
||
| 271 | |||
| 272 | |||
| 273 | |||
| 274 | /** |
||
| 275 | * Set Payment made via admin flag |
||
| 276 | * |
||
| 277 | * @access public |
||
| 278 | * @param bool $via_admin |
||
| 279 | * @throws EE_Error |
||
| 280 | */ |
||
| 281 | public function set_payment_made_via_admin( $via_admin = false ) { |
||
| 288 | |||
| 289 | |||
| 290 | |||
| 291 | /** |
||
| 292 | * Set Payment Details |
||
| 293 | * |
||
| 294 | * @access public |
||
| 295 | * @param string|array $details |
||
| 296 | * @throws EE_Error |
||
| 297 | */ |
||
| 298 | public function set_details( $details = '' ) { |
||
| 306 | |||
| 307 | |||
| 308 | |||
| 309 | /** |
||
| 310 | * Sets redirect_url |
||
| 311 | * |
||
| 312 | * @param string $redirect_url |
||
| 313 | * @throws EE_Error |
||
| 314 | */ |
||
| 315 | public function set_redirect_url( $redirect_url ) { |
||
| 318 | |||
| 319 | |||
| 320 | |||
| 321 | /** |
||
| 322 | * Sets redirect_args |
||
| 323 | * |
||
| 324 | * @param array $redirect_args |
||
| 325 | * @throws EE_Error |
||
| 326 | */ |
||
| 327 | public function set_redirect_args( $redirect_args ) { |
||
| 330 | |||
| 331 | |||
| 332 | |||
| 333 | /** |
||
| 334 | * get Payment Transaction ID |
||
| 335 | * |
||
| 336 | * @access public |
||
| 337 | * @throws EE_Error |
||
| 338 | */ |
||
| 339 | public function TXN_ID() { |
||
| 342 | |||
| 343 | |||
| 344 | |||
| 345 | /** |
||
| 346 | * get Payment Status |
||
| 347 | * |
||
| 348 | * @access public |
||
| 349 | * @throws EE_Error |
||
| 350 | */ |
||
| 351 | public function status() { |
||
| 354 | |||
| 355 | |||
| 356 | |||
| 357 | /** |
||
| 358 | * get Payment Status |
||
| 359 | * |
||
| 360 | * @access public |
||
| 361 | * @throws EE_Error |
||
| 362 | */ |
||
| 363 | public function STS_ID() { |
||
| 366 | |||
| 367 | |||
| 368 | |||
| 369 | /** |
||
| 370 | * get Payment Timestamp |
||
| 371 | * |
||
| 372 | * @access public |
||
| 373 | * @param string $dt_frmt |
||
| 374 | * @param string $tm_frmt |
||
| 375 | * @return string |
||
| 376 | * @throws EE_Error |
||
| 377 | */ |
||
| 378 | public function timestamp( $dt_frmt = '', $tm_frmt = '' ) { |
||
| 381 | |||
| 382 | |||
| 383 | |||
| 384 | /** |
||
| 385 | * get Payment Source |
||
| 386 | * |
||
| 387 | * @access public |
||
| 388 | * @throws EE_Error |
||
| 389 | */ |
||
| 390 | public function source() { |
||
| 393 | |||
| 394 | |||
| 395 | |||
| 396 | /** |
||
| 397 | * get Payment Amount |
||
| 398 | * |
||
| 399 | * @access public |
||
| 400 | * @return float |
||
| 401 | * @throws EE_Error |
||
| 402 | */ |
||
| 403 | public function amount() { |
||
| 406 | |||
| 407 | |||
| 408 | |||
| 409 | /** |
||
| 410 | * @return mixed |
||
| 411 | * @throws EE_Error |
||
| 412 | */ |
||
| 413 | public function amount_no_code() { |
||
| 416 | |||
| 417 | |||
| 418 | |||
| 419 | /** |
||
| 420 | * get Payment Gateway Response |
||
| 421 | * |
||
| 422 | * @access public |
||
| 423 | * @throws EE_Error |
||
| 424 | */ |
||
| 425 | public function gateway_response() { |
||
| 428 | |||
| 429 | |||
| 430 | |||
| 431 | /** |
||
| 432 | * get Payment Gateway Transaction ID |
||
| 433 | * |
||
| 434 | * @access public |
||
| 435 | * @throws EE_Error |
||
| 436 | */ |
||
| 437 | public function txn_id_chq_nmbr() { |
||
| 440 | |||
| 441 | |||
| 442 | |||
| 443 | /** |
||
| 444 | * get Purchase Order Number |
||
| 445 | * |
||
| 446 | * @access public |
||
| 447 | * @throws EE_Error |
||
| 448 | */ |
||
| 449 | public function po_number() { |
||
| 452 | |||
| 453 | |||
| 454 | |||
| 455 | /** |
||
| 456 | * get Extra Accounting Field |
||
| 457 | * |
||
| 458 | * @access public |
||
| 459 | * @throws EE_Error |
||
| 460 | */ |
||
| 461 | public function extra_accntng() { |
||
| 464 | |||
| 465 | |||
| 466 | |||
| 467 | /** |
||
| 468 | * get Payment made via admin source |
||
| 469 | * |
||
| 470 | * @access public |
||
| 471 | * @throws EE_Error |
||
| 472 | */ |
||
| 473 | public function payment_made_via_admin() { |
||
| 476 | |||
| 477 | |||
| 478 | |||
| 479 | /** |
||
| 480 | * get Payment Details |
||
| 481 | * |
||
| 482 | * @access public |
||
| 483 | * @throws EE_Error |
||
| 484 | */ |
||
| 485 | public function details() { |
||
| 488 | |||
| 489 | |||
| 490 | |||
| 491 | /** |
||
| 492 | * Gets redirect_url |
||
| 493 | * |
||
| 494 | * @return string |
||
| 495 | * @throws EE_Error |
||
| 496 | */ |
||
| 497 | public function redirect_url() { |
||
| 500 | |||
| 501 | |||
| 502 | |||
| 503 | /** |
||
| 504 | * Gets redirect_args |
||
| 505 | * |
||
| 506 | * @return array |
||
| 507 | * @throws EE_Error |
||
| 508 | */ |
||
| 509 | public function redirect_args() { |
||
| 512 | |||
| 513 | |||
| 514 | |||
| 515 | /** |
||
| 516 | * echoes $this->pretty_status() |
||
| 517 | * |
||
| 518 | * @param bool $show_icons |
||
| 519 | * @return void |
||
| 520 | * @throws EE_Error |
||
| 521 | */ |
||
| 522 | public function e_pretty_status( $show_icons = false ) { |
||
| 525 | |||
| 526 | |||
| 527 | /** |
||
| 528 | * returns a pretty version of the status, good for displaying to users |
||
| 529 | * |
||
| 530 | * @param bool $show_icons |
||
| 531 | * @return string |
||
| 532 | * @throws InvalidArgumentException |
||
| 533 | * @throws InvalidInterfaceException |
||
| 534 | * @throws InvalidDataTypeException |
||
| 535 | * @throws EE_Error |
||
| 536 | */ |
||
| 537 | public function pretty_status( $show_icons = false ) { |
||
| 568 | |||
| 569 | |||
| 570 | |||
| 571 | /** |
||
| 572 | * For determining the status of the payment |
||
| 573 | * |
||
| 574 | * @return boolean whether the payment is approved or not |
||
| 575 | * @throws EE_Error |
||
| 576 | */ |
||
| 577 | public function is_approved() { |
||
| 580 | |||
| 581 | |||
| 582 | |||
| 583 | /** |
||
| 584 | * Generally determines if the status of this payment equals |
||
| 585 | * the $STS_ID string |
||
| 586 | * |
||
| 587 | * @param string $STS_ID an ID from the esp_status table/ |
||
| 588 | * one of the status_id_* on the EEM_Payment model |
||
| 589 | * @return boolean whether the status of this payment equals the status id |
||
| 590 | * @throws EE_Error |
||
| 591 | */ |
||
| 592 | protected function status_is( $STS_ID ) { |
||
| 595 | |||
| 596 | |||
| 597 | |||
| 598 | /** |
||
| 599 | * For determining the status of the payment |
||
| 600 | * |
||
| 601 | * @return boolean whether the payment is pending or not |
||
| 602 | * @throws EE_Error |
||
| 603 | */ |
||
| 604 | public function is_pending() { |
||
| 607 | |||
| 608 | |||
| 609 | |||
| 610 | /** |
||
| 611 | * For determining the status of the payment |
||
| 612 | * |
||
| 613 | * @return boolean |
||
| 614 | * @throws EE_Error |
||
| 615 | */ |
||
| 616 | public function is_cancelled() { |
||
| 619 | |||
| 620 | |||
| 621 | |||
| 622 | /** |
||
| 623 | * For determining the status of the payment |
||
| 624 | * |
||
| 625 | * @return boolean |
||
| 626 | * @throws EE_Error |
||
| 627 | */ |
||
| 628 | public function is_declined() { |
||
| 631 | |||
| 632 | |||
| 633 | |||
| 634 | /** |
||
| 635 | * For determining the status of the payment |
||
| 636 | * |
||
| 637 | * @return boolean |
||
| 638 | * @throws EE_Error |
||
| 639 | */ |
||
| 640 | public function is_failed() { |
||
| 643 | |||
| 644 | |||
| 645 | |||
| 646 | /** |
||
| 647 | * For determining if the payment is actually a refund ( ie: has a negative value ) |
||
| 648 | * |
||
| 649 | * @return boolean |
||
| 650 | * @throws EE_Error |
||
| 651 | */ |
||
| 652 | public function is_a_refund() { |
||
| 655 | |||
| 656 | |||
| 657 | |||
| 658 | /** |
||
| 659 | * Get the status object of this object |
||
| 660 | * |
||
| 661 | * @return EE_Status |
||
| 662 | * @throws EE_Error |
||
| 663 | */ |
||
| 664 | public function status_obj() { |
||
| 667 | |||
| 668 | |||
| 669 | |||
| 670 | /** |
||
| 671 | * Gets all the extra meta info on this payment |
||
| 672 | * |
||
| 673 | * @param array $query_params like EEM_Base::get_all |
||
| 674 | * @return EE_Extra_Meta |
||
| 675 | * @throws EE_Error |
||
| 676 | */ |
||
| 677 | public function extra_meta( $query_params = array() ) { |
||
| 680 | |||
| 681 | |||
| 682 | |||
| 683 | /** |
||
| 684 | * Gets the last-used payment method on this transaction |
||
| 685 | * (we COULD just use the last-made payment, but some payment methods, namely |
||
| 686 | * offline ones, dont' create payments) |
||
| 687 | * |
||
| 688 | * @return EE_Payment_Method |
||
| 689 | * @throws EE_Error |
||
| 690 | */ |
||
| 691 | public function payment_method() { |
||
| 694 | |||
| 695 | |||
| 696 | |||
| 697 | /** |
||
| 698 | * Gets the HTML for redirecting the user to an offsite gateway |
||
| 699 | * You can pass it special content to put inside the form, or use |
||
| 700 | * the default inner content (or possibly generate this all yourself using |
||
| 701 | * redirect_url() and redirect_args() or redirect_args_as_inputs()). |
||
| 702 | * Creates a POST request by default, but if no redirect args are specified, creates a GET request instead |
||
| 703 | * (and any querystring variables in the redirect_url are converted into html inputs |
||
| 704 | * so browsers submit them properly) |
||
| 705 | * |
||
| 706 | * @param string $inside_form_html |
||
| 707 | * @return string html |
||
| 708 | * @throws EE_Error |
||
| 709 | */ |
||
| 710 | public function redirect_form( $inside_form_html = null ) { |
||
| 758 | |||
| 759 | |||
| 760 | |||
| 761 | /** |
||
| 762 | * Changes all the name-value pairs of the redirect args into html inputs |
||
| 763 | * and returns the html as a string |
||
| 764 | * |
||
| 765 | * @return string |
||
| 766 | * @throws EE_Error |
||
| 767 | */ |
||
| 768 | public function redirect_args_as_inputs() { |
||
| 771 | |||
| 772 | |||
| 773 | |||
| 774 | /** |
||
| 775 | * Converts a 1d array of key-value pairs into html hidden inputs |
||
| 776 | * and returns the string of html |
||
| 777 | * |
||
| 778 | * @param array $args key-value pairs |
||
| 779 | * @return string |
||
| 780 | */ |
||
| 781 | protected function _args_as_inputs( $args ) { |
||
| 795 | |||
| 796 | |||
| 797 | |||
| 798 | /** |
||
| 799 | * Returns the currency of the payment. |
||
| 800 | * (At the time of writing, this will always be the currency in the configuration; |
||
| 801 | * however in the future it is anticipated that this will be stored on the payment |
||
| 802 | * object itself) |
||
| 803 | * |
||
| 804 | * @return string for the currency code |
||
| 805 | */ |
||
| 806 | public function currency_code() { |
||
| 809 | |||
| 810 | |||
| 811 | |||
| 812 | /** |
||
| 813 | * apply wp_strip_all_tags to all elements within an array |
||
| 814 | * |
||
| 815 | * @access private |
||
| 816 | * @param mixed $item |
||
| 817 | */ |
||
| 818 | private function _strip_all_tags_within_array( &$item ) { |
||
| 828 | |||
| 829 | |||
| 830 | |||
| 831 | /** |
||
| 832 | * Returns TRUE is this payment was set to approved during this request (or |
||
| 833 | * is approved and was created during this request). False otherwise. |
||
| 834 | * |
||
| 835 | * @return boolean |
||
| 836 | * @throws EE_Error |
||
| 837 | */ |
||
| 838 | public function just_approved() { |
||
| 854 | |||
| 855 | |||
| 856 | |||
| 857 | /** |
||
| 858 | * Overrides parents' get_pretty() function just for legacy reasons |
||
| 859 | * (to allow ticket https://events.codebasehq.com/projects/event-espresso/tickets/7420) |
||
| 860 | * |
||
| 861 | * @param string $field_name |
||
| 862 | * @param string $extra_cache_ref This allows the user to specify an extra cache ref for the given property |
||
| 863 | * (in cases where the same property may be used for different outputs |
||
| 864 | * - i.e. datetime, money etc.) |
||
| 865 | * @return mixed |
||
| 866 | * @throws EE_Error |
||
| 867 | */ |
||
| 868 | public function get_pretty( $field_name, $extra_cache_ref = null ) { |
||
| 874 | |||
| 875 | |||
| 876 | |||
| 877 | /** |
||
| 878 | * Gets details regarding which registrations this payment was applied to |
||
| 879 | * |
||
| 880 | * @param array $query_params like EEM_Base::get_all |
||
| 881 | * @return EE_Registration_Payment[] |
||
| 882 | * @throws EE_Error |
||
| 883 | */ |
||
| 884 | public function registration_payments( $query_params = array() ) { |
||
| 887 | |||
| 888 | |||
| 889 | /** |
||
| 890 | * Gets the first event for this payment (it's possible that it could be for multiple) |
||
| 891 | * |
||
| 892 | * @return EE_Event|null |
||
| 893 | * @throws EE_Error |
||
| 894 | */ |
||
| 895 | public function get_first_event() |
||
| 906 | |||
| 907 | |||
| 908 | /** |
||
| 909 | * Gets the name of the first event for which is being paid |
||
| 910 | * |
||
| 911 | * @return string |
||
| 912 | * @throws EE_Error |
||
| 913 | */ |
||
| 914 | public function get_first_event_name() |
||
| 919 | |||
| 920 | |||
| 921 | /** |
||
| 922 | * Returns the payment's transaction's primary registration |
||
| 923 | * @return EE_Registration|null |
||
| 924 | * @throws EE_Error |
||
| 925 | */ |
||
| 926 | public function get_primary_registration() |
||
| 933 | |||
| 934 | |||
| 935 | /** |
||
| 936 | * Gets the payment's transaction's primary registration's attendee, or null |
||
| 937 | * @return EE_Attendee|null |
||
| 938 | * @throws EE_Error |
||
| 939 | */ |
||
| 940 | public function get_primary_attendee() |
||
| 948 | |||
| 949 | |||
| 950 | /** |
||
| 951 | * Returns the payment's amount in subunits (if the currency has subunits; otherwise this will actually be |
||
| 952 | * in the currency's main units) |
||
| 953 | * |
||
| 954 | * @return int |
||
| 955 | * @throws EE_Error |
||
| 956 | * @throws InvalidEntityException |
||
| 957 | * @throws DomainException |
||
| 958 | */ |
||
| 959 | public function amountInSubunits() |
||
| 963 | |||
| 964 | |||
| 965 | /** |
||
| 966 | * Sets the payment's amount based on the incoming monetary subunits (eg pennies). If the currency has no subunits, |
||
| 967 | * the amount is actually assumed to be in the currency's main units |
||
| 968 | * |
||
| 969 | * @param int $amount_in_subunits |
||
| 970 | * @return void |
||
| 971 | * @throws EE_Error |
||
| 972 | * @throws InvalidArgumentException |
||
| 973 | * @throws InvalidInterfaceException |
||
| 974 | * @throws InvalidIdentifierException |
||
| 975 | * @throws InvalidDataTypeException |
||
| 976 | * @throws DomainException |
||
| 977 | */ |
||
| 978 | public function setAmountInSubunits($amount_in_subunits) |
||
| 982 | } |
||
| 983 | /* End of file EE_Payment.class.php */ |
||
| 985 |