Completed
Pull Request — master (#331)
by Darren
16:24
created
admin_pages/payments/Payments_Admin_Page.core.php 1 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/libraries/payment_methods/EE_Gateway.lib.php 1 patch
Indentation   +491 added lines, -491 removed lines patch added patch discarded remove patch
@@ -23,495 +23,495 @@
 block discarded – undo
23 23
  */
24 24
 abstract class EE_Gateway
25 25
 {
26
-    /**
27
-     * a constant used as a possible value for $_currencies_supported to indicate
28
-     * that ALL currencies are supported by this gateway
29
-     */
30
-    const all_currencies_supported = 'all_currencies_supported';
31
-    /**
32
-     * Where values are 3-letter currency codes
33
-     *
34
-     * @var array
35
-     */
36
-    protected $_currencies_supported = array();
37
-    /**
38
-     * Whether or not this gateway can support SENDING a refund request (ie, initiated by
39
-     * admin in EE's wp-admin page)
40
-     *
41
-     * @var boolean
42
-     */
43
-    protected $_supports_sending_refunds = false;
44
-
45
-    /**
46
-     * Whether or not this gateway can support RECEIVING a refund request from the payment
47
-     * provider (ie, initiated by admin on the payment prover's website who sends an IPN to EE)
48
-     *
49
-     * @var boolean
50
-     */
51
-    protected $_supports_receiving_refunds = false;
52
-    /**
53
-     * Model for querying for existing payments
54
-     *
55
-     * @var EEMI_Payment
56
-     */
57
-    protected $_pay_model;
58
-
59
-    /**
60
-     * Model used for adding to the payments log
61
-     *
62
-     * @var EEMI_Payment_Log
63
-     */
64
-    protected $_pay_log;
65
-
66
-    /**
67
-     * Used for formatting some input to gateways
68
-     *
69
-     * @var EEHI_Template
70
-     */
71
-    protected $_template;
72
-
73
-    /**
74
-     * Concrete class that implements EEHI_Money, used by most gateways
75
-     *
76
-     * @var EEHI_Money
77
-     */
78
-    protected $_money;
79
-
80
-    /**
81
-     * Concrete class that implements EEHI_Line_Item, used for manipulating the line item tree
82
-     *
83
-     * @var EEHI_Line_Item
84
-     */
85
-    protected $_line_item;
86
-
87
-    /**
88
-     * @var GatewayDataFormatterInterface
89
-     */
90
-    protected $_gateway_data_formatter;
91
-
92
-    /**
93
-     * @var FormatterInterface
94
-     */
95
-    protected $_unsupported_character_remover;
96
-
97
-    /**
98
-     * The ID of the payment method using this gateway
99
-     *
100
-     * @var int
101
-     */
102
-    protected $_ID;
103
-
104
-    /**
105
-     * @var $_debug_mode boolean whether to send requests to teh sandbox site or not
106
-     */
107
-    protected $_debug_mode;
108
-    /**
109
-     *
110
-     * @var string $_name name to show for this payment method
111
-     */
112
-    protected $_name;
113
-    /**
114
-     *
115
-     * @var string name to show fir this payment method to admin-type users
116
-     */
117
-    protected $_admin_name;
118
-
119
-    /**
120
-     * @return EE_Gateway
121
-     */
122
-    public function __construct()
123
-    {
124
-    }
125
-
126
-    /**
127
-     * We don't want to serialize models as they often have circular structures
128
-     * (eg a payment model has a reference to each payment model object; and most
129
-     * payments have a transaction, most transactions have a payment method;
130
-     * most payment methods have a payment method type; most payment method types
131
-     * have a gateway. And if a gateway serializes its models, we start at the
132
-     * beginning again)
133
-     *
134
-     * @return array
135
-     */
136
-    public function __sleep()
137
-    {
138
-        $properties = get_object_vars($this);
139
-        unset($properties['_pay_model'], $properties['_pay_log']);
140
-        return array_keys($properties);
141
-    }
142
-
143
-    /**
144
-     * Returns whether or not this gateway should support SENDING refunds
145
-     * see $_supports_sending_refunds
146
-     *
147
-     * @return boolean
148
-     */
149
-    public function supports_sending_refunds()
150
-    {
151
-        return $this->_supports_sending_refunds;
152
-    }
153
-
154
-    /**
155
-     * Returns whether or not this gateway should support RECEIVING refunds
156
-     * see $_supports_receiving_refunds
157
-     *
158
-     * @return boolean
159
-     */
160
-    public function supports_receiving_refunds()
161
-    {
162
-        return $this->_supports_receiving_refunds;
163
-    }
164
-
165
-
166
-    /**
167
-     * Tries to refund the payment specified, taking into account the extra
168
-     * refund info. Note that if the gateway's _supports_sending_refunds is false,
169
-     * this should just throw an exception.
170
-     *
171
-     * @param EE_Payment $payment
172
-     * @param array      $refund_info
173
-     * @return EE_Payment for the refund
174
-     * @throws EE_Error
175
-     */
176
-    public function do_direct_refund(EE_Payment $payment, $refund_info = null)
177
-    {
178
-        return null;
179
-    }
180
-
181
-
182
-    /**
183
-     * Sets the payment method's settings so the gateway knows where to send the request
184
-     * etc
185
-     *
186
-     * @param array $settings_array
187
-     */
188
-    public function set_settings($settings_array)
189
-    {
190
-        foreach ($settings_array as $name => $value) {
191
-            $property_name = "_" . $name;
192
-            $this->{$property_name} = $value;
193
-        }
194
-    }
195
-
196
-    /**
197
-     * See this class description
198
-     *
199
-     * @param EEMI_Payment $payment_model
200
-     */
201
-    public function set_payment_model($payment_model)
202
-    {
203
-        $this->_pay_model = $payment_model;
204
-    }
205
-
206
-    /**
207
-     * See this class description
208
-     *
209
-     * @param EEMI_Payment_Log $payment_log_model
210
-     */
211
-    public function set_payment_log($payment_log_model)
212
-    {
213
-        $this->_pay_log = $payment_log_model;
214
-    }
215
-
216
-    /**
217
-     * See this class description
218
-     *
219
-     * @param EEHI_Template $template_helper
220
-     */
221
-    public function set_template_helper($template_helper)
222
-    {
223
-        $this->_template = $template_helper;
224
-    }
225
-
226
-    /**
227
-     * See this class description
228
-     *
229
-     * @param EEHI_Line_Item $line_item_helper
230
-     */
231
-    public function set_line_item_helper($line_item_helper)
232
-    {
233
-        $this->_line_item = $line_item_helper;
234
-    }
235
-
236
-    /**
237
-     * See this class description
238
-     *
239
-     * @param EEHI_Money $money_helper
240
-     */
241
-    public function set_money_helper($money_helper)
242
-    {
243
-        $this->_money = $money_helper;
244
-    }
245
-
246
-
247
-    /**
248
-     * Sets the gateway data formatter helper
249
-     *
250
-     * @param GatewayDataFormatterInterface $gateway_data_formatter
251
-     * @throws InvalidEntityException if it's not set properly
252
-     */
253
-    public function set_gateway_data_formatter(GatewayDataFormatterInterface $gateway_data_formatter)
254
-    {
255
-        if (! $gateway_data_formatter instanceof GatewayDataFormatterInterface) {
256
-            throw new InvalidEntityException(
257
-                is_object($gateway_data_formatter)
258
-                    ? get_class($gateway_data_formatter)
259
-                    : esc_html__('Not an object', 'event_espresso'),
260
-                '\\EventEspresso\\core\\services\\payment_methods\\gateways\\GatewayDataFormatterInterface'
261
-            );
262
-        }
263
-        $this->_gateway_data_formatter = $gateway_data_formatter;
264
-    }
265
-
266
-    /**
267
-     * Gets the gateway data formatter
268
-     *
269
-     * @return GatewayDataFormatterInterface
270
-     * @throws InvalidEntityException if it's not set properly
271
-     */
272
-    protected function _get_gateway_formatter()
273
-    {
274
-        if (! $this->_gateway_data_formatter instanceof GatewayDataFormatterInterface) {
275
-            throw new InvalidEntityException(
276
-                is_object($this->_gateway_data_formatter)
277
-                    ? get_class($this->_gateway_data_formatter)
278
-                    : esc_html__('Not an object', 'event_espresso'),
279
-                '\\EventEspresso\\core\\services\\payment_methods\\gateways\\GatewayDataFormatterInterface'
280
-            );
281
-        }
282
-        return $this->_gateway_data_formatter;
283
-    }
284
-
285
-
286
-    /**
287
-     * Sets the helper which will remove unsupported characters for most gateways
288
-     *
289
-     * @param FormatterInterface $formatter
290
-     * @return FormatterInterface
291
-     * @throws InvalidEntityException
292
-     */
293
-    public function set_unsupported_character_remover(FormatterInterface $formatter)
294
-    {
295
-        if (! $formatter instanceof FormatterInterface) {
296
-            throw new InvalidEntityException(
297
-                is_object($formatter)
298
-                    ? get_class($formatter)
299
-                    : esc_html__('Not an object', 'event_espresso'),
300
-                '\\EventEspresso\\core\\services\\formatters\\FormatterInterface'
301
-            );
302
-        }
303
-        $this->_unsupported_character_remover = $formatter;
304
-    }
305
-
306
-    /**
307
-     * Gets the helper which removes characters which gateways might not support, like emojis etc.
308
-     *
309
-     * @return FormatterInterface
310
-     * @throws InvalidEntityException
311
-     */
312
-    protected function _get_unsupported_character_remover()
313
-    {
314
-        if (! $this->_unsupported_character_remover instanceof FormatterInterface) {
315
-            throw new InvalidEntityException(
316
-                is_object($this->_unsupported_character_remover)
317
-                    ? get_class($this->_unsupported_character_remover)
318
-                    : esc_html__('Not an object', 'event_espresso'),
319
-                '\\EventEspresso\\core\\services\\formatters\\FormatterInterface'
320
-            );
321
-        }
322
-        return $this->_unsupported_character_remover;
323
-    }
324
-
325
-
326
-    /**
327
-     * @param $message
328
-     * @param $payment
329
-     */
330
-    public function log($message, $object_logged)
331
-    {
332
-        if ($object_logged instanceof EEI_Payment) {
333
-            $type = 'Payment';
334
-            $id = $object_logged->ID();
335
-        } elseif ($object_logged instanceof EEI_Payment_Method) {
336
-            $type = 'Payment_Method';
337
-            $id = $this->_ID;
338
-        } elseif ($object_logged instanceof EEI_Transaction) {
339
-            $type = 'Transaction';
340
-            $id = $object_logged->ID();
341
-        }
342
-        // only log if we're going to store it for longer than the minimum time
343
-        $reg_config = LoaderFactory::getLoader()->load('EE_Registration_Config');
344
-        if ($reg_config->gateway_log_lifespan !== '1 second') {
345
-            $this->_pay_log->gateway_log($message, $id, $type);
346
-        }
347
-    }
348
-
349
-    /**
350
-     * Formats the amount so it can generally be sent to gateways
351
-     *
352
-     * @param float $amount
353
-     * @return string
354
-     * @deprecated since 4.9.31 insetad use
355
-     *             EventEspresso\core\services\payment_methods\gateways\GatewayDataFormatter::format_currency()
356
-     */
357
-    public function format_currency($amount)
358
-    {
359
-        return $this->_get_gateway_formatter()->formatCurrency($amount);
360
-    }
361
-
362
-    /**
363
-     * Returns either an array of all the currency codes supported,
364
-     * or a string indicating they're all supported (EE_gateway::all_currencies_supported)
365
-     *
366
-     * @return mixed array or string
367
-     */
368
-    public function currencies_supported()
369
-    {
370
-        return $this->_currencies_supported;
371
-    }
372
-
373
-    /**
374
-     * Returns what a simple summing of items and taxes for this transaction. This
375
-     * can be used to determine if some more complex line items, like promotions,
376
-     * surcharges, or cancellations occurred (in which case we might want to forget
377
-     * about creating an itemized list of purchases and instead only send the total due)
378
-     *
379
-     * @param EE_Transaction $transaction
380
-     * @return float
381
-     */
382
-    protected function _sum_items_and_taxes(EE_Transaction $transaction)
383
-    {
384
-        $total_line_item = $transaction->total_line_item();
385
-        $total = 0;
386
-        foreach ($total_line_item->get_items() as $item_line_item) {
387
-            $total += max($item_line_item->total(), 0);
388
-        }
389
-        foreach ($total_line_item->tax_descendants() as $tax_line_item) {
390
-            $total += max($tax_line_item->total(), 0);
391
-        }
392
-        return $total;
393
-    }
394
-
395
-    /**
396
-     * Determines whether or not we can easily itemize the transaction using only
397
-     * items and taxes (ie, no promotions or surcharges or cancellations needed)
398
-     *
399
-     * @param EEI_Payment $payment
400
-     * @return boolean
401
-     */
402
-    protected function _can_easily_itemize_transaction_for(EEI_Payment $payment)
403
-    {
404
-        return $this->_money->compare_floats(
405
-            $this->_sum_items_and_taxes($payment->transaction()),
406
-            $payment->transaction()->total()
407
-        )
408
-               && $this->_money->compare_floats(
409
-                   $payment->amount(),
410
-                   $payment->transaction()->total()
411
-               );
412
-    }
413
-
414
-    /**
415
-     * Handles updating the transaction and any other related data based on the payment.
416
-     * You may be tempted to do this as part of do_direct_payment or handle_payment_update,
417
-     * but doing so on those functions might be too early. It's possible that the changes
418
-     * you make to teh transaction or registration or line items may just get overwritten
419
-     * at that point. Instead, you should store any info you need on the payment during those
420
-     * functions, and use that information at this step, which client code will decide
421
-     * for you when it should be called.
422
-     *
423
-     * @param EE_Payment $payment
424
-     * @return void
425
-     */
426
-    public function update_txn_based_on_payment($payment)
427
-    {
428
-        // maybe update the transaction or line items or registrations
429
-        // but most gateways don't need to do this, because they only update the payment
430
-    }
431
-
432
-    /**
433
-     * Gets the first event for this payment (it's possible that it could be for multiple)
434
-     *
435
-     * @param EEI_Payment $payment
436
-     * @return EEI_Event|null
437
-     * @deprecated since 4.9.31 instead use EEI_Payment::get_first_event()
438
-     */
439
-    protected function _get_first_event_for_payment(EEI_Payment $payment)
440
-    {
441
-        return $payment->get_first_event();
442
-    }
443
-
444
-    /**
445
-     * Gets the name of the first event for which is being paid
446
-     *
447
-     * @param EEI_Payment $payment
448
-     * @return string
449
-     * @deprecated since 4.9.31 instead use EEI_Payment::get_first_event_name()
450
-     */
451
-    protected function _get_first_event_name_for_payment(EEI_Payment $payment)
452
-    {
453
-        return $payment->get_first_event_name();
454
-    }
455
-
456
-    /**
457
-     * Gets the text to use for a gateway's line item name when this is a partial payment
458
-     *
459
-     * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatPartialPaymentLineItemName($payment)
460
-     * @param EE_Payment $payment
461
-     * @return string
462
-     */
463
-    protected function _format_partial_payment_line_item_name(EEI_Payment $payment)
464
-    {
465
-        return $this->_get_gateway_formatter()->formatPartialPaymentLineItemName($payment);
466
-    }
467
-
468
-    /**
469
-     * Gets the text to use for a gateway's line item description when this is a partial payment
470
-     *
471
-     * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatPartialPaymentLineItemDesc()
472
-     * @param EEI_Payment $payment
473
-     * @return string
474
-     */
475
-    protected function _format_partial_payment_line_item_desc(EEI_Payment $payment)
476
-    {
477
-        return $this->_get_gateway_formatter()->formatPartialPaymentLineItemDesc($payment);
478
-    }
479
-
480
-    /**
481
-     * Gets the name to use for a line item when sending line items to the gateway
482
-     *
483
-     * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatLineItemName($line_item,$payment)
484
-     * @param EEI_Line_Item $line_item
485
-     * @param EEI_Payment   $payment
486
-     * @return string
487
-     */
488
-    protected function _format_line_item_name(EEI_Line_Item $line_item, EEI_Payment $payment)
489
-    {
490
-        return $this->_get_gateway_formatter()->formatLineItemName($line_item, $payment);
491
-    }
492
-
493
-    /**
494
-     * Gets the description to use for a line item when sending line items to the gateway
495
-     *
496
-     * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatLineItemDesc($line_item, $payment))
497
-     * @param EEI_Line_Item $line_item
498
-     * @param EEI_Payment   $payment
499
-     * @return string
500
-     */
501
-    protected function _format_line_item_desc(EEI_Line_Item $line_item, EEI_Payment $payment)
502
-    {
503
-        return $this->_get_gateway_formatter()->formatLineItemDesc($line_item, $payment);
504
-    }
505
-
506
-    /**
507
-     * Gets the order description that should generlly be sent to gateways
508
-     *
509
-     * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatOrderDescription($payment)
510
-     * @param EEI_Payment $payment
511
-     * @return type
512
-     */
513
-    protected function _format_order_description(EEI_Payment $payment)
514
-    {
515
-        return $this->_get_gateway_formatter()->formatOrderDescription($payment);
516
-    }
26
+	/**
27
+	 * a constant used as a possible value for $_currencies_supported to indicate
28
+	 * that ALL currencies are supported by this gateway
29
+	 */
30
+	const all_currencies_supported = 'all_currencies_supported';
31
+	/**
32
+	 * Where values are 3-letter currency codes
33
+	 *
34
+	 * @var array
35
+	 */
36
+	protected $_currencies_supported = array();
37
+	/**
38
+	 * Whether or not this gateway can support SENDING a refund request (ie, initiated by
39
+	 * admin in EE's wp-admin page)
40
+	 *
41
+	 * @var boolean
42
+	 */
43
+	protected $_supports_sending_refunds = false;
44
+
45
+	/**
46
+	 * Whether or not this gateway can support RECEIVING a refund request from the payment
47
+	 * provider (ie, initiated by admin on the payment prover's website who sends an IPN to EE)
48
+	 *
49
+	 * @var boolean
50
+	 */
51
+	protected $_supports_receiving_refunds = false;
52
+	/**
53
+	 * Model for querying for existing payments
54
+	 *
55
+	 * @var EEMI_Payment
56
+	 */
57
+	protected $_pay_model;
58
+
59
+	/**
60
+	 * Model used for adding to the payments log
61
+	 *
62
+	 * @var EEMI_Payment_Log
63
+	 */
64
+	protected $_pay_log;
65
+
66
+	/**
67
+	 * Used for formatting some input to gateways
68
+	 *
69
+	 * @var EEHI_Template
70
+	 */
71
+	protected $_template;
72
+
73
+	/**
74
+	 * Concrete class that implements EEHI_Money, used by most gateways
75
+	 *
76
+	 * @var EEHI_Money
77
+	 */
78
+	protected $_money;
79
+
80
+	/**
81
+	 * Concrete class that implements EEHI_Line_Item, used for manipulating the line item tree
82
+	 *
83
+	 * @var EEHI_Line_Item
84
+	 */
85
+	protected $_line_item;
86
+
87
+	/**
88
+	 * @var GatewayDataFormatterInterface
89
+	 */
90
+	protected $_gateway_data_formatter;
91
+
92
+	/**
93
+	 * @var FormatterInterface
94
+	 */
95
+	protected $_unsupported_character_remover;
96
+
97
+	/**
98
+	 * The ID of the payment method using this gateway
99
+	 *
100
+	 * @var int
101
+	 */
102
+	protected $_ID;
103
+
104
+	/**
105
+	 * @var $_debug_mode boolean whether to send requests to teh sandbox site or not
106
+	 */
107
+	protected $_debug_mode;
108
+	/**
109
+	 *
110
+	 * @var string $_name name to show for this payment method
111
+	 */
112
+	protected $_name;
113
+	/**
114
+	 *
115
+	 * @var string name to show fir this payment method to admin-type users
116
+	 */
117
+	protected $_admin_name;
118
+
119
+	/**
120
+	 * @return EE_Gateway
121
+	 */
122
+	public function __construct()
123
+	{
124
+	}
125
+
126
+	/**
127
+	 * We don't want to serialize models as they often have circular structures
128
+	 * (eg a payment model has a reference to each payment model object; and most
129
+	 * payments have a transaction, most transactions have a payment method;
130
+	 * most payment methods have a payment method type; most payment method types
131
+	 * have a gateway. And if a gateway serializes its models, we start at the
132
+	 * beginning again)
133
+	 *
134
+	 * @return array
135
+	 */
136
+	public function __sleep()
137
+	{
138
+		$properties = get_object_vars($this);
139
+		unset($properties['_pay_model'], $properties['_pay_log']);
140
+		return array_keys($properties);
141
+	}
142
+
143
+	/**
144
+	 * Returns whether or not this gateway should support SENDING refunds
145
+	 * see $_supports_sending_refunds
146
+	 *
147
+	 * @return boolean
148
+	 */
149
+	public function supports_sending_refunds()
150
+	{
151
+		return $this->_supports_sending_refunds;
152
+	}
153
+
154
+	/**
155
+	 * Returns whether or not this gateway should support RECEIVING refunds
156
+	 * see $_supports_receiving_refunds
157
+	 *
158
+	 * @return boolean
159
+	 */
160
+	public function supports_receiving_refunds()
161
+	{
162
+		return $this->_supports_receiving_refunds;
163
+	}
164
+
165
+
166
+	/**
167
+	 * Tries to refund the payment specified, taking into account the extra
168
+	 * refund info. Note that if the gateway's _supports_sending_refunds is false,
169
+	 * this should just throw an exception.
170
+	 *
171
+	 * @param EE_Payment $payment
172
+	 * @param array      $refund_info
173
+	 * @return EE_Payment for the refund
174
+	 * @throws EE_Error
175
+	 */
176
+	public function do_direct_refund(EE_Payment $payment, $refund_info = null)
177
+	{
178
+		return null;
179
+	}
180
+
181
+
182
+	/**
183
+	 * Sets the payment method's settings so the gateway knows where to send the request
184
+	 * etc
185
+	 *
186
+	 * @param array $settings_array
187
+	 */
188
+	public function set_settings($settings_array)
189
+	{
190
+		foreach ($settings_array as $name => $value) {
191
+			$property_name = "_" . $name;
192
+			$this->{$property_name} = $value;
193
+		}
194
+	}
195
+
196
+	/**
197
+	 * See this class description
198
+	 *
199
+	 * @param EEMI_Payment $payment_model
200
+	 */
201
+	public function set_payment_model($payment_model)
202
+	{
203
+		$this->_pay_model = $payment_model;
204
+	}
205
+
206
+	/**
207
+	 * See this class description
208
+	 *
209
+	 * @param EEMI_Payment_Log $payment_log_model
210
+	 */
211
+	public function set_payment_log($payment_log_model)
212
+	{
213
+		$this->_pay_log = $payment_log_model;
214
+	}
215
+
216
+	/**
217
+	 * See this class description
218
+	 *
219
+	 * @param EEHI_Template $template_helper
220
+	 */
221
+	public function set_template_helper($template_helper)
222
+	{
223
+		$this->_template = $template_helper;
224
+	}
225
+
226
+	/**
227
+	 * See this class description
228
+	 *
229
+	 * @param EEHI_Line_Item $line_item_helper
230
+	 */
231
+	public function set_line_item_helper($line_item_helper)
232
+	{
233
+		$this->_line_item = $line_item_helper;
234
+	}
235
+
236
+	/**
237
+	 * See this class description
238
+	 *
239
+	 * @param EEHI_Money $money_helper
240
+	 */
241
+	public function set_money_helper($money_helper)
242
+	{
243
+		$this->_money = $money_helper;
244
+	}
245
+
246
+
247
+	/**
248
+	 * Sets the gateway data formatter helper
249
+	 *
250
+	 * @param GatewayDataFormatterInterface $gateway_data_formatter
251
+	 * @throws InvalidEntityException if it's not set properly
252
+	 */
253
+	public function set_gateway_data_formatter(GatewayDataFormatterInterface $gateway_data_formatter)
254
+	{
255
+		if (! $gateway_data_formatter instanceof GatewayDataFormatterInterface) {
256
+			throw new InvalidEntityException(
257
+				is_object($gateway_data_formatter)
258
+					? get_class($gateway_data_formatter)
259
+					: esc_html__('Not an object', 'event_espresso'),
260
+				'\\EventEspresso\\core\\services\\payment_methods\\gateways\\GatewayDataFormatterInterface'
261
+			);
262
+		}
263
+		$this->_gateway_data_formatter = $gateway_data_formatter;
264
+	}
265
+
266
+	/**
267
+	 * Gets the gateway data formatter
268
+	 *
269
+	 * @return GatewayDataFormatterInterface
270
+	 * @throws InvalidEntityException if it's not set properly
271
+	 */
272
+	protected function _get_gateway_formatter()
273
+	{
274
+		if (! $this->_gateway_data_formatter instanceof GatewayDataFormatterInterface) {
275
+			throw new InvalidEntityException(
276
+				is_object($this->_gateway_data_formatter)
277
+					? get_class($this->_gateway_data_formatter)
278
+					: esc_html__('Not an object', 'event_espresso'),
279
+				'\\EventEspresso\\core\\services\\payment_methods\\gateways\\GatewayDataFormatterInterface'
280
+			);
281
+		}
282
+		return $this->_gateway_data_formatter;
283
+	}
284
+
285
+
286
+	/**
287
+	 * Sets the helper which will remove unsupported characters for most gateways
288
+	 *
289
+	 * @param FormatterInterface $formatter
290
+	 * @return FormatterInterface
291
+	 * @throws InvalidEntityException
292
+	 */
293
+	public function set_unsupported_character_remover(FormatterInterface $formatter)
294
+	{
295
+		if (! $formatter instanceof FormatterInterface) {
296
+			throw new InvalidEntityException(
297
+				is_object($formatter)
298
+					? get_class($formatter)
299
+					: esc_html__('Not an object', 'event_espresso'),
300
+				'\\EventEspresso\\core\\services\\formatters\\FormatterInterface'
301
+			);
302
+		}
303
+		$this->_unsupported_character_remover = $formatter;
304
+	}
305
+
306
+	/**
307
+	 * Gets the helper which removes characters which gateways might not support, like emojis etc.
308
+	 *
309
+	 * @return FormatterInterface
310
+	 * @throws InvalidEntityException
311
+	 */
312
+	protected function _get_unsupported_character_remover()
313
+	{
314
+		if (! $this->_unsupported_character_remover instanceof FormatterInterface) {
315
+			throw new InvalidEntityException(
316
+				is_object($this->_unsupported_character_remover)
317
+					? get_class($this->_unsupported_character_remover)
318
+					: esc_html__('Not an object', 'event_espresso'),
319
+				'\\EventEspresso\\core\\services\\formatters\\FormatterInterface'
320
+			);
321
+		}
322
+		return $this->_unsupported_character_remover;
323
+	}
324
+
325
+
326
+	/**
327
+	 * @param $message
328
+	 * @param $payment
329
+	 */
330
+	public function log($message, $object_logged)
331
+	{
332
+		if ($object_logged instanceof EEI_Payment) {
333
+			$type = 'Payment';
334
+			$id = $object_logged->ID();
335
+		} elseif ($object_logged instanceof EEI_Payment_Method) {
336
+			$type = 'Payment_Method';
337
+			$id = $this->_ID;
338
+		} elseif ($object_logged instanceof EEI_Transaction) {
339
+			$type = 'Transaction';
340
+			$id = $object_logged->ID();
341
+		}
342
+		// only log if we're going to store it for longer than the minimum time
343
+		$reg_config = LoaderFactory::getLoader()->load('EE_Registration_Config');
344
+		if ($reg_config->gateway_log_lifespan !== '1 second') {
345
+			$this->_pay_log->gateway_log($message, $id, $type);
346
+		}
347
+	}
348
+
349
+	/**
350
+	 * Formats the amount so it can generally be sent to gateways
351
+	 *
352
+	 * @param float $amount
353
+	 * @return string
354
+	 * @deprecated since 4.9.31 insetad use
355
+	 *             EventEspresso\core\services\payment_methods\gateways\GatewayDataFormatter::format_currency()
356
+	 */
357
+	public function format_currency($amount)
358
+	{
359
+		return $this->_get_gateway_formatter()->formatCurrency($amount);
360
+	}
361
+
362
+	/**
363
+	 * Returns either an array of all the currency codes supported,
364
+	 * or a string indicating they're all supported (EE_gateway::all_currencies_supported)
365
+	 *
366
+	 * @return mixed array or string
367
+	 */
368
+	public function currencies_supported()
369
+	{
370
+		return $this->_currencies_supported;
371
+	}
372
+
373
+	/**
374
+	 * Returns what a simple summing of items and taxes for this transaction. This
375
+	 * can be used to determine if some more complex line items, like promotions,
376
+	 * surcharges, or cancellations occurred (in which case we might want to forget
377
+	 * about creating an itemized list of purchases and instead only send the total due)
378
+	 *
379
+	 * @param EE_Transaction $transaction
380
+	 * @return float
381
+	 */
382
+	protected function _sum_items_and_taxes(EE_Transaction $transaction)
383
+	{
384
+		$total_line_item = $transaction->total_line_item();
385
+		$total = 0;
386
+		foreach ($total_line_item->get_items() as $item_line_item) {
387
+			$total += max($item_line_item->total(), 0);
388
+		}
389
+		foreach ($total_line_item->tax_descendants() as $tax_line_item) {
390
+			$total += max($tax_line_item->total(), 0);
391
+		}
392
+		return $total;
393
+	}
394
+
395
+	/**
396
+	 * Determines whether or not we can easily itemize the transaction using only
397
+	 * items and taxes (ie, no promotions or surcharges or cancellations needed)
398
+	 *
399
+	 * @param EEI_Payment $payment
400
+	 * @return boolean
401
+	 */
402
+	protected function _can_easily_itemize_transaction_for(EEI_Payment $payment)
403
+	{
404
+		return $this->_money->compare_floats(
405
+			$this->_sum_items_and_taxes($payment->transaction()),
406
+			$payment->transaction()->total()
407
+		)
408
+			   && $this->_money->compare_floats(
409
+				   $payment->amount(),
410
+				   $payment->transaction()->total()
411
+			   );
412
+	}
413
+
414
+	/**
415
+	 * Handles updating the transaction and any other related data based on the payment.
416
+	 * You may be tempted to do this as part of do_direct_payment or handle_payment_update,
417
+	 * but doing so on those functions might be too early. It's possible that the changes
418
+	 * you make to teh transaction or registration or line items may just get overwritten
419
+	 * at that point. Instead, you should store any info you need on the payment during those
420
+	 * functions, and use that information at this step, which client code will decide
421
+	 * for you when it should be called.
422
+	 *
423
+	 * @param EE_Payment $payment
424
+	 * @return void
425
+	 */
426
+	public function update_txn_based_on_payment($payment)
427
+	{
428
+		// maybe update the transaction or line items or registrations
429
+		// but most gateways don't need to do this, because they only update the payment
430
+	}
431
+
432
+	/**
433
+	 * Gets the first event for this payment (it's possible that it could be for multiple)
434
+	 *
435
+	 * @param EEI_Payment $payment
436
+	 * @return EEI_Event|null
437
+	 * @deprecated since 4.9.31 instead use EEI_Payment::get_first_event()
438
+	 */
439
+	protected function _get_first_event_for_payment(EEI_Payment $payment)
440
+	{
441
+		return $payment->get_first_event();
442
+	}
443
+
444
+	/**
445
+	 * Gets the name of the first event for which is being paid
446
+	 *
447
+	 * @param EEI_Payment $payment
448
+	 * @return string
449
+	 * @deprecated since 4.9.31 instead use EEI_Payment::get_first_event_name()
450
+	 */
451
+	protected function _get_first_event_name_for_payment(EEI_Payment $payment)
452
+	{
453
+		return $payment->get_first_event_name();
454
+	}
455
+
456
+	/**
457
+	 * Gets the text to use for a gateway's line item name when this is a partial payment
458
+	 *
459
+	 * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatPartialPaymentLineItemName($payment)
460
+	 * @param EE_Payment $payment
461
+	 * @return string
462
+	 */
463
+	protected function _format_partial_payment_line_item_name(EEI_Payment $payment)
464
+	{
465
+		return $this->_get_gateway_formatter()->formatPartialPaymentLineItemName($payment);
466
+	}
467
+
468
+	/**
469
+	 * Gets the text to use for a gateway's line item description when this is a partial payment
470
+	 *
471
+	 * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatPartialPaymentLineItemDesc()
472
+	 * @param EEI_Payment $payment
473
+	 * @return string
474
+	 */
475
+	protected function _format_partial_payment_line_item_desc(EEI_Payment $payment)
476
+	{
477
+		return $this->_get_gateway_formatter()->formatPartialPaymentLineItemDesc($payment);
478
+	}
479
+
480
+	/**
481
+	 * Gets the name to use for a line item when sending line items to the gateway
482
+	 *
483
+	 * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatLineItemName($line_item,$payment)
484
+	 * @param EEI_Line_Item $line_item
485
+	 * @param EEI_Payment   $payment
486
+	 * @return string
487
+	 */
488
+	protected function _format_line_item_name(EEI_Line_Item $line_item, EEI_Payment $payment)
489
+	{
490
+		return $this->_get_gateway_formatter()->formatLineItemName($line_item, $payment);
491
+	}
492
+
493
+	/**
494
+	 * Gets the description to use for a line item when sending line items to the gateway
495
+	 *
496
+	 * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatLineItemDesc($line_item, $payment))
497
+	 * @param EEI_Line_Item $line_item
498
+	 * @param EEI_Payment   $payment
499
+	 * @return string
500
+	 */
501
+	protected function _format_line_item_desc(EEI_Line_Item $line_item, EEI_Payment $payment)
502
+	{
503
+		return $this->_get_gateway_formatter()->formatLineItemDesc($line_item, $payment);
504
+	}
505
+
506
+	/**
507
+	 * Gets the order description that should generlly be sent to gateways
508
+	 *
509
+	 * @deprecated since 4.9.31 instead use $this->_get_gateway_formatter()->formatOrderDescription($payment)
510
+	 * @param EEI_Payment $payment
511
+	 * @return type
512
+	 */
513
+	protected function _format_order_description(EEI_Payment $payment)
514
+	{
515
+		return $this->_get_gateway_formatter()->formatOrderDescription($payment);
516
+	}
517 517
 }
Please login to merge, or discard this patch.
admin_pages/payments/templates/payment_log_details.template.php 1 patch
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -36,17 +36,17 @@  discard block
 block discarded – undo
36 36
                 </th>
37 37
                 <td>
38 38
                     <?php
39
-                    if ($payment_log->object() instanceof EE_Transaction) {
40
-                        esc_html_e('Unknown', 'event_espresso');
41
-                    } else {
42
-                        echo $payment_method
43
-                        ? $payment_method->admin_name()
44
-                        : esc_html__(
45
-                            "No Longer Exists",
46
-                            'event_espresso'
47
-                        );
48
-                    }
49
-                    ?>
39
+					if ($payment_log->object() instanceof EE_Transaction) {
40
+						esc_html_e('Unknown', 'event_espresso');
41
+					} else {
42
+						echo $payment_method
43
+						? $payment_method->admin_name()
44
+						: esc_html__(
45
+							"No Longer Exists",
46
+							'event_espresso'
47
+						);
48
+					}
49
+					?>
50 50
 
51 51
                 </td>
52 52
             </tr>
@@ -69,9 +69,9 @@  discard block
 block discarded – undo
69 69
                 </th>
70 70
                 <td>
71 71
                     <?php echo $payment_log->e(
72
-                        'LOG_message',
73
-                        'as_table'
74
-                    );// EEH_Template::layout_array_as_table($payment_log->content())?>
72
+						'LOG_message',
73
+						'as_table'
74
+					);// EEH_Template::layout_array_as_table($payment_log->content())?>
75 75
                 </td>
76 76
             </tr>
77 77
             </tbody>
Please login to merge, or discard this patch.
admin_pages/payments/Payment_Log_Admin_List_Table.class.php 1 patch
Indentation   +225 added lines, -225 removed lines patch added patch discarded remove patch
@@ -13,111 +13,111 @@  discard block
 block discarded – undo
13 13
 class Payment_Log_Admin_List_Table extends EE_Admin_List_Table
14 14
 {
15 15
 
16
-    /**
17
-     * @param \EE_Admin_Page $admin_page
18
-     * @return Payment_Log_Admin_List_Table
19
-     */
20
-    public function __construct($admin_page)
21
-    {
22
-        parent::__construct($admin_page);
23
-    }
24
-
25
-
26
-    /**
27
-     * _setup_data
28
-     *
29
-     * @return void
30
-     */
31
-    protected function _setup_data()
32
-    {
33
-        $this->_data = $this->_admin_page->get_payment_logs($this->_per_page, $this->_current_page);
34
-        // if (isset($this->_req_data['status']) && $this->_req_data['status'] == 'trash') {
35
-        //     $this->_data = $this->_admin_page->get_trashed_questions($this->_per_page, $this->_current_page, false);
36
-        // } else {
37
-        //     $this->_data = $this->_admin_page->get_questions($this->_per_page, $this->_current_page, false);
38
-        // }
39
-        $this->_all_data_count = $this->_admin_page->get_payment_logs($this->_per_page, $this->_current_page, true);
40
-        add_action(
41
-            'AHEE__EE_Admin_List_Table__extra_tablenav__after_bottom_buttons',
42
-            array($this, 'add_download_logs_checkbox')
43
-        );
44
-    }
45
-
46
-
47
-    /**
48
-     * add_download_logs_checkbox
49
-     * adds a checkbox to the bottom of the list table, instead of at the top with the rest of the filters
50
-     *
51
-     * @return void
52
-     */
53
-    public function add_download_logs_checkbox()
54
-    {
55
-        echo "<input type='submit' class='button-primary' id='download_results' name='download_results' value='"
56
-             . __(
57
-                 'Download Results',
58
-                 'event_espresso'
59
-             ) . "'>";
60
-    }
61
-
62
-
63
-    /**
64
-     * _set_properties
65
-     *
66
-     * @return void
67
-     */
68
-    protected function _set_properties()
69
-    {
70
-        $this->_wp_list_args = array(
71
-            'singular' => __('payment log', 'event_espresso'),
72
-            'plural'   => __('payment logs', 'event_espresso'),
73
-            'ajax'     => true, // for now,
74
-            'screen'   => $this->_admin_page->get_current_screen()->id,
75
-        );
76
-        $this->_columns = array(
77
-            'cb'       => '<input type="checkbox" />',
78
-            'id'       => __('ID', 'event_espresso'),
79
-            'LOG_time' => __('Time', 'event_espresso'),
80
-            'PMD_ID'   => __('Payment Method', 'event_espresso'),
81
-            'TXN_ID'   => __('Transaction ID', 'event_espresso'),
82
-        );
83
-        $this->_sortable_columns = array(
84
-            'LOG_time' => array('LOG_time' => true),
85
-        );
86
-        $this->_hidden_columns = array();
87
-    }
88
-
89
-
90
-    /**
91
-     * _get_table_filters
92
-     *
93
-     * @return array
94
-     */
95
-    protected function _get_table_filters()
96
-    {
97
-        $filters = array();
98
-        // todo we're currently using old functions here. We need to move things into the Events_Admin_Page() class as methods.
99
-        $payment_methods = EEM_Payment_Method::instance()->get_all();
100
-        $payment_method_names = array(
101
-            array('id' => 'all', 'text' => __("All", 'event_espresso')),
102
-            array('id' => '0', 'text' => __("Unknown Payment Method", 'event_espresso')),
103
-        );
104
-        foreach ($payment_methods as $payment_method) {
105
-            $payment_method_names[] = array('id' => $payment_method->ID(), 'text' => $payment_method->admin_name());
106
-        }
107
-        $filters[] = EEH_Form_Fields::select_input(
108
-            '_payment_method',
109
-            $payment_method_names,
110
-            isset($this->_req_data['_payment_method'])
111
-                ? $this->_req_data['_payment_method'] : 'all'
112
-        );
113
-        $start_date = isset($this->_req_data['payment-filter-start-date']) ? wp_strip_all_tags(
114
-            $this->_req_data['payment-filter-start-date']
115
-        ) : date('m/d/Y', strtotime('-6 months'));
116
-        $end_date = isset($this->_req_data['payment-filter-end-date']) ? wp_strip_all_tags(
117
-            $this->_req_data['payment-filter-end-date']
118
-        ) : date('m/d/Y');
119
-        ob_start();
120
-        ?>
16
+	/**
17
+	 * @param \EE_Admin_Page $admin_page
18
+	 * @return Payment_Log_Admin_List_Table
19
+	 */
20
+	public function __construct($admin_page)
21
+	{
22
+		parent::__construct($admin_page);
23
+	}
24
+
25
+
26
+	/**
27
+	 * _setup_data
28
+	 *
29
+	 * @return void
30
+	 */
31
+	protected function _setup_data()
32
+	{
33
+		$this->_data = $this->_admin_page->get_payment_logs($this->_per_page, $this->_current_page);
34
+		// if (isset($this->_req_data['status']) && $this->_req_data['status'] == 'trash') {
35
+		//     $this->_data = $this->_admin_page->get_trashed_questions($this->_per_page, $this->_current_page, false);
36
+		// } else {
37
+		//     $this->_data = $this->_admin_page->get_questions($this->_per_page, $this->_current_page, false);
38
+		// }
39
+		$this->_all_data_count = $this->_admin_page->get_payment_logs($this->_per_page, $this->_current_page, true);
40
+		add_action(
41
+			'AHEE__EE_Admin_List_Table__extra_tablenav__after_bottom_buttons',
42
+			array($this, 'add_download_logs_checkbox')
43
+		);
44
+	}
45
+
46
+
47
+	/**
48
+	 * add_download_logs_checkbox
49
+	 * adds a checkbox to the bottom of the list table, instead of at the top with the rest of the filters
50
+	 *
51
+	 * @return void
52
+	 */
53
+	public function add_download_logs_checkbox()
54
+	{
55
+		echo "<input type='submit' class='button-primary' id='download_results' name='download_results' value='"
56
+			 . __(
57
+				 'Download Results',
58
+				 'event_espresso'
59
+			 ) . "'>";
60
+	}
61
+
62
+
63
+	/**
64
+	 * _set_properties
65
+	 *
66
+	 * @return void
67
+	 */
68
+	protected function _set_properties()
69
+	{
70
+		$this->_wp_list_args = array(
71
+			'singular' => __('payment log', 'event_espresso'),
72
+			'plural'   => __('payment logs', 'event_espresso'),
73
+			'ajax'     => true, // for now,
74
+			'screen'   => $this->_admin_page->get_current_screen()->id,
75
+		);
76
+		$this->_columns = array(
77
+			'cb'       => '<input type="checkbox" />',
78
+			'id'       => __('ID', 'event_espresso'),
79
+			'LOG_time' => __('Time', 'event_espresso'),
80
+			'PMD_ID'   => __('Payment Method', 'event_espresso'),
81
+			'TXN_ID'   => __('Transaction ID', 'event_espresso'),
82
+		);
83
+		$this->_sortable_columns = array(
84
+			'LOG_time' => array('LOG_time' => true),
85
+		);
86
+		$this->_hidden_columns = array();
87
+	}
88
+
89
+
90
+	/**
91
+	 * _get_table_filters
92
+	 *
93
+	 * @return array
94
+	 */
95
+	protected function _get_table_filters()
96
+	{
97
+		$filters = array();
98
+		// todo we're currently using old functions here. We need to move things into the Events_Admin_Page() class as methods.
99
+		$payment_methods = EEM_Payment_Method::instance()->get_all();
100
+		$payment_method_names = array(
101
+			array('id' => 'all', 'text' => __("All", 'event_espresso')),
102
+			array('id' => '0', 'text' => __("Unknown Payment Method", 'event_espresso')),
103
+		);
104
+		foreach ($payment_methods as $payment_method) {
105
+			$payment_method_names[] = array('id' => $payment_method->ID(), 'text' => $payment_method->admin_name());
106
+		}
107
+		$filters[] = EEH_Form_Fields::select_input(
108
+			'_payment_method',
109
+			$payment_method_names,
110
+			isset($this->_req_data['_payment_method'])
111
+				? $this->_req_data['_payment_method'] : 'all'
112
+		);
113
+		$start_date = isset($this->_req_data['payment-filter-start-date']) ? wp_strip_all_tags(
114
+			$this->_req_data['payment-filter-start-date']
115
+		) : date('m/d/Y', strtotime('-6 months'));
116
+		$end_date = isset($this->_req_data['payment-filter-end-date']) ? wp_strip_all_tags(
117
+			$this->_req_data['payment-filter-end-date']
118
+		) : date('m/d/Y');
119
+		ob_start();
120
+		?>
121 121
         <label for="txn-filter-start-date"><?php _e('Display Transactions from ', 'event_espresso'); ?></label>
122 122
         <input id="payment-filter-start-date" class="datepicker" type="text" value="<?php echo $start_date; ?>"
123 123
                name="payment-filter-start-date" size="15"/>
@@ -125,124 +125,124 @@  discard block
 block discarded – undo
125 125
         <input id="payment-filter-end-date" class="datepicker" type="text" value="<?php echo $end_date; ?>"
126 126
                name="payment-filter-end-date" size="15"/>
127 127
         <?php
128
-        $filters[] = ob_get_clean();
129
-        return $filters;
130
-    }
131
-
132
-
133
-    /**
134
-     * _add_view_counts
135
-     *
136
-     * @return void
137
-     */
138
-    protected function _add_view_counts()
139
-    {
140
-        $this->_views['all']['count'] = $this->_admin_page->get_payment_logs(
141
-            $this->_per_page,
142
-            $this->_current_page,
143
-            true
144
-        );
145
-    }
146
-
147
-
148
-    /**
149
-     * column_cb
150
-     *
151
-     * @param \EE_Change_Log $item
152
-     * @return string
153
-     */
154
-    public function column_cb($item)
155
-    {
156
-        return sprintf('<input type="checkbox" class="option_id" name="checkbox[%1$d]" value="%1$d" />', $item->ID());
157
-    }
158
-
159
-
160
-    /**
161
-     * column_id
162
-     *
163
-     * @param \EE_Change_Log $item
164
-     * @return string
165
-     */
166
-    public function column_id(EE_Change_Log $item)
167
-    {
168
-        $details_query_args = array(
169
-            'action' => 'payment_log_details',
170
-            'ID'     => $item->ID(),
171
-        );
172
-        $url = EE_Admin_Page::add_query_args_and_nonce($details_query_args, EE_PAYMENTS_ADMIN_URL);
173
-        return "<a href='$url'>{$item->ID()}</a>";
174
-    }
175
-
176
-
177
-    /**
178
-     * column_LOG_time
179
-     *
180
-     * @param \EE_Change_Log $item
181
-     * @return string
182
-     */
183
-    public function column_LOG_time(EE_Change_Log $item)
184
-    {
185
-        return $item->get_datetime('LOG_time');
186
-    }
187
-
188
-
189
-    /**
190
-     * column_PMD_ID
191
-     *
192
-     * @param \EE_Change_Log $item
193
-     * @return string
194
-     */
195
-    public function column_PMD_ID(EE_Change_Log $item)
196
-    {
197
-        if ($item->object() instanceof EE_Payment_Method) {
198
-            return $item->object()->admin_name();
199
-        } elseif ($item->object() instanceof EE_Payment && $item->object()->payment_method()) {
200
-            return $item->object()->payment_method()->admin_name();
201
-        } elseif ($item->object() instanceof EE_Transaction) {
202
-            return esc_html__('Unknown', 'event_espresso');
203
-        } else {
204
-            return esc_html__("No longer exists", 'event_espresso');
205
-        }
206
-    }
207
-
208
-
209
-    /**
210
-     * column_TXN_ID
211
-     *
212
-     * @param \EE_Change_Log $item
213
-     * @return string
214
-     */
215
-    public function column_TXN_ID(EE_Change_Log $item)
216
-    {
217
-        if ($item->object() instanceof EE_Payment) {
218
-            $transaction_id = $item->object()->TXN_ID();
219
-        } elseif ($item->object() instanceof EE_Transaction) {
220
-            $transaction_id = $item->object()->ID();
221
-        } else {
222
-            $transaction_id = null;
223
-        }
224
-        if ($transaction_id
225
-            && EE_Registry::instance()->CAP->current_user_can(
226
-                'ee_read_transaction',
227
-                'espresso_transactions_view_transaction',
228
-                $transaction_id
229
-            )) {
230
-            $view_txn_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
231
-                array('action' => 'view_transaction', 'TXN_ID' => $transaction_id),
232
-                TXN_ADMIN_URL
233
-            );
234
-            return '<a href="'
235
-                   . $view_txn_lnk_url
236
-                   . '"  title="'
237
-                   . sprintf(
238
-                       esc_attr__('click to view transaction #%s', 'event_espresso'),
239
-                       $transaction_id
240
-                   )
241
-                   . '">'
242
-                   . sprintf(esc_html__('view txn %s', 'event_espresso'), $transaction_id)
243
-                   . '</a>';
244
-        }
245
-        // No transaction id or use can not view the transaction.
246
-        return __("Unable to find transaction", 'event_espresso');
247
-    }
128
+		$filters[] = ob_get_clean();
129
+		return $filters;
130
+	}
131
+
132
+
133
+	/**
134
+	 * _add_view_counts
135
+	 *
136
+	 * @return void
137
+	 */
138
+	protected function _add_view_counts()
139
+	{
140
+		$this->_views['all']['count'] = $this->_admin_page->get_payment_logs(
141
+			$this->_per_page,
142
+			$this->_current_page,
143
+			true
144
+		);
145
+	}
146
+
147
+
148
+	/**
149
+	 * column_cb
150
+	 *
151
+	 * @param \EE_Change_Log $item
152
+	 * @return string
153
+	 */
154
+	public function column_cb($item)
155
+	{
156
+		return sprintf('<input type="checkbox" class="option_id" name="checkbox[%1$d]" value="%1$d" />', $item->ID());
157
+	}
158
+
159
+
160
+	/**
161
+	 * column_id
162
+	 *
163
+	 * @param \EE_Change_Log $item
164
+	 * @return string
165
+	 */
166
+	public function column_id(EE_Change_Log $item)
167
+	{
168
+		$details_query_args = array(
169
+			'action' => 'payment_log_details',
170
+			'ID'     => $item->ID(),
171
+		);
172
+		$url = EE_Admin_Page::add_query_args_and_nonce($details_query_args, EE_PAYMENTS_ADMIN_URL);
173
+		return "<a href='$url'>{$item->ID()}</a>";
174
+	}
175
+
176
+
177
+	/**
178
+	 * column_LOG_time
179
+	 *
180
+	 * @param \EE_Change_Log $item
181
+	 * @return string
182
+	 */
183
+	public function column_LOG_time(EE_Change_Log $item)
184
+	{
185
+		return $item->get_datetime('LOG_time');
186
+	}
187
+
188
+
189
+	/**
190
+	 * column_PMD_ID
191
+	 *
192
+	 * @param \EE_Change_Log $item
193
+	 * @return string
194
+	 */
195
+	public function column_PMD_ID(EE_Change_Log $item)
196
+	{
197
+		if ($item->object() instanceof EE_Payment_Method) {
198
+			return $item->object()->admin_name();
199
+		} elseif ($item->object() instanceof EE_Payment && $item->object()->payment_method()) {
200
+			return $item->object()->payment_method()->admin_name();
201
+		} elseif ($item->object() instanceof EE_Transaction) {
202
+			return esc_html__('Unknown', 'event_espresso');
203
+		} else {
204
+			return esc_html__("No longer exists", 'event_espresso');
205
+		}
206
+	}
207
+
208
+
209
+	/**
210
+	 * column_TXN_ID
211
+	 *
212
+	 * @param \EE_Change_Log $item
213
+	 * @return string
214
+	 */
215
+	public function column_TXN_ID(EE_Change_Log $item)
216
+	{
217
+		if ($item->object() instanceof EE_Payment) {
218
+			$transaction_id = $item->object()->TXN_ID();
219
+		} elseif ($item->object() instanceof EE_Transaction) {
220
+			$transaction_id = $item->object()->ID();
221
+		} else {
222
+			$transaction_id = null;
223
+		}
224
+		if ($transaction_id
225
+			&& EE_Registry::instance()->CAP->current_user_can(
226
+				'ee_read_transaction',
227
+				'espresso_transactions_view_transaction',
228
+				$transaction_id
229
+			)) {
230
+			$view_txn_lnk_url = EE_Admin_Page::add_query_args_and_nonce(
231
+				array('action' => 'view_transaction', 'TXN_ID' => $transaction_id),
232
+				TXN_ADMIN_URL
233
+			);
234
+			return '<a href="'
235
+				   . $view_txn_lnk_url
236
+				   . '"  title="'
237
+				   . sprintf(
238
+					   esc_attr__('click to view transaction #%s', 'event_espresso'),
239
+					   $transaction_id
240
+				   )
241
+				   . '">'
242
+				   . sprintf(esc_html__('view txn %s', 'event_espresso'), $transaction_id)
243
+				   . '</a>';
244
+		}
245
+		// No transaction id or use can not view the transaction.
246
+		return __("Unable to find transaction", 'event_espresso');
247
+	}
248 248
 }
Please login to merge, or discard this patch.
espresso.php 1 patch
Indentation   +80 added lines, -80 removed lines patch added patch discarded remove patch
@@ -38,103 +38,103 @@
 block discarded – undo
38 38
  * @since           4.0
39 39
  */
40 40
 if (function_exists('espresso_version')) {
41
-    if (! function_exists('espresso_duplicate_plugin_error')) {
42
-        /**
43
-         *    espresso_duplicate_plugin_error
44
-         *    displays if more than one version of EE is activated at the same time
45
-         */
46
-        function espresso_duplicate_plugin_error()
47
-        {
48
-            ?>
41
+	if (! function_exists('espresso_duplicate_plugin_error')) {
42
+		/**
43
+		 *    espresso_duplicate_plugin_error
44
+		 *    displays if more than one version of EE is activated at the same time
45
+		 */
46
+		function espresso_duplicate_plugin_error()
47
+		{
48
+			?>
49 49
             <div class="error">
50 50
                 <p>
51 51
                     <?php
52
-                    echo esc_html__(
53
-                        'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
-                        'event_espresso'
55
-                    ); ?>
52
+					echo esc_html__(
53
+						'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
+						'event_espresso'
55
+					); ?>
56 56
                 </p>
57 57
             </div>
58 58
             <?php
59
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
60
-        }
61
-    }
62
-    add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
59
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
60
+		}
61
+	}
62
+	add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
63 63
 } else {
64
-    define('EE_MIN_PHP_VER_REQUIRED', '5.4.0');
65
-    if (! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
-        /**
67
-         * espresso_minimum_php_version_error
68
-         *
69
-         * @return void
70
-         */
71
-        function espresso_minimum_php_version_error()
72
-        {
73
-            ?>
64
+	define('EE_MIN_PHP_VER_REQUIRED', '5.4.0');
65
+	if (! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
+		/**
67
+		 * espresso_minimum_php_version_error
68
+		 *
69
+		 * @return void
70
+		 */
71
+		function espresso_minimum_php_version_error()
72
+		{
73
+			?>
74 74
             <div class="error">
75 75
                 <p>
76 76
                     <?php
77
-                    printf(
78
-                        esc_html__(
79
-                            'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
-                            'event_espresso'
81
-                        ),
82
-                        EE_MIN_PHP_VER_REQUIRED,
83
-                        PHP_VERSION,
84
-                        '<br/>',
85
-                        '<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
-                    );
87
-                    ?>
77
+					printf(
78
+						esc_html__(
79
+							'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
+							'event_espresso'
81
+						),
82
+						EE_MIN_PHP_VER_REQUIRED,
83
+						PHP_VERSION,
84
+						'<br/>',
85
+						'<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
+					);
87
+					?>
88 88
                 </p>
89 89
             </div>
90 90
             <?php
91
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
92
-        }
91
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
92
+		}
93 93
 
94
-        add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
-    } else {
96
-        define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
97
-        /**
98
-         * espresso_version
99
-         * Returns the plugin version
100
-         *
101
-         * @return string
102
-         */
103
-        function espresso_version()
104
-        {
105
-            return apply_filters('FHEE__espresso__espresso_version', '4.9.65.rc.010');
106
-        }
94
+		add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
+	} else {
96
+		define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
97
+		/**
98
+		 * espresso_version
99
+		 * Returns the plugin version
100
+		 *
101
+		 * @return string
102
+		 */
103
+		function espresso_version()
104
+		{
105
+			return apply_filters('FHEE__espresso__espresso_version', '4.9.65.rc.010');
106
+		}
107 107
 
108
-        /**
109
-         * espresso_plugin_activation
110
-         * adds a wp-option to indicate that EE has been activated via the WP admin plugins page
111
-         */
112
-        function espresso_plugin_activation()
113
-        {
114
-            update_option('ee_espresso_activation', true);
115
-        }
108
+		/**
109
+		 * espresso_plugin_activation
110
+		 * adds a wp-option to indicate that EE has been activated via the WP admin plugins page
111
+		 */
112
+		function espresso_plugin_activation()
113
+		{
114
+			update_option('ee_espresso_activation', true);
115
+		}
116 116
 
117
-        register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
117
+		register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
118 118
 
119
-        require_once __DIR__ . '/core/bootstrap_espresso.php';
120
-        bootstrap_espresso();
121
-    }
119
+		require_once __DIR__ . '/core/bootstrap_espresso.php';
120
+		bootstrap_espresso();
121
+	}
122 122
 }
123 123
 if (! function_exists('espresso_deactivate_plugin')) {
124
-    /**
125
-     *    deactivate_plugin
126
-     * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
127
-     *
128
-     * @access public
129
-     * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
130
-     * @return    void
131
-     */
132
-    function espresso_deactivate_plugin($plugin_basename = '')
133
-    {
134
-        if (! function_exists('deactivate_plugins')) {
135
-            require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
-        }
137
-        unset($_GET['activate'], $_REQUEST['activate']);
138
-        deactivate_plugins($plugin_basename);
139
-    }
124
+	/**
125
+	 *    deactivate_plugin
126
+	 * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
127
+	 *
128
+	 * @access public
129
+	 * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
130
+	 * @return    void
131
+	 */
132
+	function espresso_deactivate_plugin($plugin_basename = '')
133
+	{
134
+		if (! function_exists('deactivate_plugins')) {
135
+			require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
+		}
137
+		unset($_GET['activate'], $_REQUEST['activate']);
138
+		deactivate_plugins($plugin_basename);
139
+	}
140 140
 }
Please login to merge, or discard this patch.