Completed
Pull Request — master (#805)
by Darren
14:17
created
public/Espresso_Arabica_2014/single-espresso_events.php 1 patch
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,11 +19,11 @@  discard block
 block discarded – undo
19 19
 				<div id="espresso-event-details-dv" class="" >
20 20
 			<?php
21 21
 				// Start the Loop.
22
-				while ( have_posts() ) : the_post();
22
+				while (have_posts()) : the_post();
23 23
 					//  Include the post TYPE-specific template for the content.
24
-					espresso_get_template_part( 'content', 'espresso_events' );
24
+					espresso_get_template_part('content', 'espresso_events');
25 25
 					// If comments are open or we have at least one comment, load up the comment template.
26
-					if ( comments_open() || get_comments_number() ) {
26
+					if (comments_open() || get_comments_number()) {
27 27
 						comments_template();
28 28
 					}
29 29
 				endwhile;
@@ -35,6 +35,6 @@  discard block
 block discarded – undo
35 35
 	</div><!-- #primary -->
36 36
 
37 37
 <?php
38
-get_sidebar( 'content' );
38
+get_sidebar('content');
39 39
 get_sidebar();
40 40
 get_footer();
41 41
\ No newline at end of file
Please login to merge, or discard this patch.
registration_form/help_tabs/registration_form_edit_question.help_tab.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -30,8 +30,8 @@
 block discarded – undo
30 30
 <?php _e('This shows the type of question. Available options are Text, Textarea, Checkboxes, Radio Buttons, Dropdown, State/Province Dropdown, Country Dropdown, Date Picker, and HTML Textarea (allowed tags: a, abbr, acronym, b, br, blockquote ,cite, code, del ,em, i, li, ol, p, q, s, strike, strong, ul).', 'event_espresso'); ?>
31 31
 </li>
32 32
 <li>
33
-<strong><?php _e('Answer Options (for applicable question types)', 'event_espresso');?></strong>
34
-<strong><?php _e('Values do not allow any HTML, however, descriptions do allow HTML.', 'event_espresso');?></strong>
33
+<strong><?php _e('Answer Options (for applicable question types)', 'event_espresso'); ?></strong>
34
+<strong><?php _e('Values do not allow any HTML, however, descriptions do allow HTML.', 'event_espresso'); ?></strong>
35 35
 </li>
36 36
 <li>
37 37
 <strong><?php _e('Required Question', 'event_espresso'); ?></strong><br />
Please login to merge, or discard this patch.
admin_pages/payments/Payments_Admin_Page.core.php 3 patches
Doc Comments   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -470,7 +470,7 @@  discard block
 block discarded – undo
470 470
      *
471 471
      * @access protected
472 472
      * @param \EE_Payment_Method $payment_method
473
-     * @return \EE_Form_Section_Proper
473
+     * @return EE_Form_Section_HTML
474 474
      */
475 475
     protected function _pci_dss_compliance(EE_Payment_Method $payment_method)
476 476
     {
@@ -506,7 +506,7 @@  discard block
 block discarded – undo
506 506
      *
507 507
      * @access protected
508 508
      * @param \EE_Payment_Method $payment_method
509
-     * @return \EE_Form_Section_Proper
509
+     * @return EE_Form_Section_HTML
510 510
      */
511 511
     protected function _currency_support(EE_Payment_Method $payment_method)
512 512
     {
@@ -541,7 +541,7 @@  discard block
 block discarded – undo
541 541
      *
542 542
      * @access protected
543 543
      * @param \EE_Payment_Method $payment_method
544
-     * @return \EE_Form_Section_HTML
544
+     * @return EE_Payment_Method_Form
545 545
      */
546 546
     protected function _payment_method_settings(EE_Payment_Method $payment_method)
547 547
     {
@@ -615,7 +615,7 @@  discard block
 block discarded – undo
615 615
      *
616 616
      * @access protected
617 617
      * @param \EE_Payment_Method $payment_method
618
-     * @return \EE_Form_Section_Proper
618
+     * @return EE_Form_Section_HTML
619 619
      */
620 620
     protected function _deactivate_payment_method_button(EE_Payment_Method $payment_method)
621 621
     {
Please login to merge, or discard this patch.
Spacing   +42 added lines, -42 removed lines patch added patch discarded remove patch
@@ -170,7 +170,7 @@  discard block
 block discarded – undo
170 170
         $payment_method_types = EE_Payment_Method_Manager::instance()->payment_method_types();
171 171
         $all_pmt_help_tabs_config = array();
172 172
         foreach ($payment_method_types as $payment_method_type) {
173
-            if (! EE_Registry::instance()->CAP->current_user_can(
173
+            if ( ! EE_Registry::instance()->CAP->current_user_can(
174 174
                 $payment_method_type->cap_name(),
175 175
                 'specific_payment_method_type_access'
176 176
             )
@@ -180,10 +180,10 @@  discard block
 block discarded – undo
180 180
             foreach ($payment_method_type->help_tabs_config() as $help_tab_name => $config) {
181 181
                 $template_args = isset($config['template_args']) ? $config['template_args'] : array();
182 182
                 $template_args['admin_page_obj'] = $this;
183
-                $all_pmt_help_tabs_config[ $help_tab_name ] = array(
183
+                $all_pmt_help_tabs_config[$help_tab_name] = array(
184 184
                     'title'   => $config['title'],
185 185
                     'content' => EEH_Template::display_template(
186
-                        $payment_method_type->file_folder() . 'help_tabs' . DS . $config['filename'] . '.help_tab.php',
186
+                        $payment_method_type->file_folder().'help_tabs'.DS.$config['filename'].'.help_tab.php',
187 187
                         $template_args,
188 188
                         true
189 189
                     ),
@@ -226,7 +226,7 @@  discard block
 block discarded – undo
226 226
         wp_enqueue_script('ee-text-links');
227 227
         wp_enqueue_script(
228 228
             'espresso_payments',
229
-            EE_PAYMENTS_ASSETS_URL . 'espresso_payments_admin.js',
229
+            EE_PAYMENTS_ASSETS_URL.'espresso_payments_admin.js',
230 230
             array('espresso-ui-theme', 'ee-datepicker'),
231 231
             EVENT_ESPRESSO_VERSION,
232 232
             true
@@ -239,7 +239,7 @@  discard block
 block discarded – undo
239 239
         // styles
240 240
         wp_register_style(
241 241
             'espresso_payments',
242
-            EE_PAYMENTS_ASSETS_URL . 'ee-payments.css',
242
+            EE_PAYMENTS_ASSETS_URL.'ee-payments.css',
243 243
             array(),
244 244
             EVENT_ESPRESSO_VERSION
245 245
         );
@@ -268,7 +268,7 @@  discard block
 block discarded – undo
268 268
                 continue;
269 269
             }
270 270
             // check access
271
-            if (! EE_Registry::instance()->CAP->current_user_can(
271
+            if ( ! EE_Registry::instance()->CAP->current_user_can(
272 272
                 $pmt_obj->cap_name(),
273 273
                 'specific_payment_method_type_access'
274 274
             )
@@ -277,7 +277,7 @@  discard block
 block discarded – undo
277 277
             }
278 278
             // check for any active pms of that type
279 279
             $payment_method = EEM_Payment_Method::instance()->get_one_of_type($pmt_obj->system_name());
280
-            if (! $payment_method instanceof EE_Payment_Method) {
280
+            if ( ! $payment_method instanceof EE_Payment_Method) {
281 281
                 $payment_method = EE_Payment_Method::new_instance(
282 282
                     array(
283 283
                         'PMD_slug'       => sanitize_key($pmt_obj->system_name()),
@@ -287,7 +287,7 @@  discard block
 block discarded – undo
287 287
                     )
288 288
                 );
289 289
             }
290
-            $payment_methods[ $payment_method->slug() ] = $payment_method;
290
+            $payment_methods[$payment_method->slug()] = $payment_method;
291 291
         }
292 292
         $payment_methods = apply_filters(
293 293
             'FHEE__Payments_Admin_Page___payment_methods_list__payment_methods',
@@ -297,7 +297,7 @@  discard block
 block discarded – undo
297 297
             if ($payment_method instanceof EE_Payment_Method) {
298 298
                 add_meta_box(
299 299
                     // html id
300
-                    'espresso_' . $payment_method->slug() . '_payment_settings',
300
+                    'espresso_'.$payment_method->slug().'_payment_settings',
301 301
                     // title
302 302
                     sprintf(__('%s Settings', 'event_espresso'), $payment_method->admin_name()),
303 303
                     // callback
@@ -312,10 +312,10 @@  discard block
 block discarded – undo
312 312
                     array('payment_method' => $payment_method)
313 313
                 );
314 314
                 // setup for tabbed content
315
-                $tabs[ $payment_method->slug() ] = array(
315
+                $tabs[$payment_method->slug()] = array(
316 316
                     'label' => $payment_method->admin_name(),
317 317
                     'class' => $payment_method->active() ? 'gateway-active' : '',
318
-                    'href'  => 'espresso_' . $payment_method->slug() . '_payment_settings',
318
+                    'href'  => 'espresso_'.$payment_method->slug().'_payment_settings',
319 319
                     'title' => __('Modify this Payment Method', 'event_espresso'),
320 320
                     'slug'  => $payment_method->slug(),
321 321
                 );
@@ -346,7 +346,7 @@  discard block
 block discarded – undo
346 346
         }
347 347
         $payment_method = EEM_Payment_Method::instance()->get_one(array(array('PMD_slug' => $payment_method_slug)));
348 348
         // if that didn't work or wasn't provided, find another way to select the current pm
349
-        if (! $this->_verify_payment_method($payment_method)) {
349
+        if ( ! $this->_verify_payment_method($payment_method)) {
350 350
             // like, looking for an active one
351 351
             $payment_method = EEM_Payment_Method::instance()->get_one_active('CART');
352 352
             // test that one as well
@@ -395,7 +395,7 @@  discard block
 block discarded – undo
395 395
     {
396 396
         $payment_method = isset($metabox['args'], $metabox['args']['payment_method'])
397 397
             ? $metabox['args']['payment_method'] : null;
398
-        if (! $payment_method instanceof EE_Payment_Method) {
398
+        if ( ! $payment_method instanceof EE_Payment_Method) {
399 399
             throw new EE_Error(
400 400
                 sprintf(
401 401
                     __(
@@ -412,7 +412,7 @@  discard block
 block discarded – undo
412 412
             if ($form->form_data_present_in($this->_req_data)) {
413 413
                 $form->receive_form_submission($this->_req_data);
414 414
             }
415
-            echo $form->form_open() . $form->get_html_and_js() . $form->form_close();
415
+            echo $form->form_open().$form->get_html_and_js().$form->form_close();
416 416
         } else {
417 417
             echo $this->_activate_payment_method_button($payment_method)->get_html_and_js();
418 418
         }
@@ -428,13 +428,13 @@  discard block
 block discarded – undo
428 428
      */
429 429
     protected function _generate_payment_method_settings_form(EE_Payment_Method $payment_method)
430 430
     {
431
-        if (! $payment_method instanceof EE_Payment_Method) {
431
+        if ( ! $payment_method instanceof EE_Payment_Method) {
432 432
             return new EE_Form_Section_Proper();
433 433
         }
434 434
         return new EE_Form_Section_Proper(
435 435
             array(
436
-                'name'            => $payment_method->slug() . '_settings_form',
437
-                'html_id'         => $payment_method->slug() . '_settings_form',
436
+                'name'            => $payment_method->slug().'_settings_form',
437
+                'html_id'         => $payment_method->slug().'_settings_form',
438 438
                 'action'          => EE_Admin_Page::add_query_args_and_nonce(
439 439
                     array(
440 440
                         'action'         => 'update_payment_method',
@@ -476,7 +476,7 @@  discard block
 block discarded – undo
476 476
                         EEH_HTML::label(
477 477
                             EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
478 478
                         )
479
-                    ) .
479
+                    ).
480 480
                     EEH_HTML::td(
481 481
                         EEH_HTML::strong(
482 482
                             __(
@@ -510,14 +510,14 @@  discard block
 block discarded – undo
510 510
      */
511 511
     protected function _currency_support(EE_Payment_Method $payment_method)
512 512
     {
513
-        if (! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
513
+        if ( ! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
514 514
             return new EE_Form_Section_HTML(
515 515
                 EEH_HTML::tr(
516 516
                     EEH_HTML::th(
517 517
                         EEH_HTML::label(
518 518
                             EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
519 519
                         )
520
-                    ) .
520
+                    ).
521 521
                     EEH_HTML::td(
522 522
                         EEH_HTML::strong(
523 523
                             sprintf(
@@ -597,7 +597,7 @@  discard block
 block discarded – undo
597 597
         $update_button = new EE_Submit_Input(
598 598
             array(
599 599
                 'name'       => 'submit',
600
-                'html_id'    => 'save_' . $payment_method->slug() . '_settings',
600
+                'html_id'    => 'save_'.$payment_method->slug().'_settings',
601 601
                 'default'    => sprintf(
602 602
                     __('Update %s Payment Settings', 'event_espresso'),
603 603
                     $payment_method->admin_name()
@@ -606,9 +606,9 @@  discard block
 block discarded – undo
606 606
             )
607 607
         );
608 608
         return new EE_Form_Section_HTML(
609
-            EEH_HTML::no_row(EEH_HTML::br(2)) .
609
+            EEH_HTML::no_row(EEH_HTML::br(2)).
610 610
             EEH_HTML::tr(
611
-                EEH_HTML::th(__('Update Settings', 'event_espresso')) .
611
+                EEH_HTML::th(__('Update Settings', 'event_espresso')).
612 612
                 EEH_HTML::td(
613 613
                     $update_button->get_html_for_input()
614 614
                 )
@@ -632,7 +632,7 @@  discard block
 block discarded – undo
632 632
         );
633 633
         return new EE_Form_Section_HTML(
634 634
             EEH_HTML::tr(
635
-                EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')) .
635
+                EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')).
636 636
                 EEH_HTML::td(
637 637
                     EEH_HTML::link(
638 638
                         EE_Admin_Page::add_query_args_and_nonce(
@@ -644,7 +644,7 @@  discard block
 block discarded – undo
644 644
                         ),
645 645
                         $link_text_and_title,
646 646
                         $link_text_and_title,
647
-                        'deactivate_' . $payment_method->slug(),
647
+                        'deactivate_'.$payment_method->slug(),
648 648
                         'espresso-button button-secondary'
649 649
                     )
650 650
                 )
@@ -668,8 +668,8 @@  discard block
 block discarded – undo
668 668
         );
669 669
         return new EE_Form_Section_Proper(
670 670
             array(
671
-                'name'            => 'activate_' . $payment_method->slug() . '_settings_form',
672
-                'html_id'         => 'activate_' . $payment_method->slug() . '_settings_form',
671
+                'name'            => 'activate_'.$payment_method->slug().'_settings_form',
672
+                'html_id'         => 'activate_'.$payment_method->slug().'_settings_form',
673 673
                 'action'          => '#',
674 674
                 'layout_strategy' => new EE_Admin_Two_Column_Layout(),
675 675
                 'subsections'     => apply_filters(
@@ -684,11 +684,11 @@  discard block
 block discarded – undo
684 684
                                     '',
685 685
                                     'colspan="2"'
686 686
                                 )
687
-                            ) .
687
+                            ).
688 688
                             EEH_HTML::tr(
689 689
                                 EEH_HTML::th(
690 690
                                     EEH_HTML::label(__('Click to Activate ', 'event_espresso'))
691
-                                ) .
691
+                                ).
692 692
                                 EEH_HTML::td(
693 693
                                     EEH_HTML::link(
694 694
                                         EE_Admin_Page::add_query_args_and_nonce(
@@ -700,7 +700,7 @@  discard block
 block discarded – undo
700 700
                                         ),
701 701
                                         $link_text_and_title,
702 702
                                         $link_text_and_title,
703
-                                        'activate_' . $payment_method->slug(),
703
+                                        'activate_'.$payment_method->slug(),
704 704
                                         'espresso-button-green button-primary'
705 705
                                     )
706 706
                                 )
@@ -724,7 +724,7 @@  discard block
 block discarded – undo
724 724
     {
725 725
         return new EE_Form_Section_HTML(
726 726
             EEH_HTML::tr(
727
-                EEH_HTML::th() .
727
+                EEH_HTML::th().
728 728
                 EEH_HTML::td(
729 729
                     EEH_HTML::p(__('All fields marked with a * are required fields', 'event_espresso'), '', 'grey-text')
730 730
                 )
@@ -807,7 +807,7 @@  discard block
 block discarded – undo
807 807
                 }
808 808
             }
809 809
             // if we couldn't find the correct payment method type...
810
-            if (! $correct_pmt_form_to_use) {
810
+            if ( ! $correct_pmt_form_to_use) {
811 811
                 EE_Error::add_error(
812 812
                     __(
813 813
                         "We could not find which payment method type your form submission related to. Please contact support",
@@ -822,7 +822,7 @@  discard block
 block discarded – undo
822 822
             $correct_pmt_form_to_use->receive_form_submission($this->_req_data);
823 823
             if ($correct_pmt_form_to_use->is_valid()) {
824 824
                 $payment_settings_subform = $correct_pmt_form_to_use->get_subsection('payment_method_settings');
825
-                if (! $payment_settings_subform instanceof EE_Payment_Method_Form) {
825
+                if ( ! $payment_settings_subform instanceof EE_Payment_Method_Form) {
826 826
                     throw new EE_Error(
827 827
                         sprintf(
828 828
                             __(
@@ -874,7 +874,7 @@  discard block
 block discarded – undo
874 874
         $form = $this->getPaymentSettingsForm();
875 875
         $this->_set_add_edit_form_tags('update_payment_settings');
876 876
         $this->_set_publish_post_box_vars(null, false, false, null, false);
877
-        $this->_template_args['admin_page_content'] =  $form->get_html_and_js();
877
+        $this->_template_args['admin_page_content'] = $form->get_html_and_js();
878 878
         $this->display_admin_page_with_sidebar();
879 879
     }
880 880
 
@@ -910,7 +910,7 @@  discard block
 block discarded – undo
910 910
             EE_Registry::instance()->CFG
911 911
         );
912 912
 
913
-        $cfg =  EE_Registry::instance()->CFG ;
913
+        $cfg = EE_Registry::instance()->CFG;
914 914
 
915 915
         $what = __('Payment Settings', 'event_espresso');
916 916
         $success = $this->_update_espresso_configuration(
@@ -1011,7 +1011,7 @@  discard block
 block discarded – undo
1011 1011
         }
1012 1012
         // take into account search
1013 1013
         if (isset($this->_req_data['s']) && $this->_req_data['s']) {
1014
-            $similarity_string = array('LIKE', '%' . str_replace("", "%", $this->_req_data['s']) . '%');
1014
+            $similarity_string = array('LIKE', '%'.str_replace("", "%", $this->_req_data['s']).'%');
1015 1015
             $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_fname'] = $similarity_string;
1016 1016
             $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_lname'] = $similarity_string;
1017 1017
             $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_email'] = $similarity_string;
@@ -1031,8 +1031,8 @@  discard block
 block discarded – undo
1031 1031
             $start_date = wp_strip_all_tags($this->_req_data['payment-filter-start-date']);
1032 1032
             $end_date = wp_strip_all_tags($this->_req_data['payment-filter-end-date']);
1033 1033
             // make sure our timestamps start and end right at the boundaries for each day
1034
-            $start_date = date('Y-m-d', strtotime($start_date)) . ' 00:00:00';
1035
-            $end_date = date('Y-m-d', strtotime($end_date)) . ' 23:59:59';
1034
+            $start_date = date('Y-m-d', strtotime($start_date)).' 00:00:00';
1035
+            $end_date = date('Y-m-d', strtotime($end_date)).' 23:59:59';
1036 1036
             // convert to timestamps
1037 1037
             $start_date = strtotime($start_date);
1038 1038
             $end_date = strtotime($end_date);
@@ -1065,15 +1065,15 @@  discard block
 block discarded – undo
1065 1065
             $query_params['order_by'] = array('LOG_time' => 'DESC');
1066 1066
         }
1067 1067
         $offset = ($current_page - 1) * $per_page;
1068
-        if (! isset($this->_req_data['download_results'])) {
1068
+        if ( ! isset($this->_req_data['download_results'])) {
1069 1069
             $query_params['limit'] = array($offset, $per_page);
1070 1070
         }
1071 1071
         // now they've requested to instead just download the file instead of viewing it.
1072 1072
         if (isset($this->_req_data['download_results'])) {
1073 1073
             $wpdb_results = EEM_Change_Log::instance()->get_all_efficiently($query_params);
1074 1074
             header('Content-Disposition: attachment');
1075
-            header("Content-Disposition: attachment; filename=ee_payment_logs_for_" . sanitize_key(site_url()));
1076
-            echo "<h1>Payment Logs for " . site_url() . "</h1>";
1075
+            header("Content-Disposition: attachment; filename=ee_payment_logs_for_".sanitize_key(site_url()));
1076
+            echo "<h1>Payment Logs for ".site_url()."</h1>";
1077 1077
             echo "<h3>Query:</h3>";
1078 1078
             var_dump($query_params);
1079 1079
             echo "<h3>Results:</h3>";
@@ -1125,7 +1125,7 @@  discard block
 block discarded – undo
1125 1125
             }
1126 1126
         }
1127 1127
         $this->_template_args['admin_page_content'] = EEH_Template::display_template(
1128
-            EE_PAYMENTS_TEMPLATE_PATH . 'payment_log_details.template.php',
1128
+            EE_PAYMENTS_TEMPLATE_PATH.'payment_log_details.template.php',
1129 1129
             array(
1130 1130
                 'payment_log'    => $payment_log,
1131 1131
                 'payment_method' => $payment_method,
Please login to merge, or discard this patch.
Indentation   +1124 added lines, -1124 removed lines patch added patch discarded remove patch
@@ -14,1128 +14,1128 @@
 block discarded – undo
14 14
 class Payments_Admin_Page extends EE_Admin_Page
15 15
 {
16 16
 
17
-    /**
18
-     * Variables used for when we're re-sorting the logs results, in case
19
-     * we needed to do two queries and we need to resort
20
-     *
21
-     * @var string
22
-     */
23
-    private $_sort_logs_again_direction;
24
-
25
-
26
-    /**
27
-     * @Constructor
28
-     * @access public
29
-     * @param bool $routing indicate whether we want to just load the object and handle routing or just load the object.
30
-     * @return \Payments_Admin_Page
31
-     */
32
-    public function __construct($routing = true)
33
-    {
34
-        parent::__construct($routing);
35
-    }
36
-
37
-
38
-    protected function _init_page_props()
39
-    {
40
-        $this->page_slug = EE_PAYMENTS_PG_SLUG;
41
-        $this->page_label = __('Payment Methods', 'event_espresso');
42
-        $this->_admin_base_url = EE_PAYMENTS_ADMIN_URL;
43
-        $this->_admin_base_path = EE_PAYMENTS_ADMIN;
44
-    }
45
-
46
-
47
-    protected function _ajax_hooks()
48
-    {
49
-        // todo: all hooks for ajax goes here.
50
-    }
51
-
52
-
53
-    protected function _define_page_props()
54
-    {
55
-        $this->_admin_page_title = $this->page_label;
56
-        $this->_labels = array(
57
-            'publishbox' => __('Update Settings', 'event_espresso'),
58
-        );
59
-    }
60
-
61
-
62
-    protected function _set_page_routes()
63
-    {
64
-        /**
65
-         * note that with payment method capabilities, although we've implemented
66
-         * capability mapping which will be used for accessing payment methods owned by
67
-         * other users.  This is not fully implemented yet in the payment method ui.
68
-         * Currently only the "plural" caps are in active use.
69
-         * When cap mapping is implemented, some routes will need to use the singular form of
70
-         * capability method and also include the $id of the payment method for the route.
71
-         **/
72
-        $this->_page_routes = array(
73
-            'default'                   => array(
74
-                'func'       => '_payment_methods_list',
75
-                'capability' => 'ee_edit_payment_methods',
76
-            ),
77
-            'payment_settings'          => array(
78
-                'func'       => '_payment_settings',
79
-                'capability' => 'ee_manage_gateways',
80
-            ),
81
-            'activate_payment_method'   => array(
82
-                'func'       => '_activate_payment_method',
83
-                'noheader'   => true,
84
-                'capability' => 'ee_edit_payment_methods',
85
-            ),
86
-            'deactivate_payment_method' => array(
87
-                'func'       => '_deactivate_payment_method',
88
-                'noheader'   => true,
89
-                'capability' => 'ee_delete_payment_methods',
90
-            ),
91
-            'update_payment_method'     => array(
92
-                'func'               => '_update_payment_method',
93
-                'noheader'           => true,
94
-                'headers_sent_route' => 'default',
95
-                'capability'         => 'ee_edit_payment_methods',
96
-            ),
97
-            'update_payment_settings'   => array(
98
-                'func'       => '_update_payment_settings',
99
-                'noheader'   => true,
100
-                'capability' => 'ee_manage_gateways',
101
-            ),
102
-            'payment_log'               => array(
103
-                'func'       => '_payment_log_overview_list_table',
104
-                'capability' => 'ee_read_payment_methods',
105
-            ),
106
-            'payment_log_details'       => array(
107
-                'func'       => '_payment_log_details',
108
-                'capability' => 'ee_read_payment_methods',
109
-            ),
110
-        );
111
-    }
112
-
113
-
114
-    protected function _set_page_config()
115
-    {
116
-        $payment_method_list_config = array(
117
-            'nav'           => array(
118
-                'label' => __('Payment Methods', 'event_espresso'),
119
-                'order' => 10,
120
-            ),
121
-            'metaboxes'     => $this->_default_espresso_metaboxes,
122
-            'help_tabs'     => array_merge(
123
-                array(
124
-                    'payment_methods_overview_help_tab' => array(
125
-                        'title'    => __('Payment Methods Overview', 'event_espresso'),
126
-                        'filename' => 'payment_methods_overview',
127
-                    ),
128
-                ),
129
-                $this->_add_payment_method_help_tabs()
130
-            ),
131
-            'help_tour'     => array('Payment_Methods_Selection_Help_Tour'),
132
-            'require_nonce' => false,
133
-        );
134
-        $this->_page_config = array(
135
-            'default'          => $payment_method_list_config,
136
-            'payment_settings' => array(
137
-                'nav'           => array(
138
-                    'label' => __('Settings', 'event_espresso'),
139
-                    'order' => 20,
140
-                ),
141
-                'help_tabs'     => array(
142
-                    'payment_methods_settings_help_tab' => array(
143
-                        'title'    => __('Payment Method Settings', 'event_espresso'),
144
-                        'filename' => 'payment_methods_settings',
145
-                    ),
146
-                ),
147
-                // 'help_tour' => array( 'Payment_Methods_Settings_Help_Tour' ),
148
-                'metaboxes'     => array_merge($this->_default_espresso_metaboxes, array('_publish_post_box')),
149
-                'require_nonce' => false,
150
-            ),
151
-            'payment_log'      => array(
152
-                'nav'           => array(
153
-                    'label' => __("Logs", 'event_espresso'),
154
-                    'order' => 30,
155
-                ),
156
-                'list_table'    => 'Payment_Log_Admin_List_Table',
157
-                'metaboxes'     => $this->_default_espresso_metaboxes,
158
-                'require_nonce' => false,
159
-            ),
160
-        );
161
-    }
162
-
163
-
164
-    /**
165
-     * @return array
166
-     */
167
-    protected function _add_payment_method_help_tabs()
168
-    {
169
-        EE_Registry::instance()->load_lib('Payment_Method_Manager');
170
-        $payment_method_types = EE_Payment_Method_Manager::instance()->payment_method_types();
171
-        $all_pmt_help_tabs_config = array();
172
-        foreach ($payment_method_types as $payment_method_type) {
173
-            if (! EE_Registry::instance()->CAP->current_user_can(
174
-                $payment_method_type->cap_name(),
175
-                'specific_payment_method_type_access'
176
-            )
177
-            ) {
178
-                continue;
179
-            }
180
-            foreach ($payment_method_type->help_tabs_config() as $help_tab_name => $config) {
181
-                $template_args = isset($config['template_args']) ? $config['template_args'] : array();
182
-                $template_args['admin_page_obj'] = $this;
183
-                $all_pmt_help_tabs_config[ $help_tab_name ] = array(
184
-                    'title'   => $config['title'],
185
-                    'content' => EEH_Template::display_template(
186
-                        $payment_method_type->file_folder() . 'help_tabs' . DS . $config['filename'] . '.help_tab.php',
187
-                        $template_args,
188
-                        true
189
-                    ),
190
-                );
191
-            }
192
-        }
193
-        return $all_pmt_help_tabs_config;
194
-    }
195
-
196
-
197
-    // none of the below group are currently used for Gateway Settings
198
-    protected function _add_screen_options()
199
-    {
200
-    }
201
-
202
-
203
-    protected function _add_feature_pointers()
204
-    {
205
-    }
206
-
207
-
208
-    public function admin_init()
209
-    {
210
-    }
211
-
212
-
213
-    public function admin_notices()
214
-    {
215
-    }
216
-
217
-
218
-    public function admin_footer_scripts()
219
-    {
220
-    }
221
-
222
-
223
-    public function load_scripts_styles()
224
-    {
225
-        wp_enqueue_script('ee_admin_js');
226
-        wp_enqueue_script('ee-text-links');
227
-        wp_enqueue_script(
228
-            'espresso_payments',
229
-            EE_PAYMENTS_ASSETS_URL . 'espresso_payments_admin.js',
230
-            array('espresso-ui-theme', 'ee-datepicker'),
231
-            EVENT_ESPRESSO_VERSION,
232
-            true
233
-        );
234
-    }
235
-
236
-
237
-    public function load_scripts_styles_default()
238
-    {
239
-        // styles
240
-        wp_register_style(
241
-            'espresso_payments',
242
-            EE_PAYMENTS_ASSETS_URL . 'ee-payments.css',
243
-            array(),
244
-            EVENT_ESPRESSO_VERSION
245
-        );
246
-        wp_enqueue_style('espresso_payments');
247
-        wp_enqueue_style('ee-text-links');
248
-        // scripts
249
-    }
250
-
251
-
252
-    protected function _payment_methods_list()
253
-    {
254
-        /**
255
-         * first let's ensure payment methods have been setup. We do this here because when people activate a
256
-         * payment method for the first time (as an addon), it may not setup its capabilities or get registered correctly due
257
-         * to the loading process.  However, people MUST setup the details for the payment method so its safe to do a
258
-         * recheck here.
259
-         */
260
-        EE_Registry::instance()->load_lib('Payment_Method_Manager');
261
-        EEM_Payment_Method::instance()->verify_button_urls();
262
-        // setup tabs, one for each payment method type
263
-        $tabs = array();
264
-        $payment_methods = array();
265
-        foreach (EE_Payment_Method_Manager::instance()->payment_method_types() as $pmt_obj) {
266
-            // we don't want to show admin-only PMTs for now
267
-            if ($pmt_obj instanceof EE_PMT_Admin_Only) {
268
-                continue;
269
-            }
270
-            // check access
271
-            if (! EE_Registry::instance()->CAP->current_user_can(
272
-                $pmt_obj->cap_name(),
273
-                'specific_payment_method_type_access'
274
-            )
275
-            ) {
276
-                continue;
277
-            }
278
-            // check for any active pms of that type
279
-            $payment_method = EEM_Payment_Method::instance()->get_one_of_type($pmt_obj->system_name());
280
-            if (! $payment_method instanceof EE_Payment_Method) {
281
-                $payment_method = EE_Payment_Method::new_instance(
282
-                    array(
283
-                        'PMD_slug'       => sanitize_key($pmt_obj->system_name()),
284
-                        'PMD_type'       => $pmt_obj->system_name(),
285
-                        'PMD_name'       => $pmt_obj->pretty_name(),
286
-                        'PMD_admin_name' => $pmt_obj->pretty_name(),
287
-                    )
288
-                );
289
-            }
290
-            $payment_methods[ $payment_method->slug() ] = $payment_method;
291
-        }
292
-        $payment_methods = apply_filters(
293
-            'FHEE__Payments_Admin_Page___payment_methods_list__payment_methods',
294
-            $payment_methods
295
-        );
296
-        foreach ($payment_methods as $payment_method) {
297
-            if ($payment_method instanceof EE_Payment_Method) {
298
-                add_meta_box(
299
-                    // html id
300
-                    'espresso_' . $payment_method->slug() . '_payment_settings',
301
-                    // title
302
-                    sprintf(__('%s Settings', 'event_espresso'), $payment_method->admin_name()),
303
-                    // callback
304
-                    array($this, 'payment_method_settings_meta_box'),
305
-                    // post type
306
-                    null,
307
-                    // context
308
-                    'normal',
309
-                    // priority
310
-                    'default',
311
-                    // callback args
312
-                    array('payment_method' => $payment_method)
313
-                );
314
-                // setup for tabbed content
315
-                $tabs[ $payment_method->slug() ] = array(
316
-                    'label' => $payment_method->admin_name(),
317
-                    'class' => $payment_method->active() ? 'gateway-active' : '',
318
-                    'href'  => 'espresso_' . $payment_method->slug() . '_payment_settings',
319
-                    'title' => __('Modify this Payment Method', 'event_espresso'),
320
-                    'slug'  => $payment_method->slug(),
321
-                );
322
-            }
323
-        }
324
-        $this->_template_args['admin_page_header'] = EEH_Tabbed_Content::tab_text_links(
325
-            $tabs,
326
-            'payment_method_links',
327
-            '|',
328
-            $this->_get_active_payment_method_slug()
329
-        );
330
-        $this->display_admin_page_with_sidebar();
331
-    }
332
-
333
-
334
-    /**
335
-     *   _get_active_payment_method_slug
336
-     *
337
-     * @return string
338
-     */
339
-    protected function _get_active_payment_method_slug()
340
-    {
341
-        $payment_method_slug = false;
342
-        // decide which payment method tab to open first, as dictated by the request's 'payment_method'
343
-        if (isset($this->_req_data['payment_method'])) {
344
-            // if they provided the current payment method, use it
345
-            $payment_method_slug = sanitize_key($this->_req_data['payment_method']);
346
-        }
347
-        $payment_method = EEM_Payment_Method::instance()->get_one(array(array('PMD_slug' => $payment_method_slug)));
348
-        // if that didn't work or wasn't provided, find another way to select the current pm
349
-        if (! $this->_verify_payment_method($payment_method)) {
350
-            // like, looking for an active one
351
-            $payment_method = EEM_Payment_Method::instance()->get_one_active('CART');
352
-            // test that one as well
353
-            if ($this->_verify_payment_method($payment_method)) {
354
-                $payment_method_slug = $payment_method->slug();
355
-            } else {
356
-                $payment_method_slug = 'paypal_standard';
357
-            }
358
-        }
359
-        return $payment_method_slug;
360
-    }
361
-
362
-
363
-    /**
364
-     *    payment_method_settings_meta_box
365
-     *    returns TRUE if the passed payment method is properly constructed and the logged in user has the correct
366
-     *    capabilities to access it
367
-     *
368
-     * @param \EE_Payment_Method $payment_method
369
-     * @return boolean
370
-     */
371
-    protected function _verify_payment_method($payment_method)
372
-    {
373
-        if ($payment_method instanceof EE_Payment_Method && $payment_method->type_obj() instanceof EE_PMT_Base
374
-            && EE_Registry::instance()->CAP->current_user_can(
375
-                $payment_method->type_obj()->cap_name(),
376
-                'specific_payment_method_type_access'
377
-            )
378
-        ) {
379
-            return true;
380
-        }
381
-        return false;
382
-    }
383
-
384
-
385
-    /**
386
-     *    payment_method_settings_meta_box
387
-     *
388
-     * @param NULL  $post_obj_which_is_null is an object containing the current post (as a $post object)
389
-     * @param array $metabox                is an array with metabox id, title, callback, and args elements. the value
390
-     *                                      at 'args' has key 'payment_method', as set within _payment_methods_list
391
-     * @return string
392
-     * @throws EE_Error
393
-     */
394
-    public function payment_method_settings_meta_box($post_obj_which_is_null, $metabox)
395
-    {
396
-        $payment_method = isset($metabox['args'], $metabox['args']['payment_method'])
397
-            ? $metabox['args']['payment_method'] : null;
398
-        if (! $payment_method instanceof EE_Payment_Method) {
399
-            throw new EE_Error(
400
-                sprintf(
401
-                    __(
402
-                        'Payment method metabox setup incorrectly. No Payment method object was supplied',
403
-                        'event_espresso'
404
-                    )
405
-                )
406
-            );
407
-        }
408
-        $payment_method_scopes = $payment_method->active();
409
-        // if the payment method really exists show its form, otherwise the activation template
410
-        if ($payment_method->ID() && ! empty($payment_method_scopes)) {
411
-            $form = $this->_generate_payment_method_settings_form($payment_method);
412
-            if ($form->form_data_present_in($this->_req_data)) {
413
-                $form->receive_form_submission($this->_req_data);
414
-            }
415
-            echo $form->form_open() . $form->get_html_and_js() . $form->form_close();
416
-        } else {
417
-            echo $this->_activate_payment_method_button($payment_method)->get_html_and_js();
418
-        }
419
-    }
420
-
421
-
422
-    /**
423
-     * Gets the form for all the settings related to this payment method type
424
-     *
425
-     * @access protected
426
-     * @param \EE_Payment_Method $payment_method
427
-     * @return \EE_Form_Section_Proper
428
-     */
429
-    protected function _generate_payment_method_settings_form(EE_Payment_Method $payment_method)
430
-    {
431
-        if (! $payment_method instanceof EE_Payment_Method) {
432
-            return new EE_Form_Section_Proper();
433
-        }
434
-        return new EE_Form_Section_Proper(
435
-            array(
436
-                'name'            => $payment_method->slug() . '_settings_form',
437
-                'html_id'         => $payment_method->slug() . '_settings_form',
438
-                'action'          => EE_Admin_Page::add_query_args_and_nonce(
439
-                    array(
440
-                        'action'         => 'update_payment_method',
441
-                        'payment_method' => $payment_method->slug(),
442
-                    ),
443
-                    EE_PAYMENTS_ADMIN_URL
444
-                ),
445
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
446
-                'subsections'     => apply_filters(
447
-                    'FHEE__Payments_Admin_Page___generate_payment_method_settings_form__form_subsections',
448
-                    array(
449
-                        'pci_dss_compliance'      => $this->_pci_dss_compliance($payment_method),
450
-                        'currency_support'        => $this->_currency_support($payment_method),
451
-                        'payment_method_settings' => $this->_payment_method_settings($payment_method),
452
-                        'update'                  => $this->_update_payment_method_button($payment_method),
453
-                        'deactivate'              => $this->_deactivate_payment_method_button($payment_method),
454
-                        'fine_print'              => $this->_fine_print(),
455
-                    ),
456
-                    $payment_method
457
-                ),
458
-            )
459
-        );
460
-    }
461
-
462
-
463
-    /**
464
-     * _pci_dss_compliance
465
-     *
466
-     * @access protected
467
-     * @param \EE_Payment_Method $payment_method
468
-     * @return \EE_Form_Section_Proper
469
-     */
470
-    protected function _pci_dss_compliance(EE_Payment_Method $payment_method)
471
-    {
472
-        if ($payment_method->type_obj()->requires_https()) {
473
-            return new EE_Form_Section_HTML(
474
-                EEH_HTML::tr(
475
-                    EEH_HTML::th(
476
-                        EEH_HTML::label(
477
-                            EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
478
-                        )
479
-                    ) .
480
-                    EEH_HTML::td(
481
-                        EEH_HTML::strong(
482
-                            __(
483
-                                'You are responsible for your own website security and Payment Card Industry Data Security Standards (PCI DSS) compliance.',
484
-                                'event_espresso'
485
-                            )
486
-                        )
487
-                        .
488
-                        EEH_HTML::br()
489
-                        .
490
-                        __('Learn more about ', 'event_espresso')
491
-                        . EEH_HTML::link(
492
-                            'https://www.pcisecuritystandards.org/merchants/index.php',
493
-                            __('PCI DSS compliance', 'event_espresso')
494
-                        )
495
-                    )
496
-                )
497
-            );
498
-        } else {
499
-            return new EE_Form_Section_HTML('');
500
-        }
501
-    }
502
-
503
-
504
-    /**
505
-     * _currency_support
506
-     *
507
-     * @access protected
508
-     * @param \EE_Payment_Method $payment_method
509
-     * @return \EE_Form_Section_Proper
510
-     */
511
-    protected function _currency_support(EE_Payment_Method $payment_method)
512
-    {
513
-        if (! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
514
-            return new EE_Form_Section_HTML(
515
-                EEH_HTML::tr(
516
-                    EEH_HTML::th(
517
-                        EEH_HTML::label(
518
-                            EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
519
-                        )
520
-                    ) .
521
-                    EEH_HTML::td(
522
-                        EEH_HTML::strong(
523
-                            sprintf(
524
-                                __(
525
-                                    'This payment method does not support the currency set on your site (%1$s). Please activate a different payment method or change your site\'s country and associated currency.',
526
-                                    'event_espresso'
527
-                                ),
528
-                                EE_Config::instance()->currency->code
529
-                            )
530
-                        )
531
-                    )
532
-                )
533
-            );
534
-        } else {
535
-            return new EE_Form_Section_HTML('');
536
-        }
537
-    }
538
-
539
-
540
-    /**
541
-     * _update_payment_method_button
542
-     *
543
-     * @access protected
544
-     * @param \EE_Payment_Method $payment_method
545
-     * @return \EE_Form_Section_HTML
546
-     */
547
-    protected function _payment_method_settings(EE_Payment_Method $payment_method)
548
-    {
549
-        // modify the form so we only have/show fields that will be implemented for this version
550
-        return $this->_simplify_form($payment_method->type_obj()->settings_form(), $payment_method->name());
551
-    }
552
-
553
-
554
-    /**
555
-     * Simplifies the form to merely reproduce 4.1's gateway settings functionality
556
-     *
557
-     * @param EE_Form_Section_Proper $form_section
558
-     * @param string                 $payment_method_name
559
-     * @return \EE_Payment_Method_Form
560
-     * @throws \EE_Error
561
-     */
562
-    protected function _simplify_form($form_section, $payment_method_name = '')
563
-    {
564
-        if ($form_section instanceof EE_Payment_Method_Form) {
565
-            $form_section->exclude(
566
-                array(
567
-                    'PMD_type', // dont want them changing the type
568
-                    'PMD_slug', // or the slug (probably never)
569
-                    'PMD_wp_user', // or the user's ID
570
-                    'Currency' // or the currency, until the rest of EE supports simultaneous currencies
571
-                )
572
-            );
573
-            return $form_section;
574
-        } else {
575
-            throw new EE_Error(
576
-                sprintf(
577
-                    __(
578
-                        'The EE_Payment_Method_Form for the "%1$s" payment method is missing or invalid.',
579
-                        'event_espresso'
580
-                    ),
581
-                    $payment_method_name
582
-                )
583
-            );
584
-        }
585
-    }
586
-
587
-
588
-    /**
589
-     * _update_payment_method_button
590
-     *
591
-     * @access protected
592
-     * @param \EE_Payment_Method $payment_method
593
-     * @return \EE_Form_Section_HTML
594
-     */
595
-    protected function _update_payment_method_button(EE_Payment_Method $payment_method)
596
-    {
597
-        $update_button = new EE_Submit_Input(
598
-            array(
599
-                'name'       => 'submit',
600
-                'html_id'    => 'save_' . $payment_method->slug() . '_settings',
601
-                'default'    => sprintf(
602
-                    __('Update %s Payment Settings', 'event_espresso'),
603
-                    $payment_method->admin_name()
604
-                ),
605
-                'html_label' => EEH_HTML::nbsp(),
606
-            )
607
-        );
608
-        return new EE_Form_Section_HTML(
609
-            EEH_HTML::no_row(EEH_HTML::br(2)) .
610
-            EEH_HTML::tr(
611
-                EEH_HTML::th(__('Update Settings', 'event_espresso')) .
612
-                EEH_HTML::td(
613
-                    $update_button->get_html_for_input()
614
-                )
615
-            )
616
-        );
617
-    }
618
-
619
-
620
-    /**
621
-     * _deactivate_payment_method_button
622
-     *
623
-     * @access protected
624
-     * @param \EE_Payment_Method $payment_method
625
-     * @return \EE_Form_Section_Proper
626
-     */
627
-    protected function _deactivate_payment_method_button(EE_Payment_Method $payment_method)
628
-    {
629
-        $link_text_and_title = sprintf(
630
-            __('Deactivate %1$s Payments?', 'event_espresso'),
631
-            $payment_method->admin_name()
632
-        );
633
-        return new EE_Form_Section_HTML(
634
-            EEH_HTML::tr(
635
-                EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')) .
636
-                EEH_HTML::td(
637
-                    EEH_HTML::link(
638
-                        EE_Admin_Page::add_query_args_and_nonce(
639
-                            array(
640
-                                'action'         => 'deactivate_payment_method',
641
-                                'payment_method' => $payment_method->slug(),
642
-                            ),
643
-                            EE_PAYMENTS_ADMIN_URL
644
-                        ),
645
-                        $link_text_and_title,
646
-                        $link_text_and_title,
647
-                        'deactivate_' . $payment_method->slug(),
648
-                        'espresso-button button-secondary'
649
-                    )
650
-                )
651
-            )
652
-        );
653
-    }
654
-
655
-
656
-    /**
657
-     * _activate_payment_method_button
658
-     *
659
-     * @access protected
660
-     * @param \EE_Payment_Method $payment_method
661
-     * @return \EE_Form_Section_Proper
662
-     */
663
-    protected function _activate_payment_method_button(EE_Payment_Method $payment_method)
664
-    {
665
-        $link_text_and_title = sprintf(
666
-            __('Activate %1$s Payment Method?', 'event_espresso'),
667
-            $payment_method->admin_name()
668
-        );
669
-        return new EE_Form_Section_Proper(
670
-            array(
671
-                'name'            => 'activate_' . $payment_method->slug() . '_settings_form',
672
-                'html_id'         => 'activate_' . $payment_method->slug() . '_settings_form',
673
-                'action'          => '#',
674
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
675
-                'subsections'     => apply_filters(
676
-                    'FHEE__Payments_Admin_Page___activate_payment_method_button__form_subsections',
677
-                    array(
678
-                        new EE_Form_Section_HTML(
679
-                            EEH_HTML::tr(
680
-                                EEH_HTML::td(
681
-                                    $payment_method->type_obj()->introductory_html(),
682
-                                    '',
683
-                                    '',
684
-                                    '',
685
-                                    'colspan="2"'
686
-                                )
687
-                            ) .
688
-                            EEH_HTML::tr(
689
-                                EEH_HTML::th(
690
-                                    EEH_HTML::label(__('Click to Activate ', 'event_espresso'))
691
-                                ) .
692
-                                EEH_HTML::td(
693
-                                    EEH_HTML::link(
694
-                                        EE_Admin_Page::add_query_args_and_nonce(
695
-                                            array(
696
-                                                'action'              => 'activate_payment_method',
697
-                                                'payment_method_type' => $payment_method->type(),
698
-                                            ),
699
-                                            EE_PAYMENTS_ADMIN_URL
700
-                                        ),
701
-                                        $link_text_and_title,
702
-                                        $link_text_and_title,
703
-                                        'activate_' . $payment_method->slug(),
704
-                                        'espresso-button-green button-primary'
705
-                                    )
706
-                                )
707
-                            )
708
-                        ),
709
-                    ),
710
-                    $payment_method
711
-                ),
712
-            )
713
-        );
714
-    }
715
-
716
-
717
-    /**
718
-     * _fine_print
719
-     *
720
-     * @access protected
721
-     * @return \EE_Form_Section_HTML
722
-     */
723
-    protected function _fine_print()
724
-    {
725
-        return new EE_Form_Section_HTML(
726
-            EEH_HTML::tr(
727
-                EEH_HTML::th() .
728
-                EEH_HTML::td(
729
-                    EEH_HTML::p(__('All fields marked with a * are required fields', 'event_espresso'), '', 'grey-text')
730
-                )
731
-            )
732
-        );
733
-    }
734
-
735
-
736
-    /**
737
-     * Activates a payment method of that type. Mostly assuming there is only 1 of that type (or none so far)
738
-     *
739
-     * @global WP_User $current_user
740
-     */
741
-    protected function _activate_payment_method()
742
-    {
743
-        if (isset($this->_req_data['payment_method_type'])) {
744
-            $payment_method_type = sanitize_text_field($this->_req_data['payment_method_type']);
745
-            // see if one exists
746
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
747
-            $payment_method = EE_Payment_Method_Manager::instance()
748
-                                                       ->activate_a_payment_method_of_type($payment_method_type);
749
-            $this->_redirect_after_action(
750
-                1,
751
-                'Payment Method',
752
-                'activated',
753
-                array('action' => 'default', 'payment_method' => $payment_method->slug())
754
-            );
755
-        } else {
756
-            $this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
757
-        }
758
-    }
759
-
760
-
761
-    /**
762
-     * Deactivates the payment method with the specified slug, and redirects.
763
-     */
764
-    protected function _deactivate_payment_method()
765
-    {
766
-        if (isset($this->_req_data['payment_method'])) {
767
-            $payment_method_slug = sanitize_key($this->_req_data['payment_method']);
768
-            // deactivate it
769
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
770
-            $count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method($payment_method_slug);
771
-            $this->_redirect_after_action(
772
-                $count_updated,
773
-                'Payment Method',
774
-                'deactivated',
775
-                array('action' => 'default', 'payment_method' => $payment_method_slug)
776
-            );
777
-        } else {
778
-            $this->_redirect_after_action(false, 'Payment Method', 'deactivated', array('action' => 'default'));
779
-        }
780
-    }
781
-
782
-
783
-    /**
784
-     * Processes the payment method form that was submitted. This is slightly trickier than usual form
785
-     * processing because we first need to identify WHICH form was processed and which payment method
786
-     * it corresponds to. Once we have done that, we see if the form is valid. If it is, the
787
-     * form's data is saved and we redirect to the default payment methods page, setting the updated payment method
788
-     * as the currently-selected one. If it DOESN'T validate, we render the page with the form's errors (in the
789
-     * subsequently called 'headers_sent_func' which is _payment_methods_list)
790
-     *
791
-     * @return void
792
-     */
793
-    protected function _update_payment_method()
794
-    {
795
-        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
796
-            // ok let's find which gateway form to use based on the form input
797
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
798
-            /** @var $correct_pmt_form_to_use EE_Payment_Method_Form */
799
-            $correct_pmt_form_to_use = null;
800
-            $payment_method = null;
801
-            foreach (EEM_Payment_Method::instance()->get_all() as $payment_method) {
802
-                // get the form and simplify it, like what we do when we display it
803
-                $pmt_form = $this->_generate_payment_method_settings_form($payment_method);
804
-                if ($pmt_form->form_data_present_in($this->_req_data)) {
805
-                    $correct_pmt_form_to_use = $pmt_form;
806
-                    break;
807
-                }
808
-            }
809
-            // if we couldn't find the correct payment method type...
810
-            if (! $correct_pmt_form_to_use) {
811
-                EE_Error::add_error(
812
-                    __(
813
-                        "We could not find which payment method type your form submission related to. Please contact support",
814
-                        'event_espresso'
815
-                    ),
816
-                    __FILE__,
817
-                    __FUNCTION__,
818
-                    __LINE__
819
-                );
820
-                $this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
821
-            }
822
-            $correct_pmt_form_to_use->receive_form_submission($this->_req_data);
823
-            if ($correct_pmt_form_to_use->is_valid()) {
824
-                $payment_settings_subform = $correct_pmt_form_to_use->get_subsection('payment_method_settings');
825
-                if (! $payment_settings_subform instanceof EE_Payment_Method_Form) {
826
-                    throw new EE_Error(
827
-                        sprintf(
828
-                            __(
829
-                                'The payment method could not be saved because the form sections were misnamed. We expected to find %1$s, but did not.',
830
-                                'event_espresso'
831
-                            ),
832
-                            'payment_method_settings'
833
-                        )
834
-                    );
835
-                }
836
-                $payment_settings_subform->save();
837
-                /** @var $pm EE_Payment_Method */
838
-                $this->_redirect_after_action(
839
-                    true,
840
-                    'Payment Method',
841
-                    'updated',
842
-                    array('action' => 'default', 'payment_method' => $payment_method->slug())
843
-                );
844
-            } else {
845
-                EE_Error::add_error(
846
-                    sprintf(
847
-                        __(
848
-                            'Payment method of type %s was not saved because there were validation errors. They have been marked in the form',
849
-                            'event_espresso'
850
-                        ),
851
-                        $payment_method instanceof EE_Payment_Method ? $payment_method->type_obj()->pretty_name()
852
-                            : __('"(unknown)"', 'event_espresso')
853
-                    ),
854
-                    __FILE__,
855
-                    __FUNCTION__,
856
-                    __LINE__
857
-                );
858
-            }
859
-        }
860
-        return;
861
-    }
862
-
863
-
864
-    /**
865
-     * Displays payment settings (not payment METHOD settings, that's _payment_method_settings)
866
-     * @throws DomainException
867
-     * @throws EE_Error
868
-     * @throws InvalidArgumentException
869
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
870
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
871
-     */
872
-    protected function _payment_settings()
873
-    {
874
-        $form = $this->getPaymentSettingsForm();
875
-        $this->_set_add_edit_form_tags('update_payment_settings');
876
-        $this->_set_publish_post_box_vars(null, false, false, null, false);
877
-        $this->_template_args['admin_page_content'] =  $form->get_html_and_js();
878
-        $this->display_admin_page_with_sidebar();
879
-    }
880
-
881
-
882
-    /**
883
-     *        _update_payment_settings
884
-     *
885
-     * @access protected
886
-     * @return void
887
-     * @throws EE_Error
888
-     * @throws InvalidArgumentException
889
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
890
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
891
-     */
892
-    protected function _update_payment_settings()
893
-    {
894
-        $form = $this->getPaymentSettingsForm();
895
-        if ($form->was_submitted($this->_req_data)) {
896
-            $form->receive_form_submission($this->_req_data);
897
-            if ($form->is_valid()) {
898
-                /**
899
-                 * @var $reg_config EE_Registration_Config
900
-                 */
901
-                $loader = LoaderFactory::getLoader();
902
-                $reg_config = $loader->getShared('EE_Registration_Config');
903
-                $valid_data = $form->valid_data();
904
-                $reg_config->show_pending_payment_options = $valid_data['show_pending_payment_options'];
905
-                $reg_config->gateway_log_lifespan = $valid_data['gateway_log_lifespan'];
906
-            }
907
-        }
908
-        EE_Registry::instance()->CFG = apply_filters(
909
-            'FHEE__Payments_Admin_Page___update_payment_settings__CFG',
910
-            EE_Registry::instance()->CFG
911
-        );
912
-
913
-        $cfg =  EE_Registry::instance()->CFG ;
914
-
915
-        $what = __('Payment Settings', 'event_espresso');
916
-        $success = $this->_update_espresso_configuration(
917
-            $what,
918
-            EE_Registry::instance()->CFG,
919
-            __FILE__,
920
-            __FUNCTION__,
921
-            __LINE__
922
-        );
923
-        $this->_redirect_after_action(
924
-            $success,
925
-            $what,
926
-            __('updated', 'event_espresso'),
927
-            array('action' => 'payment_settings')
928
-        );
929
-    }
930
-
931
-
932
-    /**
933
-     * Gets the form used for updating payment settings
934
-     *
935
-     * @return EE_Form_Section_Proper
936
-     * @throws EE_Error
937
-     * @throws InvalidArgumentException
938
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
939
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
940
-     */
941
-    protected function getPaymentSettingsForm()
942
-    {
943
-        /**
944
-         * @var $reg_config EE_Registration_Config
945
-         */
946
-        $reg_config = LoaderFactory::getLoader()->getShared('EE_Registration_Config');
947
-        return new EE_Form_Section_Proper(
948
-            array(
949
-                'name' => 'payment-settings',
950
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
951
-                'subsections' => array(
952
-                    'show_pending_payment_options' => new EE_Yes_No_Input(
953
-                        array(
954
-                            'html_name' => 'show_pending_payment_options',
955
-                            'default' => $reg_config->show_pending_payment_options,
956
-                            'html_help_text' => esc_html__(
957
-                                "If a payment is marked as 'Pending Payment', or if payment is deferred (ie, an offline gateway like Check, Bank, or Invoice is used), then give registrants the option to retry payment. ",
958
-                                'event_espresso'
959
-                            )
960
-                        )
961
-                    ),
962
-                    'gateway_log_lifespan' => new \EE_Select_Input(
963
-                        $reg_config->gatewayLogLifespanOptions(),
964
-                        array(
965
-                            'html_label_text' => esc_html__('Gateway Logs Lifespan', 'event_espresso'),
966
-                            'html_help_text' => esc_html__('If issues arise with payments being made through a payment gateway, it\'s helpful to log non-sensitive communications with the payment gateway. But it\'s a security responsibility, so it\'s a good idea to not keep them for any longer than necessary.', 'event_espresso'),
967
-                            'default' => $reg_config->gateway_log_lifespan,
968
-                        )
969
-                    )
970
-                )
971
-            )
972
-        );
973
-    }
974
-
975
-
976
-    protected function _payment_log_overview_list_table()
977
-    {
978
-        $this->display_admin_list_table_page_with_sidebar();
979
-    }
980
-
981
-
982
-    protected function _set_list_table_views_payment_log()
983
-    {
984
-        $this->_views = array(
985
-            'all' => array(
986
-                'slug'  => 'all',
987
-                'label' => __('View All Logs', 'event_espresso'),
988
-                'count' => 0,
989
-            ),
990
-        );
991
-    }
992
-
993
-
994
-    /**
995
-     * @param int  $per_page
996
-     * @param int  $current_page
997
-     * @param bool $count
998
-     * @return array
999
-     */
1000
-    public function get_payment_logs($per_page = 50, $current_page = 0, $count = false)
1001
-    {
1002
-        EE_Registry::instance()->load_model('Change_Log');
1003
-        // we may need to do multiple queries (joining differently), so we actually wan tan array of query params
1004
-        $query_params = array(array('LOG_type' => EEM_Change_Log::type_gateway));
1005
-        // check if they've selected a specific payment method
1006
-        if (isset($this->_req_data['_payment_method']) && $this->_req_data['_payment_method'] !== 'all') {
1007
-            $query_params[0]['OR*pm_or_pay_pm'] = array(
1008
-                'Payment.Payment_Method.PMD_ID' => $this->_req_data['_payment_method'],
1009
-                'Payment_Method.PMD_ID'         => $this->_req_data['_payment_method'],
1010
-            );
1011
-        }
1012
-        // take into account search
1013
-        if (isset($this->_req_data['s']) && $this->_req_data['s']) {
1014
-            $similarity_string = array('LIKE', '%' . str_replace("", "%", $this->_req_data['s']) . '%');
1015
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_fname'] = $similarity_string;
1016
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_lname'] = $similarity_string;
1017
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_email'] = $similarity_string;
1018
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_name'] = $similarity_string;
1019
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_admin_name'] = $similarity_string;
1020
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_type'] = $similarity_string;
1021
-            $query_params[0]['OR*s']['LOG_message'] = $similarity_string;
1022
-            $query_params[0]['OR*s']['Payment_Method.PMD_name'] = $similarity_string;
1023
-            $query_params[0]['OR*s']['Payment_Method.PMD_admin_name'] = $similarity_string;
1024
-            $query_params[0]['OR*s']['Payment_Method.PMD_type'] = $similarity_string;
1025
-            $query_params[0]['OR*s']['LOG_message'] = $similarity_string;
1026
-        }
1027
-        if (isset($this->_req_data['payment-filter-start-date'])
1028
-            && isset($this->_req_data['payment-filter-end-date'])
1029
-        ) {
1030
-            // add date
1031
-            $start_date = wp_strip_all_tags($this->_req_data['payment-filter-start-date']);
1032
-            $end_date = wp_strip_all_tags($this->_req_data['payment-filter-end-date']);
1033
-            // make sure our timestamps start and end right at the boundaries for each day
1034
-            $start_date = date('Y-m-d', strtotime($start_date)) . ' 00:00:00';
1035
-            $end_date = date('Y-m-d', strtotime($end_date)) . ' 23:59:59';
1036
-            // convert to timestamps
1037
-            $start_date = strtotime($start_date);
1038
-            $end_date = strtotime($end_date);
1039
-            // makes sure start date is the lowest value and vice versa
1040
-            $start_date = min($start_date, $end_date);
1041
-            $end_date = max($start_date, $end_date);
1042
-            // convert for query
1043
-            $start_date = EEM_Change_Log::instance()
1044
-                                        ->convert_datetime_for_query(
1045
-                                            'LOG_time',
1046
-                                            date('Y-m-d H:i:s', $start_date),
1047
-                                            'Y-m-d H:i:s'
1048
-                                        );
1049
-            $end_date = EEM_Change_Log::instance()
1050
-                                      ->convert_datetime_for_query(
1051
-                                          'LOG_time',
1052
-                                          date('Y-m-d H:i:s', $end_date),
1053
-                                          'Y-m-d H:i:s'
1054
-                                      );
1055
-            $query_params[0]['LOG_time'] = array('BETWEEN', array($start_date, $end_date));
1056
-        }
1057
-        if ($count) {
1058
-            return EEM_Change_Log::instance()->count($query_params);
1059
-        }
1060
-        if (isset($this->_req_data['order'])) {
1061
-            $sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) ? $this->_req_data['order']
1062
-                : 'DESC';
1063
-            $query_params['order_by'] = array('LOG_time' => $sort);
1064
-        } else {
1065
-            $query_params['order_by'] = array('LOG_time' => 'DESC');
1066
-        }
1067
-        $offset = ($current_page - 1) * $per_page;
1068
-        if (! isset($this->_req_data['download_results'])) {
1069
-            $query_params['limit'] = array($offset, $per_page);
1070
-        }
1071
-        // now they've requested to instead just download the file instead of viewing it.
1072
-        if (isset($this->_req_data['download_results'])) {
1073
-            $wpdb_results = EEM_Change_Log::instance()->get_all_efficiently($query_params);
1074
-            header('Content-Disposition: attachment');
1075
-            header("Content-Disposition: attachment; filename=ee_payment_logs_for_" . sanitize_key(site_url()));
1076
-            echo "<h1>Payment Logs for " . site_url() . "</h1>";
1077
-            echo "<h3>Query:</h3>";
1078
-            var_dump($query_params);
1079
-            echo "<h3>Results:</h3>";
1080
-            var_dump($wpdb_results);
1081
-            die;
1082
-        }
1083
-        $results = EEM_Change_Log::instance()->get_all($query_params);
1084
-        return $results;
1085
-    }
1086
-
1087
-
1088
-    /**
1089
-     * Used by usort to RE-sort log query results, because we lose the ordering
1090
-     * because we're possibly combining the results from two queries
1091
-     *
1092
-     * @param EE_Change_Log $logA
1093
-     * @param EE_Change_Log $logB
1094
-     * @return int
1095
-     */
1096
-    protected function _sort_logs_again($logA, $logB)
1097
-    {
1098
-        $timeA = $logA->get_raw('LOG_time');
1099
-        $timeB = $logB->get_raw('LOG_time');
1100
-        if ($timeA == $timeB) {
1101
-            return 0;
1102
-        }
1103
-        $comparison = $timeA < $timeB ? -1 : 1;
1104
-        if (strtoupper($this->_sort_logs_again_direction) == 'DESC') {
1105
-            return $comparison * -1;
1106
-        } else {
1107
-            return $comparison;
1108
-        }
1109
-    }
1110
-
1111
-
1112
-    protected function _payment_log_details()
1113
-    {
1114
-        EE_Registry::instance()->load_model('Change_Log');
1115
-        /** @var $payment_log EE_Change_Log */
1116
-        $payment_log = EEM_Change_Log::instance()->get_one_by_ID($this->_req_data['ID']);
1117
-        $payment_method = null;
1118
-        $transaction = null;
1119
-        if ($payment_log instanceof EE_Change_Log) {
1120
-            if ($payment_log->object() instanceof EE_Payment) {
1121
-                $payment_method = $payment_log->object()->payment_method();
1122
-                $transaction = $payment_log->object()->transaction();
1123
-            } elseif ($payment_log->object() instanceof EE_Payment_Method) {
1124
-                $payment_method = $payment_log->object();
1125
-            } elseif ($payment_log->object() instanceof EE_Transaction) {
1126
-                $transaction = $payment_log->object();
1127
-                $payment_method = $transaction->payment_method();
1128
-            }
1129
-        }
1130
-        $this->_template_args['admin_page_content'] = EEH_Template::display_template(
1131
-            EE_PAYMENTS_TEMPLATE_PATH . 'payment_log_details.template.php',
1132
-            array(
1133
-                'payment_log'    => $payment_log,
1134
-                'payment_method' => $payment_method,
1135
-                'transaction'    => $transaction,
1136
-            ),
1137
-            true
1138
-        );
1139
-        $this->display_admin_page_with_sidebar();
1140
-    }
17
+	/**
18
+	 * Variables used for when we're re-sorting the logs results, in case
19
+	 * we needed to do two queries and we need to resort
20
+	 *
21
+	 * @var string
22
+	 */
23
+	private $_sort_logs_again_direction;
24
+
25
+
26
+	/**
27
+	 * @Constructor
28
+	 * @access public
29
+	 * @param bool $routing indicate whether we want to just load the object and handle routing or just load the object.
30
+	 * @return \Payments_Admin_Page
31
+	 */
32
+	public function __construct($routing = true)
33
+	{
34
+		parent::__construct($routing);
35
+	}
36
+
37
+
38
+	protected function _init_page_props()
39
+	{
40
+		$this->page_slug = EE_PAYMENTS_PG_SLUG;
41
+		$this->page_label = __('Payment Methods', 'event_espresso');
42
+		$this->_admin_base_url = EE_PAYMENTS_ADMIN_URL;
43
+		$this->_admin_base_path = EE_PAYMENTS_ADMIN;
44
+	}
45
+
46
+
47
+	protected function _ajax_hooks()
48
+	{
49
+		// todo: all hooks for ajax goes here.
50
+	}
51
+
52
+
53
+	protected function _define_page_props()
54
+	{
55
+		$this->_admin_page_title = $this->page_label;
56
+		$this->_labels = array(
57
+			'publishbox' => __('Update Settings', 'event_espresso'),
58
+		);
59
+	}
60
+
61
+
62
+	protected function _set_page_routes()
63
+	{
64
+		/**
65
+		 * note that with payment method capabilities, although we've implemented
66
+		 * capability mapping which will be used for accessing payment methods owned by
67
+		 * other users.  This is not fully implemented yet in the payment method ui.
68
+		 * Currently only the "plural" caps are in active use.
69
+		 * When cap mapping is implemented, some routes will need to use the singular form of
70
+		 * capability method and also include the $id of the payment method for the route.
71
+		 **/
72
+		$this->_page_routes = array(
73
+			'default'                   => array(
74
+				'func'       => '_payment_methods_list',
75
+				'capability' => 'ee_edit_payment_methods',
76
+			),
77
+			'payment_settings'          => array(
78
+				'func'       => '_payment_settings',
79
+				'capability' => 'ee_manage_gateways',
80
+			),
81
+			'activate_payment_method'   => array(
82
+				'func'       => '_activate_payment_method',
83
+				'noheader'   => true,
84
+				'capability' => 'ee_edit_payment_methods',
85
+			),
86
+			'deactivate_payment_method' => array(
87
+				'func'       => '_deactivate_payment_method',
88
+				'noheader'   => true,
89
+				'capability' => 'ee_delete_payment_methods',
90
+			),
91
+			'update_payment_method'     => array(
92
+				'func'               => '_update_payment_method',
93
+				'noheader'           => true,
94
+				'headers_sent_route' => 'default',
95
+				'capability'         => 'ee_edit_payment_methods',
96
+			),
97
+			'update_payment_settings'   => array(
98
+				'func'       => '_update_payment_settings',
99
+				'noheader'   => true,
100
+				'capability' => 'ee_manage_gateways',
101
+			),
102
+			'payment_log'               => array(
103
+				'func'       => '_payment_log_overview_list_table',
104
+				'capability' => 'ee_read_payment_methods',
105
+			),
106
+			'payment_log_details'       => array(
107
+				'func'       => '_payment_log_details',
108
+				'capability' => 'ee_read_payment_methods',
109
+			),
110
+		);
111
+	}
112
+
113
+
114
+	protected function _set_page_config()
115
+	{
116
+		$payment_method_list_config = array(
117
+			'nav'           => array(
118
+				'label' => __('Payment Methods', 'event_espresso'),
119
+				'order' => 10,
120
+			),
121
+			'metaboxes'     => $this->_default_espresso_metaboxes,
122
+			'help_tabs'     => array_merge(
123
+				array(
124
+					'payment_methods_overview_help_tab' => array(
125
+						'title'    => __('Payment Methods Overview', 'event_espresso'),
126
+						'filename' => 'payment_methods_overview',
127
+					),
128
+				),
129
+				$this->_add_payment_method_help_tabs()
130
+			),
131
+			'help_tour'     => array('Payment_Methods_Selection_Help_Tour'),
132
+			'require_nonce' => false,
133
+		);
134
+		$this->_page_config = array(
135
+			'default'          => $payment_method_list_config,
136
+			'payment_settings' => array(
137
+				'nav'           => array(
138
+					'label' => __('Settings', 'event_espresso'),
139
+					'order' => 20,
140
+				),
141
+				'help_tabs'     => array(
142
+					'payment_methods_settings_help_tab' => array(
143
+						'title'    => __('Payment Method Settings', 'event_espresso'),
144
+						'filename' => 'payment_methods_settings',
145
+					),
146
+				),
147
+				// 'help_tour' => array( 'Payment_Methods_Settings_Help_Tour' ),
148
+				'metaboxes'     => array_merge($this->_default_espresso_metaboxes, array('_publish_post_box')),
149
+				'require_nonce' => false,
150
+			),
151
+			'payment_log'      => array(
152
+				'nav'           => array(
153
+					'label' => __("Logs", 'event_espresso'),
154
+					'order' => 30,
155
+				),
156
+				'list_table'    => 'Payment_Log_Admin_List_Table',
157
+				'metaboxes'     => $this->_default_espresso_metaboxes,
158
+				'require_nonce' => false,
159
+			),
160
+		);
161
+	}
162
+
163
+
164
+	/**
165
+	 * @return array
166
+	 */
167
+	protected function _add_payment_method_help_tabs()
168
+	{
169
+		EE_Registry::instance()->load_lib('Payment_Method_Manager');
170
+		$payment_method_types = EE_Payment_Method_Manager::instance()->payment_method_types();
171
+		$all_pmt_help_tabs_config = array();
172
+		foreach ($payment_method_types as $payment_method_type) {
173
+			if (! EE_Registry::instance()->CAP->current_user_can(
174
+				$payment_method_type->cap_name(),
175
+				'specific_payment_method_type_access'
176
+			)
177
+			) {
178
+				continue;
179
+			}
180
+			foreach ($payment_method_type->help_tabs_config() as $help_tab_name => $config) {
181
+				$template_args = isset($config['template_args']) ? $config['template_args'] : array();
182
+				$template_args['admin_page_obj'] = $this;
183
+				$all_pmt_help_tabs_config[ $help_tab_name ] = array(
184
+					'title'   => $config['title'],
185
+					'content' => EEH_Template::display_template(
186
+						$payment_method_type->file_folder() . 'help_tabs' . DS . $config['filename'] . '.help_tab.php',
187
+						$template_args,
188
+						true
189
+					),
190
+				);
191
+			}
192
+		}
193
+		return $all_pmt_help_tabs_config;
194
+	}
195
+
196
+
197
+	// none of the below group are currently used for Gateway Settings
198
+	protected function _add_screen_options()
199
+	{
200
+	}
201
+
202
+
203
+	protected function _add_feature_pointers()
204
+	{
205
+	}
206
+
207
+
208
+	public function admin_init()
209
+	{
210
+	}
211
+
212
+
213
+	public function admin_notices()
214
+	{
215
+	}
216
+
217
+
218
+	public function admin_footer_scripts()
219
+	{
220
+	}
221
+
222
+
223
+	public function load_scripts_styles()
224
+	{
225
+		wp_enqueue_script('ee_admin_js');
226
+		wp_enqueue_script('ee-text-links');
227
+		wp_enqueue_script(
228
+			'espresso_payments',
229
+			EE_PAYMENTS_ASSETS_URL . 'espresso_payments_admin.js',
230
+			array('espresso-ui-theme', 'ee-datepicker'),
231
+			EVENT_ESPRESSO_VERSION,
232
+			true
233
+		);
234
+	}
235
+
236
+
237
+	public function load_scripts_styles_default()
238
+	{
239
+		// styles
240
+		wp_register_style(
241
+			'espresso_payments',
242
+			EE_PAYMENTS_ASSETS_URL . 'ee-payments.css',
243
+			array(),
244
+			EVENT_ESPRESSO_VERSION
245
+		);
246
+		wp_enqueue_style('espresso_payments');
247
+		wp_enqueue_style('ee-text-links');
248
+		// scripts
249
+	}
250
+
251
+
252
+	protected function _payment_methods_list()
253
+	{
254
+		/**
255
+		 * first let's ensure payment methods have been setup. We do this here because when people activate a
256
+		 * payment method for the first time (as an addon), it may not setup its capabilities or get registered correctly due
257
+		 * to the loading process.  However, people MUST setup the details for the payment method so its safe to do a
258
+		 * recheck here.
259
+		 */
260
+		EE_Registry::instance()->load_lib('Payment_Method_Manager');
261
+		EEM_Payment_Method::instance()->verify_button_urls();
262
+		// setup tabs, one for each payment method type
263
+		$tabs = array();
264
+		$payment_methods = array();
265
+		foreach (EE_Payment_Method_Manager::instance()->payment_method_types() as $pmt_obj) {
266
+			// we don't want to show admin-only PMTs for now
267
+			if ($pmt_obj instanceof EE_PMT_Admin_Only) {
268
+				continue;
269
+			}
270
+			// check access
271
+			if (! EE_Registry::instance()->CAP->current_user_can(
272
+				$pmt_obj->cap_name(),
273
+				'specific_payment_method_type_access'
274
+			)
275
+			) {
276
+				continue;
277
+			}
278
+			// check for any active pms of that type
279
+			$payment_method = EEM_Payment_Method::instance()->get_one_of_type($pmt_obj->system_name());
280
+			if (! $payment_method instanceof EE_Payment_Method) {
281
+				$payment_method = EE_Payment_Method::new_instance(
282
+					array(
283
+						'PMD_slug'       => sanitize_key($pmt_obj->system_name()),
284
+						'PMD_type'       => $pmt_obj->system_name(),
285
+						'PMD_name'       => $pmt_obj->pretty_name(),
286
+						'PMD_admin_name' => $pmt_obj->pretty_name(),
287
+					)
288
+				);
289
+			}
290
+			$payment_methods[ $payment_method->slug() ] = $payment_method;
291
+		}
292
+		$payment_methods = apply_filters(
293
+			'FHEE__Payments_Admin_Page___payment_methods_list__payment_methods',
294
+			$payment_methods
295
+		);
296
+		foreach ($payment_methods as $payment_method) {
297
+			if ($payment_method instanceof EE_Payment_Method) {
298
+				add_meta_box(
299
+					// html id
300
+					'espresso_' . $payment_method->slug() . '_payment_settings',
301
+					// title
302
+					sprintf(__('%s Settings', 'event_espresso'), $payment_method->admin_name()),
303
+					// callback
304
+					array($this, 'payment_method_settings_meta_box'),
305
+					// post type
306
+					null,
307
+					// context
308
+					'normal',
309
+					// priority
310
+					'default',
311
+					// callback args
312
+					array('payment_method' => $payment_method)
313
+				);
314
+				// setup for tabbed content
315
+				$tabs[ $payment_method->slug() ] = array(
316
+					'label' => $payment_method->admin_name(),
317
+					'class' => $payment_method->active() ? 'gateway-active' : '',
318
+					'href'  => 'espresso_' . $payment_method->slug() . '_payment_settings',
319
+					'title' => __('Modify this Payment Method', 'event_espresso'),
320
+					'slug'  => $payment_method->slug(),
321
+				);
322
+			}
323
+		}
324
+		$this->_template_args['admin_page_header'] = EEH_Tabbed_Content::tab_text_links(
325
+			$tabs,
326
+			'payment_method_links',
327
+			'|',
328
+			$this->_get_active_payment_method_slug()
329
+		);
330
+		$this->display_admin_page_with_sidebar();
331
+	}
332
+
333
+
334
+	/**
335
+	 *   _get_active_payment_method_slug
336
+	 *
337
+	 * @return string
338
+	 */
339
+	protected function _get_active_payment_method_slug()
340
+	{
341
+		$payment_method_slug = false;
342
+		// decide which payment method tab to open first, as dictated by the request's 'payment_method'
343
+		if (isset($this->_req_data['payment_method'])) {
344
+			// if they provided the current payment method, use it
345
+			$payment_method_slug = sanitize_key($this->_req_data['payment_method']);
346
+		}
347
+		$payment_method = EEM_Payment_Method::instance()->get_one(array(array('PMD_slug' => $payment_method_slug)));
348
+		// if that didn't work or wasn't provided, find another way to select the current pm
349
+		if (! $this->_verify_payment_method($payment_method)) {
350
+			// like, looking for an active one
351
+			$payment_method = EEM_Payment_Method::instance()->get_one_active('CART');
352
+			// test that one as well
353
+			if ($this->_verify_payment_method($payment_method)) {
354
+				$payment_method_slug = $payment_method->slug();
355
+			} else {
356
+				$payment_method_slug = 'paypal_standard';
357
+			}
358
+		}
359
+		return $payment_method_slug;
360
+	}
361
+
362
+
363
+	/**
364
+	 *    payment_method_settings_meta_box
365
+	 *    returns TRUE if the passed payment method is properly constructed and the logged in user has the correct
366
+	 *    capabilities to access it
367
+	 *
368
+	 * @param \EE_Payment_Method $payment_method
369
+	 * @return boolean
370
+	 */
371
+	protected function _verify_payment_method($payment_method)
372
+	{
373
+		if ($payment_method instanceof EE_Payment_Method && $payment_method->type_obj() instanceof EE_PMT_Base
374
+			&& EE_Registry::instance()->CAP->current_user_can(
375
+				$payment_method->type_obj()->cap_name(),
376
+				'specific_payment_method_type_access'
377
+			)
378
+		) {
379
+			return true;
380
+		}
381
+		return false;
382
+	}
383
+
384
+
385
+	/**
386
+	 *    payment_method_settings_meta_box
387
+	 *
388
+	 * @param NULL  $post_obj_which_is_null is an object containing the current post (as a $post object)
389
+	 * @param array $metabox                is an array with metabox id, title, callback, and args elements. the value
390
+	 *                                      at 'args' has key 'payment_method', as set within _payment_methods_list
391
+	 * @return string
392
+	 * @throws EE_Error
393
+	 */
394
+	public function payment_method_settings_meta_box($post_obj_which_is_null, $metabox)
395
+	{
396
+		$payment_method = isset($metabox['args'], $metabox['args']['payment_method'])
397
+			? $metabox['args']['payment_method'] : null;
398
+		if (! $payment_method instanceof EE_Payment_Method) {
399
+			throw new EE_Error(
400
+				sprintf(
401
+					__(
402
+						'Payment method metabox setup incorrectly. No Payment method object was supplied',
403
+						'event_espresso'
404
+					)
405
+				)
406
+			);
407
+		}
408
+		$payment_method_scopes = $payment_method->active();
409
+		// if the payment method really exists show its form, otherwise the activation template
410
+		if ($payment_method->ID() && ! empty($payment_method_scopes)) {
411
+			$form = $this->_generate_payment_method_settings_form($payment_method);
412
+			if ($form->form_data_present_in($this->_req_data)) {
413
+				$form->receive_form_submission($this->_req_data);
414
+			}
415
+			echo $form->form_open() . $form->get_html_and_js() . $form->form_close();
416
+		} else {
417
+			echo $this->_activate_payment_method_button($payment_method)->get_html_and_js();
418
+		}
419
+	}
420
+
421
+
422
+	/**
423
+	 * Gets the form for all the settings related to this payment method type
424
+	 *
425
+	 * @access protected
426
+	 * @param \EE_Payment_Method $payment_method
427
+	 * @return \EE_Form_Section_Proper
428
+	 */
429
+	protected function _generate_payment_method_settings_form(EE_Payment_Method $payment_method)
430
+	{
431
+		if (! $payment_method instanceof EE_Payment_Method) {
432
+			return new EE_Form_Section_Proper();
433
+		}
434
+		return new EE_Form_Section_Proper(
435
+			array(
436
+				'name'            => $payment_method->slug() . '_settings_form',
437
+				'html_id'         => $payment_method->slug() . '_settings_form',
438
+				'action'          => EE_Admin_Page::add_query_args_and_nonce(
439
+					array(
440
+						'action'         => 'update_payment_method',
441
+						'payment_method' => $payment_method->slug(),
442
+					),
443
+					EE_PAYMENTS_ADMIN_URL
444
+				),
445
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
446
+				'subsections'     => apply_filters(
447
+					'FHEE__Payments_Admin_Page___generate_payment_method_settings_form__form_subsections',
448
+					array(
449
+						'pci_dss_compliance'      => $this->_pci_dss_compliance($payment_method),
450
+						'currency_support'        => $this->_currency_support($payment_method),
451
+						'payment_method_settings' => $this->_payment_method_settings($payment_method),
452
+						'update'                  => $this->_update_payment_method_button($payment_method),
453
+						'deactivate'              => $this->_deactivate_payment_method_button($payment_method),
454
+						'fine_print'              => $this->_fine_print(),
455
+					),
456
+					$payment_method
457
+				),
458
+			)
459
+		);
460
+	}
461
+
462
+
463
+	/**
464
+	 * _pci_dss_compliance
465
+	 *
466
+	 * @access protected
467
+	 * @param \EE_Payment_Method $payment_method
468
+	 * @return \EE_Form_Section_Proper
469
+	 */
470
+	protected function _pci_dss_compliance(EE_Payment_Method $payment_method)
471
+	{
472
+		if ($payment_method->type_obj()->requires_https()) {
473
+			return new EE_Form_Section_HTML(
474
+				EEH_HTML::tr(
475
+					EEH_HTML::th(
476
+						EEH_HTML::label(
477
+							EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
478
+						)
479
+					) .
480
+					EEH_HTML::td(
481
+						EEH_HTML::strong(
482
+							__(
483
+								'You are responsible for your own website security and Payment Card Industry Data Security Standards (PCI DSS) compliance.',
484
+								'event_espresso'
485
+							)
486
+						)
487
+						.
488
+						EEH_HTML::br()
489
+						.
490
+						__('Learn more about ', 'event_espresso')
491
+						. EEH_HTML::link(
492
+							'https://www.pcisecuritystandards.org/merchants/index.php',
493
+							__('PCI DSS compliance', 'event_espresso')
494
+						)
495
+					)
496
+				)
497
+			);
498
+		} else {
499
+			return new EE_Form_Section_HTML('');
500
+		}
501
+	}
502
+
503
+
504
+	/**
505
+	 * _currency_support
506
+	 *
507
+	 * @access protected
508
+	 * @param \EE_Payment_Method $payment_method
509
+	 * @return \EE_Form_Section_Proper
510
+	 */
511
+	protected function _currency_support(EE_Payment_Method $payment_method)
512
+	{
513
+		if (! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
514
+			return new EE_Form_Section_HTML(
515
+				EEH_HTML::tr(
516
+					EEH_HTML::th(
517
+						EEH_HTML::label(
518
+							EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
519
+						)
520
+					) .
521
+					EEH_HTML::td(
522
+						EEH_HTML::strong(
523
+							sprintf(
524
+								__(
525
+									'This payment method does not support the currency set on your site (%1$s). Please activate a different payment method or change your site\'s country and associated currency.',
526
+									'event_espresso'
527
+								),
528
+								EE_Config::instance()->currency->code
529
+							)
530
+						)
531
+					)
532
+				)
533
+			);
534
+		} else {
535
+			return new EE_Form_Section_HTML('');
536
+		}
537
+	}
538
+
539
+
540
+	/**
541
+	 * _update_payment_method_button
542
+	 *
543
+	 * @access protected
544
+	 * @param \EE_Payment_Method $payment_method
545
+	 * @return \EE_Form_Section_HTML
546
+	 */
547
+	protected function _payment_method_settings(EE_Payment_Method $payment_method)
548
+	{
549
+		// modify the form so we only have/show fields that will be implemented for this version
550
+		return $this->_simplify_form($payment_method->type_obj()->settings_form(), $payment_method->name());
551
+	}
552
+
553
+
554
+	/**
555
+	 * Simplifies the form to merely reproduce 4.1's gateway settings functionality
556
+	 *
557
+	 * @param EE_Form_Section_Proper $form_section
558
+	 * @param string                 $payment_method_name
559
+	 * @return \EE_Payment_Method_Form
560
+	 * @throws \EE_Error
561
+	 */
562
+	protected function _simplify_form($form_section, $payment_method_name = '')
563
+	{
564
+		if ($form_section instanceof EE_Payment_Method_Form) {
565
+			$form_section->exclude(
566
+				array(
567
+					'PMD_type', // dont want them changing the type
568
+					'PMD_slug', // or the slug (probably never)
569
+					'PMD_wp_user', // or the user's ID
570
+					'Currency' // or the currency, until the rest of EE supports simultaneous currencies
571
+				)
572
+			);
573
+			return $form_section;
574
+		} else {
575
+			throw new EE_Error(
576
+				sprintf(
577
+					__(
578
+						'The EE_Payment_Method_Form for the "%1$s" payment method is missing or invalid.',
579
+						'event_espresso'
580
+					),
581
+					$payment_method_name
582
+				)
583
+			);
584
+		}
585
+	}
586
+
587
+
588
+	/**
589
+	 * _update_payment_method_button
590
+	 *
591
+	 * @access protected
592
+	 * @param \EE_Payment_Method $payment_method
593
+	 * @return \EE_Form_Section_HTML
594
+	 */
595
+	protected function _update_payment_method_button(EE_Payment_Method $payment_method)
596
+	{
597
+		$update_button = new EE_Submit_Input(
598
+			array(
599
+				'name'       => 'submit',
600
+				'html_id'    => 'save_' . $payment_method->slug() . '_settings',
601
+				'default'    => sprintf(
602
+					__('Update %s Payment Settings', 'event_espresso'),
603
+					$payment_method->admin_name()
604
+				),
605
+				'html_label' => EEH_HTML::nbsp(),
606
+			)
607
+		);
608
+		return new EE_Form_Section_HTML(
609
+			EEH_HTML::no_row(EEH_HTML::br(2)) .
610
+			EEH_HTML::tr(
611
+				EEH_HTML::th(__('Update Settings', 'event_espresso')) .
612
+				EEH_HTML::td(
613
+					$update_button->get_html_for_input()
614
+				)
615
+			)
616
+		);
617
+	}
618
+
619
+
620
+	/**
621
+	 * _deactivate_payment_method_button
622
+	 *
623
+	 * @access protected
624
+	 * @param \EE_Payment_Method $payment_method
625
+	 * @return \EE_Form_Section_Proper
626
+	 */
627
+	protected function _deactivate_payment_method_button(EE_Payment_Method $payment_method)
628
+	{
629
+		$link_text_and_title = sprintf(
630
+			__('Deactivate %1$s Payments?', 'event_espresso'),
631
+			$payment_method->admin_name()
632
+		);
633
+		return new EE_Form_Section_HTML(
634
+			EEH_HTML::tr(
635
+				EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')) .
636
+				EEH_HTML::td(
637
+					EEH_HTML::link(
638
+						EE_Admin_Page::add_query_args_and_nonce(
639
+							array(
640
+								'action'         => 'deactivate_payment_method',
641
+								'payment_method' => $payment_method->slug(),
642
+							),
643
+							EE_PAYMENTS_ADMIN_URL
644
+						),
645
+						$link_text_and_title,
646
+						$link_text_and_title,
647
+						'deactivate_' . $payment_method->slug(),
648
+						'espresso-button button-secondary'
649
+					)
650
+				)
651
+			)
652
+		);
653
+	}
654
+
655
+
656
+	/**
657
+	 * _activate_payment_method_button
658
+	 *
659
+	 * @access protected
660
+	 * @param \EE_Payment_Method $payment_method
661
+	 * @return \EE_Form_Section_Proper
662
+	 */
663
+	protected function _activate_payment_method_button(EE_Payment_Method $payment_method)
664
+	{
665
+		$link_text_and_title = sprintf(
666
+			__('Activate %1$s Payment Method?', 'event_espresso'),
667
+			$payment_method->admin_name()
668
+		);
669
+		return new EE_Form_Section_Proper(
670
+			array(
671
+				'name'            => 'activate_' . $payment_method->slug() . '_settings_form',
672
+				'html_id'         => 'activate_' . $payment_method->slug() . '_settings_form',
673
+				'action'          => '#',
674
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
675
+				'subsections'     => apply_filters(
676
+					'FHEE__Payments_Admin_Page___activate_payment_method_button__form_subsections',
677
+					array(
678
+						new EE_Form_Section_HTML(
679
+							EEH_HTML::tr(
680
+								EEH_HTML::td(
681
+									$payment_method->type_obj()->introductory_html(),
682
+									'',
683
+									'',
684
+									'',
685
+									'colspan="2"'
686
+								)
687
+							) .
688
+							EEH_HTML::tr(
689
+								EEH_HTML::th(
690
+									EEH_HTML::label(__('Click to Activate ', 'event_espresso'))
691
+								) .
692
+								EEH_HTML::td(
693
+									EEH_HTML::link(
694
+										EE_Admin_Page::add_query_args_and_nonce(
695
+											array(
696
+												'action'              => 'activate_payment_method',
697
+												'payment_method_type' => $payment_method->type(),
698
+											),
699
+											EE_PAYMENTS_ADMIN_URL
700
+										),
701
+										$link_text_and_title,
702
+										$link_text_and_title,
703
+										'activate_' . $payment_method->slug(),
704
+										'espresso-button-green button-primary'
705
+									)
706
+								)
707
+							)
708
+						),
709
+					),
710
+					$payment_method
711
+				),
712
+			)
713
+		);
714
+	}
715
+
716
+
717
+	/**
718
+	 * _fine_print
719
+	 *
720
+	 * @access protected
721
+	 * @return \EE_Form_Section_HTML
722
+	 */
723
+	protected function _fine_print()
724
+	{
725
+		return new EE_Form_Section_HTML(
726
+			EEH_HTML::tr(
727
+				EEH_HTML::th() .
728
+				EEH_HTML::td(
729
+					EEH_HTML::p(__('All fields marked with a * are required fields', 'event_espresso'), '', 'grey-text')
730
+				)
731
+			)
732
+		);
733
+	}
734
+
735
+
736
+	/**
737
+	 * Activates a payment method of that type. Mostly assuming there is only 1 of that type (or none so far)
738
+	 *
739
+	 * @global WP_User $current_user
740
+	 */
741
+	protected function _activate_payment_method()
742
+	{
743
+		if (isset($this->_req_data['payment_method_type'])) {
744
+			$payment_method_type = sanitize_text_field($this->_req_data['payment_method_type']);
745
+			// see if one exists
746
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
747
+			$payment_method = EE_Payment_Method_Manager::instance()
748
+													   ->activate_a_payment_method_of_type($payment_method_type);
749
+			$this->_redirect_after_action(
750
+				1,
751
+				'Payment Method',
752
+				'activated',
753
+				array('action' => 'default', 'payment_method' => $payment_method->slug())
754
+			);
755
+		} else {
756
+			$this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
757
+		}
758
+	}
759
+
760
+
761
+	/**
762
+	 * Deactivates the payment method with the specified slug, and redirects.
763
+	 */
764
+	protected function _deactivate_payment_method()
765
+	{
766
+		if (isset($this->_req_data['payment_method'])) {
767
+			$payment_method_slug = sanitize_key($this->_req_data['payment_method']);
768
+			// deactivate it
769
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
770
+			$count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method($payment_method_slug);
771
+			$this->_redirect_after_action(
772
+				$count_updated,
773
+				'Payment Method',
774
+				'deactivated',
775
+				array('action' => 'default', 'payment_method' => $payment_method_slug)
776
+			);
777
+		} else {
778
+			$this->_redirect_after_action(false, 'Payment Method', 'deactivated', array('action' => 'default'));
779
+		}
780
+	}
781
+
782
+
783
+	/**
784
+	 * Processes the payment method form that was submitted. This is slightly trickier than usual form
785
+	 * processing because we first need to identify WHICH form was processed and which payment method
786
+	 * it corresponds to. Once we have done that, we see if the form is valid. If it is, the
787
+	 * form's data is saved and we redirect to the default payment methods page, setting the updated payment method
788
+	 * as the currently-selected one. If it DOESN'T validate, we render the page with the form's errors (in the
789
+	 * subsequently called 'headers_sent_func' which is _payment_methods_list)
790
+	 *
791
+	 * @return void
792
+	 */
793
+	protected function _update_payment_method()
794
+	{
795
+		if ($_SERVER['REQUEST_METHOD'] == 'POST') {
796
+			// ok let's find which gateway form to use based on the form input
797
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
798
+			/** @var $correct_pmt_form_to_use EE_Payment_Method_Form */
799
+			$correct_pmt_form_to_use = null;
800
+			$payment_method = null;
801
+			foreach (EEM_Payment_Method::instance()->get_all() as $payment_method) {
802
+				// get the form and simplify it, like what we do when we display it
803
+				$pmt_form = $this->_generate_payment_method_settings_form($payment_method);
804
+				if ($pmt_form->form_data_present_in($this->_req_data)) {
805
+					$correct_pmt_form_to_use = $pmt_form;
806
+					break;
807
+				}
808
+			}
809
+			// if we couldn't find the correct payment method type...
810
+			if (! $correct_pmt_form_to_use) {
811
+				EE_Error::add_error(
812
+					__(
813
+						"We could not find which payment method type your form submission related to. Please contact support",
814
+						'event_espresso'
815
+					),
816
+					__FILE__,
817
+					__FUNCTION__,
818
+					__LINE__
819
+				);
820
+				$this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
821
+			}
822
+			$correct_pmt_form_to_use->receive_form_submission($this->_req_data);
823
+			if ($correct_pmt_form_to_use->is_valid()) {
824
+				$payment_settings_subform = $correct_pmt_form_to_use->get_subsection('payment_method_settings');
825
+				if (! $payment_settings_subform instanceof EE_Payment_Method_Form) {
826
+					throw new EE_Error(
827
+						sprintf(
828
+							__(
829
+								'The payment method could not be saved because the form sections were misnamed. We expected to find %1$s, but did not.',
830
+								'event_espresso'
831
+							),
832
+							'payment_method_settings'
833
+						)
834
+					);
835
+				}
836
+				$payment_settings_subform->save();
837
+				/** @var $pm EE_Payment_Method */
838
+				$this->_redirect_after_action(
839
+					true,
840
+					'Payment Method',
841
+					'updated',
842
+					array('action' => 'default', 'payment_method' => $payment_method->slug())
843
+				);
844
+			} else {
845
+				EE_Error::add_error(
846
+					sprintf(
847
+						__(
848
+							'Payment method of type %s was not saved because there were validation errors. They have been marked in the form',
849
+							'event_espresso'
850
+						),
851
+						$payment_method instanceof EE_Payment_Method ? $payment_method->type_obj()->pretty_name()
852
+							: __('"(unknown)"', 'event_espresso')
853
+					),
854
+					__FILE__,
855
+					__FUNCTION__,
856
+					__LINE__
857
+				);
858
+			}
859
+		}
860
+		return;
861
+	}
862
+
863
+
864
+	/**
865
+	 * Displays payment settings (not payment METHOD settings, that's _payment_method_settings)
866
+	 * @throws DomainException
867
+	 * @throws EE_Error
868
+	 * @throws InvalidArgumentException
869
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
870
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
871
+	 */
872
+	protected function _payment_settings()
873
+	{
874
+		$form = $this->getPaymentSettingsForm();
875
+		$this->_set_add_edit_form_tags('update_payment_settings');
876
+		$this->_set_publish_post_box_vars(null, false, false, null, false);
877
+		$this->_template_args['admin_page_content'] =  $form->get_html_and_js();
878
+		$this->display_admin_page_with_sidebar();
879
+	}
880
+
881
+
882
+	/**
883
+	 *        _update_payment_settings
884
+	 *
885
+	 * @access protected
886
+	 * @return void
887
+	 * @throws EE_Error
888
+	 * @throws InvalidArgumentException
889
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
890
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
891
+	 */
892
+	protected function _update_payment_settings()
893
+	{
894
+		$form = $this->getPaymentSettingsForm();
895
+		if ($form->was_submitted($this->_req_data)) {
896
+			$form->receive_form_submission($this->_req_data);
897
+			if ($form->is_valid()) {
898
+				/**
899
+				 * @var $reg_config EE_Registration_Config
900
+				 */
901
+				$loader = LoaderFactory::getLoader();
902
+				$reg_config = $loader->getShared('EE_Registration_Config');
903
+				$valid_data = $form->valid_data();
904
+				$reg_config->show_pending_payment_options = $valid_data['show_pending_payment_options'];
905
+				$reg_config->gateway_log_lifespan = $valid_data['gateway_log_lifespan'];
906
+			}
907
+		}
908
+		EE_Registry::instance()->CFG = apply_filters(
909
+			'FHEE__Payments_Admin_Page___update_payment_settings__CFG',
910
+			EE_Registry::instance()->CFG
911
+		);
912
+
913
+		$cfg =  EE_Registry::instance()->CFG ;
914
+
915
+		$what = __('Payment Settings', 'event_espresso');
916
+		$success = $this->_update_espresso_configuration(
917
+			$what,
918
+			EE_Registry::instance()->CFG,
919
+			__FILE__,
920
+			__FUNCTION__,
921
+			__LINE__
922
+		);
923
+		$this->_redirect_after_action(
924
+			$success,
925
+			$what,
926
+			__('updated', 'event_espresso'),
927
+			array('action' => 'payment_settings')
928
+		);
929
+	}
930
+
931
+
932
+	/**
933
+	 * Gets the form used for updating payment settings
934
+	 *
935
+	 * @return EE_Form_Section_Proper
936
+	 * @throws EE_Error
937
+	 * @throws InvalidArgumentException
938
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
939
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
940
+	 */
941
+	protected function getPaymentSettingsForm()
942
+	{
943
+		/**
944
+		 * @var $reg_config EE_Registration_Config
945
+		 */
946
+		$reg_config = LoaderFactory::getLoader()->getShared('EE_Registration_Config');
947
+		return new EE_Form_Section_Proper(
948
+			array(
949
+				'name' => 'payment-settings',
950
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
951
+				'subsections' => array(
952
+					'show_pending_payment_options' => new EE_Yes_No_Input(
953
+						array(
954
+							'html_name' => 'show_pending_payment_options',
955
+							'default' => $reg_config->show_pending_payment_options,
956
+							'html_help_text' => esc_html__(
957
+								"If a payment is marked as 'Pending Payment', or if payment is deferred (ie, an offline gateway like Check, Bank, or Invoice is used), then give registrants the option to retry payment. ",
958
+								'event_espresso'
959
+							)
960
+						)
961
+					),
962
+					'gateway_log_lifespan' => new \EE_Select_Input(
963
+						$reg_config->gatewayLogLifespanOptions(),
964
+						array(
965
+							'html_label_text' => esc_html__('Gateway Logs Lifespan', 'event_espresso'),
966
+							'html_help_text' => esc_html__('If issues arise with payments being made through a payment gateway, it\'s helpful to log non-sensitive communications with the payment gateway. But it\'s a security responsibility, so it\'s a good idea to not keep them for any longer than necessary.', 'event_espresso'),
967
+							'default' => $reg_config->gateway_log_lifespan,
968
+						)
969
+					)
970
+				)
971
+			)
972
+		);
973
+	}
974
+
975
+
976
+	protected function _payment_log_overview_list_table()
977
+	{
978
+		$this->display_admin_list_table_page_with_sidebar();
979
+	}
980
+
981
+
982
+	protected function _set_list_table_views_payment_log()
983
+	{
984
+		$this->_views = array(
985
+			'all' => array(
986
+				'slug'  => 'all',
987
+				'label' => __('View All Logs', 'event_espresso'),
988
+				'count' => 0,
989
+			),
990
+		);
991
+	}
992
+
993
+
994
+	/**
995
+	 * @param int  $per_page
996
+	 * @param int  $current_page
997
+	 * @param bool $count
998
+	 * @return array
999
+	 */
1000
+	public function get_payment_logs($per_page = 50, $current_page = 0, $count = false)
1001
+	{
1002
+		EE_Registry::instance()->load_model('Change_Log');
1003
+		// we may need to do multiple queries (joining differently), so we actually wan tan array of query params
1004
+		$query_params = array(array('LOG_type' => EEM_Change_Log::type_gateway));
1005
+		// check if they've selected a specific payment method
1006
+		if (isset($this->_req_data['_payment_method']) && $this->_req_data['_payment_method'] !== 'all') {
1007
+			$query_params[0]['OR*pm_or_pay_pm'] = array(
1008
+				'Payment.Payment_Method.PMD_ID' => $this->_req_data['_payment_method'],
1009
+				'Payment_Method.PMD_ID'         => $this->_req_data['_payment_method'],
1010
+			);
1011
+		}
1012
+		// take into account search
1013
+		if (isset($this->_req_data['s']) && $this->_req_data['s']) {
1014
+			$similarity_string = array('LIKE', '%' . str_replace("", "%", $this->_req_data['s']) . '%');
1015
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_fname'] = $similarity_string;
1016
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_lname'] = $similarity_string;
1017
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_email'] = $similarity_string;
1018
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_name'] = $similarity_string;
1019
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_admin_name'] = $similarity_string;
1020
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_type'] = $similarity_string;
1021
+			$query_params[0]['OR*s']['LOG_message'] = $similarity_string;
1022
+			$query_params[0]['OR*s']['Payment_Method.PMD_name'] = $similarity_string;
1023
+			$query_params[0]['OR*s']['Payment_Method.PMD_admin_name'] = $similarity_string;
1024
+			$query_params[0]['OR*s']['Payment_Method.PMD_type'] = $similarity_string;
1025
+			$query_params[0]['OR*s']['LOG_message'] = $similarity_string;
1026
+		}
1027
+		if (isset($this->_req_data['payment-filter-start-date'])
1028
+			&& isset($this->_req_data['payment-filter-end-date'])
1029
+		) {
1030
+			// add date
1031
+			$start_date = wp_strip_all_tags($this->_req_data['payment-filter-start-date']);
1032
+			$end_date = wp_strip_all_tags($this->_req_data['payment-filter-end-date']);
1033
+			// make sure our timestamps start and end right at the boundaries for each day
1034
+			$start_date = date('Y-m-d', strtotime($start_date)) . ' 00:00:00';
1035
+			$end_date = date('Y-m-d', strtotime($end_date)) . ' 23:59:59';
1036
+			// convert to timestamps
1037
+			$start_date = strtotime($start_date);
1038
+			$end_date = strtotime($end_date);
1039
+			// makes sure start date is the lowest value and vice versa
1040
+			$start_date = min($start_date, $end_date);
1041
+			$end_date = max($start_date, $end_date);
1042
+			// convert for query
1043
+			$start_date = EEM_Change_Log::instance()
1044
+										->convert_datetime_for_query(
1045
+											'LOG_time',
1046
+											date('Y-m-d H:i:s', $start_date),
1047
+											'Y-m-d H:i:s'
1048
+										);
1049
+			$end_date = EEM_Change_Log::instance()
1050
+									  ->convert_datetime_for_query(
1051
+										  'LOG_time',
1052
+										  date('Y-m-d H:i:s', $end_date),
1053
+										  'Y-m-d H:i:s'
1054
+									  );
1055
+			$query_params[0]['LOG_time'] = array('BETWEEN', array($start_date, $end_date));
1056
+		}
1057
+		if ($count) {
1058
+			return EEM_Change_Log::instance()->count($query_params);
1059
+		}
1060
+		if (isset($this->_req_data['order'])) {
1061
+			$sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) ? $this->_req_data['order']
1062
+				: 'DESC';
1063
+			$query_params['order_by'] = array('LOG_time' => $sort);
1064
+		} else {
1065
+			$query_params['order_by'] = array('LOG_time' => 'DESC');
1066
+		}
1067
+		$offset = ($current_page - 1) * $per_page;
1068
+		if (! isset($this->_req_data['download_results'])) {
1069
+			$query_params['limit'] = array($offset, $per_page);
1070
+		}
1071
+		// now they've requested to instead just download the file instead of viewing it.
1072
+		if (isset($this->_req_data['download_results'])) {
1073
+			$wpdb_results = EEM_Change_Log::instance()->get_all_efficiently($query_params);
1074
+			header('Content-Disposition: attachment');
1075
+			header("Content-Disposition: attachment; filename=ee_payment_logs_for_" . sanitize_key(site_url()));
1076
+			echo "<h1>Payment Logs for " . site_url() . "</h1>";
1077
+			echo "<h3>Query:</h3>";
1078
+			var_dump($query_params);
1079
+			echo "<h3>Results:</h3>";
1080
+			var_dump($wpdb_results);
1081
+			die;
1082
+		}
1083
+		$results = EEM_Change_Log::instance()->get_all($query_params);
1084
+		return $results;
1085
+	}
1086
+
1087
+
1088
+	/**
1089
+	 * Used by usort to RE-sort log query results, because we lose the ordering
1090
+	 * because we're possibly combining the results from two queries
1091
+	 *
1092
+	 * @param EE_Change_Log $logA
1093
+	 * @param EE_Change_Log $logB
1094
+	 * @return int
1095
+	 */
1096
+	protected function _sort_logs_again($logA, $logB)
1097
+	{
1098
+		$timeA = $logA->get_raw('LOG_time');
1099
+		$timeB = $logB->get_raw('LOG_time');
1100
+		if ($timeA == $timeB) {
1101
+			return 0;
1102
+		}
1103
+		$comparison = $timeA < $timeB ? -1 : 1;
1104
+		if (strtoupper($this->_sort_logs_again_direction) == 'DESC') {
1105
+			return $comparison * -1;
1106
+		} else {
1107
+			return $comparison;
1108
+		}
1109
+	}
1110
+
1111
+
1112
+	protected function _payment_log_details()
1113
+	{
1114
+		EE_Registry::instance()->load_model('Change_Log');
1115
+		/** @var $payment_log EE_Change_Log */
1116
+		$payment_log = EEM_Change_Log::instance()->get_one_by_ID($this->_req_data['ID']);
1117
+		$payment_method = null;
1118
+		$transaction = null;
1119
+		if ($payment_log instanceof EE_Change_Log) {
1120
+			if ($payment_log->object() instanceof EE_Payment) {
1121
+				$payment_method = $payment_log->object()->payment_method();
1122
+				$transaction = $payment_log->object()->transaction();
1123
+			} elseif ($payment_log->object() instanceof EE_Payment_Method) {
1124
+				$payment_method = $payment_log->object();
1125
+			} elseif ($payment_log->object() instanceof EE_Transaction) {
1126
+				$transaction = $payment_log->object();
1127
+				$payment_method = $transaction->payment_method();
1128
+			}
1129
+		}
1130
+		$this->_template_args['admin_page_content'] = EEH_Template::display_template(
1131
+			EE_PAYMENTS_TEMPLATE_PATH . 'payment_log_details.template.php',
1132
+			array(
1133
+				'payment_log'    => $payment_log,
1134
+				'payment_method' => $payment_method,
1135
+				'transaction'    => $transaction,
1136
+			),
1137
+			true
1138
+		);
1139
+		$this->display_admin_page_with_sidebar();
1140
+	}
1141 1141
 }
Please login to merge, or discard this patch.
core/services/commands/transaction/CreateTransactionCommand.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -57,7 +57,7 @@
 block discarded – undo
57 57
     public function getCapCheck()
58 58
     {
59 59
         // need cap for non-AJAX admin requests
60
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
60
+        if ( ! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
61 61
             // there's no specific caps for editing/creating transactions,
62 62
             // so that's why we are using ee_edit_registrations
63 63
             return new CapCheck('ee_edit_registrations', 'create_new_transaction');
Please login to merge, or discard this patch.
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -20,60 +20,60 @@
 block discarded – undo
20 20
 class CreateTransactionCommand extends Command implements CommandRequiresCapCheckInterface
21 21
 {
22 22
 
23
-    /**
24
-     * @var EE_Checkout $checkout
25
-     */
26
-    protected $checkout;
23
+	/**
24
+	 * @var EE_Checkout $checkout
25
+	 */
26
+	protected $checkout;
27 27
 
28
-    /**
29
-     * @var array $transaction_details
30
-     */
31
-    protected $transaction_details;
28
+	/**
29
+	 * @var array $transaction_details
30
+	 */
31
+	protected $transaction_details;
32 32
 
33 33
 
34
-    /**
35
-     * CreateTransactionCommand constructor.
36
-     *
37
-     * @param EE_Checkout $checkout
38
-     * @param array       $transaction_details
39
-     */
40
-    public function __construct(EE_Checkout $checkout = null, array $transaction_details = array())
41
-    {
42
-        $this->checkout = $checkout;
43
-        $this->transaction_details = $transaction_details;
44
-    }
34
+	/**
35
+	 * CreateTransactionCommand constructor.
36
+	 *
37
+	 * @param EE_Checkout $checkout
38
+	 * @param array       $transaction_details
39
+	 */
40
+	public function __construct(EE_Checkout $checkout = null, array $transaction_details = array())
41
+	{
42
+		$this->checkout = $checkout;
43
+		$this->transaction_details = $transaction_details;
44
+	}
45 45
 
46 46
 
47
-    /**
48
-     * @return CapCheckInterface
49
-     * @throws InvalidDataTypeException
50
-     */
51
-    public function getCapCheck()
52
-    {
53
-        // need cap for non-AJAX admin requests
54
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
55
-            // there's no specific caps for editing/creating transactions,
56
-            // so that's why we are using ee_edit_registrations
57
-            return new CapCheck('ee_edit_registrations', 'create_new_transaction');
58
-        }
59
-        return new PublicCapabilities('', 'create_new_transaction');
60
-    }
47
+	/**
48
+	 * @return CapCheckInterface
49
+	 * @throws InvalidDataTypeException
50
+	 */
51
+	public function getCapCheck()
52
+	{
53
+		// need cap for non-AJAX admin requests
54
+		if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
55
+			// there's no specific caps for editing/creating transactions,
56
+			// so that's why we are using ee_edit_registrations
57
+			return new CapCheck('ee_edit_registrations', 'create_new_transaction');
58
+		}
59
+		return new PublicCapabilities('', 'create_new_transaction');
60
+	}
61 61
 
62 62
 
63
-    /**
64
-     * @return EE_Checkout
65
-     */
66
-    public function checkout()
67
-    {
68
-        return $this->checkout;
69
-    }
63
+	/**
64
+	 * @return EE_Checkout
65
+	 */
66
+	public function checkout()
67
+	{
68
+		return $this->checkout;
69
+	}
70 70
 
71 71
 
72
-    /**
73
-     * @return array
74
-     */
75
-    public function transactionDetails()
76
-    {
77
-        return $this->transaction_details;
78
-    }
72
+	/**
73
+	 * @return array
74
+	 */
75
+	public function transactionDetails()
76
+	{
77
+		return $this->transaction_details;
78
+	}
79 79
 }
Please login to merge, or discard this patch.
core/services/commands/transaction/CreateTransactionCommandHandler.php 2 patches
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -26,44 +26,44 @@
 block discarded – undo
26 26
 {
27 27
 
28 28
 
29
-    /**
30
-     * @param CommandInterface $command
31
-     * @return mixed
32
-     * @throws EE_Error
33
-     * @throws InvalidEntityException
34
-     */
35
-    public function handle(CommandInterface $command)
36
-    {
37
-        /** @var CreateTransactionCommand $command */
38
-        if (! $command instanceof CreateTransactionCommand) {
39
-            throw new InvalidEntityException(get_class($command), 'CreateTransactionCommand');
40
-        }
41
-        $transaction_details = $command->transactionDetails();
42
-        $cart_total = null;
43
-        if ($command->checkout() instanceof EE_Checkout) {
44
-            // ensure cart totals have been calculated
45
-            $command->checkout()->cart->get_grand_total()->recalculate_total_including_taxes();
46
-            // grab the cart grand total
47
-            $cart_total = $command->checkout()->cart->get_cart_grand_total();
48
-            $transaction_details['TXN_reg_steps'] = $command->checkout()->initialize_txn_reg_steps_array();
49
-            $transaction_details['TXN_total'] = $cart_total > 0 ? $cart_total : 0;
50
-        }
51
-        // create new TXN and save it so it has an ID
52
-        $transaction = EE_Transaction::new_instance($transaction_details);
53
-        if (! $transaction instanceof EE_Transaction) {
54
-            throw new InvalidEntityException(get_class($transaction), 'EE_Transaction');
55
-        }
56
-        $transaction->save();
57
-        // ensure grand total line item created
58
-        $cart_total = $cart_total instanceof EE_Line_Item
59
-            ? $cart_total
60
-            : EEH_Line_Item::create_total_line_item($transaction);
61
-        if (! $cart_total instanceof EE_Line_Item) {
62
-            throw new InvalidEntityException(get_class($cart_total), 'EE_Line_Item');
63
-        }
64
-        $cart_total->save_this_and_descendants_to_txn($transaction->ID());
65
-        return $transaction;
66
-    }
29
+	/**
30
+	 * @param CommandInterface $command
31
+	 * @return mixed
32
+	 * @throws EE_Error
33
+	 * @throws InvalidEntityException
34
+	 */
35
+	public function handle(CommandInterface $command)
36
+	{
37
+		/** @var CreateTransactionCommand $command */
38
+		if (! $command instanceof CreateTransactionCommand) {
39
+			throw new InvalidEntityException(get_class($command), 'CreateTransactionCommand');
40
+		}
41
+		$transaction_details = $command->transactionDetails();
42
+		$cart_total = null;
43
+		if ($command->checkout() instanceof EE_Checkout) {
44
+			// ensure cart totals have been calculated
45
+			$command->checkout()->cart->get_grand_total()->recalculate_total_including_taxes();
46
+			// grab the cart grand total
47
+			$cart_total = $command->checkout()->cart->get_cart_grand_total();
48
+			$transaction_details['TXN_reg_steps'] = $command->checkout()->initialize_txn_reg_steps_array();
49
+			$transaction_details['TXN_total'] = $cart_total > 0 ? $cart_total : 0;
50
+		}
51
+		// create new TXN and save it so it has an ID
52
+		$transaction = EE_Transaction::new_instance($transaction_details);
53
+		if (! $transaction instanceof EE_Transaction) {
54
+			throw new InvalidEntityException(get_class($transaction), 'EE_Transaction');
55
+		}
56
+		$transaction->save();
57
+		// ensure grand total line item created
58
+		$cart_total = $cart_total instanceof EE_Line_Item
59
+			? $cart_total
60
+			: EEH_Line_Item::create_total_line_item($transaction);
61
+		if (! $cart_total instanceof EE_Line_Item) {
62
+			throw new InvalidEntityException(get_class($cart_total), 'EE_Line_Item');
63
+		}
64
+		$cart_total->save_this_and_descendants_to_txn($transaction->ID());
65
+		return $transaction;
66
+	}
67 67
 
68 68
 
69 69
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -35,7 +35,7 @@  discard block
 block discarded – undo
35 35
     public function handle(CommandInterface $command)
36 36
     {
37 37
         /** @var CreateTransactionCommand $command */
38
-        if (! $command instanceof CreateTransactionCommand) {
38
+        if ( ! $command instanceof CreateTransactionCommand) {
39 39
             throw new InvalidEntityException(get_class($command), 'CreateTransactionCommand');
40 40
         }
41 41
         $transaction_details = $command->transactionDetails();
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
         }
51 51
         // create new TXN and save it so it has an ID
52 52
         $transaction = EE_Transaction::new_instance($transaction_details);
53
-        if (! $transaction instanceof EE_Transaction) {
53
+        if ( ! $transaction instanceof EE_Transaction) {
54 54
             throw new InvalidEntityException(get_class($transaction), 'EE_Transaction');
55 55
         }
56 56
         $transaction->save();
@@ -58,7 +58,7 @@  discard block
 block discarded – undo
58 58
         $cart_total = $cart_total instanceof EE_Line_Item
59 59
             ? $cart_total
60 60
             : EEH_Line_Item::create_total_line_item($transaction);
61
-        if (! $cart_total instanceof EE_Line_Item) {
61
+        if ( ! $cart_total instanceof EE_Line_Item) {
62 62
             throw new InvalidEntityException(get_class($cart_total), 'EE_Line_Item');
63 63
         }
64 64
         $cart_total->save_this_and_descendants_to_txn($transaction->ID());
Please login to merge, or discard this patch.
core/services/commands/attendee/CreateAttendeeCommand.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -81,7 +81,7 @@
 block discarded – undo
81 81
     public function getCapCheck()
82 82
     {
83 83
         // need cap for non-AJAX admin requests
84
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
84
+        if ( ! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
85 85
             return new CapCheck('ee_edit_contacts', 'create_new_contact');
86 86
         }
87 87
         return new PublicCapabilities('', 'create_new_contact');
Please login to merge, or discard this patch.
Indentation   +49 added lines, -49 removed lines patch added patch discarded remove patch
@@ -20,62 +20,62 @@
 block discarded – undo
20 20
 class CreateAttendeeCommand extends Command implements CommandRequiresCapCheckInterface
21 21
 {
22 22
 
23
-    /**
24
-     * array of details where keys are names of EEM_Attendee model fields
25
-     *
26
-     * @var array $attendee_details
27
-     */
28
-    protected $attendee_details;
23
+	/**
24
+	 * array of details where keys are names of EEM_Attendee model fields
25
+	 *
26
+	 * @var array $attendee_details
27
+	 */
28
+	protected $attendee_details;
29 29
 
30
-    /**
31
-     * an existing registration to associate this attendee with
32
-     *
33
-     * @var EE_Registration $registration
34
-     */
35
-    protected $registration;
30
+	/**
31
+	 * an existing registration to associate this attendee with
32
+	 *
33
+	 * @var EE_Registration $registration
34
+	 */
35
+	protected $registration;
36 36
 
37 37
 
38
-    /**
39
-     * CreateAttendeeCommand constructor.
40
-     *
41
-     * @param array           $attendee_details
42
-     * @param EE_Registration $registration
43
-     */
44
-    public function __construct(array $attendee_details, EE_Registration $registration)
45
-    {
46
-        $this->attendee_details = $attendee_details;
47
-        $this->registration = $registration;
48
-    }
38
+	/**
39
+	 * CreateAttendeeCommand constructor.
40
+	 *
41
+	 * @param array           $attendee_details
42
+	 * @param EE_Registration $registration
43
+	 */
44
+	public function __construct(array $attendee_details, EE_Registration $registration)
45
+	{
46
+		$this->attendee_details = $attendee_details;
47
+		$this->registration = $registration;
48
+	}
49 49
 
50 50
 
51
-    /**
52
-     * @return array
53
-     */
54
-    public function attendeeDetails()
55
-    {
56
-        return $this->attendee_details;
57
-    }
51
+	/**
52
+	 * @return array
53
+	 */
54
+	public function attendeeDetails()
55
+	{
56
+		return $this->attendee_details;
57
+	}
58 58
 
59 59
 
60
-    /**
61
-     * @return EE_Registration
62
-     */
63
-    public function registration()
64
-    {
65
-        return $this->registration;
66
-    }
60
+	/**
61
+	 * @return EE_Registration
62
+	 */
63
+	public function registration()
64
+	{
65
+		return $this->registration;
66
+	}
67 67
 
68 68
 
69
-    /**
70
-     * @return CapCheckInterface
71
-     * @throws InvalidDataTypeException
72
-     */
73
-    public function getCapCheck()
74
-    {
75
-        // need cap for non-AJAX admin requests
76
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
77
-            return new CapCheck('ee_edit_contacts', 'create_new_contact');
78
-        }
79
-        return new PublicCapabilities('', 'create_new_contact');
80
-    }
69
+	/**
70
+	 * @return CapCheckInterface
71
+	 * @throws InvalidDataTypeException
72
+	 */
73
+	public function getCapCheck()
74
+	{
75
+		// need cap for non-AJAX admin requests
76
+		if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
77
+			return new CapCheck('ee_edit_contacts', 'create_new_contact');
78
+		}
79
+		return new PublicCapabilities('', 'create_new_contact');
80
+	}
81 81
 }
Please login to merge, or discard this patch.
core/libraries/rest_api/controllers/Base.php 3 patches
Unused Use Statements   -1 removed lines patch added patch discarded remove patch
@@ -5,7 +5,6 @@
 block discarded – undo
5 5
 use WP_Error;
6 6
 use WP_REST_Response;
7 7
 use EventEspresso\core\libraries\rest_api\RestException;
8
-
9 8
 use EE_Error;
10 9
 use EED_Core_Rest_Api;
11 10
 use EEH_Inflector;
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -96,7 +96,7 @@  discard block
 block discarded – undo
96 96
      */
97 97
     protected function setDebugInfo($key, $info)
98 98
     {
99
-        $this->debug_info[ $key ] = $info;
99
+        $this->debug_info[$key] = $info;
100 100
     }
101 101
 
102 102
 
@@ -113,11 +113,11 @@  discard block
 block discarded – undo
113 113
     {
114 114
         if (is_array($value)) {
115 115
             foreach ($value as $value_key => $value_value) {
116
-                $this->setResponseHeader($header_key . '[' . $value_key . ']', $value_value);
116
+                $this->setResponseHeader($header_key.'['.$value_key.']', $value_value);
117 117
             }
118 118
         } else {
119 119
             $prefix = $use_ee_prefix ? Base::HEADER_PREFIX_FOR_EE : Base::HEADER_PREFIX_FOR_WP;
120
-            $this->response_headers[ $prefix . $header_key ] = $value;
120
+            $this->response_headers[$prefix.$header_key] = $value;
121 121
         }
122 122
     }
123 123
 
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
     protected function addEeErrorsToResponse(WP_Error $wp_error_response)
148 148
     {
149 149
         $notices_during_checkin = EE_Error::get_raw_notices();
150
-        if (! empty($notices_during_checkin['errors'])) {
150
+        if ( ! empty($notices_during_checkin['errors'])) {
151 151
             foreach ($notices_during_checkin['errors'] as $error_code => $error_message) {
152 152
                 $wp_error_response->add(
153 153
                     sanitize_key($error_code),
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
                 if (is_array($debug_info)) {
191 191
                     $debug_info = wp_json_encode($debug_info);
192 192
                 }
193
-                $headers[ 'X-EE4-Debug-' . ucwords($debug_key) ] = $debug_info;
193
+                $headers['X-EE4-Debug-'.ucwords($debug_key)] = $debug_info;
194 194
             }
195 195
         }
196 196
         $headers = array_merge(
@@ -249,15 +249,15 @@  discard block
 block discarded – undo
249 249
         $headers = array();
250 250
         $notices = EE_Error::get_raw_notices();
251 251
         foreach ($notices as $notice_type => $sub_notices) {
252
-            if (! is_array($sub_notices)) {
252
+            if ( ! is_array($sub_notices)) {
253 253
                 continue;
254 254
             }
255 255
             foreach ($sub_notices as $notice_code => $sub_notice) {
256
-                $headers[ 'X-EE4-Notices-'
256
+                $headers['X-EE4-Notices-'
257 257
                           . EEH_Inflector::humanize($notice_type)
258 258
                           . '['
259 259
                           . $notice_code
260
-                          . ']' ] = strip_tags($sub_notice);
260
+                          . ']'] = strip_tags($sub_notice);
261 261
             }
262 262
         }
263 263
         return apply_filters(
@@ -286,7 +286,7 @@  discard block
 block discarded – undo
286 286
         }
287 287
         $matches = $this->parseRoute(
288 288
             $route,
289
-            '~' . EED_Core_Rest_Api::ee_api_namespace_for_regex . '~',
289
+            '~'.EED_Core_Rest_Api::ee_api_namespace_for_regex.'~',
290 290
             array('version')
291 291
         );
292 292
         if (isset($matches['version'])) {
@@ -320,14 +320,14 @@  discard block
 block discarded – undo
320 320
         if (is_array($matches)) {
321 321
             // skip the overall regex match. Who cares
322 322
             for ($i = 1; $i <= count($match_keys); $i++) {
323
-                if (! isset($matches[ $i ])) {
323
+                if ( ! isset($matches[$i])) {
324 324
                     $success = false;
325 325
                 } else {
326
-                    $indexed_matches[ $match_keys[ $i - 1 ] ] = $matches[ $i ];
326
+                    $indexed_matches[$match_keys[$i - 1]] = $matches[$i];
327 327
                 }
328 328
             }
329 329
         }
330
-        if (! $success) {
330
+        if ( ! $success) {
331 331
             throw new EE_Error(
332 332
                 __('We could not parse the URL. Please contact Event Espresso Support', 'event_espresso'),
333 333
                 'endpoint_parsing_error'
Please login to merge, or discard this patch.
Indentation   +334 added lines, -334 removed lines patch added patch discarded remove patch
@@ -22,338 +22,338 @@
 block discarded – undo
22 22
 class Base
23 23
 {
24 24
 
25
-    /**
26
-     * @deprecated use all-caps version
27
-     */
28
-    // @codingStandardsIgnoreStart
29
-    const header_prefix_for_ee = 'X-EE-';
30
-    // @codingStandardsIgnoreEnd
31
-
32
-    const HEADER_PREFIX_FOR_EE = 'X-EE-';
33
-
34
-    /**
35
-     * @deprecated use all-caps version instead
36
-     */
37
-    // @codingStandardsIgnoreStart
38
-    const header_prefix_for_wp = 'X-WP-';
39
-    // @codingStandardsIgnoreEnd
40
-
41
-    const HEADER_PREFIX_FOR_WP = 'X-WP-';
42
-
43
-    /**
44
-     * Contains debug info we'll send back in the response headers
45
-     *
46
-     * @var array
47
-     */
48
-    protected $debug_info = array();
49
-
50
-    /**
51
-     * Indicates whether or not the API is in debug mode
52
-     *
53
-     * @var boolean
54
-     */
55
-    protected $debug_mode = false;
56
-
57
-    /**
58
-     * Indicates the version that was requested
59
-     *
60
-     * @var string
61
-     */
62
-    protected $requested_version;
63
-
64
-    /**
65
-     * flat array of headers to send in the response
66
-     *
67
-     * @var array
68
-     */
69
-    protected $response_headers = array();
70
-
71
-
72
-    public function __construct()
73
-    {
74
-        $this->debug_mode = EED_Core_Rest_Api::debugMode();
75
-        // we are handling a REST request. Don't show a fancy HTML error message is any error comes up
76
-        add_filter('FHEE__EE_Error__get_error__show_normal_exceptions', '__return_true');
77
-    }
78
-
79
-
80
-    /**
81
-     * Sets the version the user requested
82
-     *
83
-     * @param string $version eg '4.8'
84
-     */
85
-    public function setRequestedVersion($version)
86
-    {
87
-        $this->requested_version = $version;
88
-    }
89
-
90
-
91
-    /**
92
-     * Sets some debug info that we'll send back in headers
93
-     *
94
-     * @param string       $key
95
-     * @param string|array $info
96
-     */
97
-    protected function setDebugInfo($key, $info)
98
-    {
99
-        $this->debug_info[ $key ] = $info;
100
-    }
101
-
102
-
103
-    /**
104
-     * Sets headers for the response
105
-     *
106
-     * @param string       $header_key    , excluding the "X-EE-" part
107
-     * @param array|string $value         if an array, multiple headers will be added, one
108
-     *                                    for each key in the array
109
-     * @param boolean      $use_ee_prefix whether to use the EE prefix on the header, or fallback to
110
-     *                                    the standard WP one
111
-     */
112
-    protected function setResponseHeader($header_key, $value, $use_ee_prefix = true)
113
-    {
114
-        if (is_array($value)) {
115
-            foreach ($value as $value_key => $value_value) {
116
-                $this->setResponseHeader($header_key . '[' . $value_key . ']', $value_value);
117
-            }
118
-        } else {
119
-            $prefix = $use_ee_prefix ? Base::HEADER_PREFIX_FOR_EE : Base::HEADER_PREFIX_FOR_WP;
120
-            $this->response_headers[ $prefix . $header_key ] = $value;
121
-        }
122
-    }
123
-
124
-
125
-    /**
126
-     * Returns a flat array of headers to be added to the response
127
-     *
128
-     * @return array
129
-     */
130
-    protected function getResponseHeaders()
131
-    {
132
-        return apply_filters(
133
-            'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers',
134
-            $this->response_headers,
135
-            $this,
136
-            $this->requested_version
137
-        );
138
-    }
139
-
140
-
141
-    /**
142
-     * Adds error notices from EE_Error onto the provided \WP_Error
143
-     *
144
-     * @param WP_Error $wp_error_response
145
-     * @return WP_Error
146
-     */
147
-    protected function addEeErrorsToResponse(WP_Error $wp_error_response)
148
-    {
149
-        $notices_during_checkin = EE_Error::get_raw_notices();
150
-        if (! empty($notices_during_checkin['errors'])) {
151
-            foreach ($notices_during_checkin['errors'] as $error_code => $error_message) {
152
-                $wp_error_response->add(
153
-                    sanitize_key($error_code),
154
-                    strip_tags($error_message)
155
-                );
156
-            }
157
-        }
158
-        return $wp_error_response;
159
-    }
160
-
161
-
162
-    /**
163
-     * Sends a response, but also makes sure to attach headers that
164
-     * are handy for debugging.
165
-     * Specifically, we assume folks will want to know what exactly was the DB query that got run,
166
-     * what exactly was the Models query that got run, what capabilities came into play, what fields were omitted from
167
-     * the response, others?
168
-     *
169
-     * @param array|WP_Error|Exception|RestException $response
170
-     * @return WP_REST_Response
171
-     */
172
-    public function sendResponse($response)
173
-    {
174
-        if ($response instanceof RestException) {
175
-            $response = new WP_Error($response->getStringCode(), $response->getMessage(), $response->getData());
176
-        }
177
-        if ($response instanceof Exception) {
178
-            $code = $response->getCode() ? $response->getCode() : 'error_occurred';
179
-            $response = new WP_Error($code, $response->getMessage());
180
-        }
181
-        if ($response instanceof WP_Error) {
182
-            $response = $this->addEeErrorsToResponse($response);
183
-            $rest_response = $this->createRestResponseFromWpError($response);
184
-        } else {
185
-            $rest_response = new WP_REST_Response($response, 200);
186
-        }
187
-        $headers = array();
188
-        if ($this->debug_mode && is_array($this->debug_info)) {
189
-            foreach ($this->debug_info as $debug_key => $debug_info) {
190
-                if (is_array($debug_info)) {
191
-                    $debug_info = wp_json_encode($debug_info);
192
-                }
193
-                $headers[ 'X-EE4-Debug-' . ucwords($debug_key) ] = $debug_info;
194
-            }
195
-        }
196
-        $headers = array_merge(
197
-            $headers,
198
-            $this->getResponseHeaders(),
199
-            $this->getHeadersFromEeNotices()
200
-        );
201
-        $rest_response->set_headers($headers);
202
-        return $rest_response;
203
-    }
204
-
205
-
206
-    /**
207
-     * Converts the \WP_Error into `WP_REST_Response.
208
-     * Mostly this is just a copy-and-paste from \WP_REST_Server::error_to_response
209
-     * (which is protected)
210
-     *
211
-     * @param WP_Error $wp_error
212
-     * @return WP_REST_Response
213
-     */
214
-    protected function createRestResponseFromWpError(WP_Error $wp_error)
215
-    {
216
-        $error_data = $wp_error->get_error_data();
217
-        if (is_array($error_data) && isset($error_data['status'])) {
218
-            $status = $error_data['status'];
219
-        } else {
220
-            $status = 500;
221
-        }
222
-        $errors = array();
223
-        foreach ((array) $wp_error->errors as $code => $messages) {
224
-            foreach ((array) $messages as $message) {
225
-                $errors[] = array(
226
-                    'code'    => $code,
227
-                    'message' => $message,
228
-                    'data'    => $wp_error->get_error_data($code),
229
-                );
230
-            }
231
-        }
232
-        $data = isset($errors[0]) ? $errors[0] : array();
233
-        if (count($errors) > 1) {
234
-            // Remove the primary error.
235
-            array_shift($errors);
236
-            $data['additional_errors'] = $errors;
237
-        }
238
-        return new WP_REST_Response($data, $status);
239
-    }
240
-
241
-
242
-    /**
243
-     * Array of headers derived from EE success, attention, and error messages
244
-     *
245
-     * @return array
246
-     */
247
-    protected function getHeadersFromEeNotices()
248
-    {
249
-        $headers = array();
250
-        $notices = EE_Error::get_raw_notices();
251
-        foreach ($notices as $notice_type => $sub_notices) {
252
-            if (! is_array($sub_notices)) {
253
-                continue;
254
-            }
255
-            foreach ($sub_notices as $notice_code => $sub_notice) {
256
-                $headers[ 'X-EE4-Notices-'
257
-                          . EEH_Inflector::humanize($notice_type)
258
-                          . '['
259
-                          . $notice_code
260
-                          . ']' ] = strip_tags($sub_notice);
261
-            }
262
-        }
263
-        return apply_filters(
264
-            'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_headers_from_ee_notices__return',
265
-            $headers,
266
-            $this->requested_version,
267
-            $notices
268
-        );
269
-    }
270
-
271
-
272
-    /**
273
-     * Finds which version of the API was requested given the route, and returns it.
274
-     * eg in a request to "mysite.com/wp-json/ee/v4.8.29/events/123" this would return
275
-     * "4.8.29".
276
-     * We should know hte requested version in this model though, so if no route is
277
-     * provided just use what we set earlier
278
-     *
279
-     * @param string $route
280
-     * @return string
281
-     */
282
-    public function getRequestedVersion($route = null)
283
-    {
284
-        if ($route === null) {
285
-            return $this->requested_version;
286
-        }
287
-        $matches = $this->parseRoute(
288
-            $route,
289
-            '~' . EED_Core_Rest_Api::ee_api_namespace_for_regex . '~',
290
-            array('version')
291
-        );
292
-        if (isset($matches['version'])) {
293
-            return $matches['version'];
294
-        } else {
295
-            return EED_Core_Rest_Api::latest_rest_api_version();
296
-        }
297
-    }
298
-
299
-
300
-    /**
301
-     * Applies the regex to the route, then creates an array using the values of
302
-     * $match_keys as keys (but ignores the full pattern match). Returns the array of matches.
303
-     * For example, if you call
304
-     * parse_route( '/ee/v4.8/events', '~\/ee\/v([^/]*)\/(.*)~', array( 'version', 'model' ) )
305
-     * it will return array( 'version' => '4.8', 'model' => 'events' )
306
-     *
307
-     * @param string $route
308
-     * @param string $regex
309
-     * @param array  $match_keys EXCLUDING matching the entire regex
310
-     * @return array where  $match_keys are the keys (the first value of $match_keys
311
-     *                           becomes the first key of the return value, etc. Eg passing in $match_keys of
312
-     *                           array( 'model', 'id' ), will, if the regex is successful, will return
313
-     *                           array( 'model' => 'foo', 'id' => 'bar' )
314
-     * @throws EE_Error if it couldn't be parsed
315
-     */
316
-    public function parseRoute($route, $regex, $match_keys)
317
-    {
318
-        $indexed_matches = array();
319
-        $success = preg_match($regex, $route, $matches);
320
-        if (is_array($matches)) {
321
-            // skip the overall regex match. Who cares
322
-            for ($i = 1; $i <= count($match_keys); $i++) {
323
-                if (! isset($matches[ $i ])) {
324
-                    $success = false;
325
-                } else {
326
-                    $indexed_matches[ $match_keys[ $i - 1 ] ] = $matches[ $i ];
327
-                }
328
-            }
329
-        }
330
-        if (! $success) {
331
-            throw new EE_Error(
332
-                __('We could not parse the URL. Please contact Event Espresso Support', 'event_espresso'),
333
-                'endpoint_parsing_error'
334
-            );
335
-        }
336
-        return $indexed_matches;
337
-    }
338
-
339
-
340
-    /**
341
-     * Gets the body's params (either from JSON or parsed body), which EXCLUDES the GET params and URL params
342
-     *
343
-     * @param \WP_REST_Request $request
344
-     * @return array
345
-     */
346
-    protected function getBodyParams(\WP_REST_Request $request)
347
-    {
348
-        // $request->get_params();
349
-        return array_merge(
350
-            (array) $request->get_body_params(),
351
-            (array) $request->get_json_params()
352
-        );
353
-        // return array_diff_key(
354
-        //    $request->get_params(),
355
-        //     $request->get_url_params(),
356
-        //     $request->get_query_params()
357
-        // );
358
-    }
25
+	/**
26
+	 * @deprecated use all-caps version
27
+	 */
28
+	// @codingStandardsIgnoreStart
29
+	const header_prefix_for_ee = 'X-EE-';
30
+	// @codingStandardsIgnoreEnd
31
+
32
+	const HEADER_PREFIX_FOR_EE = 'X-EE-';
33
+
34
+	/**
35
+	 * @deprecated use all-caps version instead
36
+	 */
37
+	// @codingStandardsIgnoreStart
38
+	const header_prefix_for_wp = 'X-WP-';
39
+	// @codingStandardsIgnoreEnd
40
+
41
+	const HEADER_PREFIX_FOR_WP = 'X-WP-';
42
+
43
+	/**
44
+	 * Contains debug info we'll send back in the response headers
45
+	 *
46
+	 * @var array
47
+	 */
48
+	protected $debug_info = array();
49
+
50
+	/**
51
+	 * Indicates whether or not the API is in debug mode
52
+	 *
53
+	 * @var boolean
54
+	 */
55
+	protected $debug_mode = false;
56
+
57
+	/**
58
+	 * Indicates the version that was requested
59
+	 *
60
+	 * @var string
61
+	 */
62
+	protected $requested_version;
63
+
64
+	/**
65
+	 * flat array of headers to send in the response
66
+	 *
67
+	 * @var array
68
+	 */
69
+	protected $response_headers = array();
70
+
71
+
72
+	public function __construct()
73
+	{
74
+		$this->debug_mode = EED_Core_Rest_Api::debugMode();
75
+		// we are handling a REST request. Don't show a fancy HTML error message is any error comes up
76
+		add_filter('FHEE__EE_Error__get_error__show_normal_exceptions', '__return_true');
77
+	}
78
+
79
+
80
+	/**
81
+	 * Sets the version the user requested
82
+	 *
83
+	 * @param string $version eg '4.8'
84
+	 */
85
+	public function setRequestedVersion($version)
86
+	{
87
+		$this->requested_version = $version;
88
+	}
89
+
90
+
91
+	/**
92
+	 * Sets some debug info that we'll send back in headers
93
+	 *
94
+	 * @param string       $key
95
+	 * @param string|array $info
96
+	 */
97
+	protected function setDebugInfo($key, $info)
98
+	{
99
+		$this->debug_info[ $key ] = $info;
100
+	}
101
+
102
+
103
+	/**
104
+	 * Sets headers for the response
105
+	 *
106
+	 * @param string       $header_key    , excluding the "X-EE-" part
107
+	 * @param array|string $value         if an array, multiple headers will be added, one
108
+	 *                                    for each key in the array
109
+	 * @param boolean      $use_ee_prefix whether to use the EE prefix on the header, or fallback to
110
+	 *                                    the standard WP one
111
+	 */
112
+	protected function setResponseHeader($header_key, $value, $use_ee_prefix = true)
113
+	{
114
+		if (is_array($value)) {
115
+			foreach ($value as $value_key => $value_value) {
116
+				$this->setResponseHeader($header_key . '[' . $value_key . ']', $value_value);
117
+			}
118
+		} else {
119
+			$prefix = $use_ee_prefix ? Base::HEADER_PREFIX_FOR_EE : Base::HEADER_PREFIX_FOR_WP;
120
+			$this->response_headers[ $prefix . $header_key ] = $value;
121
+		}
122
+	}
123
+
124
+
125
+	/**
126
+	 * Returns a flat array of headers to be added to the response
127
+	 *
128
+	 * @return array
129
+	 */
130
+	protected function getResponseHeaders()
131
+	{
132
+		return apply_filters(
133
+			'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers',
134
+			$this->response_headers,
135
+			$this,
136
+			$this->requested_version
137
+		);
138
+	}
139
+
140
+
141
+	/**
142
+	 * Adds error notices from EE_Error onto the provided \WP_Error
143
+	 *
144
+	 * @param WP_Error $wp_error_response
145
+	 * @return WP_Error
146
+	 */
147
+	protected function addEeErrorsToResponse(WP_Error $wp_error_response)
148
+	{
149
+		$notices_during_checkin = EE_Error::get_raw_notices();
150
+		if (! empty($notices_during_checkin['errors'])) {
151
+			foreach ($notices_during_checkin['errors'] as $error_code => $error_message) {
152
+				$wp_error_response->add(
153
+					sanitize_key($error_code),
154
+					strip_tags($error_message)
155
+				);
156
+			}
157
+		}
158
+		return $wp_error_response;
159
+	}
160
+
161
+
162
+	/**
163
+	 * Sends a response, but also makes sure to attach headers that
164
+	 * are handy for debugging.
165
+	 * Specifically, we assume folks will want to know what exactly was the DB query that got run,
166
+	 * what exactly was the Models query that got run, what capabilities came into play, what fields were omitted from
167
+	 * the response, others?
168
+	 *
169
+	 * @param array|WP_Error|Exception|RestException $response
170
+	 * @return WP_REST_Response
171
+	 */
172
+	public function sendResponse($response)
173
+	{
174
+		if ($response instanceof RestException) {
175
+			$response = new WP_Error($response->getStringCode(), $response->getMessage(), $response->getData());
176
+		}
177
+		if ($response instanceof Exception) {
178
+			$code = $response->getCode() ? $response->getCode() : 'error_occurred';
179
+			$response = new WP_Error($code, $response->getMessage());
180
+		}
181
+		if ($response instanceof WP_Error) {
182
+			$response = $this->addEeErrorsToResponse($response);
183
+			$rest_response = $this->createRestResponseFromWpError($response);
184
+		} else {
185
+			$rest_response = new WP_REST_Response($response, 200);
186
+		}
187
+		$headers = array();
188
+		if ($this->debug_mode && is_array($this->debug_info)) {
189
+			foreach ($this->debug_info as $debug_key => $debug_info) {
190
+				if (is_array($debug_info)) {
191
+					$debug_info = wp_json_encode($debug_info);
192
+				}
193
+				$headers[ 'X-EE4-Debug-' . ucwords($debug_key) ] = $debug_info;
194
+			}
195
+		}
196
+		$headers = array_merge(
197
+			$headers,
198
+			$this->getResponseHeaders(),
199
+			$this->getHeadersFromEeNotices()
200
+		);
201
+		$rest_response->set_headers($headers);
202
+		return $rest_response;
203
+	}
204
+
205
+
206
+	/**
207
+	 * Converts the \WP_Error into `WP_REST_Response.
208
+	 * Mostly this is just a copy-and-paste from \WP_REST_Server::error_to_response
209
+	 * (which is protected)
210
+	 *
211
+	 * @param WP_Error $wp_error
212
+	 * @return WP_REST_Response
213
+	 */
214
+	protected function createRestResponseFromWpError(WP_Error $wp_error)
215
+	{
216
+		$error_data = $wp_error->get_error_data();
217
+		if (is_array($error_data) && isset($error_data['status'])) {
218
+			$status = $error_data['status'];
219
+		} else {
220
+			$status = 500;
221
+		}
222
+		$errors = array();
223
+		foreach ((array) $wp_error->errors as $code => $messages) {
224
+			foreach ((array) $messages as $message) {
225
+				$errors[] = array(
226
+					'code'    => $code,
227
+					'message' => $message,
228
+					'data'    => $wp_error->get_error_data($code),
229
+				);
230
+			}
231
+		}
232
+		$data = isset($errors[0]) ? $errors[0] : array();
233
+		if (count($errors) > 1) {
234
+			// Remove the primary error.
235
+			array_shift($errors);
236
+			$data['additional_errors'] = $errors;
237
+		}
238
+		return new WP_REST_Response($data, $status);
239
+	}
240
+
241
+
242
+	/**
243
+	 * Array of headers derived from EE success, attention, and error messages
244
+	 *
245
+	 * @return array
246
+	 */
247
+	protected function getHeadersFromEeNotices()
248
+	{
249
+		$headers = array();
250
+		$notices = EE_Error::get_raw_notices();
251
+		foreach ($notices as $notice_type => $sub_notices) {
252
+			if (! is_array($sub_notices)) {
253
+				continue;
254
+			}
255
+			foreach ($sub_notices as $notice_code => $sub_notice) {
256
+				$headers[ 'X-EE4-Notices-'
257
+						  . EEH_Inflector::humanize($notice_type)
258
+						  . '['
259
+						  . $notice_code
260
+						  . ']' ] = strip_tags($sub_notice);
261
+			}
262
+		}
263
+		return apply_filters(
264
+			'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_headers_from_ee_notices__return',
265
+			$headers,
266
+			$this->requested_version,
267
+			$notices
268
+		);
269
+	}
270
+
271
+
272
+	/**
273
+	 * Finds which version of the API was requested given the route, and returns it.
274
+	 * eg in a request to "mysite.com/wp-json/ee/v4.8.29/events/123" this would return
275
+	 * "4.8.29".
276
+	 * We should know hte requested version in this model though, so if no route is
277
+	 * provided just use what we set earlier
278
+	 *
279
+	 * @param string $route
280
+	 * @return string
281
+	 */
282
+	public function getRequestedVersion($route = null)
283
+	{
284
+		if ($route === null) {
285
+			return $this->requested_version;
286
+		}
287
+		$matches = $this->parseRoute(
288
+			$route,
289
+			'~' . EED_Core_Rest_Api::ee_api_namespace_for_regex . '~',
290
+			array('version')
291
+		);
292
+		if (isset($matches['version'])) {
293
+			return $matches['version'];
294
+		} else {
295
+			return EED_Core_Rest_Api::latest_rest_api_version();
296
+		}
297
+	}
298
+
299
+
300
+	/**
301
+	 * Applies the regex to the route, then creates an array using the values of
302
+	 * $match_keys as keys (but ignores the full pattern match). Returns the array of matches.
303
+	 * For example, if you call
304
+	 * parse_route( '/ee/v4.8/events', '~\/ee\/v([^/]*)\/(.*)~', array( 'version', 'model' ) )
305
+	 * it will return array( 'version' => '4.8', 'model' => 'events' )
306
+	 *
307
+	 * @param string $route
308
+	 * @param string $regex
309
+	 * @param array  $match_keys EXCLUDING matching the entire regex
310
+	 * @return array where  $match_keys are the keys (the first value of $match_keys
311
+	 *                           becomes the first key of the return value, etc. Eg passing in $match_keys of
312
+	 *                           array( 'model', 'id' ), will, if the regex is successful, will return
313
+	 *                           array( 'model' => 'foo', 'id' => 'bar' )
314
+	 * @throws EE_Error if it couldn't be parsed
315
+	 */
316
+	public function parseRoute($route, $regex, $match_keys)
317
+	{
318
+		$indexed_matches = array();
319
+		$success = preg_match($regex, $route, $matches);
320
+		if (is_array($matches)) {
321
+			// skip the overall regex match. Who cares
322
+			for ($i = 1; $i <= count($match_keys); $i++) {
323
+				if (! isset($matches[ $i ])) {
324
+					$success = false;
325
+				} else {
326
+					$indexed_matches[ $match_keys[ $i - 1 ] ] = $matches[ $i ];
327
+				}
328
+			}
329
+		}
330
+		if (! $success) {
331
+			throw new EE_Error(
332
+				__('We could not parse the URL. Please contact Event Espresso Support', 'event_espresso'),
333
+				'endpoint_parsing_error'
334
+			);
335
+		}
336
+		return $indexed_matches;
337
+	}
338
+
339
+
340
+	/**
341
+	 * Gets the body's params (either from JSON or parsed body), which EXCLUDES the GET params and URL params
342
+	 *
343
+	 * @param \WP_REST_Request $request
344
+	 * @return array
345
+	 */
346
+	protected function getBodyParams(\WP_REST_Request $request)
347
+	{
348
+		// $request->get_params();
349
+		return array_merge(
350
+			(array) $request->get_body_params(),
351
+			(array) $request->get_json_params()
352
+		);
353
+		// return array_diff_key(
354
+		//    $request->get_params(),
355
+		//     $request->get_url_params(),
356
+		//     $request->get_query_params()
357
+		// );
358
+	}
359 359
 }
Please login to merge, or discard this patch.
core/interfaces/line_items/EEI_Line_Item_Display.interface.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -9,12 +9,12 @@
 block discarded – undo
9 9
 interface EEI_Line_Item_Display
10 10
 {
11 11
 
12
-    /**
13
-     * @param EE_Line_Item $line_item
14
-     * @param array        $options
15
-     * @return mixed
16
-     */
17
-    public function display_line_item(EE_Line_Item $line_item, $options = array());
12
+	/**
13
+	 * @param EE_Line_Item $line_item
14
+	 * @param array        $options
15
+	 * @return mixed
16
+	 */
17
+	public function display_line_item(EE_Line_Item $line_item, $options = array());
18 18
 
19 19
 }
20 20
 
Please login to merge, or discard this patch.
events/help_tabs/events_default_settings_max_tickets.help_tab.php 1 patch
Indentation   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@
 block discarded – undo
1 1
 <p>
2 2
     <?php esc_html_e(
3
-        'Use this to control what the default will be for maximum tickets on an order when creating a new event.',
4
-        'event_espresso'
5
-    ); ?>
3
+		'Use this to control what the default will be for maximum tickets on an order when creating a new event.',
4
+		'event_espresso'
5
+	); ?>
6 6
 </p>
7 7
\ No newline at end of file
Please login to merge, or discard this patch.