Completed
Branch GDPR/deactivate-payment-loggin... (ba9bd0)
by
unknown
65:41 queued 52:27
created
core/domain/services/capabilities/CapCheck.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -38,7 +38,7 @@
 block discarded – undo
38 38
 
39 39
 
40 40
     /**
41
-     * @param string|array $capability   - the capability to be checked, like: 'ee_edit_registrations',
41
+     * @param string $capability   - the capability to be checked, like: 'ee_edit_registrations',
42 42
      *                                   or an array of capability strings
43 43
      * @param string       $context      - what the user is attempting to do, like: 'Edit Registration'
44 44
      * @param int          $ID           - (optional) ID for item where current_user_can is being called from
Please login to merge, or discard this patch.
Indentation   +52 added lines, -52 removed lines patch added patch discarded remove patch
@@ -15,66 +15,66 @@
 block discarded – undo
15 15
 class CapCheck implements CapCheckInterface
16 16
 {
17 17
 
18
-    /**
19
-     * @var string|array $capability
20
-     */
21
-    private $capability;
18
+	/**
19
+	 * @var string|array $capability
20
+	 */
21
+	private $capability;
22 22
 
23
-    /**
24
-     * @var string $context
25
-     */
26
-    private $context;
23
+	/**
24
+	 * @var string $context
25
+	 */
26
+	private $context;
27 27
 
28
-    /**
29
-     * @var int|string $ID
30
-     */
31
-    private $ID;
28
+	/**
29
+	 * @var int|string $ID
30
+	 */
31
+	private $ID;
32 32
 
33 33
 
34
-    /**
35
-     * @param string|array $capability   - the capability to be checked, like: 'ee_edit_registrations',
36
-     *                                   or an array of capability strings
37
-     * @param string       $context      - what the user is attempting to do, like: 'Edit Registration'
38
-     * @param int          $ID           - (optional) ID for item where current_user_can is being called from
39
-     * @throws InvalidDataTypeException
40
-     */
41
-    public function __construct($capability, $context, $ID = 0)
42
-    {
43
-        if (! (is_string($capability) || is_array($capability))) {
44
-            throw new InvalidDataTypeException('$capability', $capability, 'string or array');
45
-        }
46
-        if (! is_string($context)) {
47
-            throw new InvalidDataTypeException('$context', $context, 'string');
48
-        }
49
-        $this->capability = $capability;
50
-        $this->context = strtolower(str_replace(' ', '_', $context));
51
-        $this->ID = $ID;
52
-    }
34
+	/**
35
+	 * @param string|array $capability   - the capability to be checked, like: 'ee_edit_registrations',
36
+	 *                                   or an array of capability strings
37
+	 * @param string       $context      - what the user is attempting to do, like: 'Edit Registration'
38
+	 * @param int          $ID           - (optional) ID for item where current_user_can is being called from
39
+	 * @throws InvalidDataTypeException
40
+	 */
41
+	public function __construct($capability, $context, $ID = 0)
42
+	{
43
+		if (! (is_string($capability) || is_array($capability))) {
44
+			throw new InvalidDataTypeException('$capability', $capability, 'string or array');
45
+		}
46
+		if (! is_string($context)) {
47
+			throw new InvalidDataTypeException('$context', $context, 'string');
48
+		}
49
+		$this->capability = $capability;
50
+		$this->context = strtolower(str_replace(' ', '_', $context));
51
+		$this->ID = $ID;
52
+	}
53 53
 
54 54
 
55
-    /**
56
-     * @return string|array
57
-     */
58
-    public function capability()
59
-    {
60
-        return $this->capability;
61
-    }
55
+	/**
56
+	 * @return string|array
57
+	 */
58
+	public function capability()
59
+	{
60
+		return $this->capability;
61
+	}
62 62
 
63 63
 
64
-    /**
65
-     * @return string
66
-     */
67
-    public function context()
68
-    {
69
-        return $this->context;
70
-    }
64
+	/**
65
+	 * @return string
66
+	 */
67
+	public function context()
68
+	{
69
+		return $this->context;
70
+	}
71 71
 
72 72
 
73
-    /**
74
-     * @return int|string
75
-     */
76
-    public function ID()
77
-    {
78
-        return $this->ID;
79
-    }
73
+	/**
74
+	 * @return int|string
75
+	 */
76
+	public function ID()
77
+	{
78
+		return $this->ID;
79
+	}
80 80
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -40,10 +40,10 @@
 block discarded – undo
40 40
      */
41 41
     public function __construct($capability, $context, $ID = 0)
42 42
     {
43
-        if (! (is_string($capability) || is_array($capability))) {
43
+        if ( ! (is_string($capability) || is_array($capability))) {
44 44
             throw new InvalidDataTypeException('$capability', $capability, 'string or array');
45 45
         }
46
-        if (! is_string($context)) {
46
+        if ( ! is_string($context)) {
47 47
             throw new InvalidDataTypeException('$context', $context, 'string');
48 48
         }
49 49
         $this->capability = $capability;
Please login to merge, or discard this patch.
core/db_models/fields/EE_Primary_Key_String_Field.php 2 patches
Doc Comments   +3 added lines patch added patch discarded remove patch
@@ -4,6 +4,9 @@
 block discarded – undo
4 4
 class EE_Primary_Key_String_Field extends EE_Primary_Key_Field_Base
5 5
 {
6 6
 
7
+    /**
8
+     * @param string $table_column
9
+     */
7 10
     public function __construct($table_column, $nicename)
8 11
     {
9 12
         parent::__construct($table_column, $nicename, null);
Please login to merge, or discard this patch.
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -3,22 +3,22 @@
 block discarded – undo
3 3
 class EE_Primary_Key_String_Field extends EE_Primary_Key_Field_Base
4 4
 {
5 5
 
6
-    public function __construct($table_column, $nicename)
7
-    {
8
-        parent::__construct($table_column, $nicename, null);
9
-    }
6
+	public function __construct($table_column, $nicename)
7
+	{
8
+		parent::__construct($table_column, $nicename, null);
9
+	}
10 10
 
11
-    /**
12
-     * removes all tags when setting
13
-     *
14
-     * @param string $value_inputted_for_field_on_model_object
15
-     * @return string
16
-     */
17
-    public function prepare_for_set($value_inputted_for_field_on_model_object)
18
-    {
19
-        if ($this->is_model_obj_of_type_pointed_to($value_inputted_for_field_on_model_object)) {
20
-            $value_inputted_for_field_on_model_object = $value_inputted_for_field_on_model_object->ID();
21
-        }
22
-        return wp_strip_all_tags($value_inputted_for_field_on_model_object);
23
-    }
11
+	/**
12
+	 * removes all tags when setting
13
+	 *
14
+	 * @param string $value_inputted_for_field_on_model_object
15
+	 * @return string
16
+	 */
17
+	public function prepare_for_set($value_inputted_for_field_on_model_object)
18
+	{
19
+		if ($this->is_model_obj_of_type_pointed_to($value_inputted_for_field_on_model_object)) {
20
+			$value_inputted_for_field_on_model_object = $value_inputted_for_field_on_model_object->ID();
21
+		}
22
+		return wp_strip_all_tags($value_inputted_for_field_on_model_object);
23
+	}
24 24
 }
Please login to merge, or discard this patch.
public/Espresso_Arabica_2014/single-espresso_events.php 1 patch
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,11 +19,11 @@  discard block
 block discarded – undo
19 19
 				<div id="espresso-event-details-dv" class="" >
20 20
 			<?php
21 21
 				// Start the Loop.
22
-				while ( have_posts() ) : the_post();
22
+				while (have_posts()) : the_post();
23 23
 					//  Include the post TYPE-specific template for the content.
24
-					espresso_get_template_part( 'content', 'espresso_events' );
24
+					espresso_get_template_part('content', 'espresso_events');
25 25
 					// If comments are open or we have at least one comment, load up the comment template.
26
-					if ( comments_open() || get_comments_number() ) {
26
+					if (comments_open() || get_comments_number()) {
27 27
 						comments_template();
28 28
 					}
29 29
 				endwhile;
@@ -35,6 +35,6 @@  discard block
 block discarded – undo
35 35
 	</div><!-- #primary -->
36 36
 
37 37
 <?php
38
-get_sidebar( 'content' );
38
+get_sidebar('content');
39 39
 get_sidebar();
40 40
 get_footer();
41 41
\ No newline at end of file
Please login to merge, or discard this patch.
registration_form/help_tabs/registration_form_edit_question.help_tab.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -30,8 +30,8 @@
 block discarded – undo
30 30
 <?php _e('This shows the type of question. Available options are Text, Textarea, Checkboxes, Radio Buttons, Dropdown, State/Province Dropdown, Country Dropdown, Date Picker, and HTML Textarea (allowed tags: a, abbr, acronym, b, br, blockquote ,cite, code, del ,em, i, li, ol, p, q, s, strike, strong, ul).', 'event_espresso'); ?>
31 31
 </li>
32 32
 <li>
33
-<strong><?php _e('Answer Options (for applicable question types)', 'event_espresso');?></strong>
34
-<strong><?php _e('Values do not allow any HTML, however, descriptions do allow HTML.', 'event_espresso');?></strong>
33
+<strong><?php _e('Answer Options (for applicable question types)', 'event_espresso'); ?></strong>
34
+<strong><?php _e('Values do not allow any HTML, however, descriptions do allow HTML.', 'event_espresso'); ?></strong>
35 35
 </li>
36 36
 <li>
37 37
 <strong><?php _e('Required Question', 'event_espresso'); ?></strong><br />
Please login to merge, or discard this patch.
admin_pages/payments/Payments_Admin_Page.core.php 3 patches
Doc Comments   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -470,7 +470,7 @@  discard block
 block discarded – undo
470 470
      *
471 471
      * @access protected
472 472
      * @param \EE_Payment_Method $payment_method
473
-     * @return \EE_Form_Section_Proper
473
+     * @return EE_Form_Section_HTML
474 474
      */
475 475
     protected function _pci_dss_compliance(EE_Payment_Method $payment_method)
476 476
     {
@@ -506,7 +506,7 @@  discard block
 block discarded – undo
506 506
      *
507 507
      * @access protected
508 508
      * @param \EE_Payment_Method $payment_method
509
-     * @return \EE_Form_Section_Proper
509
+     * @return EE_Form_Section_HTML
510 510
      */
511 511
     protected function _currency_support(EE_Payment_Method $payment_method)
512 512
     {
@@ -541,7 +541,7 @@  discard block
 block discarded – undo
541 541
      *
542 542
      * @access protected
543 543
      * @param \EE_Payment_Method $payment_method
544
-     * @return \EE_Form_Section_HTML
544
+     * @return EE_Payment_Method_Form
545 545
      */
546 546
     protected function _payment_method_settings(EE_Payment_Method $payment_method)
547 547
     {
@@ -615,7 +615,7 @@  discard block
 block discarded – undo
615 615
      *
616 616
      * @access protected
617 617
      * @param \EE_Payment_Method $payment_method
618
-     * @return \EE_Form_Section_Proper
618
+     * @return EE_Form_Section_HTML
619 619
      */
620 620
     protected function _deactivate_payment_method_button(EE_Payment_Method $payment_method)
621 621
     {
Please login to merge, or discard this patch.
Indentation   +1060 added lines, -1060 removed lines patch added patch discarded remove patch
@@ -12,1064 +12,1064 @@
 block discarded – undo
12 12
 class Payments_Admin_Page extends EE_Admin_Page
13 13
 {
14 14
 
15
-    /**
16
-     * Variables used for when we're re-sorting the logs results, in case
17
-     * we needed to do two queries and we need to resort
18
-     *
19
-     * @var string
20
-     */
21
-    private $_sort_logs_again_direction;
22
-
23
-
24
-    /**
25
-     * @Constructor
26
-     * @access public
27
-     * @param bool $routing indicate whether we want to just load the object and handle routing or just load the object.
28
-     * @return \Payments_Admin_Page
29
-     */
30
-    public function __construct($routing = true)
31
-    {
32
-        parent::__construct($routing);
33
-    }
34
-
35
-
36
-    protected function _init_page_props()
37
-    {
38
-        $this->page_slug = EE_PAYMENTS_PG_SLUG;
39
-        $this->page_label = __('Payment Methods', 'event_espresso');
40
-        $this->_admin_base_url = EE_PAYMENTS_ADMIN_URL;
41
-        $this->_admin_base_path = EE_PAYMENTS_ADMIN;
42
-    }
43
-
44
-
45
-    protected function _ajax_hooks()
46
-    {
47
-        // todo: all hooks for ajax goes here.
48
-    }
49
-
50
-
51
-    protected function _define_page_props()
52
-    {
53
-        $this->_admin_page_title = $this->page_label;
54
-        $this->_labels = array(
55
-            'publishbox' => __('Update Settings', 'event_espresso'),
56
-        );
57
-    }
58
-
59
-
60
-    protected function _set_page_routes()
61
-    {
62
-        /**
63
-         * note that with payment method capabilities, although we've implemented
64
-         * capability mapping which will be used for accessing payment methods owned by
65
-         * other users.  This is not fully implemented yet in the payment method ui.
66
-         * Currently only the "plural" caps are in active use.
67
-         * When cap mapping is implemented, some routes will need to use the singular form of
68
-         * capability method and also include the $id of the payment method for the route.
69
-         **/
70
-        $this->_page_routes = array(
71
-            'default'                   => array(
72
-                'func'       => '_payment_methods_list',
73
-                'capability' => 'ee_edit_payment_methods',
74
-            ),
75
-            'payment_settings'          => array(
76
-                'func'       => '_payment_settings',
77
-                'capability' => 'ee_manage_gateways',
78
-            ),
79
-            'activate_payment_method'   => array(
80
-                'func'       => '_activate_payment_method',
81
-                'noheader'   => true,
82
-                'capability' => 'ee_edit_payment_methods',
83
-            ),
84
-            'deactivate_payment_method' => array(
85
-                'func'       => '_deactivate_payment_method',
86
-                'noheader'   => true,
87
-                'capability' => 'ee_delete_payment_methods',
88
-            ),
89
-            'update_payment_method'     => array(
90
-                'func'               => '_update_payment_method',
91
-                'noheader'           => true,
92
-                'headers_sent_route' => 'default',
93
-                'capability'         => 'ee_edit_payment_methods',
94
-            ),
95
-            'update_payment_settings'   => array(
96
-                'func'       => '_update_payment_settings',
97
-                'noheader'   => true,
98
-                'capability' => 'ee_manage_gateways',
99
-            ),
100
-            'payment_log'               => array(
101
-                'func'       => '_payment_log_overview_list_table',
102
-                'capability' => 'ee_read_payment_methods',
103
-            ),
104
-            'payment_log_details'       => array(
105
-                'func'       => '_payment_log_details',
106
-                'capability' => 'ee_read_payment_methods',
107
-            ),
108
-        );
109
-    }
110
-
111
-
112
-    protected function _set_page_config()
113
-    {
114
-        $payment_method_list_config = array(
115
-            'nav'           => array(
116
-                'label' => __('Payment Methods', 'event_espresso'),
117
-                'order' => 10,
118
-            ),
119
-            'metaboxes'     => $this->_default_espresso_metaboxes,
120
-            'help_tabs'     => array_merge(
121
-                array(
122
-                    'payment_methods_overview_help_tab' => array(
123
-                        'title'    => __('Payment Methods Overview', 'event_espresso'),
124
-                        'filename' => 'payment_methods_overview',
125
-                    ),
126
-                ),
127
-                $this->_add_payment_method_help_tabs()
128
-            ),
129
-            'help_tour'     => array('Payment_Methods_Selection_Help_Tour'),
130
-            'require_nonce' => false,
131
-        );
132
-        $this->_page_config = array(
133
-            'default'          => $payment_method_list_config,
134
-            'payment_settings' => array(
135
-                'nav'           => array(
136
-                    'label' => __('Settings', 'event_espresso'),
137
-                    'order' => 20,
138
-                ),
139
-                'help_tabs'     => array(
140
-                    'payment_methods_settings_help_tab' => array(
141
-                        'title'    => __('Payment Method Settings', 'event_espresso'),
142
-                        'filename' => 'payment_methods_settings',
143
-                    ),
144
-                ),
145
-                // 'help_tour' => array( 'Payment_Methods_Settings_Help_Tour' ),
146
-                'metaboxes'     => array_merge($this->_default_espresso_metaboxes, array('_publish_post_box')),
147
-                'require_nonce' => false,
148
-            ),
149
-            'payment_log'      => array(
150
-                'nav'           => array(
151
-                    'label' => __("Logs", 'event_espresso'),
152
-                    'order' => 30,
153
-                ),
154
-                'list_table'    => 'Payment_Log_Admin_List_Table',
155
-                'metaboxes'     => $this->_default_espresso_metaboxes,
156
-                'require_nonce' => false,
157
-            ),
158
-        );
159
-    }
160
-
161
-
162
-    /**
163
-     * @return array
164
-     */
165
-    protected function _add_payment_method_help_tabs()
166
-    {
167
-        EE_Registry::instance()->load_lib('Payment_Method_Manager');
168
-        $payment_method_types = EE_Payment_Method_Manager::instance()->payment_method_types();
169
-        $all_pmt_help_tabs_config = array();
170
-        foreach ($payment_method_types as $payment_method_type) {
171
-            if (! EE_Registry::instance()->CAP->current_user_can(
172
-                $payment_method_type->cap_name(),
173
-                'specific_payment_method_type_access'
174
-            )
175
-            ) {
176
-                continue;
177
-            }
178
-            foreach ($payment_method_type->help_tabs_config() as $help_tab_name => $config) {
179
-                $template_args = isset($config['template_args']) ? $config['template_args'] : array();
180
-                $template_args['admin_page_obj'] = $this;
181
-                $all_pmt_help_tabs_config[ $help_tab_name ] = array(
182
-                    'title'   => $config['title'],
183
-                    'content' => EEH_Template::display_template(
184
-                        $payment_method_type->file_folder() . 'help_tabs' . DS . $config['filename'] . '.help_tab.php',
185
-                        $template_args,
186
-                        true
187
-                    ),
188
-                );
189
-            }
190
-        }
191
-        return $all_pmt_help_tabs_config;
192
-    }
193
-
194
-
195
-    // none of the below group are currently used for Gateway Settings
196
-    protected function _add_screen_options()
197
-    {
198
-    }
199
-
200
-
201
-    protected function _add_feature_pointers()
202
-    {
203
-    }
204
-
205
-
206
-    public function admin_init()
207
-    {
208
-    }
209
-
210
-
211
-    public function admin_notices()
212
-    {
213
-    }
214
-
215
-
216
-    public function admin_footer_scripts()
217
-    {
218
-    }
219
-
220
-
221
-    public function load_scripts_styles()
222
-    {
223
-        wp_enqueue_script('ee_admin_js');
224
-        wp_enqueue_script('ee-text-links');
225
-        wp_enqueue_script(
226
-            'espresso_payments',
227
-            EE_PAYMENTS_ASSETS_URL . 'espresso_payments_admin.js',
228
-            array('espresso-ui-theme', 'ee-datepicker'),
229
-            EVENT_ESPRESSO_VERSION,
230
-            true
231
-        );
232
-    }
233
-
234
-
235
-    public function load_scripts_styles_default()
236
-    {
237
-        // styles
238
-        wp_register_style(
239
-            'espresso_payments',
240
-            EE_PAYMENTS_ASSETS_URL . 'ee-payments.css',
241
-            array(),
242
-            EVENT_ESPRESSO_VERSION
243
-        );
244
-        wp_enqueue_style('espresso_payments');
245
-        wp_enqueue_style('ee-text-links');
246
-        // scripts
247
-    }
248
-
249
-
250
-    protected function _payment_methods_list()
251
-    {
252
-        /**
253
-         * first let's ensure payment methods have been setup. We do this here because when people activate a
254
-         * payment method for the first time (as an addon), it may not setup its capabilities or get registered correctly due
255
-         * to the loading process.  However, people MUST setup the details for the payment method so its safe to do a
256
-         * recheck here.
257
-         */
258
-        EE_Registry::instance()->load_lib('Payment_Method_Manager');
259
-        EEM_Payment_Method::instance()->verify_button_urls();
260
-        // setup tabs, one for each payment method type
261
-        $tabs = array();
262
-        $payment_methods = array();
263
-        foreach (EE_Payment_Method_Manager::instance()->payment_method_types() as $pmt_obj) {
264
-            // we don't want to show admin-only PMTs for now
265
-            if ($pmt_obj instanceof EE_PMT_Admin_Only) {
266
-                continue;
267
-            }
268
-            // check access
269
-            if (! EE_Registry::instance()->CAP->current_user_can(
270
-                $pmt_obj->cap_name(),
271
-                'specific_payment_method_type_access'
272
-            )
273
-            ) {
274
-                continue;
275
-            }
276
-            // check for any active pms of that type
277
-            $payment_method = EEM_Payment_Method::instance()->get_one_of_type($pmt_obj->system_name());
278
-            if (! $payment_method instanceof EE_Payment_Method) {
279
-                $payment_method = EE_Payment_Method::new_instance(
280
-                    array(
281
-                        'PMD_slug'       => sanitize_key($pmt_obj->system_name()),
282
-                        'PMD_type'       => $pmt_obj->system_name(),
283
-                        'PMD_name'       => $pmt_obj->pretty_name(),
284
-                        'PMD_admin_name' => $pmt_obj->pretty_name(),
285
-                    )
286
-                );
287
-            }
288
-            $payment_methods[ $payment_method->slug() ] = $payment_method;
289
-        }
290
-        $payment_methods = apply_filters(
291
-            'FHEE__Payments_Admin_Page___payment_methods_list__payment_methods',
292
-            $payment_methods
293
-        );
294
-        foreach ($payment_methods as $payment_method) {
295
-            if ($payment_method instanceof EE_Payment_Method) {
296
-                add_meta_box(
297
-                    // html id
298
-                    'espresso_' . $payment_method->slug() . '_payment_settings',
299
-                    // title
300
-                    sprintf(__('%s Settings', 'event_espresso'), $payment_method->admin_name()),
301
-                    // callback
302
-                    array($this, 'payment_method_settings_meta_box'),
303
-                    // post type
304
-                    null,
305
-                    // context
306
-                    'normal',
307
-                    // priority
308
-                    'default',
309
-                    // callback args
310
-                    array('payment_method' => $payment_method)
311
-                );
312
-                // setup for tabbed content
313
-                $tabs[ $payment_method->slug() ] = array(
314
-                    'label' => $payment_method->admin_name(),
315
-                    'class' => $payment_method->active() ? 'gateway-active' : '',
316
-                    'href'  => 'espresso_' . $payment_method->slug() . '_payment_settings',
317
-                    'title' => __('Modify this Payment Method', 'event_espresso'),
318
-                    'slug'  => $payment_method->slug(),
319
-                );
320
-            }
321
-        }
322
-        $this->_template_args['admin_page_header'] = EEH_Tabbed_Content::tab_text_links(
323
-            $tabs,
324
-            'payment_method_links',
325
-            '|',
326
-            $this->_get_active_payment_method_slug()
327
-        );
328
-        $this->display_admin_page_with_sidebar();
329
-    }
330
-
331
-
332
-    /**
333
-     *   _get_active_payment_method_slug
334
-     *
335
-     * @return string
336
-     */
337
-    protected function _get_active_payment_method_slug()
338
-    {
339
-        $payment_method_slug = false;
340
-        // decide which payment method tab to open first, as dictated by the request's 'payment_method'
341
-        if (isset($this->_req_data['payment_method'])) {
342
-            // if they provided the current payment method, use it
343
-            $payment_method_slug = sanitize_key($this->_req_data['payment_method']);
344
-        }
345
-        $payment_method = EEM_Payment_Method::instance()->get_one(array(array('PMD_slug' => $payment_method_slug)));
346
-        // if that didn't work or wasn't provided, find another way to select the current pm
347
-        if (! $this->_verify_payment_method($payment_method)) {
348
-            // like, looking for an active one
349
-            $payment_method = EEM_Payment_Method::instance()->get_one_active('CART');
350
-            // test that one as well
351
-            if ($this->_verify_payment_method($payment_method)) {
352
-                $payment_method_slug = $payment_method->slug();
353
-            } else {
354
-                $payment_method_slug = 'paypal_standard';
355
-            }
356
-        }
357
-        return $payment_method_slug;
358
-    }
359
-
360
-
361
-    /**
362
-     *    payment_method_settings_meta_box
363
-     *    returns TRUE if the passed payment method is properly constructed and the logged in user has the correct
364
-     *    capabilities to access it
365
-     *
366
-     * @param \EE_Payment_Method $payment_method
367
-     * @return boolean
368
-     */
369
-    protected function _verify_payment_method($payment_method)
370
-    {
371
-        if ($payment_method instanceof EE_Payment_Method && $payment_method->type_obj() instanceof EE_PMT_Base
372
-            && EE_Registry::instance()->CAP->current_user_can(
373
-                $payment_method->type_obj()->cap_name(),
374
-                'specific_payment_method_type_access'
375
-            )
376
-        ) {
377
-            return true;
378
-        }
379
-        return false;
380
-    }
381
-
382
-
383
-    /**
384
-     *    payment_method_settings_meta_box
385
-     *
386
-     * @param NULL  $post_obj_which_is_null is an object containing the current post (as a $post object)
387
-     * @param array $metabox                is an array with metabox id, title, callback, and args elements. the value
388
-     *                                      at 'args' has key 'payment_method', as set within _payment_methods_list
389
-     * @return string
390
-     * @throws EE_Error
391
-     */
392
-    public function payment_method_settings_meta_box($post_obj_which_is_null, $metabox)
393
-    {
394
-        $payment_method = isset($metabox['args'], $metabox['args']['payment_method'])
395
-            ? $metabox['args']['payment_method'] : null;
396
-        if (! $payment_method instanceof EE_Payment_Method) {
397
-            throw new EE_Error(
398
-                sprintf(
399
-                    __(
400
-                        'Payment method metabox setup incorrectly. No Payment method object was supplied',
401
-                        'event_espresso'
402
-                    )
403
-                )
404
-            );
405
-        }
406
-        $payment_method_scopes = $payment_method->active();
407
-        // if the payment method really exists show its form, otherwise the activation template
408
-        if ($payment_method->ID() && ! empty($payment_method_scopes)) {
409
-            $form = $this->_generate_payment_method_settings_form($payment_method);
410
-            if ($form->form_data_present_in($this->_req_data)) {
411
-                $form->receive_form_submission($this->_req_data);
412
-            }
413
-            echo $form->form_open() . $form->get_html_and_js() . $form->form_close();
414
-        } else {
415
-            echo $this->_activate_payment_method_button($payment_method)->get_html_and_js();
416
-        }
417
-    }
418
-
419
-
420
-    /**
421
-     * Gets the form for all the settings related to this payment method type
422
-     *
423
-     * @access protected
424
-     * @param \EE_Payment_Method $payment_method
425
-     * @return \EE_Form_Section_Proper
426
-     */
427
-    protected function _generate_payment_method_settings_form(EE_Payment_Method $payment_method)
428
-    {
429
-        if (! $payment_method instanceof EE_Payment_Method) {
430
-            return new EE_Form_Section_Proper();
431
-        }
432
-        return new EE_Form_Section_Proper(
433
-            array(
434
-                'name'            => $payment_method->slug() . '_settings_form',
435
-                'html_id'         => $payment_method->slug() . '_settings_form',
436
-                'action'          => EE_Admin_Page::add_query_args_and_nonce(
437
-                    array(
438
-                        'action'         => 'update_payment_method',
439
-                        'payment_method' => $payment_method->slug(),
440
-                    ),
441
-                    EE_PAYMENTS_ADMIN_URL
442
-                ),
443
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
444
-                'subsections'     => apply_filters(
445
-                    'FHEE__Payments_Admin_Page___generate_payment_method_settings_form__form_subsections',
446
-                    array(
447
-                        'pci_dss_compliance'      => $this->_pci_dss_compliance($payment_method),
448
-                        'currency_support'        => $this->_currency_support($payment_method),
449
-                        'payment_method_settings' => $this->_payment_method_settings($payment_method),
450
-                        'update'                  => $this->_update_payment_method_button($payment_method),
451
-                        'deactivate'              => $this->_deactivate_payment_method_button($payment_method),
452
-                        'fine_print'              => $this->_fine_print(),
453
-                    ),
454
-                    $payment_method
455
-                ),
456
-            )
457
-        );
458
-    }
459
-
460
-
461
-    /**
462
-     * _pci_dss_compliance
463
-     *
464
-     * @access protected
465
-     * @param \EE_Payment_Method $payment_method
466
-     * @return \EE_Form_Section_Proper
467
-     */
468
-    protected function _pci_dss_compliance(EE_Payment_Method $payment_method)
469
-    {
470
-        if ($payment_method->type_obj()->requires_https()) {
471
-            return new EE_Form_Section_HTML(
472
-                EEH_HTML::tr(
473
-                    EEH_HTML::th(
474
-                        EEH_HTML::label(
475
-                            EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
476
-                        )
477
-                    ) .
478
-                    EEH_HTML::td(
479
-                        EEH_HTML::strong(
480
-                            __(
481
-                                'You are responsible for your own website security and Payment Card Industry Data Security Standards (PCI DSS) compliance.',
482
-                                'event_espresso'
483
-                            )
484
-                        )
485
-                        .
486
-                        EEH_HTML::br()
487
-                        .
488
-                        __('Learn more about ', 'event_espresso')
489
-                        . EEH_HTML::link(
490
-                            'https://www.pcisecuritystandards.org/merchants/index.php',
491
-                            __('PCI DSS compliance', 'event_espresso')
492
-                        )
493
-                    )
494
-                )
495
-            );
496
-        } else {
497
-            return new EE_Form_Section_HTML('');
498
-        }
499
-    }
500
-
501
-
502
-    /**
503
-     * _currency_support
504
-     *
505
-     * @access protected
506
-     * @param \EE_Payment_Method $payment_method
507
-     * @return \EE_Form_Section_Proper
508
-     */
509
-    protected function _currency_support(EE_Payment_Method $payment_method)
510
-    {
511
-        if (! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
512
-            return new EE_Form_Section_HTML(
513
-                EEH_HTML::tr(
514
-                    EEH_HTML::th(
515
-                        EEH_HTML::label(
516
-                            EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
517
-                        )
518
-                    ) .
519
-                    EEH_HTML::td(
520
-                        EEH_HTML::strong(
521
-                            sprintf(
522
-                                __(
523
-                                    '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.',
524
-                                    'event_espresso'
525
-                                ),
526
-                                EE_Config::instance()->currency->code
527
-                            )
528
-                        )
529
-                    )
530
-                )
531
-            );
532
-        } else {
533
-            return new EE_Form_Section_HTML('');
534
-        }
535
-    }
536
-
537
-
538
-    /**
539
-     * _update_payment_method_button
540
-     *
541
-     * @access protected
542
-     * @param \EE_Payment_Method $payment_method
543
-     * @return \EE_Form_Section_HTML
544
-     */
545
-    protected function _payment_method_settings(EE_Payment_Method $payment_method)
546
-    {
547
-        // modify the form so we only have/show fields that will be implemented for this version
548
-        return $this->_simplify_form($payment_method->type_obj()->settings_form(), $payment_method->name());
549
-    }
550
-
551
-
552
-    /**
553
-     * Simplifies the form to merely reproduce 4.1's gateway settings functionality
554
-     *
555
-     * @param EE_Form_Section_Proper $form_section
556
-     * @param string                 $payment_method_name
557
-     * @return \EE_Payment_Method_Form
558
-     * @throws \EE_Error
559
-     */
560
-    protected function _simplify_form($form_section, $payment_method_name = '')
561
-    {
562
-        if ($form_section instanceof EE_Payment_Method_Form) {
563
-            $form_section->exclude(
564
-                array(
565
-                    'PMD_type', // dont want them changing the type
566
-                    'PMD_slug', // or the slug (probably never)
567
-                    'PMD_wp_user', // or the user's ID
568
-                    'Currency' // or the currency, until the rest of EE supports simultaneous currencies
569
-                )
570
-            );
571
-            return $form_section;
572
-        } else {
573
-            throw new EE_Error(
574
-                sprintf(
575
-                    __(
576
-                        'The EE_Payment_Method_Form for the "%1$s" payment method is missing or invalid.',
577
-                        'event_espresso'
578
-                    ),
579
-                    $payment_method_name
580
-                )
581
-            );
582
-        }
583
-    }
584
-
585
-
586
-    /**
587
-     * _update_payment_method_button
588
-     *
589
-     * @access protected
590
-     * @param \EE_Payment_Method $payment_method
591
-     * @return \EE_Form_Section_HTML
592
-     */
593
-    protected function _update_payment_method_button(EE_Payment_Method $payment_method)
594
-    {
595
-        $update_button = new EE_Submit_Input(
596
-            array(
597
-                'name'       => 'submit',
598
-                'html_id'    => 'save_' . $payment_method->slug() . '_settings',
599
-                'default'    => sprintf(
600
-                    __('Update %s Payment Settings', 'event_espresso'),
601
-                    $payment_method->admin_name()
602
-                ),
603
-                'html_label' => EEH_HTML::nbsp(),
604
-            )
605
-        );
606
-        return new EE_Form_Section_HTML(
607
-            EEH_HTML::no_row(EEH_HTML::br(2)) .
608
-            EEH_HTML::tr(
609
-                EEH_HTML::th(__('Update Settings', 'event_espresso')) .
610
-                EEH_HTML::td(
611
-                    $update_button->get_html_for_input()
612
-                )
613
-            )
614
-        );
615
-    }
616
-
617
-
618
-    /**
619
-     * _deactivate_payment_method_button
620
-     *
621
-     * @access protected
622
-     * @param \EE_Payment_Method $payment_method
623
-     * @return \EE_Form_Section_Proper
624
-     */
625
-    protected function _deactivate_payment_method_button(EE_Payment_Method $payment_method)
626
-    {
627
-        $link_text_and_title = sprintf(
628
-            __('Deactivate %1$s Payments?', 'event_espresso'),
629
-            $payment_method->admin_name()
630
-        );
631
-        return new EE_Form_Section_HTML(
632
-            EEH_HTML::tr(
633
-                EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')) .
634
-                EEH_HTML::td(
635
-                    EEH_HTML::link(
636
-                        EE_Admin_Page::add_query_args_and_nonce(
637
-                            array(
638
-                                'action'         => 'deactivate_payment_method',
639
-                                'payment_method' => $payment_method->slug(),
640
-                            ),
641
-                            EE_PAYMENTS_ADMIN_URL
642
-                        ),
643
-                        $link_text_and_title,
644
-                        $link_text_and_title,
645
-                        'deactivate_' . $payment_method->slug(),
646
-                        'espresso-button button-secondary'
647
-                    )
648
-                )
649
-            )
650
-        );
651
-    }
652
-
653
-
654
-    /**
655
-     * _activate_payment_method_button
656
-     *
657
-     * @access protected
658
-     * @param \EE_Payment_Method $payment_method
659
-     * @return \EE_Form_Section_Proper
660
-     */
661
-    protected function _activate_payment_method_button(EE_Payment_Method $payment_method)
662
-    {
663
-        $link_text_and_title = sprintf(
664
-            __('Activate %1$s Payment Method?', 'event_espresso'),
665
-            $payment_method->admin_name()
666
-        );
667
-        return new EE_Form_Section_Proper(
668
-            array(
669
-                'name'            => 'activate_' . $payment_method->slug() . '_settings_form',
670
-                'html_id'         => 'activate_' . $payment_method->slug() . '_settings_form',
671
-                'action'          => '#',
672
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
673
-                'subsections'     => apply_filters(
674
-                    'FHEE__Payments_Admin_Page___activate_payment_method_button__form_subsections',
675
-                    array(
676
-                        new EE_Form_Section_HTML(
677
-                            EEH_HTML::tr(
678
-                                EEH_HTML::td(
679
-                                    $payment_method->type_obj()->introductory_html(),
680
-                                    '',
681
-                                    '',
682
-                                    '',
683
-                                    'colspan="2"'
684
-                                )
685
-                            ) .
686
-                            EEH_HTML::tr(
687
-                                EEH_HTML::th(
688
-                                    EEH_HTML::label(__('Click to Activate ', 'event_espresso'))
689
-                                ) .
690
-                                EEH_HTML::td(
691
-                                    EEH_HTML::link(
692
-                                        EE_Admin_Page::add_query_args_and_nonce(
693
-                                            array(
694
-                                                'action'              => 'activate_payment_method',
695
-                                                'payment_method_type' => $payment_method->type(),
696
-                                            ),
697
-                                            EE_PAYMENTS_ADMIN_URL
698
-                                        ),
699
-                                        $link_text_and_title,
700
-                                        $link_text_and_title,
701
-                                        'activate_' . $payment_method->slug(),
702
-                                        'espresso-button-green button-primary'
703
-                                    )
704
-                                )
705
-                            )
706
-                        ),
707
-                    ),
708
-                    $payment_method
709
-                ),
710
-            )
711
-        );
712
-    }
713
-
714
-
715
-    /**
716
-     * _fine_print
717
-     *
718
-     * @access protected
719
-     * @return \EE_Form_Section_HTML
720
-     */
721
-    protected function _fine_print()
722
-    {
723
-        return new EE_Form_Section_HTML(
724
-            EEH_HTML::tr(
725
-                EEH_HTML::th() .
726
-                EEH_HTML::td(
727
-                    EEH_HTML::p(__('All fields marked with a * are required fields', 'event_espresso'), '', 'grey-text')
728
-                )
729
-            )
730
-        );
731
-    }
732
-
733
-
734
-    /**
735
-     * Activates a payment method of that type. Mostly assuming there is only 1 of that type (or none so far)
736
-     *
737
-     * @global WP_User $current_user
738
-     */
739
-    protected function _activate_payment_method()
740
-    {
741
-        if (isset($this->_req_data['payment_method_type'])) {
742
-            $payment_method_type = sanitize_text_field($this->_req_data['payment_method_type']);
743
-            // see if one exists
744
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
745
-            $payment_method = EE_Payment_Method_Manager::instance()
746
-                                                       ->activate_a_payment_method_of_type($payment_method_type);
747
-            $this->_redirect_after_action(
748
-                1,
749
-                'Payment Method',
750
-                'activated',
751
-                array('action' => 'default', 'payment_method' => $payment_method->slug())
752
-            );
753
-        } else {
754
-            $this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
755
-        }
756
-    }
757
-
758
-
759
-    /**
760
-     * Deactivates the payment method with the specified slug, and redirects.
761
-     */
762
-    protected function _deactivate_payment_method()
763
-    {
764
-        if (isset($this->_req_data['payment_method'])) {
765
-            $payment_method_slug = sanitize_key($this->_req_data['payment_method']);
766
-            // deactivate it
767
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
768
-            $count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method($payment_method_slug);
769
-            $this->_redirect_after_action(
770
-                $count_updated,
771
-                'Payment Method',
772
-                'deactivated',
773
-                array('action' => 'default', 'payment_method' => $payment_method_slug)
774
-            );
775
-        } else {
776
-            $this->_redirect_after_action(false, 'Payment Method', 'deactivated', array('action' => 'default'));
777
-        }
778
-    }
779
-
780
-
781
-    /**
782
-     * Processes the payment method form that was submitted. This is slightly trickier than usual form
783
-     * processing because we first need to identify WHICH form was processed and which payment method
784
-     * it corresponds to. Once we have done that, we see if the form is valid. If it is, the
785
-     * form's data is saved and we redirect to the default payment methods page, setting the updated payment method
786
-     * as the currently-selected one. If it DOESN'T validate, we render the page with the form's errors (in the
787
-     * subsequently called 'headers_sent_func' which is _payment_methods_list)
788
-     *
789
-     * @return void
790
-     */
791
-    protected function _update_payment_method()
792
-    {
793
-        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
794
-            // ok let's find which gateway form to use based on the form input
795
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
796
-            /** @var $correct_pmt_form_to_use EE_Payment_Method_Form */
797
-            $correct_pmt_form_to_use = null;
798
-            $payment_method = null;
799
-            foreach (EEM_Payment_Method::instance()->get_all() as $payment_method) {
800
-                // get the form and simplify it, like what we do when we display it
801
-                $pmt_form = $this->_generate_payment_method_settings_form($payment_method);
802
-                if ($pmt_form->form_data_present_in($this->_req_data)) {
803
-                    $correct_pmt_form_to_use = $pmt_form;
804
-                    break;
805
-                }
806
-            }
807
-            // if we couldn't find the correct payment method type...
808
-            if (! $correct_pmt_form_to_use) {
809
-                EE_Error::add_error(
810
-                    __(
811
-                        "We could not find which payment method type your form submission related to. Please contact support",
812
-                        'event_espresso'
813
-                    ),
814
-                    __FILE__,
815
-                    __FUNCTION__,
816
-                    __LINE__
817
-                );
818
-                $this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
819
-            }
820
-            $correct_pmt_form_to_use->receive_form_submission($this->_req_data);
821
-            if ($correct_pmt_form_to_use->is_valid()) {
822
-                $payment_settings_subform = $correct_pmt_form_to_use->get_subsection('payment_method_settings');
823
-                if (! $payment_settings_subform instanceof EE_Payment_Method_Form) {
824
-                    throw new EE_Error(
825
-                        sprintf(
826
-                            __(
827
-                                'The payment method could not be saved because the form sections were misnamed. We expected to find %1$s, but did not.',
828
-                                'event_espresso'
829
-                            ),
830
-                            'payment_method_settings'
831
-                        )
832
-                    );
833
-                }
834
-                $payment_settings_subform->save();
835
-                /** @var $pm EE_Payment_Method */
836
-                $this->_redirect_after_action(
837
-                    true,
838
-                    'Payment Method',
839
-                    'updated',
840
-                    array('action' => 'default', 'payment_method' => $payment_method->slug())
841
-                );
842
-            } else {
843
-                EE_Error::add_error(
844
-                    sprintf(
845
-                        __(
846
-                            'Payment method of type %s was not saved because there were validation errors. They have been marked in the form',
847
-                            'event_espresso'
848
-                        ),
849
-                        $payment_method instanceof EE_Payment_Method ? $payment_method->type_obj()->pretty_name()
850
-                            : __('"(unknown)"', 'event_espresso')
851
-                    ),
852
-                    __FILE__,
853
-                    __FUNCTION__,
854
-                    __LINE__
855
-                );
856
-            }
857
-        }
858
-        return;
859
-    }
860
-
861
-
862
-    protected function _payment_settings()
863
-    {
864
-        $this->_template_args['values'] = $this->_yes_no_values;
865
-        $this->_template_args['show_pending_payment_options'] = isset(
866
-            EE_Registry::instance()->CFG->registration->show_pending_payment_options
867
-        )
868
-            ? absint(EE_Registry::instance()->CFG->registration->show_pending_payment_options) : false;
869
-        $this->_set_add_edit_form_tags('update_payment_settings');
870
-        $this->_set_publish_post_box_vars(null, false, false, null, false);
871
-        $this->_template_args['admin_page_content'] = EEH_Template::display_template(
872
-            EE_PAYMENTS_TEMPLATE_PATH
873
-            . 'payment_settings.template.php',
874
-            $this->_template_args,
875
-            true
876
-        );
877
-        $this->display_admin_page_with_sidebar();
878
-    }
879
-
880
-
881
-    /**
882
-     *        _update_payment_settings
883
-     *
884
-     * @access protected
885
-     * @return array
886
-     */
887
-    protected function _update_payment_settings()
888
-    {
889
-        EE_Registry::instance(
890
-        )->CFG->registration->show_pending_payment_options = isset($this->_req_data['show_pending_payment_options'])
891
-            ? $this->_req_data['show_pending_payment_options'] : false;
892
-        EE_Registry::instance()->CFG = apply_filters(
893
-            'FHEE__Payments_Admin_Page___update_payment_settings__CFG',
894
-            EE_Registry::instance()->CFG
895
-        );
896
-        $what = __('Payment Settings', 'event_espresso');
897
-        $success = $this->_update_espresso_configuration(
898
-            $what,
899
-            EE_Registry::instance()->CFG,
900
-            __FILE__,
901
-            __FUNCTION__,
902
-            __LINE__
903
-        );
904
-        $this->_redirect_after_action(
905
-            $success,
906
-            $what,
907
-            __('updated', 'event_espresso'),
908
-            array('action' => 'payment_settings')
909
-        );
910
-    }
911
-
912
-
913
-    protected function _payment_log_overview_list_table()
914
-    {
915
-        $this->display_admin_list_table_page_with_sidebar();
916
-    }
917
-
918
-
919
-    protected function _set_list_table_views_payment_log()
920
-    {
921
-        $this->_views = array(
922
-            'all' => array(
923
-                'slug'  => 'all',
924
-                'label' => __('View All Logs', 'event_espresso'),
925
-                'count' => 0,
926
-            ),
927
-        );
928
-    }
929
-
930
-
931
-    /**
932
-     * @param int  $per_page
933
-     * @param int  $current_page
934
-     * @param bool $count
935
-     * @return array
936
-     */
937
-    public function get_payment_logs($per_page = 50, $current_page = 0, $count = false)
938
-    {
939
-        EE_Registry::instance()->load_model('Change_Log');
940
-        // we may need to do multiple queries (joining differently), so we actually wan tan array of query params
941
-        $query_params = array(array('LOG_type' => EEM_Change_Log::type_gateway));
942
-        // check if they've selected a specific payment method
943
-        if (isset($this->_req_data['_payment_method']) && $this->_req_data['_payment_method'] !== 'all') {
944
-            $query_params[0]['OR*pm_or_pay_pm'] = array(
945
-                'Payment.Payment_Method.PMD_ID' => $this->_req_data['_payment_method'],
946
-                'Payment_Method.PMD_ID'         => $this->_req_data['_payment_method'],
947
-            );
948
-        }
949
-        // take into account search
950
-        if (isset($this->_req_data['s']) && $this->_req_data['s']) {
951
-            $similarity_string = array('LIKE', '%' . str_replace("", "%", $this->_req_data['s']) . '%');
952
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_fname'] = $similarity_string;
953
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_lname'] = $similarity_string;
954
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_email'] = $similarity_string;
955
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_name'] = $similarity_string;
956
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_admin_name'] = $similarity_string;
957
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_type'] = $similarity_string;
958
-            $query_params[0]['OR*s']['LOG_message'] = $similarity_string;
959
-            $query_params[0]['OR*s']['Payment_Method.PMD_name'] = $similarity_string;
960
-            $query_params[0]['OR*s']['Payment_Method.PMD_admin_name'] = $similarity_string;
961
-            $query_params[0]['OR*s']['Payment_Method.PMD_type'] = $similarity_string;
962
-            $query_params[0]['OR*s']['LOG_message'] = $similarity_string;
963
-        }
964
-        if (isset($this->_req_data['payment-filter-start-date'])
965
-            && isset($this->_req_data['payment-filter-end-date'])
966
-        ) {
967
-            // add date
968
-            $start_date = wp_strip_all_tags($this->_req_data['payment-filter-start-date']);
969
-            $end_date = wp_strip_all_tags($this->_req_data['payment-filter-end-date']);
970
-            // make sure our timestamps start and end right at the boundaries for each day
971
-            $start_date = date('Y-m-d', strtotime($start_date)) . ' 00:00:00';
972
-            $end_date = date('Y-m-d', strtotime($end_date)) . ' 23:59:59';
973
-            // convert to timestamps
974
-            $start_date = strtotime($start_date);
975
-            $end_date = strtotime($end_date);
976
-            // makes sure start date is the lowest value and vice versa
977
-            $start_date = min($start_date, $end_date);
978
-            $end_date = max($start_date, $end_date);
979
-            // convert for query
980
-            $start_date = EEM_Change_Log::instance()
981
-                                        ->convert_datetime_for_query(
982
-                                            'LOG_time',
983
-                                            date('Y-m-d H:i:s', $start_date),
984
-                                            'Y-m-d H:i:s'
985
-                                        );
986
-            $end_date = EEM_Change_Log::instance()
987
-                                      ->convert_datetime_for_query(
988
-                                          'LOG_time',
989
-                                          date('Y-m-d H:i:s', $end_date),
990
-                                          'Y-m-d H:i:s'
991
-                                      );
992
-            $query_params[0]['LOG_time'] = array('BETWEEN', array($start_date, $end_date));
993
-        }
994
-        if ($count) {
995
-            return EEM_Change_Log::instance()->count($query_params);
996
-        }
997
-        if (isset($this->_req_data['order'])) {
998
-            $sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) ? $this->_req_data['order']
999
-                : 'DESC';
1000
-            $query_params['order_by'] = array('LOG_time' => $sort);
1001
-        } else {
1002
-            $query_params['order_by'] = array('LOG_time' => 'DESC');
1003
-        }
1004
-        $offset = ($current_page - 1) * $per_page;
1005
-        if (! isset($this->_req_data['download_results'])) {
1006
-            $query_params['limit'] = array($offset, $per_page);
1007
-        }
1008
-        // now they've requested to instead just download the file instead of viewing it.
1009
-        if (isset($this->_req_data['download_results'])) {
1010
-            $wpdb_results = EEM_Change_Log::instance()->get_all_efficiently($query_params);
1011
-            header('Content-Disposition: attachment');
1012
-            header("Content-Disposition: attachment; filename=ee_payment_logs_for_" . sanitize_key(site_url()));
1013
-            echo "<h1>Payment Logs for " . site_url() . "</h1>";
1014
-            echo "<h3>Query:</h3>";
1015
-            var_dump($query_params);
1016
-            echo "<h3>Results:</h3>";
1017
-            var_dump($wpdb_results);
1018
-            die;
1019
-        }
1020
-        $results = EEM_Change_Log::instance()->get_all($query_params);
1021
-        return $results;
1022
-    }
1023
-
1024
-
1025
-    /**
1026
-     * Used by usort to RE-sort log query results, because we lose the ordering
1027
-     * because we're possibly combining the results from two queries
1028
-     *
1029
-     * @param EE_Change_Log $logA
1030
-     * @param EE_Change_Log $logB
1031
-     * @return int
1032
-     */
1033
-    protected function _sort_logs_again($logA, $logB)
1034
-    {
1035
-        $timeA = $logA->get_raw('LOG_time');
1036
-        $timeB = $logB->get_raw('LOG_time');
1037
-        if ($timeA == $timeB) {
1038
-            return 0;
1039
-        }
1040
-        $comparison = $timeA < $timeB ? -1 : 1;
1041
-        if (strtoupper($this->_sort_logs_again_direction) == 'DESC') {
1042
-            return $comparison * -1;
1043
-        } else {
1044
-            return $comparison;
1045
-        }
1046
-    }
1047
-
1048
-
1049
-    protected function _payment_log_details()
1050
-    {
1051
-        EE_Registry::instance()->load_model('Change_Log');
1052
-        /** @var $payment_log EE_Change_Log */
1053
-        $payment_log = EEM_Change_Log::instance()->get_one_by_ID($this->_req_data['ID']);
1054
-        $payment_method = null;
1055
-        $transaction = null;
1056
-        if ($payment_log instanceof EE_Change_Log) {
1057
-            if ($payment_log->object() instanceof EE_Payment) {
1058
-                $payment_method = $payment_log->object()->payment_method();
1059
-                $transaction = $payment_log->object()->transaction();
1060
-            } elseif ($payment_log->object() instanceof EE_Payment_Method) {
1061
-                $payment_method = $payment_log->object();
1062
-            }
1063
-        }
1064
-        $this->_template_args['admin_page_content'] = EEH_Template::display_template(
1065
-            EE_PAYMENTS_TEMPLATE_PATH . 'payment_log_details.template.php',
1066
-            array(
1067
-                'payment_log'    => $payment_log,
1068
-                'payment_method' => $payment_method,
1069
-                'transaction'    => $transaction,
1070
-            ),
1071
-            true
1072
-        );
1073
-        $this->display_admin_page_with_sidebar();
1074
-    }
15
+	/**
16
+	 * Variables used for when we're re-sorting the logs results, in case
17
+	 * we needed to do two queries and we need to resort
18
+	 *
19
+	 * @var string
20
+	 */
21
+	private $_sort_logs_again_direction;
22
+
23
+
24
+	/**
25
+	 * @Constructor
26
+	 * @access public
27
+	 * @param bool $routing indicate whether we want to just load the object and handle routing or just load the object.
28
+	 * @return \Payments_Admin_Page
29
+	 */
30
+	public function __construct($routing = true)
31
+	{
32
+		parent::__construct($routing);
33
+	}
34
+
35
+
36
+	protected function _init_page_props()
37
+	{
38
+		$this->page_slug = EE_PAYMENTS_PG_SLUG;
39
+		$this->page_label = __('Payment Methods', 'event_espresso');
40
+		$this->_admin_base_url = EE_PAYMENTS_ADMIN_URL;
41
+		$this->_admin_base_path = EE_PAYMENTS_ADMIN;
42
+	}
43
+
44
+
45
+	protected function _ajax_hooks()
46
+	{
47
+		// todo: all hooks for ajax goes here.
48
+	}
49
+
50
+
51
+	protected function _define_page_props()
52
+	{
53
+		$this->_admin_page_title = $this->page_label;
54
+		$this->_labels = array(
55
+			'publishbox' => __('Update Settings', 'event_espresso'),
56
+		);
57
+	}
58
+
59
+
60
+	protected function _set_page_routes()
61
+	{
62
+		/**
63
+		 * note that with payment method capabilities, although we've implemented
64
+		 * capability mapping which will be used for accessing payment methods owned by
65
+		 * other users.  This is not fully implemented yet in the payment method ui.
66
+		 * Currently only the "plural" caps are in active use.
67
+		 * When cap mapping is implemented, some routes will need to use the singular form of
68
+		 * capability method and also include the $id of the payment method for the route.
69
+		 **/
70
+		$this->_page_routes = array(
71
+			'default'                   => array(
72
+				'func'       => '_payment_methods_list',
73
+				'capability' => 'ee_edit_payment_methods',
74
+			),
75
+			'payment_settings'          => array(
76
+				'func'       => '_payment_settings',
77
+				'capability' => 'ee_manage_gateways',
78
+			),
79
+			'activate_payment_method'   => array(
80
+				'func'       => '_activate_payment_method',
81
+				'noheader'   => true,
82
+				'capability' => 'ee_edit_payment_methods',
83
+			),
84
+			'deactivate_payment_method' => array(
85
+				'func'       => '_deactivate_payment_method',
86
+				'noheader'   => true,
87
+				'capability' => 'ee_delete_payment_methods',
88
+			),
89
+			'update_payment_method'     => array(
90
+				'func'               => '_update_payment_method',
91
+				'noheader'           => true,
92
+				'headers_sent_route' => 'default',
93
+				'capability'         => 'ee_edit_payment_methods',
94
+			),
95
+			'update_payment_settings'   => array(
96
+				'func'       => '_update_payment_settings',
97
+				'noheader'   => true,
98
+				'capability' => 'ee_manage_gateways',
99
+			),
100
+			'payment_log'               => array(
101
+				'func'       => '_payment_log_overview_list_table',
102
+				'capability' => 'ee_read_payment_methods',
103
+			),
104
+			'payment_log_details'       => array(
105
+				'func'       => '_payment_log_details',
106
+				'capability' => 'ee_read_payment_methods',
107
+			),
108
+		);
109
+	}
110
+
111
+
112
+	protected function _set_page_config()
113
+	{
114
+		$payment_method_list_config = array(
115
+			'nav'           => array(
116
+				'label' => __('Payment Methods', 'event_espresso'),
117
+				'order' => 10,
118
+			),
119
+			'metaboxes'     => $this->_default_espresso_metaboxes,
120
+			'help_tabs'     => array_merge(
121
+				array(
122
+					'payment_methods_overview_help_tab' => array(
123
+						'title'    => __('Payment Methods Overview', 'event_espresso'),
124
+						'filename' => 'payment_methods_overview',
125
+					),
126
+				),
127
+				$this->_add_payment_method_help_tabs()
128
+			),
129
+			'help_tour'     => array('Payment_Methods_Selection_Help_Tour'),
130
+			'require_nonce' => false,
131
+		);
132
+		$this->_page_config = array(
133
+			'default'          => $payment_method_list_config,
134
+			'payment_settings' => array(
135
+				'nav'           => array(
136
+					'label' => __('Settings', 'event_espresso'),
137
+					'order' => 20,
138
+				),
139
+				'help_tabs'     => array(
140
+					'payment_methods_settings_help_tab' => array(
141
+						'title'    => __('Payment Method Settings', 'event_espresso'),
142
+						'filename' => 'payment_methods_settings',
143
+					),
144
+				),
145
+				// 'help_tour' => array( 'Payment_Methods_Settings_Help_Tour' ),
146
+				'metaboxes'     => array_merge($this->_default_espresso_metaboxes, array('_publish_post_box')),
147
+				'require_nonce' => false,
148
+			),
149
+			'payment_log'      => array(
150
+				'nav'           => array(
151
+					'label' => __("Logs", 'event_espresso'),
152
+					'order' => 30,
153
+				),
154
+				'list_table'    => 'Payment_Log_Admin_List_Table',
155
+				'metaboxes'     => $this->_default_espresso_metaboxes,
156
+				'require_nonce' => false,
157
+			),
158
+		);
159
+	}
160
+
161
+
162
+	/**
163
+	 * @return array
164
+	 */
165
+	protected function _add_payment_method_help_tabs()
166
+	{
167
+		EE_Registry::instance()->load_lib('Payment_Method_Manager');
168
+		$payment_method_types = EE_Payment_Method_Manager::instance()->payment_method_types();
169
+		$all_pmt_help_tabs_config = array();
170
+		foreach ($payment_method_types as $payment_method_type) {
171
+			if (! EE_Registry::instance()->CAP->current_user_can(
172
+				$payment_method_type->cap_name(),
173
+				'specific_payment_method_type_access'
174
+			)
175
+			) {
176
+				continue;
177
+			}
178
+			foreach ($payment_method_type->help_tabs_config() as $help_tab_name => $config) {
179
+				$template_args = isset($config['template_args']) ? $config['template_args'] : array();
180
+				$template_args['admin_page_obj'] = $this;
181
+				$all_pmt_help_tabs_config[ $help_tab_name ] = array(
182
+					'title'   => $config['title'],
183
+					'content' => EEH_Template::display_template(
184
+						$payment_method_type->file_folder() . 'help_tabs' . DS . $config['filename'] . '.help_tab.php',
185
+						$template_args,
186
+						true
187
+					),
188
+				);
189
+			}
190
+		}
191
+		return $all_pmt_help_tabs_config;
192
+	}
193
+
194
+
195
+	// none of the below group are currently used for Gateway Settings
196
+	protected function _add_screen_options()
197
+	{
198
+	}
199
+
200
+
201
+	protected function _add_feature_pointers()
202
+	{
203
+	}
204
+
205
+
206
+	public function admin_init()
207
+	{
208
+	}
209
+
210
+
211
+	public function admin_notices()
212
+	{
213
+	}
214
+
215
+
216
+	public function admin_footer_scripts()
217
+	{
218
+	}
219
+
220
+
221
+	public function load_scripts_styles()
222
+	{
223
+		wp_enqueue_script('ee_admin_js');
224
+		wp_enqueue_script('ee-text-links');
225
+		wp_enqueue_script(
226
+			'espresso_payments',
227
+			EE_PAYMENTS_ASSETS_URL . 'espresso_payments_admin.js',
228
+			array('espresso-ui-theme', 'ee-datepicker'),
229
+			EVENT_ESPRESSO_VERSION,
230
+			true
231
+		);
232
+	}
233
+
234
+
235
+	public function load_scripts_styles_default()
236
+	{
237
+		// styles
238
+		wp_register_style(
239
+			'espresso_payments',
240
+			EE_PAYMENTS_ASSETS_URL . 'ee-payments.css',
241
+			array(),
242
+			EVENT_ESPRESSO_VERSION
243
+		);
244
+		wp_enqueue_style('espresso_payments');
245
+		wp_enqueue_style('ee-text-links');
246
+		// scripts
247
+	}
248
+
249
+
250
+	protected function _payment_methods_list()
251
+	{
252
+		/**
253
+		 * first let's ensure payment methods have been setup. We do this here because when people activate a
254
+		 * payment method for the first time (as an addon), it may not setup its capabilities or get registered correctly due
255
+		 * to the loading process.  However, people MUST setup the details for the payment method so its safe to do a
256
+		 * recheck here.
257
+		 */
258
+		EE_Registry::instance()->load_lib('Payment_Method_Manager');
259
+		EEM_Payment_Method::instance()->verify_button_urls();
260
+		// setup tabs, one for each payment method type
261
+		$tabs = array();
262
+		$payment_methods = array();
263
+		foreach (EE_Payment_Method_Manager::instance()->payment_method_types() as $pmt_obj) {
264
+			// we don't want to show admin-only PMTs for now
265
+			if ($pmt_obj instanceof EE_PMT_Admin_Only) {
266
+				continue;
267
+			}
268
+			// check access
269
+			if (! EE_Registry::instance()->CAP->current_user_can(
270
+				$pmt_obj->cap_name(),
271
+				'specific_payment_method_type_access'
272
+			)
273
+			) {
274
+				continue;
275
+			}
276
+			// check for any active pms of that type
277
+			$payment_method = EEM_Payment_Method::instance()->get_one_of_type($pmt_obj->system_name());
278
+			if (! $payment_method instanceof EE_Payment_Method) {
279
+				$payment_method = EE_Payment_Method::new_instance(
280
+					array(
281
+						'PMD_slug'       => sanitize_key($pmt_obj->system_name()),
282
+						'PMD_type'       => $pmt_obj->system_name(),
283
+						'PMD_name'       => $pmt_obj->pretty_name(),
284
+						'PMD_admin_name' => $pmt_obj->pretty_name(),
285
+					)
286
+				);
287
+			}
288
+			$payment_methods[ $payment_method->slug() ] = $payment_method;
289
+		}
290
+		$payment_methods = apply_filters(
291
+			'FHEE__Payments_Admin_Page___payment_methods_list__payment_methods',
292
+			$payment_methods
293
+		);
294
+		foreach ($payment_methods as $payment_method) {
295
+			if ($payment_method instanceof EE_Payment_Method) {
296
+				add_meta_box(
297
+					// html id
298
+					'espresso_' . $payment_method->slug() . '_payment_settings',
299
+					// title
300
+					sprintf(__('%s Settings', 'event_espresso'), $payment_method->admin_name()),
301
+					// callback
302
+					array($this, 'payment_method_settings_meta_box'),
303
+					// post type
304
+					null,
305
+					// context
306
+					'normal',
307
+					// priority
308
+					'default',
309
+					// callback args
310
+					array('payment_method' => $payment_method)
311
+				);
312
+				// setup for tabbed content
313
+				$tabs[ $payment_method->slug() ] = array(
314
+					'label' => $payment_method->admin_name(),
315
+					'class' => $payment_method->active() ? 'gateway-active' : '',
316
+					'href'  => 'espresso_' . $payment_method->slug() . '_payment_settings',
317
+					'title' => __('Modify this Payment Method', 'event_espresso'),
318
+					'slug'  => $payment_method->slug(),
319
+				);
320
+			}
321
+		}
322
+		$this->_template_args['admin_page_header'] = EEH_Tabbed_Content::tab_text_links(
323
+			$tabs,
324
+			'payment_method_links',
325
+			'|',
326
+			$this->_get_active_payment_method_slug()
327
+		);
328
+		$this->display_admin_page_with_sidebar();
329
+	}
330
+
331
+
332
+	/**
333
+	 *   _get_active_payment_method_slug
334
+	 *
335
+	 * @return string
336
+	 */
337
+	protected function _get_active_payment_method_slug()
338
+	{
339
+		$payment_method_slug = false;
340
+		// decide which payment method tab to open first, as dictated by the request's 'payment_method'
341
+		if (isset($this->_req_data['payment_method'])) {
342
+			// if they provided the current payment method, use it
343
+			$payment_method_slug = sanitize_key($this->_req_data['payment_method']);
344
+		}
345
+		$payment_method = EEM_Payment_Method::instance()->get_one(array(array('PMD_slug' => $payment_method_slug)));
346
+		// if that didn't work or wasn't provided, find another way to select the current pm
347
+		if (! $this->_verify_payment_method($payment_method)) {
348
+			// like, looking for an active one
349
+			$payment_method = EEM_Payment_Method::instance()->get_one_active('CART');
350
+			// test that one as well
351
+			if ($this->_verify_payment_method($payment_method)) {
352
+				$payment_method_slug = $payment_method->slug();
353
+			} else {
354
+				$payment_method_slug = 'paypal_standard';
355
+			}
356
+		}
357
+		return $payment_method_slug;
358
+	}
359
+
360
+
361
+	/**
362
+	 *    payment_method_settings_meta_box
363
+	 *    returns TRUE if the passed payment method is properly constructed and the logged in user has the correct
364
+	 *    capabilities to access it
365
+	 *
366
+	 * @param \EE_Payment_Method $payment_method
367
+	 * @return boolean
368
+	 */
369
+	protected function _verify_payment_method($payment_method)
370
+	{
371
+		if ($payment_method instanceof EE_Payment_Method && $payment_method->type_obj() instanceof EE_PMT_Base
372
+			&& EE_Registry::instance()->CAP->current_user_can(
373
+				$payment_method->type_obj()->cap_name(),
374
+				'specific_payment_method_type_access'
375
+			)
376
+		) {
377
+			return true;
378
+		}
379
+		return false;
380
+	}
381
+
382
+
383
+	/**
384
+	 *    payment_method_settings_meta_box
385
+	 *
386
+	 * @param NULL  $post_obj_which_is_null is an object containing the current post (as a $post object)
387
+	 * @param array $metabox                is an array with metabox id, title, callback, and args elements. the value
388
+	 *                                      at 'args' has key 'payment_method', as set within _payment_methods_list
389
+	 * @return string
390
+	 * @throws EE_Error
391
+	 */
392
+	public function payment_method_settings_meta_box($post_obj_which_is_null, $metabox)
393
+	{
394
+		$payment_method = isset($metabox['args'], $metabox['args']['payment_method'])
395
+			? $metabox['args']['payment_method'] : null;
396
+		if (! $payment_method instanceof EE_Payment_Method) {
397
+			throw new EE_Error(
398
+				sprintf(
399
+					__(
400
+						'Payment method metabox setup incorrectly. No Payment method object was supplied',
401
+						'event_espresso'
402
+					)
403
+				)
404
+			);
405
+		}
406
+		$payment_method_scopes = $payment_method->active();
407
+		// if the payment method really exists show its form, otherwise the activation template
408
+		if ($payment_method->ID() && ! empty($payment_method_scopes)) {
409
+			$form = $this->_generate_payment_method_settings_form($payment_method);
410
+			if ($form->form_data_present_in($this->_req_data)) {
411
+				$form->receive_form_submission($this->_req_data);
412
+			}
413
+			echo $form->form_open() . $form->get_html_and_js() . $form->form_close();
414
+		} else {
415
+			echo $this->_activate_payment_method_button($payment_method)->get_html_and_js();
416
+		}
417
+	}
418
+
419
+
420
+	/**
421
+	 * Gets the form for all the settings related to this payment method type
422
+	 *
423
+	 * @access protected
424
+	 * @param \EE_Payment_Method $payment_method
425
+	 * @return \EE_Form_Section_Proper
426
+	 */
427
+	protected function _generate_payment_method_settings_form(EE_Payment_Method $payment_method)
428
+	{
429
+		if (! $payment_method instanceof EE_Payment_Method) {
430
+			return new EE_Form_Section_Proper();
431
+		}
432
+		return new EE_Form_Section_Proper(
433
+			array(
434
+				'name'            => $payment_method->slug() . '_settings_form',
435
+				'html_id'         => $payment_method->slug() . '_settings_form',
436
+				'action'          => EE_Admin_Page::add_query_args_and_nonce(
437
+					array(
438
+						'action'         => 'update_payment_method',
439
+						'payment_method' => $payment_method->slug(),
440
+					),
441
+					EE_PAYMENTS_ADMIN_URL
442
+				),
443
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
444
+				'subsections'     => apply_filters(
445
+					'FHEE__Payments_Admin_Page___generate_payment_method_settings_form__form_subsections',
446
+					array(
447
+						'pci_dss_compliance'      => $this->_pci_dss_compliance($payment_method),
448
+						'currency_support'        => $this->_currency_support($payment_method),
449
+						'payment_method_settings' => $this->_payment_method_settings($payment_method),
450
+						'update'                  => $this->_update_payment_method_button($payment_method),
451
+						'deactivate'              => $this->_deactivate_payment_method_button($payment_method),
452
+						'fine_print'              => $this->_fine_print(),
453
+					),
454
+					$payment_method
455
+				),
456
+			)
457
+		);
458
+	}
459
+
460
+
461
+	/**
462
+	 * _pci_dss_compliance
463
+	 *
464
+	 * @access protected
465
+	 * @param \EE_Payment_Method $payment_method
466
+	 * @return \EE_Form_Section_Proper
467
+	 */
468
+	protected function _pci_dss_compliance(EE_Payment_Method $payment_method)
469
+	{
470
+		if ($payment_method->type_obj()->requires_https()) {
471
+			return new EE_Form_Section_HTML(
472
+				EEH_HTML::tr(
473
+					EEH_HTML::th(
474
+						EEH_HTML::label(
475
+							EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
476
+						)
477
+					) .
478
+					EEH_HTML::td(
479
+						EEH_HTML::strong(
480
+							__(
481
+								'You are responsible for your own website security and Payment Card Industry Data Security Standards (PCI DSS) compliance.',
482
+								'event_espresso'
483
+							)
484
+						)
485
+						.
486
+						EEH_HTML::br()
487
+						.
488
+						__('Learn more about ', 'event_espresso')
489
+						. EEH_HTML::link(
490
+							'https://www.pcisecuritystandards.org/merchants/index.php',
491
+							__('PCI DSS compliance', 'event_espresso')
492
+						)
493
+					)
494
+				)
495
+			);
496
+		} else {
497
+			return new EE_Form_Section_HTML('');
498
+		}
499
+	}
500
+
501
+
502
+	/**
503
+	 * _currency_support
504
+	 *
505
+	 * @access protected
506
+	 * @param \EE_Payment_Method $payment_method
507
+	 * @return \EE_Form_Section_Proper
508
+	 */
509
+	protected function _currency_support(EE_Payment_Method $payment_method)
510
+	{
511
+		if (! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
512
+			return new EE_Form_Section_HTML(
513
+				EEH_HTML::tr(
514
+					EEH_HTML::th(
515
+						EEH_HTML::label(
516
+							EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
517
+						)
518
+					) .
519
+					EEH_HTML::td(
520
+						EEH_HTML::strong(
521
+							sprintf(
522
+								__(
523
+									'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.',
524
+									'event_espresso'
525
+								),
526
+								EE_Config::instance()->currency->code
527
+							)
528
+						)
529
+					)
530
+				)
531
+			);
532
+		} else {
533
+			return new EE_Form_Section_HTML('');
534
+		}
535
+	}
536
+
537
+
538
+	/**
539
+	 * _update_payment_method_button
540
+	 *
541
+	 * @access protected
542
+	 * @param \EE_Payment_Method $payment_method
543
+	 * @return \EE_Form_Section_HTML
544
+	 */
545
+	protected function _payment_method_settings(EE_Payment_Method $payment_method)
546
+	{
547
+		// modify the form so we only have/show fields that will be implemented for this version
548
+		return $this->_simplify_form($payment_method->type_obj()->settings_form(), $payment_method->name());
549
+	}
550
+
551
+
552
+	/**
553
+	 * Simplifies the form to merely reproduce 4.1's gateway settings functionality
554
+	 *
555
+	 * @param EE_Form_Section_Proper $form_section
556
+	 * @param string                 $payment_method_name
557
+	 * @return \EE_Payment_Method_Form
558
+	 * @throws \EE_Error
559
+	 */
560
+	protected function _simplify_form($form_section, $payment_method_name = '')
561
+	{
562
+		if ($form_section instanceof EE_Payment_Method_Form) {
563
+			$form_section->exclude(
564
+				array(
565
+					'PMD_type', // dont want them changing the type
566
+					'PMD_slug', // or the slug (probably never)
567
+					'PMD_wp_user', // or the user's ID
568
+					'Currency' // or the currency, until the rest of EE supports simultaneous currencies
569
+				)
570
+			);
571
+			return $form_section;
572
+		} else {
573
+			throw new EE_Error(
574
+				sprintf(
575
+					__(
576
+						'The EE_Payment_Method_Form for the "%1$s" payment method is missing or invalid.',
577
+						'event_espresso'
578
+					),
579
+					$payment_method_name
580
+				)
581
+			);
582
+		}
583
+	}
584
+
585
+
586
+	/**
587
+	 * _update_payment_method_button
588
+	 *
589
+	 * @access protected
590
+	 * @param \EE_Payment_Method $payment_method
591
+	 * @return \EE_Form_Section_HTML
592
+	 */
593
+	protected function _update_payment_method_button(EE_Payment_Method $payment_method)
594
+	{
595
+		$update_button = new EE_Submit_Input(
596
+			array(
597
+				'name'       => 'submit',
598
+				'html_id'    => 'save_' . $payment_method->slug() . '_settings',
599
+				'default'    => sprintf(
600
+					__('Update %s Payment Settings', 'event_espresso'),
601
+					$payment_method->admin_name()
602
+				),
603
+				'html_label' => EEH_HTML::nbsp(),
604
+			)
605
+		);
606
+		return new EE_Form_Section_HTML(
607
+			EEH_HTML::no_row(EEH_HTML::br(2)) .
608
+			EEH_HTML::tr(
609
+				EEH_HTML::th(__('Update Settings', 'event_espresso')) .
610
+				EEH_HTML::td(
611
+					$update_button->get_html_for_input()
612
+				)
613
+			)
614
+		);
615
+	}
616
+
617
+
618
+	/**
619
+	 * _deactivate_payment_method_button
620
+	 *
621
+	 * @access protected
622
+	 * @param \EE_Payment_Method $payment_method
623
+	 * @return \EE_Form_Section_Proper
624
+	 */
625
+	protected function _deactivate_payment_method_button(EE_Payment_Method $payment_method)
626
+	{
627
+		$link_text_and_title = sprintf(
628
+			__('Deactivate %1$s Payments?', 'event_espresso'),
629
+			$payment_method->admin_name()
630
+		);
631
+		return new EE_Form_Section_HTML(
632
+			EEH_HTML::tr(
633
+				EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')) .
634
+				EEH_HTML::td(
635
+					EEH_HTML::link(
636
+						EE_Admin_Page::add_query_args_and_nonce(
637
+							array(
638
+								'action'         => 'deactivate_payment_method',
639
+								'payment_method' => $payment_method->slug(),
640
+							),
641
+							EE_PAYMENTS_ADMIN_URL
642
+						),
643
+						$link_text_and_title,
644
+						$link_text_and_title,
645
+						'deactivate_' . $payment_method->slug(),
646
+						'espresso-button button-secondary'
647
+					)
648
+				)
649
+			)
650
+		);
651
+	}
652
+
653
+
654
+	/**
655
+	 * _activate_payment_method_button
656
+	 *
657
+	 * @access protected
658
+	 * @param \EE_Payment_Method $payment_method
659
+	 * @return \EE_Form_Section_Proper
660
+	 */
661
+	protected function _activate_payment_method_button(EE_Payment_Method $payment_method)
662
+	{
663
+		$link_text_and_title = sprintf(
664
+			__('Activate %1$s Payment Method?', 'event_espresso'),
665
+			$payment_method->admin_name()
666
+		);
667
+		return new EE_Form_Section_Proper(
668
+			array(
669
+				'name'            => 'activate_' . $payment_method->slug() . '_settings_form',
670
+				'html_id'         => 'activate_' . $payment_method->slug() . '_settings_form',
671
+				'action'          => '#',
672
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
673
+				'subsections'     => apply_filters(
674
+					'FHEE__Payments_Admin_Page___activate_payment_method_button__form_subsections',
675
+					array(
676
+						new EE_Form_Section_HTML(
677
+							EEH_HTML::tr(
678
+								EEH_HTML::td(
679
+									$payment_method->type_obj()->introductory_html(),
680
+									'',
681
+									'',
682
+									'',
683
+									'colspan="2"'
684
+								)
685
+							) .
686
+							EEH_HTML::tr(
687
+								EEH_HTML::th(
688
+									EEH_HTML::label(__('Click to Activate ', 'event_espresso'))
689
+								) .
690
+								EEH_HTML::td(
691
+									EEH_HTML::link(
692
+										EE_Admin_Page::add_query_args_and_nonce(
693
+											array(
694
+												'action'              => 'activate_payment_method',
695
+												'payment_method_type' => $payment_method->type(),
696
+											),
697
+											EE_PAYMENTS_ADMIN_URL
698
+										),
699
+										$link_text_and_title,
700
+										$link_text_and_title,
701
+										'activate_' . $payment_method->slug(),
702
+										'espresso-button-green button-primary'
703
+									)
704
+								)
705
+							)
706
+						),
707
+					),
708
+					$payment_method
709
+				),
710
+			)
711
+		);
712
+	}
713
+
714
+
715
+	/**
716
+	 * _fine_print
717
+	 *
718
+	 * @access protected
719
+	 * @return \EE_Form_Section_HTML
720
+	 */
721
+	protected function _fine_print()
722
+	{
723
+		return new EE_Form_Section_HTML(
724
+			EEH_HTML::tr(
725
+				EEH_HTML::th() .
726
+				EEH_HTML::td(
727
+					EEH_HTML::p(__('All fields marked with a * are required fields', 'event_espresso'), '', 'grey-text')
728
+				)
729
+			)
730
+		);
731
+	}
732
+
733
+
734
+	/**
735
+	 * Activates a payment method of that type. Mostly assuming there is only 1 of that type (or none so far)
736
+	 *
737
+	 * @global WP_User $current_user
738
+	 */
739
+	protected function _activate_payment_method()
740
+	{
741
+		if (isset($this->_req_data['payment_method_type'])) {
742
+			$payment_method_type = sanitize_text_field($this->_req_data['payment_method_type']);
743
+			// see if one exists
744
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
745
+			$payment_method = EE_Payment_Method_Manager::instance()
746
+													   ->activate_a_payment_method_of_type($payment_method_type);
747
+			$this->_redirect_after_action(
748
+				1,
749
+				'Payment Method',
750
+				'activated',
751
+				array('action' => 'default', 'payment_method' => $payment_method->slug())
752
+			);
753
+		} else {
754
+			$this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
755
+		}
756
+	}
757
+
758
+
759
+	/**
760
+	 * Deactivates the payment method with the specified slug, and redirects.
761
+	 */
762
+	protected function _deactivate_payment_method()
763
+	{
764
+		if (isset($this->_req_data['payment_method'])) {
765
+			$payment_method_slug = sanitize_key($this->_req_data['payment_method']);
766
+			// deactivate it
767
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
768
+			$count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method($payment_method_slug);
769
+			$this->_redirect_after_action(
770
+				$count_updated,
771
+				'Payment Method',
772
+				'deactivated',
773
+				array('action' => 'default', 'payment_method' => $payment_method_slug)
774
+			);
775
+		} else {
776
+			$this->_redirect_after_action(false, 'Payment Method', 'deactivated', array('action' => 'default'));
777
+		}
778
+	}
779
+
780
+
781
+	/**
782
+	 * Processes the payment method form that was submitted. This is slightly trickier than usual form
783
+	 * processing because we first need to identify WHICH form was processed and which payment method
784
+	 * it corresponds to. Once we have done that, we see if the form is valid. If it is, the
785
+	 * form's data is saved and we redirect to the default payment methods page, setting the updated payment method
786
+	 * as the currently-selected one. If it DOESN'T validate, we render the page with the form's errors (in the
787
+	 * subsequently called 'headers_sent_func' which is _payment_methods_list)
788
+	 *
789
+	 * @return void
790
+	 */
791
+	protected function _update_payment_method()
792
+	{
793
+		if ($_SERVER['REQUEST_METHOD'] == 'POST') {
794
+			// ok let's find which gateway form to use based on the form input
795
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
796
+			/** @var $correct_pmt_form_to_use EE_Payment_Method_Form */
797
+			$correct_pmt_form_to_use = null;
798
+			$payment_method = null;
799
+			foreach (EEM_Payment_Method::instance()->get_all() as $payment_method) {
800
+				// get the form and simplify it, like what we do when we display it
801
+				$pmt_form = $this->_generate_payment_method_settings_form($payment_method);
802
+				if ($pmt_form->form_data_present_in($this->_req_data)) {
803
+					$correct_pmt_form_to_use = $pmt_form;
804
+					break;
805
+				}
806
+			}
807
+			// if we couldn't find the correct payment method type...
808
+			if (! $correct_pmt_form_to_use) {
809
+				EE_Error::add_error(
810
+					__(
811
+						"We could not find which payment method type your form submission related to. Please contact support",
812
+						'event_espresso'
813
+					),
814
+					__FILE__,
815
+					__FUNCTION__,
816
+					__LINE__
817
+				);
818
+				$this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
819
+			}
820
+			$correct_pmt_form_to_use->receive_form_submission($this->_req_data);
821
+			if ($correct_pmt_form_to_use->is_valid()) {
822
+				$payment_settings_subform = $correct_pmt_form_to_use->get_subsection('payment_method_settings');
823
+				if (! $payment_settings_subform instanceof EE_Payment_Method_Form) {
824
+					throw new EE_Error(
825
+						sprintf(
826
+							__(
827
+								'The payment method could not be saved because the form sections were misnamed. We expected to find %1$s, but did not.',
828
+								'event_espresso'
829
+							),
830
+							'payment_method_settings'
831
+						)
832
+					);
833
+				}
834
+				$payment_settings_subform->save();
835
+				/** @var $pm EE_Payment_Method */
836
+				$this->_redirect_after_action(
837
+					true,
838
+					'Payment Method',
839
+					'updated',
840
+					array('action' => 'default', 'payment_method' => $payment_method->slug())
841
+				);
842
+			} else {
843
+				EE_Error::add_error(
844
+					sprintf(
845
+						__(
846
+							'Payment method of type %s was not saved because there were validation errors. They have been marked in the form',
847
+							'event_espresso'
848
+						),
849
+						$payment_method instanceof EE_Payment_Method ? $payment_method->type_obj()->pretty_name()
850
+							: __('"(unknown)"', 'event_espresso')
851
+					),
852
+					__FILE__,
853
+					__FUNCTION__,
854
+					__LINE__
855
+				);
856
+			}
857
+		}
858
+		return;
859
+	}
860
+
861
+
862
+	protected function _payment_settings()
863
+	{
864
+		$this->_template_args['values'] = $this->_yes_no_values;
865
+		$this->_template_args['show_pending_payment_options'] = isset(
866
+			EE_Registry::instance()->CFG->registration->show_pending_payment_options
867
+		)
868
+			? absint(EE_Registry::instance()->CFG->registration->show_pending_payment_options) : false;
869
+		$this->_set_add_edit_form_tags('update_payment_settings');
870
+		$this->_set_publish_post_box_vars(null, false, false, null, false);
871
+		$this->_template_args['admin_page_content'] = EEH_Template::display_template(
872
+			EE_PAYMENTS_TEMPLATE_PATH
873
+			. 'payment_settings.template.php',
874
+			$this->_template_args,
875
+			true
876
+		);
877
+		$this->display_admin_page_with_sidebar();
878
+	}
879
+
880
+
881
+	/**
882
+	 *        _update_payment_settings
883
+	 *
884
+	 * @access protected
885
+	 * @return array
886
+	 */
887
+	protected function _update_payment_settings()
888
+	{
889
+		EE_Registry::instance(
890
+		)->CFG->registration->show_pending_payment_options = isset($this->_req_data['show_pending_payment_options'])
891
+			? $this->_req_data['show_pending_payment_options'] : false;
892
+		EE_Registry::instance()->CFG = apply_filters(
893
+			'FHEE__Payments_Admin_Page___update_payment_settings__CFG',
894
+			EE_Registry::instance()->CFG
895
+		);
896
+		$what = __('Payment Settings', 'event_espresso');
897
+		$success = $this->_update_espresso_configuration(
898
+			$what,
899
+			EE_Registry::instance()->CFG,
900
+			__FILE__,
901
+			__FUNCTION__,
902
+			__LINE__
903
+		);
904
+		$this->_redirect_after_action(
905
+			$success,
906
+			$what,
907
+			__('updated', 'event_espresso'),
908
+			array('action' => 'payment_settings')
909
+		);
910
+	}
911
+
912
+
913
+	protected function _payment_log_overview_list_table()
914
+	{
915
+		$this->display_admin_list_table_page_with_sidebar();
916
+	}
917
+
918
+
919
+	protected function _set_list_table_views_payment_log()
920
+	{
921
+		$this->_views = array(
922
+			'all' => array(
923
+				'slug'  => 'all',
924
+				'label' => __('View All Logs', 'event_espresso'),
925
+				'count' => 0,
926
+			),
927
+		);
928
+	}
929
+
930
+
931
+	/**
932
+	 * @param int  $per_page
933
+	 * @param int  $current_page
934
+	 * @param bool $count
935
+	 * @return array
936
+	 */
937
+	public function get_payment_logs($per_page = 50, $current_page = 0, $count = false)
938
+	{
939
+		EE_Registry::instance()->load_model('Change_Log');
940
+		// we may need to do multiple queries (joining differently), so we actually wan tan array of query params
941
+		$query_params = array(array('LOG_type' => EEM_Change_Log::type_gateway));
942
+		// check if they've selected a specific payment method
943
+		if (isset($this->_req_data['_payment_method']) && $this->_req_data['_payment_method'] !== 'all') {
944
+			$query_params[0]['OR*pm_or_pay_pm'] = array(
945
+				'Payment.Payment_Method.PMD_ID' => $this->_req_data['_payment_method'],
946
+				'Payment_Method.PMD_ID'         => $this->_req_data['_payment_method'],
947
+			);
948
+		}
949
+		// take into account search
950
+		if (isset($this->_req_data['s']) && $this->_req_data['s']) {
951
+			$similarity_string = array('LIKE', '%' . str_replace("", "%", $this->_req_data['s']) . '%');
952
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_fname'] = $similarity_string;
953
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_lname'] = $similarity_string;
954
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_email'] = $similarity_string;
955
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_name'] = $similarity_string;
956
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_admin_name'] = $similarity_string;
957
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_type'] = $similarity_string;
958
+			$query_params[0]['OR*s']['LOG_message'] = $similarity_string;
959
+			$query_params[0]['OR*s']['Payment_Method.PMD_name'] = $similarity_string;
960
+			$query_params[0]['OR*s']['Payment_Method.PMD_admin_name'] = $similarity_string;
961
+			$query_params[0]['OR*s']['Payment_Method.PMD_type'] = $similarity_string;
962
+			$query_params[0]['OR*s']['LOG_message'] = $similarity_string;
963
+		}
964
+		if (isset($this->_req_data['payment-filter-start-date'])
965
+			&& isset($this->_req_data['payment-filter-end-date'])
966
+		) {
967
+			// add date
968
+			$start_date = wp_strip_all_tags($this->_req_data['payment-filter-start-date']);
969
+			$end_date = wp_strip_all_tags($this->_req_data['payment-filter-end-date']);
970
+			// make sure our timestamps start and end right at the boundaries for each day
971
+			$start_date = date('Y-m-d', strtotime($start_date)) . ' 00:00:00';
972
+			$end_date = date('Y-m-d', strtotime($end_date)) . ' 23:59:59';
973
+			// convert to timestamps
974
+			$start_date = strtotime($start_date);
975
+			$end_date = strtotime($end_date);
976
+			// makes sure start date is the lowest value and vice versa
977
+			$start_date = min($start_date, $end_date);
978
+			$end_date = max($start_date, $end_date);
979
+			// convert for query
980
+			$start_date = EEM_Change_Log::instance()
981
+										->convert_datetime_for_query(
982
+											'LOG_time',
983
+											date('Y-m-d H:i:s', $start_date),
984
+											'Y-m-d H:i:s'
985
+										);
986
+			$end_date = EEM_Change_Log::instance()
987
+									  ->convert_datetime_for_query(
988
+										  'LOG_time',
989
+										  date('Y-m-d H:i:s', $end_date),
990
+										  'Y-m-d H:i:s'
991
+									  );
992
+			$query_params[0]['LOG_time'] = array('BETWEEN', array($start_date, $end_date));
993
+		}
994
+		if ($count) {
995
+			return EEM_Change_Log::instance()->count($query_params);
996
+		}
997
+		if (isset($this->_req_data['order'])) {
998
+			$sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) ? $this->_req_data['order']
999
+				: 'DESC';
1000
+			$query_params['order_by'] = array('LOG_time' => $sort);
1001
+		} else {
1002
+			$query_params['order_by'] = array('LOG_time' => 'DESC');
1003
+		}
1004
+		$offset = ($current_page - 1) * $per_page;
1005
+		if (! isset($this->_req_data['download_results'])) {
1006
+			$query_params['limit'] = array($offset, $per_page);
1007
+		}
1008
+		// now they've requested to instead just download the file instead of viewing it.
1009
+		if (isset($this->_req_data['download_results'])) {
1010
+			$wpdb_results = EEM_Change_Log::instance()->get_all_efficiently($query_params);
1011
+			header('Content-Disposition: attachment');
1012
+			header("Content-Disposition: attachment; filename=ee_payment_logs_for_" . sanitize_key(site_url()));
1013
+			echo "<h1>Payment Logs for " . site_url() . "</h1>";
1014
+			echo "<h3>Query:</h3>";
1015
+			var_dump($query_params);
1016
+			echo "<h3>Results:</h3>";
1017
+			var_dump($wpdb_results);
1018
+			die;
1019
+		}
1020
+		$results = EEM_Change_Log::instance()->get_all($query_params);
1021
+		return $results;
1022
+	}
1023
+
1024
+
1025
+	/**
1026
+	 * Used by usort to RE-sort log query results, because we lose the ordering
1027
+	 * because we're possibly combining the results from two queries
1028
+	 *
1029
+	 * @param EE_Change_Log $logA
1030
+	 * @param EE_Change_Log $logB
1031
+	 * @return int
1032
+	 */
1033
+	protected function _sort_logs_again($logA, $logB)
1034
+	{
1035
+		$timeA = $logA->get_raw('LOG_time');
1036
+		$timeB = $logB->get_raw('LOG_time');
1037
+		if ($timeA == $timeB) {
1038
+			return 0;
1039
+		}
1040
+		$comparison = $timeA < $timeB ? -1 : 1;
1041
+		if (strtoupper($this->_sort_logs_again_direction) == 'DESC') {
1042
+			return $comparison * -1;
1043
+		} else {
1044
+			return $comparison;
1045
+		}
1046
+	}
1047
+
1048
+
1049
+	protected function _payment_log_details()
1050
+	{
1051
+		EE_Registry::instance()->load_model('Change_Log');
1052
+		/** @var $payment_log EE_Change_Log */
1053
+		$payment_log = EEM_Change_Log::instance()->get_one_by_ID($this->_req_data['ID']);
1054
+		$payment_method = null;
1055
+		$transaction = null;
1056
+		if ($payment_log instanceof EE_Change_Log) {
1057
+			if ($payment_log->object() instanceof EE_Payment) {
1058
+				$payment_method = $payment_log->object()->payment_method();
1059
+				$transaction = $payment_log->object()->transaction();
1060
+			} elseif ($payment_log->object() instanceof EE_Payment_Method) {
1061
+				$payment_method = $payment_log->object();
1062
+			}
1063
+		}
1064
+		$this->_template_args['admin_page_content'] = EEH_Template::display_template(
1065
+			EE_PAYMENTS_TEMPLATE_PATH . 'payment_log_details.template.php',
1066
+			array(
1067
+				'payment_log'    => $payment_log,
1068
+				'payment_method' => $payment_method,
1069
+				'transaction'    => $transaction,
1070
+			),
1071
+			true
1072
+		);
1073
+		$this->display_admin_page_with_sidebar();
1074
+	}
1075 1075
 }
Please login to merge, or discard this patch.
Spacing   +40 added lines, -40 removed lines patch added patch discarded remove patch
@@ -168,7 +168,7 @@  discard block
 block discarded – undo
168 168
         $payment_method_types = EE_Payment_Method_Manager::instance()->payment_method_types();
169 169
         $all_pmt_help_tabs_config = array();
170 170
         foreach ($payment_method_types as $payment_method_type) {
171
-            if (! EE_Registry::instance()->CAP->current_user_can(
171
+            if ( ! EE_Registry::instance()->CAP->current_user_can(
172 172
                 $payment_method_type->cap_name(),
173 173
                 'specific_payment_method_type_access'
174 174
             )
@@ -178,10 +178,10 @@  discard block
 block discarded – undo
178 178
             foreach ($payment_method_type->help_tabs_config() as $help_tab_name => $config) {
179 179
                 $template_args = isset($config['template_args']) ? $config['template_args'] : array();
180 180
                 $template_args['admin_page_obj'] = $this;
181
-                $all_pmt_help_tabs_config[ $help_tab_name ] = array(
181
+                $all_pmt_help_tabs_config[$help_tab_name] = array(
182 182
                     'title'   => $config['title'],
183 183
                     'content' => EEH_Template::display_template(
184
-                        $payment_method_type->file_folder() . 'help_tabs' . DS . $config['filename'] . '.help_tab.php',
184
+                        $payment_method_type->file_folder().'help_tabs'.DS.$config['filename'].'.help_tab.php',
185 185
                         $template_args,
186 186
                         true
187 187
                     ),
@@ -224,7 +224,7 @@  discard block
 block discarded – undo
224 224
         wp_enqueue_script('ee-text-links');
225 225
         wp_enqueue_script(
226 226
             'espresso_payments',
227
-            EE_PAYMENTS_ASSETS_URL . 'espresso_payments_admin.js',
227
+            EE_PAYMENTS_ASSETS_URL.'espresso_payments_admin.js',
228 228
             array('espresso-ui-theme', 'ee-datepicker'),
229 229
             EVENT_ESPRESSO_VERSION,
230 230
             true
@@ -237,7 +237,7 @@  discard block
 block discarded – undo
237 237
         // styles
238 238
         wp_register_style(
239 239
             'espresso_payments',
240
-            EE_PAYMENTS_ASSETS_URL . 'ee-payments.css',
240
+            EE_PAYMENTS_ASSETS_URL.'ee-payments.css',
241 241
             array(),
242 242
             EVENT_ESPRESSO_VERSION
243 243
         );
@@ -266,7 +266,7 @@  discard block
 block discarded – undo
266 266
                 continue;
267 267
             }
268 268
             // check access
269
-            if (! EE_Registry::instance()->CAP->current_user_can(
269
+            if ( ! EE_Registry::instance()->CAP->current_user_can(
270 270
                 $pmt_obj->cap_name(),
271 271
                 'specific_payment_method_type_access'
272 272
             )
@@ -275,7 +275,7 @@  discard block
 block discarded – undo
275 275
             }
276 276
             // check for any active pms of that type
277 277
             $payment_method = EEM_Payment_Method::instance()->get_one_of_type($pmt_obj->system_name());
278
-            if (! $payment_method instanceof EE_Payment_Method) {
278
+            if ( ! $payment_method instanceof EE_Payment_Method) {
279 279
                 $payment_method = EE_Payment_Method::new_instance(
280 280
                     array(
281 281
                         'PMD_slug'       => sanitize_key($pmt_obj->system_name()),
@@ -285,7 +285,7 @@  discard block
 block discarded – undo
285 285
                     )
286 286
                 );
287 287
             }
288
-            $payment_methods[ $payment_method->slug() ] = $payment_method;
288
+            $payment_methods[$payment_method->slug()] = $payment_method;
289 289
         }
290 290
         $payment_methods = apply_filters(
291 291
             'FHEE__Payments_Admin_Page___payment_methods_list__payment_methods',
@@ -295,7 +295,7 @@  discard block
 block discarded – undo
295 295
             if ($payment_method instanceof EE_Payment_Method) {
296 296
                 add_meta_box(
297 297
                     // html id
298
-                    'espresso_' . $payment_method->slug() . '_payment_settings',
298
+                    'espresso_'.$payment_method->slug().'_payment_settings',
299 299
                     // title
300 300
                     sprintf(__('%s Settings', 'event_espresso'), $payment_method->admin_name()),
301 301
                     // callback
@@ -310,10 +310,10 @@  discard block
 block discarded – undo
310 310
                     array('payment_method' => $payment_method)
311 311
                 );
312 312
                 // setup for tabbed content
313
-                $tabs[ $payment_method->slug() ] = array(
313
+                $tabs[$payment_method->slug()] = array(
314 314
                     'label' => $payment_method->admin_name(),
315 315
                     'class' => $payment_method->active() ? 'gateway-active' : '',
316
-                    'href'  => 'espresso_' . $payment_method->slug() . '_payment_settings',
316
+                    'href'  => 'espresso_'.$payment_method->slug().'_payment_settings',
317 317
                     'title' => __('Modify this Payment Method', 'event_espresso'),
318 318
                     'slug'  => $payment_method->slug(),
319 319
                 );
@@ -344,7 +344,7 @@  discard block
 block discarded – undo
344 344
         }
345 345
         $payment_method = EEM_Payment_Method::instance()->get_one(array(array('PMD_slug' => $payment_method_slug)));
346 346
         // if that didn't work or wasn't provided, find another way to select the current pm
347
-        if (! $this->_verify_payment_method($payment_method)) {
347
+        if ( ! $this->_verify_payment_method($payment_method)) {
348 348
             // like, looking for an active one
349 349
             $payment_method = EEM_Payment_Method::instance()->get_one_active('CART');
350 350
             // test that one as well
@@ -393,7 +393,7 @@  discard block
 block discarded – undo
393 393
     {
394 394
         $payment_method = isset($metabox['args'], $metabox['args']['payment_method'])
395 395
             ? $metabox['args']['payment_method'] : null;
396
-        if (! $payment_method instanceof EE_Payment_Method) {
396
+        if ( ! $payment_method instanceof EE_Payment_Method) {
397 397
             throw new EE_Error(
398 398
                 sprintf(
399 399
                     __(
@@ -410,7 +410,7 @@  discard block
 block discarded – undo
410 410
             if ($form->form_data_present_in($this->_req_data)) {
411 411
                 $form->receive_form_submission($this->_req_data);
412 412
             }
413
-            echo $form->form_open() . $form->get_html_and_js() . $form->form_close();
413
+            echo $form->form_open().$form->get_html_and_js().$form->form_close();
414 414
         } else {
415 415
             echo $this->_activate_payment_method_button($payment_method)->get_html_and_js();
416 416
         }
@@ -426,13 +426,13 @@  discard block
 block discarded – undo
426 426
      */
427 427
     protected function _generate_payment_method_settings_form(EE_Payment_Method $payment_method)
428 428
     {
429
-        if (! $payment_method instanceof EE_Payment_Method) {
429
+        if ( ! $payment_method instanceof EE_Payment_Method) {
430 430
             return new EE_Form_Section_Proper();
431 431
         }
432 432
         return new EE_Form_Section_Proper(
433 433
             array(
434
-                'name'            => $payment_method->slug() . '_settings_form',
435
-                'html_id'         => $payment_method->slug() . '_settings_form',
434
+                'name'            => $payment_method->slug().'_settings_form',
435
+                'html_id'         => $payment_method->slug().'_settings_form',
436 436
                 'action'          => EE_Admin_Page::add_query_args_and_nonce(
437 437
                     array(
438 438
                         'action'         => 'update_payment_method',
@@ -474,7 +474,7 @@  discard block
 block discarded – undo
474 474
                         EEH_HTML::label(
475 475
                             EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
476 476
                         )
477
-                    ) .
477
+                    ).
478 478
                     EEH_HTML::td(
479 479
                         EEH_HTML::strong(
480 480
                             __(
@@ -508,14 +508,14 @@  discard block
 block discarded – undo
508 508
      */
509 509
     protected function _currency_support(EE_Payment_Method $payment_method)
510 510
     {
511
-        if (! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
511
+        if ( ! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
512 512
             return new EE_Form_Section_HTML(
513 513
                 EEH_HTML::tr(
514 514
                     EEH_HTML::th(
515 515
                         EEH_HTML::label(
516 516
                             EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
517 517
                         )
518
-                    ) .
518
+                    ).
519 519
                     EEH_HTML::td(
520 520
                         EEH_HTML::strong(
521 521
                             sprintf(
@@ -595,7 +595,7 @@  discard block
 block discarded – undo
595 595
         $update_button = new EE_Submit_Input(
596 596
             array(
597 597
                 'name'       => 'submit',
598
-                'html_id'    => 'save_' . $payment_method->slug() . '_settings',
598
+                'html_id'    => 'save_'.$payment_method->slug().'_settings',
599 599
                 'default'    => sprintf(
600 600
                     __('Update %s Payment Settings', 'event_espresso'),
601 601
                     $payment_method->admin_name()
@@ -604,9 +604,9 @@  discard block
 block discarded – undo
604 604
             )
605 605
         );
606 606
         return new EE_Form_Section_HTML(
607
-            EEH_HTML::no_row(EEH_HTML::br(2)) .
607
+            EEH_HTML::no_row(EEH_HTML::br(2)).
608 608
             EEH_HTML::tr(
609
-                EEH_HTML::th(__('Update Settings', 'event_espresso')) .
609
+                EEH_HTML::th(__('Update Settings', 'event_espresso')).
610 610
                 EEH_HTML::td(
611 611
                     $update_button->get_html_for_input()
612 612
                 )
@@ -630,7 +630,7 @@  discard block
 block discarded – undo
630 630
         );
631 631
         return new EE_Form_Section_HTML(
632 632
             EEH_HTML::tr(
633
-                EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')) .
633
+                EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')).
634 634
                 EEH_HTML::td(
635 635
                     EEH_HTML::link(
636 636
                         EE_Admin_Page::add_query_args_and_nonce(
@@ -642,7 +642,7 @@  discard block
 block discarded – undo
642 642
                         ),
643 643
                         $link_text_and_title,
644 644
                         $link_text_and_title,
645
-                        'deactivate_' . $payment_method->slug(),
645
+                        'deactivate_'.$payment_method->slug(),
646 646
                         'espresso-button button-secondary'
647 647
                     )
648 648
                 )
@@ -666,8 +666,8 @@  discard block
 block discarded – undo
666 666
         );
667 667
         return new EE_Form_Section_Proper(
668 668
             array(
669
-                'name'            => 'activate_' . $payment_method->slug() . '_settings_form',
670
-                'html_id'         => 'activate_' . $payment_method->slug() . '_settings_form',
669
+                'name'            => 'activate_'.$payment_method->slug().'_settings_form',
670
+                'html_id'         => 'activate_'.$payment_method->slug().'_settings_form',
671 671
                 'action'          => '#',
672 672
                 'layout_strategy' => new EE_Admin_Two_Column_Layout(),
673 673
                 'subsections'     => apply_filters(
@@ -682,11 +682,11 @@  discard block
 block discarded – undo
682 682
                                     '',
683 683
                                     'colspan="2"'
684 684
                                 )
685
-                            ) .
685
+                            ).
686 686
                             EEH_HTML::tr(
687 687
                                 EEH_HTML::th(
688 688
                                     EEH_HTML::label(__('Click to Activate ', 'event_espresso'))
689
-                                ) .
689
+                                ).
690 690
                                 EEH_HTML::td(
691 691
                                     EEH_HTML::link(
692 692
                                         EE_Admin_Page::add_query_args_and_nonce(
@@ -698,7 +698,7 @@  discard block
 block discarded – undo
698 698
                                         ),
699 699
                                         $link_text_and_title,
700 700
                                         $link_text_and_title,
701
-                                        'activate_' . $payment_method->slug(),
701
+                                        'activate_'.$payment_method->slug(),
702 702
                                         'espresso-button-green button-primary'
703 703
                                     )
704 704
                                 )
@@ -722,7 +722,7 @@  discard block
 block discarded – undo
722 722
     {
723 723
         return new EE_Form_Section_HTML(
724 724
             EEH_HTML::tr(
725
-                EEH_HTML::th() .
725
+                EEH_HTML::th().
726 726
                 EEH_HTML::td(
727 727
                     EEH_HTML::p(__('All fields marked with a * are required fields', 'event_espresso'), '', 'grey-text')
728 728
                 )
@@ -805,7 +805,7 @@  discard block
 block discarded – undo
805 805
                 }
806 806
             }
807 807
             // if we couldn't find the correct payment method type...
808
-            if (! $correct_pmt_form_to_use) {
808
+            if ( ! $correct_pmt_form_to_use) {
809 809
                 EE_Error::add_error(
810 810
                     __(
811 811
                         "We could not find which payment method type your form submission related to. Please contact support",
@@ -820,7 +820,7 @@  discard block
 block discarded – undo
820 820
             $correct_pmt_form_to_use->receive_form_submission($this->_req_data);
821 821
             if ($correct_pmt_form_to_use->is_valid()) {
822 822
                 $payment_settings_subform = $correct_pmt_form_to_use->get_subsection('payment_method_settings');
823
-                if (! $payment_settings_subform instanceof EE_Payment_Method_Form) {
823
+                if ( ! $payment_settings_subform instanceof EE_Payment_Method_Form) {
824 824
                     throw new EE_Error(
825 825
                         sprintf(
826 826
                             __(
@@ -948,7 +948,7 @@  discard block
 block discarded – undo
948 948
         }
949 949
         // take into account search
950 950
         if (isset($this->_req_data['s']) && $this->_req_data['s']) {
951
-            $similarity_string = array('LIKE', '%' . str_replace("", "%", $this->_req_data['s']) . '%');
951
+            $similarity_string = array('LIKE', '%'.str_replace("", "%", $this->_req_data['s']).'%');
952 952
             $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_fname'] = $similarity_string;
953 953
             $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_lname'] = $similarity_string;
954 954
             $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_email'] = $similarity_string;
@@ -968,8 +968,8 @@  discard block
 block discarded – undo
968 968
             $start_date = wp_strip_all_tags($this->_req_data['payment-filter-start-date']);
969 969
             $end_date = wp_strip_all_tags($this->_req_data['payment-filter-end-date']);
970 970
             // make sure our timestamps start and end right at the boundaries for each day
971
-            $start_date = date('Y-m-d', strtotime($start_date)) . ' 00:00:00';
972
-            $end_date = date('Y-m-d', strtotime($end_date)) . ' 23:59:59';
971
+            $start_date = date('Y-m-d', strtotime($start_date)).' 00:00:00';
972
+            $end_date = date('Y-m-d', strtotime($end_date)).' 23:59:59';
973 973
             // convert to timestamps
974 974
             $start_date = strtotime($start_date);
975 975
             $end_date = strtotime($end_date);
@@ -1002,15 +1002,15 @@  discard block
 block discarded – undo
1002 1002
             $query_params['order_by'] = array('LOG_time' => 'DESC');
1003 1003
         }
1004 1004
         $offset = ($current_page - 1) * $per_page;
1005
-        if (! isset($this->_req_data['download_results'])) {
1005
+        if ( ! isset($this->_req_data['download_results'])) {
1006 1006
             $query_params['limit'] = array($offset, $per_page);
1007 1007
         }
1008 1008
         // now they've requested to instead just download the file instead of viewing it.
1009 1009
         if (isset($this->_req_data['download_results'])) {
1010 1010
             $wpdb_results = EEM_Change_Log::instance()->get_all_efficiently($query_params);
1011 1011
             header('Content-Disposition: attachment');
1012
-            header("Content-Disposition: attachment; filename=ee_payment_logs_for_" . sanitize_key(site_url()));
1013
-            echo "<h1>Payment Logs for " . site_url() . "</h1>";
1012
+            header("Content-Disposition: attachment; filename=ee_payment_logs_for_".sanitize_key(site_url()));
1013
+            echo "<h1>Payment Logs for ".site_url()."</h1>";
1014 1014
             echo "<h3>Query:</h3>";
1015 1015
             var_dump($query_params);
1016 1016
             echo "<h3>Results:</h3>";
@@ -1062,7 +1062,7 @@  discard block
 block discarded – undo
1062 1062
             }
1063 1063
         }
1064 1064
         $this->_template_args['admin_page_content'] = EEH_Template::display_template(
1065
-            EE_PAYMENTS_TEMPLATE_PATH . 'payment_log_details.template.php',
1065
+            EE_PAYMENTS_TEMPLATE_PATH.'payment_log_details.template.php',
1066 1066
             array(
1067 1067
                 'payment_log'    => $payment_log,
1068 1068
                 'payment_method' => $payment_method,
Please login to merge, or discard this patch.
core/libraries/form_sections/base/EE_Model_Form_Section.form.php 3 patches
Doc Comments   +1 added lines patch added patch discarded remove patch
@@ -372,6 +372,7 @@
 block discarded – undo
372 372
      * save the relations indicated
373 373
      *
374 374
      * @type string $relation_name
375
+     * @param integer $relation_name
375 376
      * @return bool
376 377
      * @throws EE_Error
377 378
      */
Please login to merge, or discard this patch.
Indentation   +455 added lines, -455 removed lines patch added patch discarded remove patch
@@ -14,459 +14,459 @@
 block discarded – undo
14 14
 class EE_Model_Form_Section extends EE_Form_Section_Proper
15 15
 {
16 16
 
17
-    /**
18
-     * @var EEM_Base
19
-     */
20
-    protected $_model = null;
21
-
22
-    /**
23
-     * @var EE_Base_Class
24
-     */
25
-    protected $_model_object = null;
26
-
27
-
28
-
29
-    /**
30
-     * @param array        $options_array   keys: {
31
-     * @type EEM_Base      $model
32
-     * @type EE_Base_Class $model_object
33
-     * @type array         $subsection_args array keys should be subsection names (that either do or will exist), and
34
-     *       values are the arrays as you would pass them to that subsection
35
-     *                                      }
36
-     * @throws EE_Error
37
-     */
38
-    public function __construct($options_array = array())
39
-    {
40
-        if (isset($options_array['model']) && $options_array['model'] instanceof EEM_Base) {
41
-            $this->_model = $options_array['model'];
42
-        }
43
-        if (! $this->_model || ! $this->_model instanceof EEM_Base) {
44
-            throw new EE_Error(sprintf(__(
45
-                "Model Form Sections must first specify the _model property to be a subclass of EEM_Base",
46
-                "event_espresso"
47
-            )));
48
-        }
49
-        if (isset($options_array['subsection_args'])) {
50
-            $subsection_args = $options_array['subsection_args'];
51
-        } else {
52
-            $subsection_args = array();
53
-        }
54
-        // gather fields and relations to convert to inputs
55
-        // but if they're just going to exclude a field anyways, don't bother converting it to an input
56
-        $exclude = $this->_subsections;
57
-        if (isset($options_array['exclude'])) {
58
-            $exclude = array_merge($exclude, array_flip($options_array['exclude']));
59
-        }
60
-        $model_fields = array_diff_key($this->_model->field_settings(), $exclude);
61
-        $model_relations = array_diff_key($this->_model->relation_settings(), $exclude);
62
-        // convert fields and relations to inputs
63
-        $this->_subsections = array_merge(
64
-            $this->_convert_model_fields_to_inputs($model_fields),
65
-            $this->_convert_model_relations_to_inputs($model_relations, $subsection_args),
66
-            $this->_subsections
67
-        );
68
-        parent::__construct($options_array);
69
-        if (isset($options_array['model_object']) && $options_array['model_object'] instanceof EE_Base_Class) {
70
-            $this->populate_model_obj($options_array['model_object']);
71
-        }
72
-    }
73
-
74
-
75
-
76
-    /**
77
-     * For now, just makes inputs for only HABTM relations
78
-     *
79
-     * @param EE_Model_Relation_Base[] $relations
80
-     * @param array                    $subsection_args keys should be existing or soon-to-be-existing input names, and
81
-     *                                                  their values are {
82
-     * @type array {
83
-     * @type EE_Base_Class[]           $model_objects   if the subsection is an EE_Select_Multi_Model_Input
84
-     *                                                  }
85
-     *                                                  }
86
-     * @return array
87
-     */
88
-    protected function _convert_model_relations_to_inputs($relations, $subsection_args = array())
89
-    {
90
-        $inputs = array();
91
-        foreach ($relations as $relation_name => $relation_obj) {
92
-            $input_constructor_args = array(
93
-                array_merge(
94
-                    array(
95
-                        'required'        => $relation_obj instanceof EE_Belongs_To_Relation,
96
-                        'html_label_text' => $relation_obj instanceof EE_Belongs_To_Relation
97
-                            ? $relation_obj->get_other_model()->item_name(1)
98
-                            : $relation_obj->get_other_model()
99
-                                           ->item_name(2),
100
-                    ),
101
-                    $subsection_args
102
-                ),
103
-            );
104
-            $input = null;
105
-            switch (get_class($relation_obj)) {
106
-                case 'EE_HABTM_Relation':
107
-                    if (isset($subsection_args[ $relation_name ])
108
-                        && isset($subsection_args[ $relation_name ]['model_objects'])
109
-                    ) {
110
-                        $model_objects = $subsection_args[ $relation_name ]['model_objects'];
111
-                    } else {
112
-                        $model_objects = $relation_obj->get_other_model()->get_all();
113
-                    }
114
-                    $input = new EE_Select_Multi_Model_Input($model_objects, $input_constructor_args);
115
-                    break;
116
-                default:
117
-            }
118
-            if ($input) {
119
-                $inputs[ $relation_name ] = $input;
120
-            }
121
-        }
122
-        return $inputs;
123
-    }
124
-
125
-
126
-
127
-    /**
128
-     * Changes model fields into form section inputs
129
-     *
130
-     * @param EE_Model_Field_Base[] $model_fields keys are the model's name
131
-     * @throws EE_Error
132
-     * @return EE_Form_Input_Base[]
133
-     */
134
-    protected function _convert_model_fields_to_inputs($model_fields = array())
135
-    {
136
-        $inputs = array();
137
-        foreach ($model_fields as $field_name => $model_field) {
138
-            if ($model_field instanceof EE_Model_Field_Base) {
139
-                $input_constructor_args = array(
140
-                    array(
141
-                        'required'        => ! $model_field->is_nullable()
142
-                                             && $model_field->get_default_value()
143
-                                                === null,
144
-                        'html_label_text' => $model_field->get_nicename(),
145
-                        'default'         => $model_field->get_default_value(),
146
-                    ),
147
-                );
148
-                switch (get_class($model_field)) {
149
-                    case 'EE_All_Caps_Text_Field':
150
-                    case 'EE_Any_Foreign_Model_Name_Field':
151
-                        $input_class = 'EE_Text_Input';
152
-                        break;
153
-                    case 'EE_Boolean_Field':
154
-                        $input_class = 'EE_Yes_No_Input';
155
-                        break;
156
-                    case 'EE_Datetime_Field':
157
-                        throw new EE_Error(sprintf(__(
158
-                            "Model field '%s' does not yet have a known conversion to form input",
159
-                            "event_espresso"
160
-                        ), get_class($model_field)));
161
-                        break;
162
-                    case 'EE_Email_Field':
163
-                        $input_class = 'EE_Email_Input';
164
-                        break;
165
-                    case 'EE_Enum_Integer_Field':
166
-                        throw new EE_Error(sprintf(__(
167
-                            "Model field '%s' does not yet have a known conversion to form input",
168
-                            "event_espresso"
169
-                        ), get_class($model_field)));
170
-                        break;
171
-                    case 'EE_Enum_Text_Field':
172
-                        throw new EE_Error(sprintf(__(
173
-                            "Model field '%s' does not yet have a known conversion to form input",
174
-                            "event_espresso"
175
-                        ), get_class($model_field)));
176
-                        break;
177
-                    case 'EE_Float_Field':
178
-                        $input_class = 'EE_Float_Input';
179
-                        break;
180
-                    case 'EE_Foreign_Key_Int_Field':
181
-                    case 'EE_Foreign_Key_String_Field':
182
-                    case 'EE_WP_User_Field':
183
-                        $models_pointed_to = $model_field instanceof EE_Field_With_Model_Name
184
-                            ? $model_field->get_model_class_names_pointed_to() : array();
185
-                        if (true || is_array($models_pointed_to) && count($models_pointed_to) > 1) {
186
-                            $input_class = 'EE_Text_Input';
187
-                        } else {
188
-                            // so its just one model
189
-                            $model_name = is_array($models_pointed_to) ? reset($models_pointed_to) : $models_pointed_to;
190
-                            $model = EE_Registry::instance()->load_model($model_name);
191
-                            $model_names = $model->get_all_names(array('limit' => 10));
192
-                            if ($model_field->is_nullable()) {
193
-                                array_unshift($model_names, __("Please Select", 'event_espresso'));
194
-                            }
195
-                            $input_constructor_args[1] = $input_constructor_args[0];
196
-                            $input_constructor_args[0] = $model_names;
197
-                            $input_class = 'EE_Select_Input';
198
-                        }
199
-                        break;
200
-                    case 'EE_Full_HTML_Field':
201
-                        $input_class = 'EE_Text_Area_Input';
202
-                        $input_constructor_args[0]['validation_strategies'] = array(new EE_Full_HTML_Validation_Strategy());
203
-                        break;
204
-                    case 'EE_Infinite_Integer':
205
-                        throw new EE_Error(sprintf(__(
206
-                            "Model field '%s' does not yet have a known conversion to form input",
207
-                            "event_espresso"
208
-                        ), get_class($model_field)));
209
-                        break;
210
-                    case 'EE_Integer_Field':
211
-                        $input_class = 'EE_Text_Input';
212
-                        break;
213
-                    case 'EE_Maybe_Serialized_Text_Field':
214
-                        $input_class = 'EE_Text_Area_Input';
215
-                        break;
216
-                    case 'EE_Money_Field':
217
-                        throw new EE_Error(sprintf(__(
218
-                            "Model field '%s' does not yet have a known conversion to form input",
219
-                            "event_espresso"
220
-                        ), get_class($model_field)));
221
-                        break;
222
-                    case 'EE_Post_Content_Field':
223
-                        $input_class = 'EE_Text_Area_Input';
224
-                        $input_constructor_args[0]['validation_strategies'] = array(new EE_Full_HTML_Validation_Strategy());
225
-                        break;
226
-                    case 'EE_Plain_Text_Field':
227
-                        $input_class = 'EE_Text_Input';
228
-                        break;
229
-                    case 'EE_Primary_Key_Int_Field':
230
-                        $input_class = 'EE_Hidden_Input';
231
-                        $input_constructor_args['normalization_strategy'] = new EE_Int_Normalization();
232
-                        break;
233
-                    case 'EE_Primary_Key_String_Field':
234
-                        $input_class = 'EE_Hidden_Input';
235
-                        break;
236
-                    case 'EE_Serialized_Text_Field':
237
-                        $input_class = 'EE_Text_Area_Input';
238
-                        break;
239
-                    case 'EE_Simple_HTML_Field':
240
-                        $input_class = 'EE_Text_Area_Input';
241
-                        $input_constructor_args[0]['validation_strategies'] = array(new EE_Simple_HTML_Validation_Strategy());
242
-                        break;
243
-                    case 'EE_Slug_Field':
244
-                        $input_class = 'EE_Text_Input';
245
-                        break;
246
-                    case 'EE_Trashed_Flag_Field':
247
-                        $input_class = 'EE_Yes_No_Input';
248
-                        break;
249
-                    case 'EE_WP_Post_Status_Field':
250
-                        throw new EE_Error(sprintf(__(
251
-                            "Model field '%s' does not yet have a known conversion to form input",
252
-                            "event_espresso"
253
-                        ), get_class($model_field)));
254
-                        break;
255
-                    case 'EE_WP_Post_Type_Field':
256
-                        throw new EE_Error(sprintf(__(
257
-                            "Model field '%s' does not yet have a known conversion to form input",
258
-                            "event_espresso"
259
-                        ), get_class($model_field)));
260
-                        break;
261
-                    default:
262
-                        throw new EE_Error(sprintf(__(
263
-                            "Model field of type '%s' does not convert to any known Form Input. Please add a case to EE_Model_Form_section's _convert_model_fields_to_inputs switch statement",
264
-                            "event_espresso"
265
-                        ), get_class($model_field)));
266
-                }
267
-                $reflection = new ReflectionClass($input_class);
268
-                $input = $reflection->newInstanceArgs($input_constructor_args);
269
-                $inputs[ $field_name ] = $input;
270
-            }
271
-        }
272
-        return $inputs;
273
-    }
274
-
275
-
276
-
277
-    /**
278
-     * Mostly the same as populate_defaults , except takes a model object as input, not an array,
279
-     * and also sets the form's _model_object
280
-     *
281
-     * @param EE_Base_Class $model_obj
282
-     * @return void
283
-     */
284
-    public function populate_model_obj($model_obj)
285
-    {
286
-        $model_obj = $this->_model->ensure_is_obj($model_obj);
287
-        $this->_model_object = $model_obj;
288
-        $defaults = $model_obj->model_field_array();
289
-        foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
290
-            $subsection = $this->get_subsection($relation_name, false);
291
-            if ($subsection instanceof EE_Form_Input_Base) {
292
-                if ($relation_obj instanceof EE_Belongs_To_Relation) {
293
-                    // then we only expect there to be one
294
-                    $related_item = $this->_model_object->get_first_related($relation_name);
295
-                    $defaults[ $relation_name ] = $related_item->ID();
296
-                } else {
297
-                    $related_items = $this->_model_object->get_many_related($relation_name);
298
-                    $ids = array();
299
-                    foreach ($related_items as $related_item) {
300
-                        $ids[] = $related_item->ID();
301
-                    }
302
-                    $defaults[ $relation_name ] = $ids;
303
-                }
304
-            }
305
-        }
306
-        $defaults = apply_filters(
307
-            'FHEE__EE_Model_Form_Section__populate_model_obj',
308
-            $defaults,
309
-            $this
310
-        );
311
-        $this->populate_defaults($defaults);
312
-    }
313
-
314
-
315
-
316
-    /**
317
-     * Gets all the input values that correspond to model fields. Keys are the input/field names,
318
-     * values are their normalized values
319
-     *
320
-     * @return array
321
-     */
322
-    public function inputs_values_corresponding_to_model_fields()
323
-    {
324
-        return array_intersect_key($this->input_values(), $this->_model->field_settings());
325
-    }
326
-
327
-
328
-
329
-    /**
330
-     * After we've normalized the data as normal, set the corresponding model object
331
-     * on the form.
332
-     *
333
-     * @param array $req_data should usually be $_REQUEST (the default).
334
-     * @return void
335
-     */
336
-    public function _normalize($req_data)
337
-    {
338
-        parent::_normalize($req_data);
339
-        // create or set the model object, if it isn't already
340
-        if (! $this->_model_object) {
341
-            // check to see if the form indicates a PK, in which case we want to only retrieve it and update it
342
-            $pk_name = $this->_model->primary_key_name();
343
-            $model_obj = $this->_model->get_one_by_ID($this->get_input_value($pk_name));
344
-            if ($model_obj) {
345
-                $this->_model_object = $model_obj;
346
-            } else {
347
-                $this->_model_object = EE_Registry::instance()->load_class($this->_model->get_this_model_name());
348
-            }
349
-        }
350
-    }
351
-
352
-
353
-
354
-    /**
355
-     * After this form has been initialized and is verified to be valid,
356
-     * either creates a model object from its data and saves it, or updates
357
-     * the model object its data represents
358
-     *
359
-     * @throws EE_Error
360
-     * @return int, 1 on a successful update, the ID of
361
-     *                    the new entry on insert; 0 on failure
362
-     */
363
-    public function save()
364
-    {
365
-        if (! $this->_model_object) {
366
-            throw new EE_Error(sprintf(__(
367
-                "Cannot save the model form's model object (model is '%s') because there is no model object set. You must either set it, or call receive_form_submission where it is set automatically",
368
-                "event_espresso"
369
-            ), get_class($this->_model)));
370
-        }
371
-        // ok so the model object is set. Just set it with the submitted form data
372
-        foreach ($this->inputs_values_corresponding_to_model_fields() as $field_name => $field_value) {
373
-            // only set the non-primary key
374
-            if ($field_name != $this->_model->primary_key_name()) {
375
-                $this->_model_object->set($field_name, $field_value);
376
-            }
377
-        }
378
-        $success = $this->_model_object->save();
379
-        foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
380
-            if (isset($this->_subsections[ $relation_name ])) {
381
-                $success = $this->_save_related_info($relation_name);
382
-            }
383
-        }
384
-        do_action('AHEE__EE_Model_Form_Section__save__done', $this, $success);
385
-        return $success;
386
-    }
387
-
388
-
389
-
390
-    /**
391
-     * Automatically finds the related model info from the form, if present, and
392
-     * save the relations indicated
393
-     *
394
-     * @type string $relation_name
395
-     * @return bool
396
-     * @throws EE_Error
397
-     */
398
-    protected function _save_related_info($relation_name)
399
-    {
400
-        $relation_obj = $this->_model->related_settings_for($relation_name);
401
-        if ($relation_obj instanceof EE_Belongs_To_Relation) {
402
-            // there is just a foreign key on this model pointing to that one
403
-            $this->_model_object->_add_relation_to($this->get_input_value($relation_name), $relation_name);
404
-        } elseif ($relation_obj instanceof EE_Has_Many_Relation) {
405
-            // then we want to consider all of its currently-related things.
406
-            // if they're in this list, keep them
407
-            // if they're not in this list, remove them
408
-            // and lastly add all the new items
409
-            throw new EE_Error(sprintf(__(
410
-                'Automatic saving of related info across a "has many" relation is not yet supported',
411
-                "event_espresso"
412
-            )));
413
-        } elseif ($relation_obj instanceof EE_HABTM_Relation) {
414
-            // delete everything NOT in this list
415
-            $normalized_input_value = $this->get_input_value($relation_name);
416
-            if ($normalized_input_value && is_array($normalized_input_value)) {
417
-                $where_query_params = array(
418
-                    $relation_obj->get_other_model()->primary_key_name() => array('NOT_IN', $normalized_input_value),
419
-                );
420
-            } else {
421
-                $where_query_params = array();
422
-            }
423
-            $this->_model_object->_remove_relations($relation_name, $where_query_params);
424
-            foreach ($normalized_input_value as $id) {
425
-                $this->_model_object->_add_relation_to($id, $relation_name);
426
-            }
427
-        }
428
-        return true;
429
-    }
430
-
431
-
432
-
433
-    /**
434
-     * Gets the model of this model form
435
-     *
436
-     * @return EEM_Base
437
-     */
438
-    public function get_model()
439
-    {
440
-        return $this->_model;
441
-    }
442
-
443
-
444
-
445
-    /**
446
-     * Gets the model object for this model form, which was either set
447
-     * upon construction (using the $options_array arg 'model_object'), by using
448
-     * set_model_object($model_obj), or implicitly
449
-     * when receive_form_submission($req_data) was called.
450
-     *
451
-     * @return EE_Base_Class
452
-     */
453
-    public function get_model_object()
454
-    {
455
-        return $this->_model_object;
456
-    }
457
-
458
-
459
-
460
-    /**
461
-     * gets teh default name of this form section if none is specified
462
-     *
463
-     * @return string
464
-     */
465
-    protected function _set_default_name_if_empty()
466
-    {
467
-        if (! $this->_name) {
468
-            $default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
469
-            $this->_name = $default_name;
470
-        }
471
-    }
17
+	/**
18
+	 * @var EEM_Base
19
+	 */
20
+	protected $_model = null;
21
+
22
+	/**
23
+	 * @var EE_Base_Class
24
+	 */
25
+	protected $_model_object = null;
26
+
27
+
28
+
29
+	/**
30
+	 * @param array        $options_array   keys: {
31
+	 * @type EEM_Base      $model
32
+	 * @type EE_Base_Class $model_object
33
+	 * @type array         $subsection_args array keys should be subsection names (that either do or will exist), and
34
+	 *       values are the arrays as you would pass them to that subsection
35
+	 *                                      }
36
+	 * @throws EE_Error
37
+	 */
38
+	public function __construct($options_array = array())
39
+	{
40
+		if (isset($options_array['model']) && $options_array['model'] instanceof EEM_Base) {
41
+			$this->_model = $options_array['model'];
42
+		}
43
+		if (! $this->_model || ! $this->_model instanceof EEM_Base) {
44
+			throw new EE_Error(sprintf(__(
45
+				"Model Form Sections must first specify the _model property to be a subclass of EEM_Base",
46
+				"event_espresso"
47
+			)));
48
+		}
49
+		if (isset($options_array['subsection_args'])) {
50
+			$subsection_args = $options_array['subsection_args'];
51
+		} else {
52
+			$subsection_args = array();
53
+		}
54
+		// gather fields and relations to convert to inputs
55
+		// but if they're just going to exclude a field anyways, don't bother converting it to an input
56
+		$exclude = $this->_subsections;
57
+		if (isset($options_array['exclude'])) {
58
+			$exclude = array_merge($exclude, array_flip($options_array['exclude']));
59
+		}
60
+		$model_fields = array_diff_key($this->_model->field_settings(), $exclude);
61
+		$model_relations = array_diff_key($this->_model->relation_settings(), $exclude);
62
+		// convert fields and relations to inputs
63
+		$this->_subsections = array_merge(
64
+			$this->_convert_model_fields_to_inputs($model_fields),
65
+			$this->_convert_model_relations_to_inputs($model_relations, $subsection_args),
66
+			$this->_subsections
67
+		);
68
+		parent::__construct($options_array);
69
+		if (isset($options_array['model_object']) && $options_array['model_object'] instanceof EE_Base_Class) {
70
+			$this->populate_model_obj($options_array['model_object']);
71
+		}
72
+	}
73
+
74
+
75
+
76
+	/**
77
+	 * For now, just makes inputs for only HABTM relations
78
+	 *
79
+	 * @param EE_Model_Relation_Base[] $relations
80
+	 * @param array                    $subsection_args keys should be existing or soon-to-be-existing input names, and
81
+	 *                                                  their values are {
82
+	 * @type array {
83
+	 * @type EE_Base_Class[]           $model_objects   if the subsection is an EE_Select_Multi_Model_Input
84
+	 *                                                  }
85
+	 *                                                  }
86
+	 * @return array
87
+	 */
88
+	protected function _convert_model_relations_to_inputs($relations, $subsection_args = array())
89
+	{
90
+		$inputs = array();
91
+		foreach ($relations as $relation_name => $relation_obj) {
92
+			$input_constructor_args = array(
93
+				array_merge(
94
+					array(
95
+						'required'        => $relation_obj instanceof EE_Belongs_To_Relation,
96
+						'html_label_text' => $relation_obj instanceof EE_Belongs_To_Relation
97
+							? $relation_obj->get_other_model()->item_name(1)
98
+							: $relation_obj->get_other_model()
99
+										   ->item_name(2),
100
+					),
101
+					$subsection_args
102
+				),
103
+			);
104
+			$input = null;
105
+			switch (get_class($relation_obj)) {
106
+				case 'EE_HABTM_Relation':
107
+					if (isset($subsection_args[ $relation_name ])
108
+						&& isset($subsection_args[ $relation_name ]['model_objects'])
109
+					) {
110
+						$model_objects = $subsection_args[ $relation_name ]['model_objects'];
111
+					} else {
112
+						$model_objects = $relation_obj->get_other_model()->get_all();
113
+					}
114
+					$input = new EE_Select_Multi_Model_Input($model_objects, $input_constructor_args);
115
+					break;
116
+				default:
117
+			}
118
+			if ($input) {
119
+				$inputs[ $relation_name ] = $input;
120
+			}
121
+		}
122
+		return $inputs;
123
+	}
124
+
125
+
126
+
127
+	/**
128
+	 * Changes model fields into form section inputs
129
+	 *
130
+	 * @param EE_Model_Field_Base[] $model_fields keys are the model's name
131
+	 * @throws EE_Error
132
+	 * @return EE_Form_Input_Base[]
133
+	 */
134
+	protected function _convert_model_fields_to_inputs($model_fields = array())
135
+	{
136
+		$inputs = array();
137
+		foreach ($model_fields as $field_name => $model_field) {
138
+			if ($model_field instanceof EE_Model_Field_Base) {
139
+				$input_constructor_args = array(
140
+					array(
141
+						'required'        => ! $model_field->is_nullable()
142
+											 && $model_field->get_default_value()
143
+												=== null,
144
+						'html_label_text' => $model_field->get_nicename(),
145
+						'default'         => $model_field->get_default_value(),
146
+					),
147
+				);
148
+				switch (get_class($model_field)) {
149
+					case 'EE_All_Caps_Text_Field':
150
+					case 'EE_Any_Foreign_Model_Name_Field':
151
+						$input_class = 'EE_Text_Input';
152
+						break;
153
+					case 'EE_Boolean_Field':
154
+						$input_class = 'EE_Yes_No_Input';
155
+						break;
156
+					case 'EE_Datetime_Field':
157
+						throw new EE_Error(sprintf(__(
158
+							"Model field '%s' does not yet have a known conversion to form input",
159
+							"event_espresso"
160
+						), get_class($model_field)));
161
+						break;
162
+					case 'EE_Email_Field':
163
+						$input_class = 'EE_Email_Input';
164
+						break;
165
+					case 'EE_Enum_Integer_Field':
166
+						throw new EE_Error(sprintf(__(
167
+							"Model field '%s' does not yet have a known conversion to form input",
168
+							"event_espresso"
169
+						), get_class($model_field)));
170
+						break;
171
+					case 'EE_Enum_Text_Field':
172
+						throw new EE_Error(sprintf(__(
173
+							"Model field '%s' does not yet have a known conversion to form input",
174
+							"event_espresso"
175
+						), get_class($model_field)));
176
+						break;
177
+					case 'EE_Float_Field':
178
+						$input_class = 'EE_Float_Input';
179
+						break;
180
+					case 'EE_Foreign_Key_Int_Field':
181
+					case 'EE_Foreign_Key_String_Field':
182
+					case 'EE_WP_User_Field':
183
+						$models_pointed_to = $model_field instanceof EE_Field_With_Model_Name
184
+							? $model_field->get_model_class_names_pointed_to() : array();
185
+						if (true || is_array($models_pointed_to) && count($models_pointed_to) > 1) {
186
+							$input_class = 'EE_Text_Input';
187
+						} else {
188
+							// so its just one model
189
+							$model_name = is_array($models_pointed_to) ? reset($models_pointed_to) : $models_pointed_to;
190
+							$model = EE_Registry::instance()->load_model($model_name);
191
+							$model_names = $model->get_all_names(array('limit' => 10));
192
+							if ($model_field->is_nullable()) {
193
+								array_unshift($model_names, __("Please Select", 'event_espresso'));
194
+							}
195
+							$input_constructor_args[1] = $input_constructor_args[0];
196
+							$input_constructor_args[0] = $model_names;
197
+							$input_class = 'EE_Select_Input';
198
+						}
199
+						break;
200
+					case 'EE_Full_HTML_Field':
201
+						$input_class = 'EE_Text_Area_Input';
202
+						$input_constructor_args[0]['validation_strategies'] = array(new EE_Full_HTML_Validation_Strategy());
203
+						break;
204
+					case 'EE_Infinite_Integer':
205
+						throw new EE_Error(sprintf(__(
206
+							"Model field '%s' does not yet have a known conversion to form input",
207
+							"event_espresso"
208
+						), get_class($model_field)));
209
+						break;
210
+					case 'EE_Integer_Field':
211
+						$input_class = 'EE_Text_Input';
212
+						break;
213
+					case 'EE_Maybe_Serialized_Text_Field':
214
+						$input_class = 'EE_Text_Area_Input';
215
+						break;
216
+					case 'EE_Money_Field':
217
+						throw new EE_Error(sprintf(__(
218
+							"Model field '%s' does not yet have a known conversion to form input",
219
+							"event_espresso"
220
+						), get_class($model_field)));
221
+						break;
222
+					case 'EE_Post_Content_Field':
223
+						$input_class = 'EE_Text_Area_Input';
224
+						$input_constructor_args[0]['validation_strategies'] = array(new EE_Full_HTML_Validation_Strategy());
225
+						break;
226
+					case 'EE_Plain_Text_Field':
227
+						$input_class = 'EE_Text_Input';
228
+						break;
229
+					case 'EE_Primary_Key_Int_Field':
230
+						$input_class = 'EE_Hidden_Input';
231
+						$input_constructor_args['normalization_strategy'] = new EE_Int_Normalization();
232
+						break;
233
+					case 'EE_Primary_Key_String_Field':
234
+						$input_class = 'EE_Hidden_Input';
235
+						break;
236
+					case 'EE_Serialized_Text_Field':
237
+						$input_class = 'EE_Text_Area_Input';
238
+						break;
239
+					case 'EE_Simple_HTML_Field':
240
+						$input_class = 'EE_Text_Area_Input';
241
+						$input_constructor_args[0]['validation_strategies'] = array(new EE_Simple_HTML_Validation_Strategy());
242
+						break;
243
+					case 'EE_Slug_Field':
244
+						$input_class = 'EE_Text_Input';
245
+						break;
246
+					case 'EE_Trashed_Flag_Field':
247
+						$input_class = 'EE_Yes_No_Input';
248
+						break;
249
+					case 'EE_WP_Post_Status_Field':
250
+						throw new EE_Error(sprintf(__(
251
+							"Model field '%s' does not yet have a known conversion to form input",
252
+							"event_espresso"
253
+						), get_class($model_field)));
254
+						break;
255
+					case 'EE_WP_Post_Type_Field':
256
+						throw new EE_Error(sprintf(__(
257
+							"Model field '%s' does not yet have a known conversion to form input",
258
+							"event_espresso"
259
+						), get_class($model_field)));
260
+						break;
261
+					default:
262
+						throw new EE_Error(sprintf(__(
263
+							"Model field of type '%s' does not convert to any known Form Input. Please add a case to EE_Model_Form_section's _convert_model_fields_to_inputs switch statement",
264
+							"event_espresso"
265
+						), get_class($model_field)));
266
+				}
267
+				$reflection = new ReflectionClass($input_class);
268
+				$input = $reflection->newInstanceArgs($input_constructor_args);
269
+				$inputs[ $field_name ] = $input;
270
+			}
271
+		}
272
+		return $inputs;
273
+	}
274
+
275
+
276
+
277
+	/**
278
+	 * Mostly the same as populate_defaults , except takes a model object as input, not an array,
279
+	 * and also sets the form's _model_object
280
+	 *
281
+	 * @param EE_Base_Class $model_obj
282
+	 * @return void
283
+	 */
284
+	public function populate_model_obj($model_obj)
285
+	{
286
+		$model_obj = $this->_model->ensure_is_obj($model_obj);
287
+		$this->_model_object = $model_obj;
288
+		$defaults = $model_obj->model_field_array();
289
+		foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
290
+			$subsection = $this->get_subsection($relation_name, false);
291
+			if ($subsection instanceof EE_Form_Input_Base) {
292
+				if ($relation_obj instanceof EE_Belongs_To_Relation) {
293
+					// then we only expect there to be one
294
+					$related_item = $this->_model_object->get_first_related($relation_name);
295
+					$defaults[ $relation_name ] = $related_item->ID();
296
+				} else {
297
+					$related_items = $this->_model_object->get_many_related($relation_name);
298
+					$ids = array();
299
+					foreach ($related_items as $related_item) {
300
+						$ids[] = $related_item->ID();
301
+					}
302
+					$defaults[ $relation_name ] = $ids;
303
+				}
304
+			}
305
+		}
306
+		$defaults = apply_filters(
307
+			'FHEE__EE_Model_Form_Section__populate_model_obj',
308
+			$defaults,
309
+			$this
310
+		);
311
+		$this->populate_defaults($defaults);
312
+	}
313
+
314
+
315
+
316
+	/**
317
+	 * Gets all the input values that correspond to model fields. Keys are the input/field names,
318
+	 * values are their normalized values
319
+	 *
320
+	 * @return array
321
+	 */
322
+	public function inputs_values_corresponding_to_model_fields()
323
+	{
324
+		return array_intersect_key($this->input_values(), $this->_model->field_settings());
325
+	}
326
+
327
+
328
+
329
+	/**
330
+	 * After we've normalized the data as normal, set the corresponding model object
331
+	 * on the form.
332
+	 *
333
+	 * @param array $req_data should usually be $_REQUEST (the default).
334
+	 * @return void
335
+	 */
336
+	public function _normalize($req_data)
337
+	{
338
+		parent::_normalize($req_data);
339
+		// create or set the model object, if it isn't already
340
+		if (! $this->_model_object) {
341
+			// check to see if the form indicates a PK, in which case we want to only retrieve it and update it
342
+			$pk_name = $this->_model->primary_key_name();
343
+			$model_obj = $this->_model->get_one_by_ID($this->get_input_value($pk_name));
344
+			if ($model_obj) {
345
+				$this->_model_object = $model_obj;
346
+			} else {
347
+				$this->_model_object = EE_Registry::instance()->load_class($this->_model->get_this_model_name());
348
+			}
349
+		}
350
+	}
351
+
352
+
353
+
354
+	/**
355
+	 * After this form has been initialized and is verified to be valid,
356
+	 * either creates a model object from its data and saves it, or updates
357
+	 * the model object its data represents
358
+	 *
359
+	 * @throws EE_Error
360
+	 * @return int, 1 on a successful update, the ID of
361
+	 *                    the new entry on insert; 0 on failure
362
+	 */
363
+	public function save()
364
+	{
365
+		if (! $this->_model_object) {
366
+			throw new EE_Error(sprintf(__(
367
+				"Cannot save the model form's model object (model is '%s') because there is no model object set. You must either set it, or call receive_form_submission where it is set automatically",
368
+				"event_espresso"
369
+			), get_class($this->_model)));
370
+		}
371
+		// ok so the model object is set. Just set it with the submitted form data
372
+		foreach ($this->inputs_values_corresponding_to_model_fields() as $field_name => $field_value) {
373
+			// only set the non-primary key
374
+			if ($field_name != $this->_model->primary_key_name()) {
375
+				$this->_model_object->set($field_name, $field_value);
376
+			}
377
+		}
378
+		$success = $this->_model_object->save();
379
+		foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
380
+			if (isset($this->_subsections[ $relation_name ])) {
381
+				$success = $this->_save_related_info($relation_name);
382
+			}
383
+		}
384
+		do_action('AHEE__EE_Model_Form_Section__save__done', $this, $success);
385
+		return $success;
386
+	}
387
+
388
+
389
+
390
+	/**
391
+	 * Automatically finds the related model info from the form, if present, and
392
+	 * save the relations indicated
393
+	 *
394
+	 * @type string $relation_name
395
+	 * @return bool
396
+	 * @throws EE_Error
397
+	 */
398
+	protected function _save_related_info($relation_name)
399
+	{
400
+		$relation_obj = $this->_model->related_settings_for($relation_name);
401
+		if ($relation_obj instanceof EE_Belongs_To_Relation) {
402
+			// there is just a foreign key on this model pointing to that one
403
+			$this->_model_object->_add_relation_to($this->get_input_value($relation_name), $relation_name);
404
+		} elseif ($relation_obj instanceof EE_Has_Many_Relation) {
405
+			// then we want to consider all of its currently-related things.
406
+			// if they're in this list, keep them
407
+			// if they're not in this list, remove them
408
+			// and lastly add all the new items
409
+			throw new EE_Error(sprintf(__(
410
+				'Automatic saving of related info across a "has many" relation is not yet supported',
411
+				"event_espresso"
412
+			)));
413
+		} elseif ($relation_obj instanceof EE_HABTM_Relation) {
414
+			// delete everything NOT in this list
415
+			$normalized_input_value = $this->get_input_value($relation_name);
416
+			if ($normalized_input_value && is_array($normalized_input_value)) {
417
+				$where_query_params = array(
418
+					$relation_obj->get_other_model()->primary_key_name() => array('NOT_IN', $normalized_input_value),
419
+				);
420
+			} else {
421
+				$where_query_params = array();
422
+			}
423
+			$this->_model_object->_remove_relations($relation_name, $where_query_params);
424
+			foreach ($normalized_input_value as $id) {
425
+				$this->_model_object->_add_relation_to($id, $relation_name);
426
+			}
427
+		}
428
+		return true;
429
+	}
430
+
431
+
432
+
433
+	/**
434
+	 * Gets the model of this model form
435
+	 *
436
+	 * @return EEM_Base
437
+	 */
438
+	public function get_model()
439
+	{
440
+		return $this->_model;
441
+	}
442
+
443
+
444
+
445
+	/**
446
+	 * Gets the model object for this model form, which was either set
447
+	 * upon construction (using the $options_array arg 'model_object'), by using
448
+	 * set_model_object($model_obj), or implicitly
449
+	 * when receive_form_submission($req_data) was called.
450
+	 *
451
+	 * @return EE_Base_Class
452
+	 */
453
+	public function get_model_object()
454
+	{
455
+		return $this->_model_object;
456
+	}
457
+
458
+
459
+
460
+	/**
461
+	 * gets teh default name of this form section if none is specified
462
+	 *
463
+	 * @return string
464
+	 */
465
+	protected function _set_default_name_if_empty()
466
+	{
467
+		if (! $this->_name) {
468
+			$default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
469
+			$this->_name = $default_name;
470
+		}
471
+	}
472 472
 }
Please login to merge, or discard this patch.
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -40,7 +40,7 @@  discard block
 block discarded – undo
40 40
         if (isset($options_array['model']) && $options_array['model'] instanceof EEM_Base) {
41 41
             $this->_model = $options_array['model'];
42 42
         }
43
-        if (! $this->_model || ! $this->_model instanceof EEM_Base) {
43
+        if ( ! $this->_model || ! $this->_model instanceof EEM_Base) {
44 44
             throw new EE_Error(sprintf(__(
45 45
                 "Model Form Sections must first specify the _model property to be a subclass of EEM_Base",
46 46
                 "event_espresso"
@@ -104,10 +104,10 @@  discard block
 block discarded – undo
104 104
             $input = null;
105 105
             switch (get_class($relation_obj)) {
106 106
                 case 'EE_HABTM_Relation':
107
-                    if (isset($subsection_args[ $relation_name ])
108
-                        && isset($subsection_args[ $relation_name ]['model_objects'])
107
+                    if (isset($subsection_args[$relation_name])
108
+                        && isset($subsection_args[$relation_name]['model_objects'])
109 109
                     ) {
110
-                        $model_objects = $subsection_args[ $relation_name ]['model_objects'];
110
+                        $model_objects = $subsection_args[$relation_name]['model_objects'];
111 111
                     } else {
112 112
                         $model_objects = $relation_obj->get_other_model()->get_all();
113 113
                     }
@@ -116,7 +116,7 @@  discard block
 block discarded – undo
116 116
                 default:
117 117
             }
118 118
             if ($input) {
119
-                $inputs[ $relation_name ] = $input;
119
+                $inputs[$relation_name] = $input;
120 120
             }
121 121
         }
122 122
         return $inputs;
@@ -266,7 +266,7 @@  discard block
 block discarded – undo
266 266
                 }
267 267
                 $reflection = new ReflectionClass($input_class);
268 268
                 $input = $reflection->newInstanceArgs($input_constructor_args);
269
-                $inputs[ $field_name ] = $input;
269
+                $inputs[$field_name] = $input;
270 270
             }
271 271
         }
272 272
         return $inputs;
@@ -292,14 +292,14 @@  discard block
 block discarded – undo
292 292
                 if ($relation_obj instanceof EE_Belongs_To_Relation) {
293 293
                     // then we only expect there to be one
294 294
                     $related_item = $this->_model_object->get_first_related($relation_name);
295
-                    $defaults[ $relation_name ] = $related_item->ID();
295
+                    $defaults[$relation_name] = $related_item->ID();
296 296
                 } else {
297 297
                     $related_items = $this->_model_object->get_many_related($relation_name);
298 298
                     $ids = array();
299 299
                     foreach ($related_items as $related_item) {
300 300
                         $ids[] = $related_item->ID();
301 301
                     }
302
-                    $defaults[ $relation_name ] = $ids;
302
+                    $defaults[$relation_name] = $ids;
303 303
                 }
304 304
             }
305 305
         }
@@ -337,7 +337,7 @@  discard block
 block discarded – undo
337 337
     {
338 338
         parent::_normalize($req_data);
339 339
         // create or set the model object, if it isn't already
340
-        if (! $this->_model_object) {
340
+        if ( ! $this->_model_object) {
341 341
             // check to see if the form indicates a PK, in which case we want to only retrieve it and update it
342 342
             $pk_name = $this->_model->primary_key_name();
343 343
             $model_obj = $this->_model->get_one_by_ID($this->get_input_value($pk_name));
@@ -362,7 +362,7 @@  discard block
 block discarded – undo
362 362
      */
363 363
     public function save()
364 364
     {
365
-        if (! $this->_model_object) {
365
+        if ( ! $this->_model_object) {
366 366
             throw new EE_Error(sprintf(__(
367 367
                 "Cannot save the model form's model object (model is '%s') because there is no model object set. You must either set it, or call receive_form_submission where it is set automatically",
368 368
                 "event_espresso"
@@ -377,7 +377,7 @@  discard block
 block discarded – undo
377 377
         }
378 378
         $success = $this->_model_object->save();
379 379
         foreach ($this->_model->relation_settings() as $relation_name => $relation_obj) {
380
-            if (isset($this->_subsections[ $relation_name ])) {
380
+            if (isset($this->_subsections[$relation_name])) {
381 381
                 $success = $this->_save_related_info($relation_name);
382 382
             }
383 383
         }
@@ -464,8 +464,8 @@  discard block
 block discarded – undo
464 464
      */
465 465
     protected function _set_default_name_if_empty()
466 466
     {
467
-        if (! $this->_name) {
468
-            $default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
467
+        if ( ! $this->_name) {
468
+            $default_name = str_replace("EEM_", "", get_class($this->_model))."_Model_Form";
469 469
             $this->_name = $default_name;
470 470
         }
471 471
     }
Please login to merge, or discard this patch.
libraries/form_sections/payment_methods/EE_Payment_Method_Form.form.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -119,7 +119,7 @@
 block discarded – undo
119 119
 
120 120
 
121 121
     /**
122
-     * @param $payment_method_type
122
+     * @param EE_PMT_Base $payment_method_type
123 123
      * @throws EE_Error
124 124
      */
125 125
     public function set_payment_method_type($payment_method_type)
Please login to merge, or discard this patch.
Indentation   +191 added lines, -191 removed lines patch added patch discarded remove patch
@@ -9,195 +9,195 @@
 block discarded – undo
9 9
 class EE_Payment_Method_Form extends EE_Model_Form_Section
10 10
 {
11 11
 
12
-    /**
13
-     * All the subsection inputs that correspond ot extra meta rows
14
-     * for this payment method
15
-     *
16
-     * @var EE_Form_Input_Base[]
17
-     */
18
-    protected $_extra_meta_inputs = array();
19
-
20
-    /**
21
-     * Because payment method form might DELAY part of construction, we want to remember
22
-     * what options were passed in
23
-     *
24
-     * @var array
25
-     */
26
-    protected $_options_array = array();
27
-
28
-    /**
29
-     * The payment method type for this form
30
-     *
31
-     * @var EE_PMT_Base
32
-     */
33
-    protected $_payment_method_type;
34
-
35
-
36
-
37
-    /**
38
-     * @param array      $options_array       {
39
-     * @type string      $extra_meta_inputs   should be EE_Form_Section_Validatable[] which
40
-     *                                        will be _subsections and will be saved as extra meta on the payment
41
-     *                                        method object;
42
-     * @type EE_PMT_Base $payment_method_type the payment method type this form is for
43
-     * @see EE_Model_Form_Section::__construct() for more
44
-     *                                        }
45
-     */
46
-    public function __construct($options_array = array())
47
-    {
48
-        $this->_model = EEM_Payment_Method::instance();
49
-        $this->_options_array = $options_array;
50
-        if (isset($options_array['payment_method_type'])) {
51
-            $this->_payment_method_type = $options_array['payment_method_type'];
52
-        }
53
-        $options_array = $this->_options_array;
54
-        if (isset($options_array['extra_meta_inputs'])) {
55
-            $this->_extra_meta_inputs = array_merge($this->_extra_meta_inputs, $options_array['extra_meta_inputs']);
56
-        }
57
-        if ($this->_extra_meta_inputs) {
58
-            $this->_subsections = array_merge($this->_subsections, $this->_extra_meta_inputs);
59
-        }
60
-        $this->_subsections['PMD_button_url'] = new EE_Admin_File_Uploader_Input(
61
-            array('html_label_text' => __('Button URL', 'event_espresso'))
62
-        );
63
-        $this->_subsections['PMD_scope'] = new EE_Checkbox_Multi_Input(
64
-            EEM_Payment_Method::instance()->scopes(),
65
-            array(
66
-                'html_label_text' => $this->_model->field_settings_for('PMD_scope')->get_nicename()
67
-                                     . EEH_Template::get_help_tab_link('payment_methods_overview'),
68
-            )
69
-        );
70
-        // setup the currency options
71
-        $this->_subsections['Currency'] = new EE_Select_Multi_Model_Input(
72
-            EEM_Currency::instance()->get_all_currencies_usable_by($this->_payment_method_type),
73
-            array(
74
-                'html_label_text' => __('Currencies Supported', 'event_espresso'),
75
-                'required'        => true,
76
-            )
77
-        );
78
-        $this->_subsections['PMD_order'] = new EE_Text_Input(array(
79
-            'html_label_text'        => __('Order', 'event_espresso'),
80
-            'html_help_text'         => __('Lowest numbers will be shown first', 'event_espresso'),
81
-            'normalization_strategy' => new EE_Int_Normalization(),
82
-            'validation_strategies'  => array(
83
-                new EE_Int_Validation_Strategy(),
84
-            ),
85
-            'default'                => 0,
86
-        ));
87
-        $this->_layout_strategy = new EE_Admin_Two_Column_Layout();
88
-        parent::__construct($options_array);
89
-        $debug_mode = isset($this->_subsections['PMD_debug_mode']) ? $this->_subsections['PMD_debug_mode'] : null;
90
-        if ($debug_mode instanceof EE_Form_Input_Base) {
91
-            $debug_mode->set_html_help_text(__(
92
-                'This payment method has a Sandbox Server (also known as Testing Server, Development Server, Quality Assurance Server, etc). While in debug mode and using this sandbox server, real payments will not be processed.',
93
-                'event_espresso'
94
-            ));
95
-        }
96
-    }
97
-
98
-
99
-
100
-    /**
101
-     * Finishes construction given the parent form section and this form section's name
102
-     *
103
-     * @param EE_Form_Section_Proper $parent_form_section
104
-     * @param string                 $name
105
-     * @throws EE_Error
106
-     */
107
-    public function _construct_finalize($parent_form_section, $name)
108
-    {
109
-        if (! $this->_payment_method_type instanceof EE_PMT_Base) {
110
-            throw new EE_Error(sprintf(__(
111
-                'Payment Method forms must have set their payment method type BEFORE calling _construct_finalize',
112
-                'event_espresso'
113
-            )));
114
-        }
115
-        // set the name of this form based on the payment method type
116
-        if (! $this->_name && ! $name) {
117
-            $name = str_replace(" ", "_", ucwords(str_replace("_", " ", ($this->_payment_method_type->system_name()))))
118
-                    . "_Settings_Form";
119
-        }
120
-        parent::_construct_finalize($parent_form_section, $name);
121
-    }
122
-
123
-
124
-
125
-    /**
126
-     * @param $payment_method_type
127
-     * @throws EE_Error
128
-     */
129
-    public function set_payment_method_type($payment_method_type)
130
-    {
131
-        if (! $payment_method_type instanceof EE_PMT_Base) {
132
-            throw new EE_Error(sprintf(__(
133
-                "Payment Method forms MUST set a payment method type by using _set_payment_method_type",
134
-                "event_espresso"
135
-            )));
136
-        }
137
-        $this->_payment_method_type = $payment_method_type;
138
-    }
139
-
140
-
141
-
142
-    /**
143
-     * extends the model form section's save method to also save the extra meta field values
144
-     *
145
-     * @return int ID of the payment method inserted, or true on update
146
-     */
147
-    public function save()
148
-    {
149
-        $parent_save_val = parent::save();
150
-        if ($this->_model_object && $this->_model_object->ID()) {
151
-            foreach ($this->_extra_meta_inputs as $input_name => $input) {
152
-                $this->_model_object->update_extra_meta($input_name, $input->normalized_value());
153
-            }
154
-        }
155
-        return $parent_save_val;
156
-    }
157
-
158
-
159
-
160
-    /**
161
-     * Overrides parent's populate_model_obj to also populate the extra meta fields
162
-     *
163
-     * @param EE_Base_Class $model_obj
164
-     */
165
-    public function populate_model_obj($model_obj)
166
-    {
167
-        $model_obj = $this->_model->ensure_is_obj($model_obj);
168
-        parent::populate_model_obj($model_obj);
169
-        $extra_meta = $model_obj->all_extra_meta_array();
170
-        foreach ($this->_extra_meta_inputs as $input_name => $extra_meta_input) {
171
-            if (isset($extra_meta[ $input_name ])) {
172
-                $extra_meta_input->set_default($extra_meta[ $input_name ]);
173
-            }
174
-        }
175
-    }
176
-
177
-
178
-
179
-    /**
180
-     * gets the default name of this form section if none is specified
181
-     *
182
-     * @return string
183
-     */
184
-    protected function _set_default_name_if_empty()
185
-    {
186
-        if (! $this->_name) {
187
-            $default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
188
-            $this->_name = $default_name;
189
-        }
190
-    }
191
-
192
-
193
-
194
-    /**
195
-     * Gets all the extra meta inputs in this form
196
-     *
197
-     * @return EE_Form_Input_Base[]
198
-     */
199
-    public function extra_meta_inputs()
200
-    {
201
-        return $this->_extra_meta_inputs;
202
-    }
12
+	/**
13
+	 * All the subsection inputs that correspond ot extra meta rows
14
+	 * for this payment method
15
+	 *
16
+	 * @var EE_Form_Input_Base[]
17
+	 */
18
+	protected $_extra_meta_inputs = array();
19
+
20
+	/**
21
+	 * Because payment method form might DELAY part of construction, we want to remember
22
+	 * what options were passed in
23
+	 *
24
+	 * @var array
25
+	 */
26
+	protected $_options_array = array();
27
+
28
+	/**
29
+	 * The payment method type for this form
30
+	 *
31
+	 * @var EE_PMT_Base
32
+	 */
33
+	protected $_payment_method_type;
34
+
35
+
36
+
37
+	/**
38
+	 * @param array      $options_array       {
39
+	 * @type string      $extra_meta_inputs   should be EE_Form_Section_Validatable[] which
40
+	 *                                        will be _subsections and will be saved as extra meta on the payment
41
+	 *                                        method object;
42
+	 * @type EE_PMT_Base $payment_method_type the payment method type this form is for
43
+	 * @see EE_Model_Form_Section::__construct() for more
44
+	 *                                        }
45
+	 */
46
+	public function __construct($options_array = array())
47
+	{
48
+		$this->_model = EEM_Payment_Method::instance();
49
+		$this->_options_array = $options_array;
50
+		if (isset($options_array['payment_method_type'])) {
51
+			$this->_payment_method_type = $options_array['payment_method_type'];
52
+		}
53
+		$options_array = $this->_options_array;
54
+		if (isset($options_array['extra_meta_inputs'])) {
55
+			$this->_extra_meta_inputs = array_merge($this->_extra_meta_inputs, $options_array['extra_meta_inputs']);
56
+		}
57
+		if ($this->_extra_meta_inputs) {
58
+			$this->_subsections = array_merge($this->_subsections, $this->_extra_meta_inputs);
59
+		}
60
+		$this->_subsections['PMD_button_url'] = new EE_Admin_File_Uploader_Input(
61
+			array('html_label_text' => __('Button URL', 'event_espresso'))
62
+		);
63
+		$this->_subsections['PMD_scope'] = new EE_Checkbox_Multi_Input(
64
+			EEM_Payment_Method::instance()->scopes(),
65
+			array(
66
+				'html_label_text' => $this->_model->field_settings_for('PMD_scope')->get_nicename()
67
+									 . EEH_Template::get_help_tab_link('payment_methods_overview'),
68
+			)
69
+		);
70
+		// setup the currency options
71
+		$this->_subsections['Currency'] = new EE_Select_Multi_Model_Input(
72
+			EEM_Currency::instance()->get_all_currencies_usable_by($this->_payment_method_type),
73
+			array(
74
+				'html_label_text' => __('Currencies Supported', 'event_espresso'),
75
+				'required'        => true,
76
+			)
77
+		);
78
+		$this->_subsections['PMD_order'] = new EE_Text_Input(array(
79
+			'html_label_text'        => __('Order', 'event_espresso'),
80
+			'html_help_text'         => __('Lowest numbers will be shown first', 'event_espresso'),
81
+			'normalization_strategy' => new EE_Int_Normalization(),
82
+			'validation_strategies'  => array(
83
+				new EE_Int_Validation_Strategy(),
84
+			),
85
+			'default'                => 0,
86
+		));
87
+		$this->_layout_strategy = new EE_Admin_Two_Column_Layout();
88
+		parent::__construct($options_array);
89
+		$debug_mode = isset($this->_subsections['PMD_debug_mode']) ? $this->_subsections['PMD_debug_mode'] : null;
90
+		if ($debug_mode instanceof EE_Form_Input_Base) {
91
+			$debug_mode->set_html_help_text(__(
92
+				'This payment method has a Sandbox Server (also known as Testing Server, Development Server, Quality Assurance Server, etc). While in debug mode and using this sandbox server, real payments will not be processed.',
93
+				'event_espresso'
94
+			));
95
+		}
96
+	}
97
+
98
+
99
+
100
+	/**
101
+	 * Finishes construction given the parent form section and this form section's name
102
+	 *
103
+	 * @param EE_Form_Section_Proper $parent_form_section
104
+	 * @param string                 $name
105
+	 * @throws EE_Error
106
+	 */
107
+	public function _construct_finalize($parent_form_section, $name)
108
+	{
109
+		if (! $this->_payment_method_type instanceof EE_PMT_Base) {
110
+			throw new EE_Error(sprintf(__(
111
+				'Payment Method forms must have set their payment method type BEFORE calling _construct_finalize',
112
+				'event_espresso'
113
+			)));
114
+		}
115
+		// set the name of this form based on the payment method type
116
+		if (! $this->_name && ! $name) {
117
+			$name = str_replace(" ", "_", ucwords(str_replace("_", " ", ($this->_payment_method_type->system_name()))))
118
+					. "_Settings_Form";
119
+		}
120
+		parent::_construct_finalize($parent_form_section, $name);
121
+	}
122
+
123
+
124
+
125
+	/**
126
+	 * @param $payment_method_type
127
+	 * @throws EE_Error
128
+	 */
129
+	public function set_payment_method_type($payment_method_type)
130
+	{
131
+		if (! $payment_method_type instanceof EE_PMT_Base) {
132
+			throw new EE_Error(sprintf(__(
133
+				"Payment Method forms MUST set a payment method type by using _set_payment_method_type",
134
+				"event_espresso"
135
+			)));
136
+		}
137
+		$this->_payment_method_type = $payment_method_type;
138
+	}
139
+
140
+
141
+
142
+	/**
143
+	 * extends the model form section's save method to also save the extra meta field values
144
+	 *
145
+	 * @return int ID of the payment method inserted, or true on update
146
+	 */
147
+	public function save()
148
+	{
149
+		$parent_save_val = parent::save();
150
+		if ($this->_model_object && $this->_model_object->ID()) {
151
+			foreach ($this->_extra_meta_inputs as $input_name => $input) {
152
+				$this->_model_object->update_extra_meta($input_name, $input->normalized_value());
153
+			}
154
+		}
155
+		return $parent_save_val;
156
+	}
157
+
158
+
159
+
160
+	/**
161
+	 * Overrides parent's populate_model_obj to also populate the extra meta fields
162
+	 *
163
+	 * @param EE_Base_Class $model_obj
164
+	 */
165
+	public function populate_model_obj($model_obj)
166
+	{
167
+		$model_obj = $this->_model->ensure_is_obj($model_obj);
168
+		parent::populate_model_obj($model_obj);
169
+		$extra_meta = $model_obj->all_extra_meta_array();
170
+		foreach ($this->_extra_meta_inputs as $input_name => $extra_meta_input) {
171
+			if (isset($extra_meta[ $input_name ])) {
172
+				$extra_meta_input->set_default($extra_meta[ $input_name ]);
173
+			}
174
+		}
175
+	}
176
+
177
+
178
+
179
+	/**
180
+	 * gets the default name of this form section if none is specified
181
+	 *
182
+	 * @return string
183
+	 */
184
+	protected function _set_default_name_if_empty()
185
+	{
186
+		if (! $this->_name) {
187
+			$default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
188
+			$this->_name = $default_name;
189
+		}
190
+	}
191
+
192
+
193
+
194
+	/**
195
+	 * Gets all the extra meta inputs in this form
196
+	 *
197
+	 * @return EE_Form_Input_Base[]
198
+	 */
199
+	public function extra_meta_inputs()
200
+	{
201
+		return $this->_extra_meta_inputs;
202
+	}
203 203
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -106,14 +106,14 @@  discard block
 block discarded – undo
106 106
      */
107 107
     public function _construct_finalize($parent_form_section, $name)
108 108
     {
109
-        if (! $this->_payment_method_type instanceof EE_PMT_Base) {
109
+        if ( ! $this->_payment_method_type instanceof EE_PMT_Base) {
110 110
             throw new EE_Error(sprintf(__(
111 111
                 'Payment Method forms must have set their payment method type BEFORE calling _construct_finalize',
112 112
                 'event_espresso'
113 113
             )));
114 114
         }
115 115
         // set the name of this form based on the payment method type
116
-        if (! $this->_name && ! $name) {
116
+        if ( ! $this->_name && ! $name) {
117 117
             $name = str_replace(" ", "_", ucwords(str_replace("_", " ", ($this->_payment_method_type->system_name()))))
118 118
                     . "_Settings_Form";
119 119
         }
@@ -128,7 +128,7 @@  discard block
 block discarded – undo
128 128
      */
129 129
     public function set_payment_method_type($payment_method_type)
130 130
     {
131
-        if (! $payment_method_type instanceof EE_PMT_Base) {
131
+        if ( ! $payment_method_type instanceof EE_PMT_Base) {
132 132
             throw new EE_Error(sprintf(__(
133 133
                 "Payment Method forms MUST set a payment method type by using _set_payment_method_type",
134 134
                 "event_espresso"
@@ -168,8 +168,8 @@  discard block
 block discarded – undo
168 168
         parent::populate_model_obj($model_obj);
169 169
         $extra_meta = $model_obj->all_extra_meta_array();
170 170
         foreach ($this->_extra_meta_inputs as $input_name => $extra_meta_input) {
171
-            if (isset($extra_meta[ $input_name ])) {
172
-                $extra_meta_input->set_default($extra_meta[ $input_name ]);
171
+            if (isset($extra_meta[$input_name])) {
172
+                $extra_meta_input->set_default($extra_meta[$input_name]);
173 173
             }
174 174
         }
175 175
     }
@@ -183,8 +183,8 @@  discard block
 block discarded – undo
183 183
      */
184 184
     protected function _set_default_name_if_empty()
185 185
     {
186
-        if (! $this->_name) {
187
-            $default_name = str_replace("EEM_", "", get_class($this->_model)) . "_Model_Form";
186
+        if ( ! $this->_name) {
187
+            $default_name = str_replace("EEM_", "", get_class($this->_model))."_Model_Form";
188 188
             $this->_name = $default_name;
189 189
         }
190 190
     }
Please login to merge, or discard this patch.
core/libraries/shortcodes/EE_Shortcodes.lib.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -352,7 +352,7 @@
 block discarded – undo
352 352
      *
353 353
      * Note: regex comes in part from the WP `get_shortcode_regex` expression in \wp-includes\shortcodes.php
354 354
      *
355
-     * @param $shortcode
355
+     * @param string $shortcode
356 356
      * @since 4.9.32
357 357
      * @return string
358 358
      */
Please login to merge, or discard this patch.
Indentation   +453 added lines, -453 removed lines patch added patch discarded remove patch
@@ -17,457 +17,457 @@
 block discarded – undo
17 17
 abstract class EE_Shortcodes extends EE_Base
18 18
 {
19 19
 
20
-    /**
21
-     * holds label for library
22
-     * This is used for referencing the library label
23
-     *
24
-     * @access public
25
-     * @var string
26
-     */
27
-    public $label;
28
-
29
-
30
-    /**
31
-     * This property is used for referencing a short description of the library
32
-     *
33
-     * @access public
34
-     * @var string
35
-     */
36
-    public $description;
37
-
38
-
39
-    /**
40
-     * This will hold an array of shortcodes with the key as the shortcode ([shortcode]) and the value as a
41
-     * label/description for the shortcode.
42
-     *
43
-     * @access protected
44
-     * @var array
45
-     */
46
-    protected $_shortcodes;
47
-
48
-
49
-    /**
50
-     * This will hold the incoming data item sent to the parser method
51
-     *
52
-     * @access protected
53
-     * @var mixed (array|object)
54
-     */
55
-    protected $_data;
56
-
57
-
58
-    /**
59
-     * some shortcodes may require extra data to parse.  This property is provided for that.
60
-     *
61
-     * @var array
62
-     */
63
-    protected $_extra_data;
64
-
65
-
66
-    /**
67
-     * EE_messenger used to generate the template being parsed.
68
-     *
69
-     * @since 4.5.0
70
-     * @var EE_messenger
71
-     */
72
-    protected $_messenger;
73
-
74
-
75
-    /**
76
-     * message type used to generate the template being parsed.
77
-     *
78
-     * @since 4.5.0
79
-     * @var EE_message_type
80
-     */
81
-    protected $_message_type;
82
-
83
-
84
-    /**
85
-     * context used for the template being parsed
86
-     *
87
-     * @since 4.5.0
88
-     * @var string
89
-     */
90
-    protected $_context;
91
-
92
-
93
-    /**
94
-     * Specific Message Template Group ID
95
-     *
96
-     * @since 4.5.0
97
-     * @var int
98
-     */
99
-    protected $_GRP_ID;
100
-
101
-
102
-    /**
103
-     * @since 4.9.0
104
-     * @type EE_Message
105
-     */
106
-    protected $_message;
107
-
108
-
109
-    /**
110
-     * This will hold an instance of the EEH_Parse_Shortcodes helper that will be used when handling list type
111
-     * shortcodes
112
-     *
113
-     * @var EEH_Parse_Shortcodes
114
-     */
115
-    protected $_shortcode_helper;
116
-
117
-
118
-    public function __construct()
119
-    {
120
-        $this->_set_defaults();
121
-        $this->_init_props();
122
-    }
123
-
124
-
125
-    /**
126
-     * This sets the defaults for the properties.  Child classes will override these properties in their _init_props
127
-     * method
128
-     */
129
-    private function _set_defaults()
130
-    {
131
-        $this->name = $this->description = '';
132
-        $this->_shortcodes = array();
133
-        $this->_set_shortcode_helper();
134
-    }
135
-
136
-
137
-    /**
138
-     * loads an instance of the EE_Shortcode_Parser helper when requested
139
-     */
140
-    protected function _set_shortcode_helper()
141
-    {
142
-        // get shortcode_replace instance- set when _get_messages is called in child...
143
-        $this->_shortcode_helper = new EEH_Parse_Shortcodes();
144
-    }
145
-
146
-
147
-    public function get_shortcode_helper()
148
-    {
149
-        if (! $this->_shortcode_helper instanceof EEH_Parse_Shortcodes) {
150
-            $this->_set_shortcode_helper();
151
-        }
152
-        return $this->_shortcode_helper;
153
-    }
154
-
155
-
156
-    /**
157
-     * This is the public method for kicking of the parser included with each child.  It can be overridden by child
158
-     * classes if necessary (see EE_Questions_Answers for example)
159
-     *
160
-     * @param  string $shortcode incoming shortcode to be parsed
161
-     * @param  mixed (object|array) $data       incoming data to be be used for parsing
162
-     * @param  mixed (object|array) $extra_data extra incoming data (usually EE_Messages_Addressee)
163
-     * @return string            parsed shortcode.
164
-     */
165
-    public function parser($shortcode, $data, $extra_data = array())
166
-    {
167
-
168
-        // filter setup shortcodes
169
-        $this->_shortcodes = $this->get_shortcodes();
170
-
171
-        // we need to setup any dynamic shortcodes so that they work with the array_key_exists
172
-        $sc = preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
173
-        $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
174
-
175
-        // first we want to make sure this is a valid shortcode
176
-        if (! array_key_exists($sc_to_verify, $this->_shortcodes)) {
177
-            return false;
178
-        } //get out, this parser doesn't handle the incoming shortcode.
179
-        $this->_data = $data;
180
-        $this->_extra_data = $extra_data;
181
-        $this->_set_messages_properties();
182
-        $parsed = apply_filters(
183
-            'FHEE__' . get_class($this) . '__parser_after',
184
-            $this->_parser($shortcode),
185
-            $shortcode,
186
-            $data,
187
-            $extra_data,
188
-            $this
189
-        );
190
-
191
-        // note the below filter applies to ALL shortcode parsers... be careful!
192
-        $parsed = apply_filters('FHEE__EE_Shortcodes__parser_after', $parsed, $shortcode, $data, $extra_data, $this);
193
-        return $parsed;
194
-    }
195
-
196
-
197
-    /**
198
-     * This method just returns the shortcodes in the $_shortcodes array property.
199
-     *
200
-     * @access public
201
-     * @return array array of shortcodes => description pairs
202
-     */
203
-    public function get_shortcodes()
204
-    {
205
-        $this->_shortcodes = apply_filters('FHEE__' . get_class($this) . '__shortcodes', $this->_shortcodes, $this);
206
-
207
-        // note the below filter applies to ALL shortcode parsers... be careful!
208
-        $this->_shortcodes = apply_filters('FHEE__EE_Shortcodes__shortcodes', $this->_shortcodes, $this);
209
-
210
-        return $this->_shortcodes;
211
-    }
212
-
213
-
214
-    /**
215
-     * Child classes use this method to set the $name, $description, and $_shortcodes properties.
216
-     *
217
-     * @abstract
218
-     * @access protected
219
-     * @return void
220
-     */
221
-    abstract protected function _init_props();
222
-
223
-
224
-    /**
225
-     * This method will give parsing instructions for each shortcode defined in the _shortcodes array.  Child methods
226
-     * will have to take care of handling.
227
-     *
228
-     * @abstract
229
-     * @access protected
230
-     * @param string $shortcode    the shortcode to be parsed.
231
-     * @param mixed (object|array) $data      incoming data for the parser.  The data could be either an object or
232
-     *                             array because there are some shortcodes that might be replaced by prepared data that
233
-     *                             has multiple items in a list (i.e. list of attendees in an event and we're showing
234
-     *                             fname/lname for each attendee).  In this case data will be in an array.  Otherwise
235
-     *                             the data shoudl be in a properly formatted object.  The
236
-     *                             EEH_Parse_Shortcodes.helper.php describes the data object we're expecting.
237
-     * @return string parsed shortcode
238
-     */
239
-    abstract protected function _parser($shortcode);
240
-
241
-
242
-    /**
243
-     * This just validates incoming data for list type shortcode parsers (and they call this method) to make sure it
244
-     * meets their requirements
245
-     *
246
-     * @return mixed (void|exception) If validation fails we'll throw an exception.
247
-     */
248
-    protected function _validate_list_requirements()
249
-    {
250
-
251
-        // first test to make sure we've got an array!
252
-        if (! is_array($this->_data)) {
253
-            throw new EE_Error(
254
-                sprintf(
255
-                    __(
256
-                        'Expecting an array for the data sent to %s. Instead it was %s',
257
-                        'event_espresso'
258
-                    ),
259
-                    get_class($this),
260
-                    gettype($this->_data)
261
-                )
262
-            );
263
-        }
264
-
265
-        // next test to make sure we've got the required template in the index!
266
-        if (! isset($this->_data['template'])) {
267
-            throw new EE_Error(
268
-                sprintf(
269
-                    __(
270
-                        'The incoming data does not have the required template index in its array',
271
-                        'event_espresso'
272
-                    )
273
-                )
274
-            );
275
-        }
276
-
277
-        // next test to make sure we've got got a data index in the incoming data array
278
-        if (! isset($this->_data['data'])) {
279
-            throw new EE_Error(
280
-                __(
281
-                    'The incoming data does not have the required data index in its array',
282
-                    'event_espresso'
283
-                )
284
-            );
285
-        }
286
-
287
-        // all is well let's make sure _extra_data always has the values needed.
288
-        // let's make sure that extra_data includes all templates (for later parsing if necessary)
289
-        if (empty($this->_extra_data) || (empty($this->_extra_data['data']) && empty($this->_extra_data['template']))) {
290
-            $this->_extra_data['data'] = $this->_data['data'];
291
-            $this->_extra_data['template'] = $this->_data['template'];
292
-        }
293
-    }
294
-
295
-
296
-    /**
297
-     * This returns any attributes that may be existing on an EE_Shortcode
298
-     *
299
-     * @since 4.5.0
300
-     * @param string $shortcode incoming shortcode
301
-     * @return array An array with the attributes
302
-     */
303
-    protected function _get_shortcode_attrs($shortcode)
304
-    {
305
-        // make sure the required wp helper function is present
306
-        // require the shortcode file if necessary
307
-        if (! function_exists('shortcode_parse_atts')) {
308
-            require_once(ABSPATH . WPINC . '/shortcodes.php');
309
-        }
310
-
311
-        // let's get any attributes that may be present and set the defaults.
312
-        $shortcode_to_parse = str_replace('[', '', str_replace(']', '', $shortcode));
313
-        return shortcode_parse_atts($shortcode_to_parse);
314
-    }
315
-
316
-
317
-    /**
318
-     * Conditional blocks are shortcode patterns with an opening conditional tag `[IF_*]` and a corresponding
319
-     * closing tag (eg `[/IF_*]`).  The content within the tags will be displayed/hidden depending on whatever
320
-     * conditions existed in the opening tag.  This method handles parsing the actual template to show/hide this
321
-     * conditional content.
322
-     *
323
-     * @since 4.9.32
324
-     *
325
-     * @param string $shortcode This should be original shortcode as used in the template and passed to the parser.
326
-     * @param bool   $show      true means the opening and closing tags are removed and the content is left showing,
327
-     *                          false means the opening and closing tags and the contained content are removed.
328
-     * @return string     The template for the shortcode is returned.
329
-     */
330
-    protected function _mutate_conditional_block_in_template($shortcode, $show = true)
331
-    {
332
-        // first let's get all the matches in the template for this particular shortcode.
333
-        preg_match_all('~' . $this->_get_conditional_block_regex($shortcode) . '~', $this->_data['template'], $matches);
334
-
335
-        if ($matches && is_array($matches[0]) && ! empty($matches[0])) {
336
-            // we need to hide all instances of the matches
337
-            foreach ($matches[0] as $index => $content_to_show_or_hide) {
338
-                $content_to_show_or_hide = preg_quote($content_to_show_or_hide);
339
-                $replacement = $show ? $matches[4][ $index ] : '';
340
-                $this->_data['template'] = preg_replace(
341
-                    '~' . $content_to_show_or_hide . '~',
342
-                    $replacement,
343
-                    $this->_data['template']
344
-                );
345
-            }
346
-        }
347
-        // return $template
348
-        return $this->_data['template'];
349
-    }
350
-
351
-
352
-    /**
353
-     * This returns the regex pattern to use for conditional shortcodes parsing.
354
-     *
355
-     * Note: regex comes in part from the WP `get_shortcode_regex` expression in \wp-includes\shortcodes.php
356
-     *
357
-     * @param $shortcode
358
-     * @since 4.9.32
359
-     * @return string
360
-     */
361
-    private function _get_conditional_block_regex($shortcode)
362
-    {
363
-        // get just the shortcode tag for the match
364
-        preg_match('@\[([^<>&/\[\]\x00-\x20=]++)@', $shortcode, $shortcode_tag_matches);
365
-        if (empty($shortcode_tag_matches[1])) {
366
-            return $this->_data['template'];
367
-        }
368
-
369
-        $shortcode_tag = $shortcode_tag_matches[1];
370
-        // get attributes_part_of_tag
371
-        $attributes_part = preg_quote(str_replace(array($shortcode_tag, '[', ']'), '', $shortcode));
372
-        // escape
373
-        $shortcode_tag = preg_quote($shortcode_tag);
374
-
375
-        return
376
-            '\['                                  // Opening Bracket
377
-            . "($shortcode_tag)$attributes_part"    // 1: Shortcode Name
378
-            . '(?![\w-])'                           // Not followed by word character or hyphen
379
-            . '('                                   // 2: Unroll the loop: Inside the opening shortcode tag
380
-            . '[^\]\/]*'                          // Not a closing bracket or forward slash
381
-            . '(?:'
382
-            . '\/(?!\])'                      // A forward slash not followed by a closing bracket
383
-            . '[^\]\/]*'                      // Not a closing bracket or forward slash.
384
-            . ')*?'
385
-            . ')'
386
-            . '(?:'
387
-            . '(\/)'                              // 3. Self closing tag ...
388
-            . '\]'                                // ... and closing bracket
389
-            . '|'
390
-            . '\]'                                // Closing bracket
391
-            . '(?:'
392
-            . '('                             // 4: Unroll the loop: Optionally, anything between the opening and closing brackets
393
-            . '[^\[]*+'                   // Not an opening bracket
394
-            . '(?:'
395
-            . '\[(?!\/\1\])'          // An opening bracket not followed by the closing shortcode tag.
396
-            . '[^\[]*+'               // Not an opening bracket
397
-            . ')*+'
398
-            . ')'
399
-            . '\[\/\1\]'                      // Closing shortcode tag
400
-            . ')?'
401
-            . ')';
402
-    }
403
-
404
-
405
-    /**
406
-     * This sets the properties related to the messages system
407
-     *
408
-     * @since 4.5.0
409
-     * @return void
410
-     */
411
-    protected function _set_messages_properties()
412
-    {
413
-        // should be in _extra_data
414
-        if (isset($this->_extra_data['messenger'])) {
415
-            $this->_messenger = $this->_extra_data['messenger'];
416
-            $this->_message_type = $this->_extra_data['message_type'];
417
-            $this->_context = $this->_extra_data['message'] instanceof EE_Message
418
-                ? $this->_extra_data['message']->context() : '';
419
-            $this->_GRP_ID = $this->_extra_data['message'] instanceof EE_Message
420
-                ? $this->_extra_data['message']->GRP_ID() : 0;
421
-            $this->_message = $this->_extra_data['message'] instanceof EE_Message ? $this->_extra_data['message']
422
-                : null;
423
-        }
424
-    }
425
-
426
-
427
-    /**
428
-     * This returns whatever the set message type object is that was set on this shortcode parser.
429
-     *
430
-     * @since 4.5.0
431
-     * @return EE_message_type
432
-     */
433
-    public function get_set_message_type()
434
-    {
435
-        return $this->_message_type;
436
-    }
437
-
438
-
439
-    /**
440
-     * This returns whatever the set messenger object is that was set on this shortcode parser
441
-     *
442
-     * @since 4.5.0
443
-     * @return EE_messenger
444
-     */
445
-    public function get_set_messenger()
446
-    {
447
-        return $this->_messenger;
448
-    }
449
-
450
-
451
-    /**
452
-     * This returns whatever the set context string is on this shortcode parser.
453
-     *
454
-     * @since 4.5.0
455
-     * @return string
456
-     */
457
-    public function get_set_context()
458
-    {
459
-        return $this->_context;
460
-    }
461
-
462
-
463
-    /**
464
-     * This returns whatever the set EE_Message object is on this shortcode.
465
-     *
466
-     * @since 4.9.0
467
-     * @return EE_Message
468
-     */
469
-    public function get_set_message()
470
-    {
471
-        return $this->_message;
472
-    }
20
+	/**
21
+	 * holds label for library
22
+	 * This is used for referencing the library label
23
+	 *
24
+	 * @access public
25
+	 * @var string
26
+	 */
27
+	public $label;
28
+
29
+
30
+	/**
31
+	 * This property is used for referencing a short description of the library
32
+	 *
33
+	 * @access public
34
+	 * @var string
35
+	 */
36
+	public $description;
37
+
38
+
39
+	/**
40
+	 * This will hold an array of shortcodes with the key as the shortcode ([shortcode]) and the value as a
41
+	 * label/description for the shortcode.
42
+	 *
43
+	 * @access protected
44
+	 * @var array
45
+	 */
46
+	protected $_shortcodes;
47
+
48
+
49
+	/**
50
+	 * This will hold the incoming data item sent to the parser method
51
+	 *
52
+	 * @access protected
53
+	 * @var mixed (array|object)
54
+	 */
55
+	protected $_data;
56
+
57
+
58
+	/**
59
+	 * some shortcodes may require extra data to parse.  This property is provided for that.
60
+	 *
61
+	 * @var array
62
+	 */
63
+	protected $_extra_data;
64
+
65
+
66
+	/**
67
+	 * EE_messenger used to generate the template being parsed.
68
+	 *
69
+	 * @since 4.5.0
70
+	 * @var EE_messenger
71
+	 */
72
+	protected $_messenger;
73
+
74
+
75
+	/**
76
+	 * message type used to generate the template being parsed.
77
+	 *
78
+	 * @since 4.5.0
79
+	 * @var EE_message_type
80
+	 */
81
+	protected $_message_type;
82
+
83
+
84
+	/**
85
+	 * context used for the template being parsed
86
+	 *
87
+	 * @since 4.5.0
88
+	 * @var string
89
+	 */
90
+	protected $_context;
91
+
92
+
93
+	/**
94
+	 * Specific Message Template Group ID
95
+	 *
96
+	 * @since 4.5.0
97
+	 * @var int
98
+	 */
99
+	protected $_GRP_ID;
100
+
101
+
102
+	/**
103
+	 * @since 4.9.0
104
+	 * @type EE_Message
105
+	 */
106
+	protected $_message;
107
+
108
+
109
+	/**
110
+	 * This will hold an instance of the EEH_Parse_Shortcodes helper that will be used when handling list type
111
+	 * shortcodes
112
+	 *
113
+	 * @var EEH_Parse_Shortcodes
114
+	 */
115
+	protected $_shortcode_helper;
116
+
117
+
118
+	public function __construct()
119
+	{
120
+		$this->_set_defaults();
121
+		$this->_init_props();
122
+	}
123
+
124
+
125
+	/**
126
+	 * This sets the defaults for the properties.  Child classes will override these properties in their _init_props
127
+	 * method
128
+	 */
129
+	private function _set_defaults()
130
+	{
131
+		$this->name = $this->description = '';
132
+		$this->_shortcodes = array();
133
+		$this->_set_shortcode_helper();
134
+	}
135
+
136
+
137
+	/**
138
+	 * loads an instance of the EE_Shortcode_Parser helper when requested
139
+	 */
140
+	protected function _set_shortcode_helper()
141
+	{
142
+		// get shortcode_replace instance- set when _get_messages is called in child...
143
+		$this->_shortcode_helper = new EEH_Parse_Shortcodes();
144
+	}
145
+
146
+
147
+	public function get_shortcode_helper()
148
+	{
149
+		if (! $this->_shortcode_helper instanceof EEH_Parse_Shortcodes) {
150
+			$this->_set_shortcode_helper();
151
+		}
152
+		return $this->_shortcode_helper;
153
+	}
154
+
155
+
156
+	/**
157
+	 * This is the public method for kicking of the parser included with each child.  It can be overridden by child
158
+	 * classes if necessary (see EE_Questions_Answers for example)
159
+	 *
160
+	 * @param  string $shortcode incoming shortcode to be parsed
161
+	 * @param  mixed (object|array) $data       incoming data to be be used for parsing
162
+	 * @param  mixed (object|array) $extra_data extra incoming data (usually EE_Messages_Addressee)
163
+	 * @return string            parsed shortcode.
164
+	 */
165
+	public function parser($shortcode, $data, $extra_data = array())
166
+	{
167
+
168
+		// filter setup shortcodes
169
+		$this->_shortcodes = $this->get_shortcodes();
170
+
171
+		// we need to setup any dynamic shortcodes so that they work with the array_key_exists
172
+		$sc = preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
173
+		$sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
174
+
175
+		// first we want to make sure this is a valid shortcode
176
+		if (! array_key_exists($sc_to_verify, $this->_shortcodes)) {
177
+			return false;
178
+		} //get out, this parser doesn't handle the incoming shortcode.
179
+		$this->_data = $data;
180
+		$this->_extra_data = $extra_data;
181
+		$this->_set_messages_properties();
182
+		$parsed = apply_filters(
183
+			'FHEE__' . get_class($this) . '__parser_after',
184
+			$this->_parser($shortcode),
185
+			$shortcode,
186
+			$data,
187
+			$extra_data,
188
+			$this
189
+		);
190
+
191
+		// note the below filter applies to ALL shortcode parsers... be careful!
192
+		$parsed = apply_filters('FHEE__EE_Shortcodes__parser_after', $parsed, $shortcode, $data, $extra_data, $this);
193
+		return $parsed;
194
+	}
195
+
196
+
197
+	/**
198
+	 * This method just returns the shortcodes in the $_shortcodes array property.
199
+	 *
200
+	 * @access public
201
+	 * @return array array of shortcodes => description pairs
202
+	 */
203
+	public function get_shortcodes()
204
+	{
205
+		$this->_shortcodes = apply_filters('FHEE__' . get_class($this) . '__shortcodes', $this->_shortcodes, $this);
206
+
207
+		// note the below filter applies to ALL shortcode parsers... be careful!
208
+		$this->_shortcodes = apply_filters('FHEE__EE_Shortcodes__shortcodes', $this->_shortcodes, $this);
209
+
210
+		return $this->_shortcodes;
211
+	}
212
+
213
+
214
+	/**
215
+	 * Child classes use this method to set the $name, $description, and $_shortcodes properties.
216
+	 *
217
+	 * @abstract
218
+	 * @access protected
219
+	 * @return void
220
+	 */
221
+	abstract protected function _init_props();
222
+
223
+
224
+	/**
225
+	 * This method will give parsing instructions for each shortcode defined in the _shortcodes array.  Child methods
226
+	 * will have to take care of handling.
227
+	 *
228
+	 * @abstract
229
+	 * @access protected
230
+	 * @param string $shortcode    the shortcode to be parsed.
231
+	 * @param mixed (object|array) $data      incoming data for the parser.  The data could be either an object or
232
+	 *                             array because there are some shortcodes that might be replaced by prepared data that
233
+	 *                             has multiple items in a list (i.e. list of attendees in an event and we're showing
234
+	 *                             fname/lname for each attendee).  In this case data will be in an array.  Otherwise
235
+	 *                             the data shoudl be in a properly formatted object.  The
236
+	 *                             EEH_Parse_Shortcodes.helper.php describes the data object we're expecting.
237
+	 * @return string parsed shortcode
238
+	 */
239
+	abstract protected function _parser($shortcode);
240
+
241
+
242
+	/**
243
+	 * This just validates incoming data for list type shortcode parsers (and they call this method) to make sure it
244
+	 * meets their requirements
245
+	 *
246
+	 * @return mixed (void|exception) If validation fails we'll throw an exception.
247
+	 */
248
+	protected function _validate_list_requirements()
249
+	{
250
+
251
+		// first test to make sure we've got an array!
252
+		if (! is_array($this->_data)) {
253
+			throw new EE_Error(
254
+				sprintf(
255
+					__(
256
+						'Expecting an array for the data sent to %s. Instead it was %s',
257
+						'event_espresso'
258
+					),
259
+					get_class($this),
260
+					gettype($this->_data)
261
+				)
262
+			);
263
+		}
264
+
265
+		// next test to make sure we've got the required template in the index!
266
+		if (! isset($this->_data['template'])) {
267
+			throw new EE_Error(
268
+				sprintf(
269
+					__(
270
+						'The incoming data does not have the required template index in its array',
271
+						'event_espresso'
272
+					)
273
+				)
274
+			);
275
+		}
276
+
277
+		// next test to make sure we've got got a data index in the incoming data array
278
+		if (! isset($this->_data['data'])) {
279
+			throw new EE_Error(
280
+				__(
281
+					'The incoming data does not have the required data index in its array',
282
+					'event_espresso'
283
+				)
284
+			);
285
+		}
286
+
287
+		// all is well let's make sure _extra_data always has the values needed.
288
+		// let's make sure that extra_data includes all templates (for later parsing if necessary)
289
+		if (empty($this->_extra_data) || (empty($this->_extra_data['data']) && empty($this->_extra_data['template']))) {
290
+			$this->_extra_data['data'] = $this->_data['data'];
291
+			$this->_extra_data['template'] = $this->_data['template'];
292
+		}
293
+	}
294
+
295
+
296
+	/**
297
+	 * This returns any attributes that may be existing on an EE_Shortcode
298
+	 *
299
+	 * @since 4.5.0
300
+	 * @param string $shortcode incoming shortcode
301
+	 * @return array An array with the attributes
302
+	 */
303
+	protected function _get_shortcode_attrs($shortcode)
304
+	{
305
+		// make sure the required wp helper function is present
306
+		// require the shortcode file if necessary
307
+		if (! function_exists('shortcode_parse_atts')) {
308
+			require_once(ABSPATH . WPINC . '/shortcodes.php');
309
+		}
310
+
311
+		// let's get any attributes that may be present and set the defaults.
312
+		$shortcode_to_parse = str_replace('[', '', str_replace(']', '', $shortcode));
313
+		return shortcode_parse_atts($shortcode_to_parse);
314
+	}
315
+
316
+
317
+	/**
318
+	 * Conditional blocks are shortcode patterns with an opening conditional tag `[IF_*]` and a corresponding
319
+	 * closing tag (eg `[/IF_*]`).  The content within the tags will be displayed/hidden depending on whatever
320
+	 * conditions existed in the opening tag.  This method handles parsing the actual template to show/hide this
321
+	 * conditional content.
322
+	 *
323
+	 * @since 4.9.32
324
+	 *
325
+	 * @param string $shortcode This should be original shortcode as used in the template and passed to the parser.
326
+	 * @param bool   $show      true means the opening and closing tags are removed and the content is left showing,
327
+	 *                          false means the opening and closing tags and the contained content are removed.
328
+	 * @return string     The template for the shortcode is returned.
329
+	 */
330
+	protected function _mutate_conditional_block_in_template($shortcode, $show = true)
331
+	{
332
+		// first let's get all the matches in the template for this particular shortcode.
333
+		preg_match_all('~' . $this->_get_conditional_block_regex($shortcode) . '~', $this->_data['template'], $matches);
334
+
335
+		if ($matches && is_array($matches[0]) && ! empty($matches[0])) {
336
+			// we need to hide all instances of the matches
337
+			foreach ($matches[0] as $index => $content_to_show_or_hide) {
338
+				$content_to_show_or_hide = preg_quote($content_to_show_or_hide);
339
+				$replacement = $show ? $matches[4][ $index ] : '';
340
+				$this->_data['template'] = preg_replace(
341
+					'~' . $content_to_show_or_hide . '~',
342
+					$replacement,
343
+					$this->_data['template']
344
+				);
345
+			}
346
+		}
347
+		// return $template
348
+		return $this->_data['template'];
349
+	}
350
+
351
+
352
+	/**
353
+	 * This returns the regex pattern to use for conditional shortcodes parsing.
354
+	 *
355
+	 * Note: regex comes in part from the WP `get_shortcode_regex` expression in \wp-includes\shortcodes.php
356
+	 *
357
+	 * @param $shortcode
358
+	 * @since 4.9.32
359
+	 * @return string
360
+	 */
361
+	private function _get_conditional_block_regex($shortcode)
362
+	{
363
+		// get just the shortcode tag for the match
364
+		preg_match('@\[([^<>&/\[\]\x00-\x20=]++)@', $shortcode, $shortcode_tag_matches);
365
+		if (empty($shortcode_tag_matches[1])) {
366
+			return $this->_data['template'];
367
+		}
368
+
369
+		$shortcode_tag = $shortcode_tag_matches[1];
370
+		// get attributes_part_of_tag
371
+		$attributes_part = preg_quote(str_replace(array($shortcode_tag, '[', ']'), '', $shortcode));
372
+		// escape
373
+		$shortcode_tag = preg_quote($shortcode_tag);
374
+
375
+		return
376
+			'\['                                  // Opening Bracket
377
+			. "($shortcode_tag)$attributes_part"    // 1: Shortcode Name
378
+			. '(?![\w-])'                           // Not followed by word character or hyphen
379
+			. '('                                   // 2: Unroll the loop: Inside the opening shortcode tag
380
+			. '[^\]\/]*'                          // Not a closing bracket or forward slash
381
+			. '(?:'
382
+			. '\/(?!\])'                      // A forward slash not followed by a closing bracket
383
+			. '[^\]\/]*'                      // Not a closing bracket or forward slash.
384
+			. ')*?'
385
+			. ')'
386
+			. '(?:'
387
+			. '(\/)'                              // 3. Self closing tag ...
388
+			. '\]'                                // ... and closing bracket
389
+			. '|'
390
+			. '\]'                                // Closing bracket
391
+			. '(?:'
392
+			. '('                             // 4: Unroll the loop: Optionally, anything between the opening and closing brackets
393
+			. '[^\[]*+'                   // Not an opening bracket
394
+			. '(?:'
395
+			. '\[(?!\/\1\])'          // An opening bracket not followed by the closing shortcode tag.
396
+			. '[^\[]*+'               // Not an opening bracket
397
+			. ')*+'
398
+			. ')'
399
+			. '\[\/\1\]'                      // Closing shortcode tag
400
+			. ')?'
401
+			. ')';
402
+	}
403
+
404
+
405
+	/**
406
+	 * This sets the properties related to the messages system
407
+	 *
408
+	 * @since 4.5.0
409
+	 * @return void
410
+	 */
411
+	protected function _set_messages_properties()
412
+	{
413
+		// should be in _extra_data
414
+		if (isset($this->_extra_data['messenger'])) {
415
+			$this->_messenger = $this->_extra_data['messenger'];
416
+			$this->_message_type = $this->_extra_data['message_type'];
417
+			$this->_context = $this->_extra_data['message'] instanceof EE_Message
418
+				? $this->_extra_data['message']->context() : '';
419
+			$this->_GRP_ID = $this->_extra_data['message'] instanceof EE_Message
420
+				? $this->_extra_data['message']->GRP_ID() : 0;
421
+			$this->_message = $this->_extra_data['message'] instanceof EE_Message ? $this->_extra_data['message']
422
+				: null;
423
+		}
424
+	}
425
+
426
+
427
+	/**
428
+	 * This returns whatever the set message type object is that was set on this shortcode parser.
429
+	 *
430
+	 * @since 4.5.0
431
+	 * @return EE_message_type
432
+	 */
433
+	public function get_set_message_type()
434
+	{
435
+		return $this->_message_type;
436
+	}
437
+
438
+
439
+	/**
440
+	 * This returns whatever the set messenger object is that was set on this shortcode parser
441
+	 *
442
+	 * @since 4.5.0
443
+	 * @return EE_messenger
444
+	 */
445
+	public function get_set_messenger()
446
+	{
447
+		return $this->_messenger;
448
+	}
449
+
450
+
451
+	/**
452
+	 * This returns whatever the set context string is on this shortcode parser.
453
+	 *
454
+	 * @since 4.5.0
455
+	 * @return string
456
+	 */
457
+	public function get_set_context()
458
+	{
459
+		return $this->_context;
460
+	}
461
+
462
+
463
+	/**
464
+	 * This returns whatever the set EE_Message object is on this shortcode.
465
+	 *
466
+	 * @since 4.9.0
467
+	 * @return EE_Message
468
+	 */
469
+	public function get_set_message()
470
+	{
471
+		return $this->_message;
472
+	}
473 473
 }
Please login to merge, or discard this patch.
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -146,7 +146,7 @@  discard block
 block discarded – undo
146 146
 
147 147
     public function get_shortcode_helper()
148 148
     {
149
-        if (! $this->_shortcode_helper instanceof EEH_Parse_Shortcodes) {
149
+        if ( ! $this->_shortcode_helper instanceof EEH_Parse_Shortcodes) {
150 150
             $this->_set_shortcode_helper();
151 151
         }
152 152
         return $this->_shortcode_helper;
@@ -170,17 +170,17 @@  discard block
 block discarded – undo
170 170
 
171 171
         // we need to setup any dynamic shortcodes so that they work with the array_key_exists
172 172
         $sc = preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
173
-        $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
173
+        $sc_to_verify = ! empty($matches[0]) ? $matches[0][0].']' : $shortcode;
174 174
 
175 175
         // first we want to make sure this is a valid shortcode
176
-        if (! array_key_exists($sc_to_verify, $this->_shortcodes)) {
176
+        if ( ! array_key_exists($sc_to_verify, $this->_shortcodes)) {
177 177
             return false;
178 178
         } //get out, this parser doesn't handle the incoming shortcode.
179 179
         $this->_data = $data;
180 180
         $this->_extra_data = $extra_data;
181 181
         $this->_set_messages_properties();
182 182
         $parsed = apply_filters(
183
-            'FHEE__' . get_class($this) . '__parser_after',
183
+            'FHEE__'.get_class($this).'__parser_after',
184 184
             $this->_parser($shortcode),
185 185
             $shortcode,
186 186
             $data,
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
      */
203 203
     public function get_shortcodes()
204 204
     {
205
-        $this->_shortcodes = apply_filters('FHEE__' . get_class($this) . '__shortcodes', $this->_shortcodes, $this);
205
+        $this->_shortcodes = apply_filters('FHEE__'.get_class($this).'__shortcodes', $this->_shortcodes, $this);
206 206
 
207 207
         // note the below filter applies to ALL shortcode parsers... be careful!
208 208
         $this->_shortcodes = apply_filters('FHEE__EE_Shortcodes__shortcodes', $this->_shortcodes, $this);
@@ -249,7 +249,7 @@  discard block
 block discarded – undo
249 249
     {
250 250
 
251 251
         // first test to make sure we've got an array!
252
-        if (! is_array($this->_data)) {
252
+        if ( ! is_array($this->_data)) {
253 253
             throw new EE_Error(
254 254
                 sprintf(
255 255
                     __(
@@ -263,7 +263,7 @@  discard block
 block discarded – undo
263 263
         }
264 264
 
265 265
         // next test to make sure we've got the required template in the index!
266
-        if (! isset($this->_data['template'])) {
266
+        if ( ! isset($this->_data['template'])) {
267 267
             throw new EE_Error(
268 268
                 sprintf(
269 269
                     __(
@@ -275,7 +275,7 @@  discard block
 block discarded – undo
275 275
         }
276 276
 
277 277
         // next test to make sure we've got got a data index in the incoming data array
278
-        if (! isset($this->_data['data'])) {
278
+        if ( ! isset($this->_data['data'])) {
279 279
             throw new EE_Error(
280 280
                 __(
281 281
                     'The incoming data does not have the required data index in its array',
@@ -304,8 +304,8 @@  discard block
 block discarded – undo
304 304
     {
305 305
         // make sure the required wp helper function is present
306 306
         // require the shortcode file if necessary
307
-        if (! function_exists('shortcode_parse_atts')) {
308
-            require_once(ABSPATH . WPINC . '/shortcodes.php');
307
+        if ( ! function_exists('shortcode_parse_atts')) {
308
+            require_once(ABSPATH.WPINC.'/shortcodes.php');
309 309
         }
310 310
 
311 311
         // let's get any attributes that may be present and set the defaults.
@@ -330,15 +330,15 @@  discard block
 block discarded – undo
330 330
     protected function _mutate_conditional_block_in_template($shortcode, $show = true)
331 331
     {
332 332
         // first let's get all the matches in the template for this particular shortcode.
333
-        preg_match_all('~' . $this->_get_conditional_block_regex($shortcode) . '~', $this->_data['template'], $matches);
333
+        preg_match_all('~'.$this->_get_conditional_block_regex($shortcode).'~', $this->_data['template'], $matches);
334 334
 
335 335
         if ($matches && is_array($matches[0]) && ! empty($matches[0])) {
336 336
             // we need to hide all instances of the matches
337 337
             foreach ($matches[0] as $index => $content_to_show_or_hide) {
338 338
                 $content_to_show_or_hide = preg_quote($content_to_show_or_hide);
339
-                $replacement = $show ? $matches[4][ $index ] : '';
339
+                $replacement = $show ? $matches[4][$index] : '';
340 340
                 $this->_data['template'] = preg_replace(
341
-                    '~' . $content_to_show_or_hide . '~',
341
+                    '~'.$content_to_show_or_hide.'~',
342 342
                     $replacement,
343 343
                     $this->_data['template']
344 344
                 );
Please login to merge, or discard this patch.
core/services/commands/transaction/CreateTransactionCommand.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -57,7 +57,7 @@
 block discarded – undo
57 57
     public function getCapCheck()
58 58
     {
59 59
         // need cap for non-AJAX admin requests
60
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
60
+        if ( ! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
61 61
             // there's no specific caps for editing/creating transactions,
62 62
             // so that's why we are using ee_edit_registrations
63 63
             return new CapCheck('ee_edit_registrations', 'create_new_transaction');
Please login to merge, or discard this patch.
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -20,60 +20,60 @@
 block discarded – undo
20 20
 class CreateTransactionCommand extends Command implements CommandRequiresCapCheckInterface
21 21
 {
22 22
 
23
-    /**
24
-     * @var EE_Checkout $checkout
25
-     */
26
-    protected $checkout;
23
+	/**
24
+	 * @var EE_Checkout $checkout
25
+	 */
26
+	protected $checkout;
27 27
 
28
-    /**
29
-     * @var array $transaction_details
30
-     */
31
-    protected $transaction_details;
28
+	/**
29
+	 * @var array $transaction_details
30
+	 */
31
+	protected $transaction_details;
32 32
 
33 33
 
34
-    /**
35
-     * CreateTransactionCommand constructor.
36
-     *
37
-     * @param EE_Checkout $checkout
38
-     * @param array       $transaction_details
39
-     */
40
-    public function __construct(EE_Checkout $checkout = null, array $transaction_details = array())
41
-    {
42
-        $this->checkout = $checkout;
43
-        $this->transaction_details = $transaction_details;
44
-    }
34
+	/**
35
+	 * CreateTransactionCommand constructor.
36
+	 *
37
+	 * @param EE_Checkout $checkout
38
+	 * @param array       $transaction_details
39
+	 */
40
+	public function __construct(EE_Checkout $checkout = null, array $transaction_details = array())
41
+	{
42
+		$this->checkout = $checkout;
43
+		$this->transaction_details = $transaction_details;
44
+	}
45 45
 
46 46
 
47
-    /**
48
-     * @return CapCheckInterface
49
-     * @throws InvalidDataTypeException
50
-     */
51
-    public function getCapCheck()
52
-    {
53
-        // need cap for non-AJAX admin requests
54
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
55
-            // there's no specific caps for editing/creating transactions,
56
-            // so that's why we are using ee_edit_registrations
57
-            return new CapCheck('ee_edit_registrations', 'create_new_transaction');
58
-        }
59
-        return new PublicCapabilities('', 'create_new_transaction');
60
-    }
47
+	/**
48
+	 * @return CapCheckInterface
49
+	 * @throws InvalidDataTypeException
50
+	 */
51
+	public function getCapCheck()
52
+	{
53
+		// need cap for non-AJAX admin requests
54
+		if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
55
+			// there's no specific caps for editing/creating transactions,
56
+			// so that's why we are using ee_edit_registrations
57
+			return new CapCheck('ee_edit_registrations', 'create_new_transaction');
58
+		}
59
+		return new PublicCapabilities('', 'create_new_transaction');
60
+	}
61 61
 
62 62
 
63
-    /**
64
-     * @return EE_Checkout
65
-     */
66
-    public function checkout()
67
-    {
68
-        return $this->checkout;
69
-    }
63
+	/**
64
+	 * @return EE_Checkout
65
+	 */
66
+	public function checkout()
67
+	{
68
+		return $this->checkout;
69
+	}
70 70
 
71 71
 
72
-    /**
73
-     * @return array
74
-     */
75
-    public function transactionDetails()
76
-    {
77
-        return $this->transaction_details;
78
-    }
72
+	/**
73
+	 * @return array
74
+	 */
75
+	public function transactionDetails()
76
+	{
77
+		return $this->transaction_details;
78
+	}
79 79
 }
Please login to merge, or discard this patch.