Completed
Branch models-cleanup/model-relations (b772ed)
by
unknown
56:02 queued 47:06
created
messages/templates/ee_msg_editor_active_context_element.template.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -10,22 +10,22 @@  discard block
 block discarded – undo
10 10
  * @var int    $message_template_group_id The ID for the message template group this context belongs to.
11 11
  */
12 12
 $active_message = sprintf(
13
-    esc_html__(
14
-        'The template for %1$s is currently %2$sactive%3$s.',
15
-        'event_espresso'
16
-    ),
17
-    $context_label,
18
-    '<strong>',
19
-    '</strong>'
13
+	esc_html__(
14
+		'The template for %1$s is currently %2$sactive%3$s.',
15
+		'event_espresso'
16
+	),
17
+	$context_label,
18
+	'<strong>',
19
+	'</strong>'
20 20
 );
21 21
 $inactive_message = sprintf(
22
-    esc_html__(
23
-        'The template for %1$s is currently %2$sinactive%3$s.',
24
-        'event_espresso'
25
-    ),
26
-    $context_label,
27
-    '<strong>',
28
-    '</strong>'
22
+	esc_html__(
23
+		'The template for %1$s is currently %2$sinactive%3$s.',
24
+		'event_espresso'
25
+	),
26
+	$context_label,
27
+	'<strong>',
28
+	'</strong>'
29 29
 );
30 30
 ?>
31 31
 <div class="context-active-control-container">
@@ -34,8 +34,8 @@  discard block
 block discarded – undo
34 34
         <span id="on-off-nonce-<?php echo $context; ?>" class="hidden"><?php echo $nonce; ?></span>
35 35
         <span class="ee-on-off-toggle-label">
36 36
             <?php
37
-            echo $is_active ? $active_message : $inactive_message;
38
-            ?>
37
+			echo $is_active ? $active_message : $inactive_message;
38
+			?>
39 39
         </span>
40 40
         <div class="hidden js-data">
41 41
             <span class="ee-active-message"><?php echo $active_message; ?></span>
@@ -43,8 +43,8 @@  discard block
 block discarded – undo
43 43
         </div>
44 44
         <div class="switch">
45 45
             <?php
46
-            $checked = $is_active ? ' checked="checked"' : '';
47
-            ?>
46
+			$checked = $is_active ? ' checked="checked"' : '';
47
+			?>
48 48
             <input data-grpid="<?php echo $message_template_group_id; ?>" id="ee-on-off-toggle-<?php echo $context; ?>" type="checkbox" class="ee-on-off-toggle ee-toggle-round-flat"<?php echo $checked; ?> value="<?php echo $on_off_action; ?>">
49 49
             <label for="ee-on-off-toggle-<?php echo $context; ?>"></label>
50 50
         </div>
Please login to merge, or discard this patch.
public/Espresso_Arabica_2014/functions.php 1 patch
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -9,9 +9,9 @@  discard block
 block discarded – undo
9 9
  * @ link			http://www.eventespresso.com
10 10
  * @ version		4+
11 11
  */
12
-define( 'EE_THEME_FUNCTIONS_LOADED', TRUE );
12
+define('EE_THEME_FUNCTIONS_LOADED', TRUE);
13 13
 
14
-if ( ! function_exists( 'espresso_pagination' ) ) {
14
+if ( ! function_exists('espresso_pagination')) {
15 15
 	/**
16 16
 	 *    espresso_pagination
17 17
 	 *
@@ -23,21 +23,21 @@  discard block
 block discarded – undo
23 23
 		$big = 999999999; // need an unlikely integer
24 24
 		$pagination = paginate_links(
25 25
 			array(
26
-				'base'         => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
26
+				'base'         => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
27 27
 				'format'       => '?paged=%#%',
28
-				'current'      => max( 1, get_query_var( 'paged' ) ),
28
+				'current'      => max(1, get_query_var('paged')),
29 29
 				'total'        => $wp_query->max_num_pages,
30 30
 				'show_all'     => true,
31 31
 				'end_size'     => 10,
32 32
 				'mid_size'     => 6,
33 33
 				'prev_next'    => true,
34
-				'prev_text'    => __( '&lsaquo; PREV', 'event_espresso' ),
35
-				'next_text'    => __( 'NEXT &rsaquo;', 'event_espresso' ),
34
+				'prev_text'    => __('&lsaquo; PREV', 'event_espresso'),
35
+				'next_text'    => __('NEXT &rsaquo;', 'event_espresso'),
36 36
 				'type'         => 'plain',
37 37
 				'add_args'     => false,
38 38
 				'add_fragment' => ''
39 39
 			)
40 40
 		);
41
-		echo ! empty( $pagination ) ? '<div class="ee-pagination-dv ee-clear-float">' . $pagination . '</div>' : '';
41
+		echo ! empty($pagination) ? '<div class="ee-pagination-dv ee-clear-float">'.$pagination.'</div>' : '';
42 42
 	}
43 43
 }
44 44
\ No newline at end of file
Please login to merge, or discard this patch.
admin_pages/messages/help_tabs/messages_settings_messengers.help_tab.php 2 patches
Indentation   +50 added lines, -50 removed lines patch added patch discarded remove patch
@@ -3,79 +3,79 @@
 block discarded – undo
3 3
 </p>
4 4
 <p>
5 5
     <?php esc_html_e(
6
-        'You can select Messengers via the tabs across the top of the settings page. The available messengers you see depends on what version of Event Espresso you have and what addons are installed. Every install include an "Email" messenger tab.  When you click one of those tabs it will display that messenger.',
7
-        'event_espresso'
8
-    ); ?>
6
+		'You can select Messengers via the tabs across the top of the settings page. The available messengers you see depends on what version of Event Espresso you have and what addons are installed. Every install include an "Email" messenger tab.  When you click one of those tabs it will display that messenger.',
7
+		'event_espresso'
8
+	); ?>
9 9
 </p>
10 10
 <p>
11 11
     <?php esc_html_e(
12
-        'There are two ways to determine whether a messenger is active or not.  The first way is via the messenger tab itself.',
13
-        'event_espresso'
14
-    ); ?>
12
+		'There are two ways to determine whether a messenger is active or not.  The first way is via the messenger tab itself.',
13
+		'event_espresso'
14
+	); ?>
15 15
 </p>
16 16
 <p>
17 17
     <?php printf(
18
-        esc_html__(
19
-            'The green colored gear %s indicates that this messenger is currently active.',
20
-            'event_espresso'
21
-        ),
22
-        '<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-active.png' . '"'
23
-        . ' alt="' . esc_attr__('Active Email Tab', 'event_espresso') . '" />'
24
-    );
25
-    printf(
26
-        esc_html__(
27
-            ' The white colored gear %s indicates the messenger is inactive. This is very helpful for seeing at a glance all the messengers that are active when you first view the page.',
28
-            'event_espresso'
29
-        ),
30
-        '<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-inactive.png'
31
-        . '" alt="' . esc_attr__('Inactive Email Tab', 'event_espresso') . '" />'
32
-    ); ?>
18
+		esc_html__(
19
+			'The green colored gear %s indicates that this messenger is currently active.',
20
+			'event_espresso'
21
+		),
22
+		'<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-active.png' . '"'
23
+		. ' alt="' . esc_attr__('Active Email Tab', 'event_espresso') . '" />'
24
+	);
25
+	printf(
26
+		esc_html__(
27
+			' The white colored gear %s indicates the messenger is inactive. This is very helpful for seeing at a glance all the messengers that are active when you first view the page.',
28
+			'event_espresso'
29
+		),
30
+		'<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-inactive.png'
31
+		. '" alt="' . esc_attr__('Inactive Email Tab', 'event_espresso') . '" />'
32
+	); ?>
33 33
 </p>
34 34
 <p>
35 35
     <?php esc_html_e(
36
-        'The second way to determine whether a messenger is active or not is via the "on/off" button in the top right corner of the active messenger displayed content:',
37
-        'event_espresso'
38
-    ); ?>
36
+		'The second way to determine whether a messenger is active or not is via the "on/off" button in the top right corner of the active messenger displayed content:',
37
+		'event_espresso'
38
+	); ?>
39 39
 </p>
40 40
 <p>
41 41
     <?php printf(
42
-        esc_html__(
43
-            '%1$s means of course that the messenger is active and %2$s means the messenger is inactive.',
44
-            'event_espresso'
45
-        ),
46
-        '<div class="switch">'
47
-            . '<input class="ee-on-off-toggle ee-toggle-round-flat" type="checkbox" checked="checked" disabled>'
48
-            . '<label for="ee-on-off-toggle-on"></label>'
49
-        . '</div>',
50
-        '<div class="switch">'
51
-            . '<input class="ee-on-off-toggle ee-toggle-round-flat" type="checkbox" disabled>'
52
-            . '<label for="ee-on-off-toggle-on"></label>'
53
-        . '</div>'
54
-    ); ?>
42
+		esc_html__(
43
+			'%1$s means of course that the messenger is active and %2$s means the messenger is inactive.',
44
+			'event_espresso'
45
+		),
46
+		'<div class="switch">'
47
+			. '<input class="ee-on-off-toggle ee-toggle-round-flat" type="checkbox" checked="checked" disabled>'
48
+			. '<label for="ee-on-off-toggle-on"></label>'
49
+		. '</div>',
50
+		'<div class="switch">'
51
+			. '<input class="ee-on-off-toggle ee-toggle-round-flat" type="checkbox" disabled>'
52
+			. '<label for="ee-on-off-toggle-on"></label>'
53
+		. '</div>'
54
+	); ?>
55 55
 </p>
56 56
 <p>
57 57
     <?php
58
-        esc_html_e(
59
-            'The on/off toggle is also what you use to activate or deactivate a messenger.',
60
-            'event_espresso'
61
-        ); ?>
58
+		esc_html_e(
59
+			'The on/off toggle is also what you use to activate or deactivate a messenger.',
60
+			'event_espresso'
61
+		); ?>
62 62
 </p>
63 63
 <p>
64 64
     <?php esc_html_e(
65
-        'What happens when you click the toggle to activate is the messenger is activated and the system determines what default message types are activated with the messenger.  Then, if there are any default settings for either the messenger or message types those settings are saved.  Next, the system will generate any default templates (if none have been generated before, if there are previously generated templates then they are reactivated).  Finally, you will see the display change to reflect that the messenger is active. If the messenger has settings you can modify them then. Any message types that have settings will also automatically expand so you can see the default settings and make any changes as necessary to fit your needs. Usually the defaults are sufficient however.',
66
-        'event_espresso'
67
-    ); ?>
65
+		'What happens when you click the toggle to activate is the messenger is activated and the system determines what default message types are activated with the messenger.  Then, if there are any default settings for either the messenger or message types those settings are saved.  Next, the system will generate any default templates (if none have been generated before, if there are previously generated templates then they are reactivated).  Finally, you will see the display change to reflect that the messenger is active. If the messenger has settings you can modify them then. Any message types that have settings will also automatically expand so you can see the default settings and make any changes as necessary to fit your needs. Usually the defaults are sufficient however.',
66
+		'event_espresso'
67
+	); ?>
68 68
 </p>
69 69
 <p>
70 70
     <?php esc_html_e(
71
-        'When you deactivate a messenger, the system will first check if there are any custom event templates for that messenger. If there are you will be unable to deactivate the messenger. This is a fail safe to make sure you know that no messages will go out for those specific events so you don\'t accidentally deactivate.  If this check passes, then the system will deactivate any global templates for that messenger (note the templates are not erased, they just become inactive, so if you decide to reactivate the messenger later all your customizations are preserved). Then the display will change to reflect the deactivation.',
72
-        'event_espresso'
73
-    ); ?>
71
+		'When you deactivate a messenger, the system will first check if there are any custom event templates for that messenger. If there are you will be unable to deactivate the messenger. This is a fail safe to make sure you know that no messages will go out for those specific events so you don\'t accidentally deactivate.  If this check passes, then the system will deactivate any global templates for that messenger (note the templates are not erased, they just become inactive, so if you decide to reactivate the messenger later all your customizations are preserved). Then the display will change to reflect the deactivation.',
72
+		'event_espresso'
73
+	); ?>
74 74
 </p>
75 75
 <p>
76 76
     <strong><?php esc_html_e('Important', 'event_espresso'); ?></strong><br/>
77 77
     <?php esc_html_e(
78
-        'Although customizations made to global templates are preserved when a messenger is deactivated, any settings for that messenger (or the message types that were attached to it) are lost on deactivation.  Also, once you deactivate a messenger, no more messages will be delivered using that messenger for any of your events.',
79
-        'event_espresso'
80
-    ); ?>
78
+		'Although customizations made to global templates are preserved when a messenger is deactivated, any settings for that messenger (or the message types that were attached to it) are lost on deactivation.  Also, once you deactivate a messenger, no more messages will be delivered using that messenger for any of your events.',
79
+		'event_espresso'
80
+	); ?>
81 81
 </p>
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,16 +19,16 @@
 block discarded – undo
19 19
             'The green colored gear %s indicates that this messenger is currently active.',
20 20
             'event_espresso'
21 21
         ),
22
-        '<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-active.png' . '"'
23
-        . ' alt="' . esc_attr__('Active Email Tab', 'event_espresso') . '" />'
22
+        '<img class="inline-text" src="'.EE_MSG_ASSETS_URL.'images/email-tab-active.png'.'"'
23
+        . ' alt="'.esc_attr__('Active Email Tab', 'event_espresso').'" />'
24 24
     );
25 25
     printf(
26 26
         esc_html__(
27 27
             ' The white colored gear %s indicates the messenger is inactive. This is very helpful for seeing at a glance all the messengers that are active when you first view the page.',
28 28
             'event_espresso'
29 29
         ),
30
-        '<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-inactive.png'
31
-        . '" alt="' . esc_attr__('Inactive Email Tab', 'event_espresso') . '" />'
30
+        '<img class="inline-text" src="'.EE_MSG_ASSETS_URL.'images/email-tab-inactive.png'
31
+        . '" alt="'.esc_attr__('Inactive Email Tab', 'event_espresso').'" />'
32 32
     ); ?>
33 33
 </p>
34 34
 <p>
Please login to merge, or discard this patch.
core/libraries/shortcodes/EE_Venue_Shortcodes.lib.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -176,7 +176,7 @@
 block discarded – undo
176 176
     /**
177 177
      * This retrieves the EE_Venue from the available data object.
178 178
      *
179
-     * @return EE_Venue|null
179
+     * @return EE_Base_Class|null
180 180
      * @throws EE_Error
181 181
      * @throws EntityNotFoundException
182 182
      */
Please login to merge, or discard this patch.
Indentation   +311 added lines, -311 removed lines patch added patch discarded remove patch
@@ -17,315 +17,315 @@
 block discarded – undo
17 17
 {
18 18
 
19 19
 
20
-    /**
21
-     * Will hold the EE_Event if available
22
-     *
23
-     * @var EE_Event
24
-     */
25
-    protected $_event;
26
-
27
-    /**
28
-     * Will hold the EE_Venue if available
29
-     *
30
-     * @var EE_Venue
31
-     */
32
-    protected $_venue;
33
-
34
-
35
-    /**
36
-     * Initialize properties
37
-     */
38
-    protected function _init_props()
39
-    {
40
-        $this->label = esc_html__('Venue Shortcodes', 'event_espresso');
41
-        $this->description = esc_html__('All shortcodes specific to venue related data', 'event_espresso');
42
-        $this->_shortcodes = array(
43
-            '[VENUE_TITLE]'             => esc_html__('The title for the event venue', 'event_espresso'),
44
-            '[VENUE_DESCRIPTION]'       => esc_html__('The description for the event venue', 'event_espresso'),
45
-            '[VENUE_URL]'               => esc_html__('A url to a webpage for the venue', 'event_espresso'),
46
-            '[VENUE_DETAILS_URL]'       => sprintf(
47
-                esc_html__(
48
-                    'This shortcode outputs the url or website address to the venue details page on this website. This differs from %s which outputs what is entered in the "url" field in the venue details page.',
49
-                    'event_espresso'
50
-                ),
51
-                '[VENUE_URL]'
52
-            ),
53
-            '[VENUE_IMAGE]'             => esc_html__('An image representing the event venue', 'event_espresso'),
54
-            '[VENUE_PHONE]'             => esc_html__('The phone number for the venue', 'event_espresso'),
55
-            '[VENUE_ADDRESS]'           => esc_html__('The address for the venue', 'event_espresso'),
56
-            '[VENUE_ADDRESS2]'          => esc_html__('Address 2 for the venue', 'event_espresso'),
57
-            '[VENUE_CITY]'              => esc_html__('The city the venue is in', 'event_espresso'),
58
-            '[VENUE_STATE]'             => esc_html__('The state the venue is located in', 'event_espresso'),
59
-            '[VENUE_COUNTRY]'           => esc_html__('The country the venue is located in', 'event_espresso'),
60
-            '[VENUE_FORMATTED_ADDRESS]' => esc_html__(
61
-                'This just outputs the venue address in a semantic address format.',
62
-                'event_espresso'
63
-            ),
64
-            '[VENUE_ZIP]'               => esc_html__('The zip code for the venue address', 'event_espresso'),
65
-            '[VENUE_META_*]'            => esc_html__(
66
-                'This is a special dynamic shortcode. After the "*", add the exact name for your custom field, if there is a value set for that custom field within the venue then it will be output in place of this shortcode.',
67
-                'event_espresso'
68
-            ),
69
-            '[GOOGLE_MAP_URL]'          => esc_html__(
70
-                'URL for the google map associated with the venue.',
71
-                'event_espresso'
72
-            ),
73
-            '[GOOGLE_MAP_LINK]'         => esc_html__('Link to a google map for the venue', 'event_espresso'),
74
-            '[GOOGLE_MAP_IMAGE]'        => esc_html__('Google map for venue wrapped in image tags', 'event_espresso'),
75
-        );
76
-    }
77
-
78
-
79
-    /**
80
-     * Parse incoming shortcode
81
-     *
82
-     * @param string $shortcode
83
-     * @return string
84
-     * @throws EE_Error
85
-     * @throws EntityNotFoundException
86
-     */
87
-    protected function _parser($shortcode)
88
-    {
89
-        $this->_venue = $this->_get_venue();
90
-        // If there is no venue object by now then get out.
91
-        if (! $this->_venue instanceof EE_Venue) {
92
-            return '';
93
-        }
94
-
95
-        switch ($shortcode) {
96
-            case '[VENUE_TITLE]':
97
-                return $this->_venue('title');
98
-                break;
99
-
100
-            case '[VENUE_DESCRIPTION]':
101
-                return $this->_venue('description');
102
-                break;
103
-
104
-            case '[VENUE_URL]':
105
-                return $this->_venue('url');
106
-                break;
107
-
108
-            case '[VENUE_IMAGE]':
109
-                return $this->_venue('image');
110
-                break;
111
-
112
-            case '[VENUE_PHONE]':
113
-                return $this->_venue('phone');
114
-                break;
115
-
116
-            case '[VENUE_ADDRESS]':
117
-                return $this->_venue('address');
118
-                break;
119
-
120
-            case '[VENUE_ADDRESS2]':
121
-                return $this->_venue('address2');
122
-                break;
123
-
124
-            case '[VENUE_CITY]':
125
-                return $this->_venue('city');
126
-                break;
127
-
128
-            case '[VENUE_COUNTRY]':
129
-                return $this->_venue('country');
130
-                break;
131
-
132
-            case '[VENUE_STATE]':
133
-                return $this->_venue('state');
134
-                break;
135
-
136
-            case '[VENUE_ZIP]':
137
-                return $this->_venue('zip');
138
-                break;
139
-
140
-            case '[VENUE_FORMATTED_ADDRESS]':
141
-                return $this->_venue('formatted_address');
142
-                break;
143
-
144
-            case '[GOOGLE_MAP_URL]':
145
-                return $this->_venue('gmap_url');
146
-                break;
147
-
148
-            case '[GOOGLE_MAP_LINK]':
149
-                return $this->_venue('gmap_link');
150
-                break;
151
-
152
-            case '[GOOGLE_MAP_IMAGE]':
153
-                return $this->_venue('gmap_link_img');
154
-                break;
155
-
156
-            case '[VENUE_DETAILS_URL]':
157
-                return $this->_venue('permalink');
158
-                break;
159
-        }
160
-
161
-        if (strpos($shortcode, '[VENUE_META_*') !== false) {
162
-            $shortcode = str_replace('[VENUE_META_*', '', $shortcode);
163
-            $shortcode = trim(str_replace(']', '', $shortcode));
164
-
165
-            // pull the meta value from the venue post
166
-            $venue_meta = $this->_venue->get_post_meta($shortcode, true);
167
-
168
-            return ! empty($venue_meta) ? $venue_meta : '';
169
-        }
170
-    }
171
-
172
-    /**
173
-     * This retrieves the EE_Venue from the available data object.
174
-     *
175
-     * @return EE_Venue|null
176
-     * @throws EE_Error
177
-     * @throws EntityNotFoundException
178
-     */
179
-    private function _get_venue()
180
-    {
181
-
182
-        // we need the EE_Event object to get the venue.
183
-        $this->_event = $this->_data instanceof EE_Event ? $this->_data : null;
184
-
185
-        // if no event, then let's see if there is a reg_obj.  If there IS, then we'll try and grab the event from the
186
-        // reg_obj instead.
187
-        if (! $this->_event instanceof EE_Event) {
188
-            $aee = $this->_data instanceof EE_Messages_Addressee ? $this->_data : null;
189
-            $aee = $this->_extra_data instanceof EE_Messages_Addressee ? $this->_extra_data : $aee;
190
-
191
-            $this->_event = $aee instanceof EE_Messages_Addressee && $aee->reg_obj instanceof EE_Registration
192
-                ? $aee->reg_obj->event()
193
-                : null;
194
-
195
-            // if still empty do we have a ticket data item?
196
-            $this->_event = ! $this->_event instanceof EE_Event
197
-                            && $this->_data instanceof EE_Ticket
198
-                            && $this->_extra_data['data'] instanceof EE_Messages_Addressee
199
-                ? $this->_extra_data['data']->tickets[ $this->_data->ID() ]['EE_Event']
200
-                : $this->_event;
201
-
202
-            // if STILL empty event, let's try to get the first event in the list of events via EE_Messages_Addressee
203
-            // and use that.
204
-            $this->_event = ! $this->_event instanceof EE_Event && $aee instanceof EE_Messages_Addressee
205
-                ? reset($aee->events)
206
-                : $this->_event;
207
-        }
208
-
209
-        // If we have an event object use it to pull the venue.
210
-        if ($this->_event instanceof EE_Event) {
211
-            return $this->_event->get_first_related('Venue');
212
-        }
213
-
214
-        return null;
215
-    }
216
-
217
-    /**
218
-     * This retrieves the specified venue information
219
-     *
220
-     * @param string $field What Venue field to retrieve
221
-     * @return string What was retrieved!
222
-     * @throws EE_Error
223
-     * @throws EntityNotFoundException
224
-     */
225
-    private function _venue($field)
226
-    {
227
-
228
-        if (! $this->_venue instanceof EE_Venue) {
229
-            return '';
230
-        } //no venue so get out.
231
-
232
-        switch ($field) {
233
-            case 'title':
234
-                return $this->_venue->get('VNU_name');
235
-                break;
236
-
237
-            case 'description':
238
-                return $this->_venue->get('VNU_desc');
239
-                break;
240
-
241
-            case 'url':
242
-                $url = $this->_venue->get('VNU_url');
243
-                return empty($url) ? $this->_venue->get_permalink() : $url;
244
-                break;
245
-
246
-            case 'permalink':
247
-                return $this->_venue->get_permalink();
248
-                break;
249
-
250
-            case 'image':
251
-                return '<img src="' . $this->_venue->feature_image_url(array(200, 200,))
252
-                       . '" alt="' . sprintf(
253
-                           esc_attr__('%s Feature Image', 'event_espresso'),
254
-                           $this->_venue->get('VNU_name')
255
-                       ) . '" />';
256
-                break;
257
-
258
-            case 'phone':
259
-                return $this->_venue->get('VNU_phone');
260
-                break;
261
-
262
-            case 'address':
263
-                return $this->_venue->get('VNU_address');
264
-                break;
265
-
266
-            case 'address2':
267
-                return $this->_venue->get('VNU_address2');
268
-                break;
269
-
270
-            case 'city':
271
-                return $this->_venue->get('VNU_city');
272
-                break;
273
-
274
-            case 'state':
275
-                $state = $this->_venue->state_obj();
276
-                return is_object($state) ? $state->get('STA_name') : '';
277
-                break;
278
-
279
-            case 'country':
280
-                $country = $this->_venue->country_obj();
281
-                return is_object($country) ? $country->get('CNT_name') : '';
282
-                break;
283
-
284
-            case 'zip':
285
-                return $this->_venue->get('VNU_zip');
286
-                break;
287
-
288
-            case 'formatted_address':
289
-                return EEH_Address::format($this->_venue);
290
-                break;
291
-
292
-            case 'gmap_link':
293
-            case 'gmap_url':
294
-            case 'gmap_link_img':
295
-                $atts = $this->get_map_attributes($this->_venue, $field);
296
-                return EEH_Maps::google_map_link($atts);
297
-                break;
298
-        }
299
-        return '';
300
-    }
301
-
302
-
303
-    /**
304
-     * Generates the attributes for retrieving a google_map artifact.
305
-     *
306
-     * @param EE_Venue $venue
307
-     * @param string   $field
308
-     * @return array
309
-     * @throws EE_Error
310
-     */
311
-    protected function get_map_attributes(EE_Venue $venue, $field = 'gmap_link')
312
-    {
313
-        $state = $venue->state_obj();
314
-        $country = $venue->country_obj();
315
-        $atts = array(
316
-            'id'      => $venue->ID(),
317
-            'address' => $venue->get('VNU_address'),
318
-            'city'    => $venue->get('VNU_city'),
319
-            'state'   => is_object($state) ? $state->get('STA_name') : '',
320
-            'zip'     => $venue->get('VNU_zip'),
321
-            'country' => is_object($country) ? $country->get('CNT_name') : '',
322
-            'type'    => $field === 'gmap_link' ? 'url' : 'map',
323
-            'map_w'   => 200,
324
-            'map_h'   => 200,
325
-        );
326
-        if ($field === 'gmap_url') {
327
-            $atts['type'] = 'url_only';
328
-        }
329
-        return $atts;
330
-    }
20
+	/**
21
+	 * Will hold the EE_Event if available
22
+	 *
23
+	 * @var EE_Event
24
+	 */
25
+	protected $_event;
26
+
27
+	/**
28
+	 * Will hold the EE_Venue if available
29
+	 *
30
+	 * @var EE_Venue
31
+	 */
32
+	protected $_venue;
33
+
34
+
35
+	/**
36
+	 * Initialize properties
37
+	 */
38
+	protected function _init_props()
39
+	{
40
+		$this->label = esc_html__('Venue Shortcodes', 'event_espresso');
41
+		$this->description = esc_html__('All shortcodes specific to venue related data', 'event_espresso');
42
+		$this->_shortcodes = array(
43
+			'[VENUE_TITLE]'             => esc_html__('The title for the event venue', 'event_espresso'),
44
+			'[VENUE_DESCRIPTION]'       => esc_html__('The description for the event venue', 'event_espresso'),
45
+			'[VENUE_URL]'               => esc_html__('A url to a webpage for the venue', 'event_espresso'),
46
+			'[VENUE_DETAILS_URL]'       => sprintf(
47
+				esc_html__(
48
+					'This shortcode outputs the url or website address to the venue details page on this website. This differs from %s which outputs what is entered in the "url" field in the venue details page.',
49
+					'event_espresso'
50
+				),
51
+				'[VENUE_URL]'
52
+			),
53
+			'[VENUE_IMAGE]'             => esc_html__('An image representing the event venue', 'event_espresso'),
54
+			'[VENUE_PHONE]'             => esc_html__('The phone number for the venue', 'event_espresso'),
55
+			'[VENUE_ADDRESS]'           => esc_html__('The address for the venue', 'event_espresso'),
56
+			'[VENUE_ADDRESS2]'          => esc_html__('Address 2 for the venue', 'event_espresso'),
57
+			'[VENUE_CITY]'              => esc_html__('The city the venue is in', 'event_espresso'),
58
+			'[VENUE_STATE]'             => esc_html__('The state the venue is located in', 'event_espresso'),
59
+			'[VENUE_COUNTRY]'           => esc_html__('The country the venue is located in', 'event_espresso'),
60
+			'[VENUE_FORMATTED_ADDRESS]' => esc_html__(
61
+				'This just outputs the venue address in a semantic address format.',
62
+				'event_espresso'
63
+			),
64
+			'[VENUE_ZIP]'               => esc_html__('The zip code for the venue address', 'event_espresso'),
65
+			'[VENUE_META_*]'            => esc_html__(
66
+				'This is a special dynamic shortcode. After the "*", add the exact name for your custom field, if there is a value set for that custom field within the venue then it will be output in place of this shortcode.',
67
+				'event_espresso'
68
+			),
69
+			'[GOOGLE_MAP_URL]'          => esc_html__(
70
+				'URL for the google map associated with the venue.',
71
+				'event_espresso'
72
+			),
73
+			'[GOOGLE_MAP_LINK]'         => esc_html__('Link to a google map for the venue', 'event_espresso'),
74
+			'[GOOGLE_MAP_IMAGE]'        => esc_html__('Google map for venue wrapped in image tags', 'event_espresso'),
75
+		);
76
+	}
77
+
78
+
79
+	/**
80
+	 * Parse incoming shortcode
81
+	 *
82
+	 * @param string $shortcode
83
+	 * @return string
84
+	 * @throws EE_Error
85
+	 * @throws EntityNotFoundException
86
+	 */
87
+	protected function _parser($shortcode)
88
+	{
89
+		$this->_venue = $this->_get_venue();
90
+		// If there is no venue object by now then get out.
91
+		if (! $this->_venue instanceof EE_Venue) {
92
+			return '';
93
+		}
94
+
95
+		switch ($shortcode) {
96
+			case '[VENUE_TITLE]':
97
+				return $this->_venue('title');
98
+				break;
99
+
100
+			case '[VENUE_DESCRIPTION]':
101
+				return $this->_venue('description');
102
+				break;
103
+
104
+			case '[VENUE_URL]':
105
+				return $this->_venue('url');
106
+				break;
107
+
108
+			case '[VENUE_IMAGE]':
109
+				return $this->_venue('image');
110
+				break;
111
+
112
+			case '[VENUE_PHONE]':
113
+				return $this->_venue('phone');
114
+				break;
115
+
116
+			case '[VENUE_ADDRESS]':
117
+				return $this->_venue('address');
118
+				break;
119
+
120
+			case '[VENUE_ADDRESS2]':
121
+				return $this->_venue('address2');
122
+				break;
123
+
124
+			case '[VENUE_CITY]':
125
+				return $this->_venue('city');
126
+				break;
127
+
128
+			case '[VENUE_COUNTRY]':
129
+				return $this->_venue('country');
130
+				break;
131
+
132
+			case '[VENUE_STATE]':
133
+				return $this->_venue('state');
134
+				break;
135
+
136
+			case '[VENUE_ZIP]':
137
+				return $this->_venue('zip');
138
+				break;
139
+
140
+			case '[VENUE_FORMATTED_ADDRESS]':
141
+				return $this->_venue('formatted_address');
142
+				break;
143
+
144
+			case '[GOOGLE_MAP_URL]':
145
+				return $this->_venue('gmap_url');
146
+				break;
147
+
148
+			case '[GOOGLE_MAP_LINK]':
149
+				return $this->_venue('gmap_link');
150
+				break;
151
+
152
+			case '[GOOGLE_MAP_IMAGE]':
153
+				return $this->_venue('gmap_link_img');
154
+				break;
155
+
156
+			case '[VENUE_DETAILS_URL]':
157
+				return $this->_venue('permalink');
158
+				break;
159
+		}
160
+
161
+		if (strpos($shortcode, '[VENUE_META_*') !== false) {
162
+			$shortcode = str_replace('[VENUE_META_*', '', $shortcode);
163
+			$shortcode = trim(str_replace(']', '', $shortcode));
164
+
165
+			// pull the meta value from the venue post
166
+			$venue_meta = $this->_venue->get_post_meta($shortcode, true);
167
+
168
+			return ! empty($venue_meta) ? $venue_meta : '';
169
+		}
170
+	}
171
+
172
+	/**
173
+	 * This retrieves the EE_Venue from the available data object.
174
+	 *
175
+	 * @return EE_Venue|null
176
+	 * @throws EE_Error
177
+	 * @throws EntityNotFoundException
178
+	 */
179
+	private function _get_venue()
180
+	{
181
+
182
+		// we need the EE_Event object to get the venue.
183
+		$this->_event = $this->_data instanceof EE_Event ? $this->_data : null;
184
+
185
+		// if no event, then let's see if there is a reg_obj.  If there IS, then we'll try and grab the event from the
186
+		// reg_obj instead.
187
+		if (! $this->_event instanceof EE_Event) {
188
+			$aee = $this->_data instanceof EE_Messages_Addressee ? $this->_data : null;
189
+			$aee = $this->_extra_data instanceof EE_Messages_Addressee ? $this->_extra_data : $aee;
190
+
191
+			$this->_event = $aee instanceof EE_Messages_Addressee && $aee->reg_obj instanceof EE_Registration
192
+				? $aee->reg_obj->event()
193
+				: null;
194
+
195
+			// if still empty do we have a ticket data item?
196
+			$this->_event = ! $this->_event instanceof EE_Event
197
+							&& $this->_data instanceof EE_Ticket
198
+							&& $this->_extra_data['data'] instanceof EE_Messages_Addressee
199
+				? $this->_extra_data['data']->tickets[ $this->_data->ID() ]['EE_Event']
200
+				: $this->_event;
201
+
202
+			// if STILL empty event, let's try to get the first event in the list of events via EE_Messages_Addressee
203
+			// and use that.
204
+			$this->_event = ! $this->_event instanceof EE_Event && $aee instanceof EE_Messages_Addressee
205
+				? reset($aee->events)
206
+				: $this->_event;
207
+		}
208
+
209
+		// If we have an event object use it to pull the venue.
210
+		if ($this->_event instanceof EE_Event) {
211
+			return $this->_event->get_first_related('Venue');
212
+		}
213
+
214
+		return null;
215
+	}
216
+
217
+	/**
218
+	 * This retrieves the specified venue information
219
+	 *
220
+	 * @param string $field What Venue field to retrieve
221
+	 * @return string What was retrieved!
222
+	 * @throws EE_Error
223
+	 * @throws EntityNotFoundException
224
+	 */
225
+	private function _venue($field)
226
+	{
227
+
228
+		if (! $this->_venue instanceof EE_Venue) {
229
+			return '';
230
+		} //no venue so get out.
231
+
232
+		switch ($field) {
233
+			case 'title':
234
+				return $this->_venue->get('VNU_name');
235
+				break;
236
+
237
+			case 'description':
238
+				return $this->_venue->get('VNU_desc');
239
+				break;
240
+
241
+			case 'url':
242
+				$url = $this->_venue->get('VNU_url');
243
+				return empty($url) ? $this->_venue->get_permalink() : $url;
244
+				break;
245
+
246
+			case 'permalink':
247
+				return $this->_venue->get_permalink();
248
+				break;
249
+
250
+			case 'image':
251
+				return '<img src="' . $this->_venue->feature_image_url(array(200, 200,))
252
+					   . '" alt="' . sprintf(
253
+						   esc_attr__('%s Feature Image', 'event_espresso'),
254
+						   $this->_venue->get('VNU_name')
255
+					   ) . '" />';
256
+				break;
257
+
258
+			case 'phone':
259
+				return $this->_venue->get('VNU_phone');
260
+				break;
261
+
262
+			case 'address':
263
+				return $this->_venue->get('VNU_address');
264
+				break;
265
+
266
+			case 'address2':
267
+				return $this->_venue->get('VNU_address2');
268
+				break;
269
+
270
+			case 'city':
271
+				return $this->_venue->get('VNU_city');
272
+				break;
273
+
274
+			case 'state':
275
+				$state = $this->_venue->state_obj();
276
+				return is_object($state) ? $state->get('STA_name') : '';
277
+				break;
278
+
279
+			case 'country':
280
+				$country = $this->_venue->country_obj();
281
+				return is_object($country) ? $country->get('CNT_name') : '';
282
+				break;
283
+
284
+			case 'zip':
285
+				return $this->_venue->get('VNU_zip');
286
+				break;
287
+
288
+			case 'formatted_address':
289
+				return EEH_Address::format($this->_venue);
290
+				break;
291
+
292
+			case 'gmap_link':
293
+			case 'gmap_url':
294
+			case 'gmap_link_img':
295
+				$atts = $this->get_map_attributes($this->_venue, $field);
296
+				return EEH_Maps::google_map_link($atts);
297
+				break;
298
+		}
299
+		return '';
300
+	}
301
+
302
+
303
+	/**
304
+	 * Generates the attributes for retrieving a google_map artifact.
305
+	 *
306
+	 * @param EE_Venue $venue
307
+	 * @param string   $field
308
+	 * @return array
309
+	 * @throws EE_Error
310
+	 */
311
+	protected function get_map_attributes(EE_Venue $venue, $field = 'gmap_link')
312
+	{
313
+		$state = $venue->state_obj();
314
+		$country = $venue->country_obj();
315
+		$atts = array(
316
+			'id'      => $venue->ID(),
317
+			'address' => $venue->get('VNU_address'),
318
+			'city'    => $venue->get('VNU_city'),
319
+			'state'   => is_object($state) ? $state->get('STA_name') : '',
320
+			'zip'     => $venue->get('VNU_zip'),
321
+			'country' => is_object($country) ? $country->get('CNT_name') : '',
322
+			'type'    => $field === 'gmap_link' ? 'url' : 'map',
323
+			'map_w'   => 200,
324
+			'map_h'   => 200,
325
+		);
326
+		if ($field === 'gmap_url') {
327
+			$atts['type'] = 'url_only';
328
+		}
329
+		return $atts;
330
+	}
331 331
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -88,7 +88,7 @@  discard block
 block discarded – undo
88 88
     {
89 89
         $this->_venue = $this->_get_venue();
90 90
         // If there is no venue object by now then get out.
91
-        if (! $this->_venue instanceof EE_Venue) {
91
+        if ( ! $this->_venue instanceof EE_Venue) {
92 92
             return '';
93 93
         }
94 94
 
@@ -184,7 +184,7 @@  discard block
 block discarded – undo
184 184
 
185 185
         // if no event, then let's see if there is a reg_obj.  If there IS, then we'll try and grab the event from the
186 186
         // reg_obj instead.
187
-        if (! $this->_event instanceof EE_Event) {
187
+        if ( ! $this->_event instanceof EE_Event) {
188 188
             $aee = $this->_data instanceof EE_Messages_Addressee ? $this->_data : null;
189 189
             $aee = $this->_extra_data instanceof EE_Messages_Addressee ? $this->_extra_data : $aee;
190 190
 
@@ -196,7 +196,7 @@  discard block
 block discarded – undo
196 196
             $this->_event = ! $this->_event instanceof EE_Event
197 197
                             && $this->_data instanceof EE_Ticket
198 198
                             && $this->_extra_data['data'] instanceof EE_Messages_Addressee
199
-                ? $this->_extra_data['data']->tickets[ $this->_data->ID() ]['EE_Event']
199
+                ? $this->_extra_data['data']->tickets[$this->_data->ID()]['EE_Event']
200 200
                 : $this->_event;
201 201
 
202 202
             // if STILL empty event, let's try to get the first event in the list of events via EE_Messages_Addressee
@@ -225,7 +225,7 @@  discard block
 block discarded – undo
225 225
     private function _venue($field)
226 226
     {
227 227
 
228
-        if (! $this->_venue instanceof EE_Venue) {
228
+        if ( ! $this->_venue instanceof EE_Venue) {
229 229
             return '';
230 230
         } //no venue so get out.
231 231
 
@@ -248,11 +248,11 @@  discard block
 block discarded – undo
248 248
                 break;
249 249
 
250 250
             case 'image':
251
-                return '<img src="' . $this->_venue->feature_image_url(array(200, 200,))
252
-                       . '" alt="' . sprintf(
251
+                return '<img src="'.$this->_venue->feature_image_url(array(200, 200,))
252
+                       . '" alt="'.sprintf(
253 253
                            esc_attr__('%s Feature Image', 'event_espresso'),
254 254
                            $this->_venue->get('VNU_name')
255
-                       ) . '" />';
255
+                       ).'" />';
256 256
                 break;
257 257
 
258 258
             case 'phone':
Please login to merge, or discard this patch.
core/libraries/form_sections/inputs/EE_Radio_Button_Input.input.php 1 patch
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -15,22 +15,22 @@
 block discarded – undo
15 15
 class EE_Radio_Button_Input extends EE_Form_Input_With_Options_Base
16 16
 {
17 17
 
18
-    /**
19
-     * @param array $answer_options
20
-     * @param array $input_settings
21
-     */
22
-    public function __construct($answer_options, $input_settings = array())
23
-    {
24
-        $this->_set_display_strategy(new EE_Radio_Button_Display_Strategy());
25
-        $this->_add_validation_strategy(
26
-            new EE_Enum_Validation_Strategy(
27
-                isset($input_settings['validation_error_message'])
28
-                    ? $input_settings['validation_error_message']
29
-                    : null
30
-            )
31
-        );
32
-        $this->_multiple_selections = false;
33
-        parent::__construct($answer_options, $input_settings);
34
-    }
18
+	/**
19
+	 * @param array $answer_options
20
+	 * @param array $input_settings
21
+	 */
22
+	public function __construct($answer_options, $input_settings = array())
23
+	{
24
+		$this->_set_display_strategy(new EE_Radio_Button_Display_Strategy());
25
+		$this->_add_validation_strategy(
26
+			new EE_Enum_Validation_Strategy(
27
+				isset($input_settings['validation_error_message'])
28
+					? $input_settings['validation_error_message']
29
+					: null
30
+			)
31
+		);
32
+		$this->_multiple_selections = false;
33
+		parent::__construct($answer_options, $input_settings);
34
+	}
35 35
 
36 36
 }
Please login to merge, or discard this patch.
core/libraries/form_sections/inputs/EE_Datepicker_Input.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
             )
30 30
         );
31 31
         parent::__construct($input_settings);
32
-        $this->set_html_class($this->html_class() . ' datepicker');
32
+        $this->set_html_class($this->html_class().' datepicker');
33 33
         // add some style and make it dance
34 34
         add_action('wp_enqueue_scripts', array('EE_Datepicker_Input', 'enqueue_styles_and_scripts'));
35 35
         add_action('admin_enqueue_scripts', array('EE_Datepicker_Input', 'enqueue_styles_and_scripts'));
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
         // load css
49 49
         wp_register_style(
50 50
             'espresso-ui-theme',
51
-            EE_GLOBAL_ASSETS_URL . 'css/espresso-ui-theme/jquery-ui-1.10.3.custom.min.css',
51
+            EE_GLOBAL_ASSETS_URL.'css/espresso-ui-theme/jquery-ui-1.10.3.custom.min.css',
52 52
             array(),
53 53
             EVENT_ESPRESSO_VERSION
54 54
         );
Please login to merge, or discard this patch.
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -10,45 +10,45 @@
 block discarded – undo
10 10
 class EE_Datepicker_Input extends EE_Form_Input_Base
11 11
 {
12 12
 
13
-    /**
14
-     * @param array $input_settings
15
-     */
16
-    public function __construct($input_settings = array())
17
-    {
18
-        $this->_set_display_strategy(new EE_Text_Input_Display_Strategy('datepicker'));
19
-        $this->_set_normalization_strategy(new EE_Text_Normalization());
20
-        // we could do better for validation, but at least verify its plaintext
21
-        $this->_add_validation_strategy(
22
-            new EE_Plaintext_Validation_Strategy(
23
-                isset($input_settings['validation_error_message'])
24
-                    ? $input_settings['validation_error_message']
25
-                    : null
26
-            )
27
-        );
28
-        parent::__construct($input_settings);
29
-        $this->set_html_class($this->html_class() . ' datepicker');
30
-        // add some style and make it dance
31
-        add_action('wp_enqueue_scripts', array('EE_Datepicker_Input', 'enqueue_styles_and_scripts'));
32
-        add_action('admin_enqueue_scripts', array('EE_Datepicker_Input', 'enqueue_styles_and_scripts'));
33
-    }
13
+	/**
14
+	 * @param array $input_settings
15
+	 */
16
+	public function __construct($input_settings = array())
17
+	{
18
+		$this->_set_display_strategy(new EE_Text_Input_Display_Strategy('datepicker'));
19
+		$this->_set_normalization_strategy(new EE_Text_Normalization());
20
+		// we could do better for validation, but at least verify its plaintext
21
+		$this->_add_validation_strategy(
22
+			new EE_Plaintext_Validation_Strategy(
23
+				isset($input_settings['validation_error_message'])
24
+					? $input_settings['validation_error_message']
25
+					: null
26
+			)
27
+		);
28
+		parent::__construct($input_settings);
29
+		$this->set_html_class($this->html_class() . ' datepicker');
30
+		// add some style and make it dance
31
+		add_action('wp_enqueue_scripts', array('EE_Datepicker_Input', 'enqueue_styles_and_scripts'));
32
+		add_action('admin_enqueue_scripts', array('EE_Datepicker_Input', 'enqueue_styles_and_scripts'));
33
+	}
34 34
 
35 35
 
36 36
 
37
-    /**
38
-     *    enqueue_styles_and_scripts
39
-     *
40
-     * @access        public
41
-     * @return        void
42
-     */
43
-    public static function enqueue_styles_and_scripts()
44
-    {
45
-        // load css
46
-        wp_register_style(
47
-            'espresso-ui-theme',
48
-            EE_GLOBAL_ASSETS_URL . 'css/espresso-ui-theme/jquery-ui-1.10.3.custom.min.css',
49
-            array(),
50
-            EVENT_ESPRESSO_VERSION
51
-        );
52
-        wp_enqueue_style('espresso-ui-theme');
53
-    }
37
+	/**
38
+	 *    enqueue_styles_and_scripts
39
+	 *
40
+	 * @access        public
41
+	 * @return        void
42
+	 */
43
+	public static function enqueue_styles_and_scripts()
44
+	{
45
+		// load css
46
+		wp_register_style(
47
+			'espresso-ui-theme',
48
+			EE_GLOBAL_ASSETS_URL . 'css/espresso-ui-theme/jquery-ui-1.10.3.custom.min.css',
49
+			array(),
50
+			EVENT_ESPRESSO_VERSION
51
+		);
52
+		wp_enqueue_style('espresso-ui-theme');
53
+	}
54 54
 }
Please login to merge, or discard this patch.
public/Espresso_Arabica_2014/loop-espresso_event_attendees.php 3 patches
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -22,15 +22,15 @@  discard block
 block discarded – undo
22 22
 
23 23
 <div class="event-attendees">
24 24
     <?php do_action_ref_array(
25
-        'AHEE__loop-espresso_event_attendees__before',
26
-        array(
27
-            $contacts,
28
-            $event,
29
-            $datetime,
30
-            $ticket,
31
-            $show_gravatar,
32
-        )
33
-    ); ?>
25
+		'AHEE__loop-espresso_event_attendees__before',
26
+		array(
27
+			$contacts,
28
+			$event,
29
+			$datetime,
30
+			$ticket,
31
+			$show_gravatar,
32
+		)
33
+	); ?>
34 34
 	<?php if ( $contacts ) : ?>
35 35
 		<ul class="event-attendees-list">
36 36
 			<?php foreach( $contacts as $contact ) :
@@ -47,13 +47,13 @@  discard block
 block discarded – undo
47 47
 		<p><?php echo $no_attendees_message; ?></p>
48 48
 	<?php endif; ?>
49 49
     <?php do_action_ref_array(
50
-        'AHEE__loop-espresso_event_attendees__after',
51
-        array(
52
-            $contacts,
53
-            $event,
54
-            $datetime,
55
-            $ticket,
56
-            $show_gravatar,
57
-        )
58
-    ); ?>
50
+		'AHEE__loop-espresso_event_attendees__after',
51
+		array(
52
+			$contacts,
53
+			$event,
54
+			$datetime,
55
+			$ticket,
56
+			$show_gravatar,
57
+		)
58
+	); ?>
59 59
 </div>
60 60
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @type bool       $show_gravatar  whether to show gravatar or not.
16 16
  */
17 17
 
18
-$no_attendees_message =  apply_filters( 'FHEE__loop-espresso_attendees-shortcode__template__no_attendees_message', __('No Attendees Yet', 'event_espresso' ) );
18
+$no_attendees_message = apply_filters('FHEE__loop-espresso_attendees-shortcode__template__no_attendees_message', __('No Attendees Yet', 'event_espresso'));
19 19
 
20 20
 
21 21
 ?>
@@ -31,16 +31,16 @@  discard block
 block discarded – undo
31 31
             $show_gravatar,
32 32
         )
33 33
     ); ?>
34
-	<?php if ( $contacts ) : ?>
34
+	<?php if ($contacts) : ?>
35 35
 		<ul class="event-attendees-list">
36
-			<?php foreach( $contacts as $contact ) :
37
-				EEH_Template::get_template_part( 'content', 'espresso_event_attendees', array( 
36
+			<?php foreach ($contacts as $contact) :
37
+				EEH_Template::get_template_part('content', 'espresso_event_attendees', array( 
38 38
 					'contact'       => $contact, 
39 39
 					'event'         => $event,
40 40
 					'datetime'      => $datetime,
41 41
 					'ticket'        => $ticket,
42 42
 					'show_gravatar' => $show_gravatar 
43
-				) );
43
+				));
44 44
 				endforeach; ?>
45 45
 		</ul>
46 46
 	<?php else : ?>
Please login to merge, or discard this patch.
Braces   +5 added lines, -2 removed lines patch added patch discarded remove patch
@@ -43,8 +43,11 @@
 block discarded – undo
43 43
 				) );
44 44
 				endforeach; ?>
45 45
 		</ul>
46
-	<?php else : ?>
47
-		<p><?php echo $no_attendees_message; ?></p>
46
+	<?php else {
47
+	: ?>
48
+		<p><?php echo $no_attendees_message;
49
+}
50
+?></p>
48 51
 	<?php endif; ?>
49 52
     <?php do_action_ref_array(
50 53
         'AHEE__loop-espresso_event_attendees__after',
Please login to merge, or discard this patch.
core/business/EE_Registration_Processor.class.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -734,7 +734,7 @@
 block discarded – undo
734 734
      * @since 4.9.1
735 735
      * @param int                   $att_nmbr
736 736
      * @param EE_Line_Item | string $item
737
-     * @return string
737
+     * @return RegUrlLink
738 738
      * @throws InvalidArgumentException
739 739
      */
740 740
     public function generate_reg_url_link($att_nmbr, $item)
Please login to merge, or discard this patch.
Indentation   +766 added lines, -766 removed lines patch added patch discarded remove patch
@@ -24,771 +24,771 @@
 block discarded – undo
24 24
 class EE_Registration_Processor extends EE_Processor_Base
25 25
 {
26 26
 
27
-    /**
28
-     * @var EE_Registration_Processor $_instance
29
-     * @access    private
30
-     */
31
-    private static $_instance;
32
-
33
-    /**
34
-     * initial reg status at the beginning of this request.
35
-     * indexed by registration ID
36
-     *
37
-     * @var array
38
-     */
39
-    protected $_old_reg_status = array();
40
-
41
-    /**
42
-     * reg status at the end of the request after all processing.
43
-     * indexed by registration ID
44
-     *
45
-     * @var array
46
-     */
47
-    protected $_new_reg_status = array();
48
-
49
-    /**
50
-     * amounts paid at the end of the request after all processing.
51
-     * indexed by registration ID
52
-     *
53
-     * @var array
54
-     */
55
-    protected static $_amount_paid = array();
56
-
57
-    /**
58
-     * Cache of the reg final price for registrations corresponding to a ticket line item
59
-     *
60
-     * @deprecated
61
-     * @var array @see EEH_Line_Item::calculate_reg_final_prices_per_line_item()'s return value
62
-     */
63
-    protected $_reg_final_price_per_tkt_line_item;
64
-
65
-    /**
66
-     * @var EE_Request $request
67
-     */
68
-    protected $request;
69
-
70
-
71
-    /**
72
-     * @singleton method used to instantiate class object
73
-     * @param EE_Request|null $request
74
-     * @return EE_Registration_Processor instance
75
-     * @throws \InvalidArgumentException
76
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
77
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
78
-     */
79
-    public static function instance(EE_Request $request = null)
80
-    {
81
-        // check if class object is instantiated
82
-        if (! self::$_instance instanceof EE_Registration_Processor) {
83
-            if (! $request instanceof EE_Request) {
84
-                $request = LoaderFactory::getLoader()->getShared('EE_Request');
85
-            }
86
-            self::$_instance = new self($request);
87
-        }
88
-        return self::$_instance;
89
-    }
90
-
91
-
92
-    /**
93
-     * EE_Registration_Processor constructor.
94
-     *
95
-     * @param EE_Request $request
96
-     */
97
-    public function __construct(EE_Request $request)
98
-    {
99
-        $this->request = $request;
100
-    }
101
-
102
-
103
-    /**
104
-     * @param int $REG_ID
105
-     * @return string
106
-     */
107
-    public function old_reg_status($REG_ID)
108
-    {
109
-        return isset($this->_old_reg_status[ $REG_ID ]) ? $this->_old_reg_status[ $REG_ID ] : null;
110
-    }
111
-
112
-
113
-    /**
114
-     * @param int    $REG_ID
115
-     * @param string $old_reg_status
116
-     */
117
-    public function set_old_reg_status($REG_ID, $old_reg_status)
118
-    {
119
-        // only set the first time
120
-        if (! isset($this->_old_reg_status[ $REG_ID ])) {
121
-            $this->_old_reg_status[ $REG_ID ] = $old_reg_status;
122
-        }
123
-    }
124
-
125
-
126
-    /**
127
-     * @param int $REG_ID
128
-     * @return string
129
-     */
130
-    public function new_reg_status($REG_ID)
131
-    {
132
-        return isset($this->_new_reg_status[ $REG_ID ]) ? $this->_new_reg_status[ $REG_ID ] : null;
133
-    }
134
-
135
-
136
-    /**
137
-     * @param int    $REG_ID
138
-     * @param string $new_reg_status
139
-     */
140
-    public function set_new_reg_status($REG_ID, $new_reg_status)
141
-    {
142
-        $this->_new_reg_status[ $REG_ID ] = $new_reg_status;
143
-    }
144
-
145
-
146
-    /**
147
-     * reg_status_updated
148
-     *
149
-     * @param int $REG_ID
150
-     * @return bool
151
-     */
152
-    public function reg_status_updated($REG_ID)
153
-    {
154
-        return $this->new_reg_status($REG_ID) !== $this->old_reg_status($REG_ID);
155
-    }
156
-
157
-
158
-    /**
159
-     * @param EE_Registration $registration
160
-     * @throws EE_Error
161
-     * @throws EntityNotFoundException
162
-     * @throws InvalidArgumentException
163
-     * @throws InvalidDataTypeException
164
-     * @throws InvalidInterfaceException
165
-     * @throws ReflectionException
166
-     * @throws RuntimeException
167
-     */
168
-    public function update_registration_status_and_trigger_notifications(EE_Registration $registration)
169
-    {
170
-        $this->toggle_incomplete_registration_status_to_default($registration, false);
171
-        $this->toggle_registration_status_for_default_approved_events($registration, false);
172
-        $this->toggle_registration_status_if_no_monies_owing($registration, false);
173
-        $registration->save();
174
-        // trigger notifications
175
-        $this->trigger_registration_update_notifications($registration);
176
-    }
177
-
178
-
179
-    /**
180
-     *    manually_update_registration_status
181
-     *
182
-     * @access public
183
-     * @param EE_Registration $registration
184
-     * @param string          $new_reg_status
185
-     * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
186
-     *                              to client code
187
-     * @return bool
188
-     * @throws EE_Error
189
-     * @throws EntityNotFoundException
190
-     * @throws InvalidArgumentException
191
-     * @throws InvalidDataTypeException
192
-     * @throws InvalidInterfaceException
193
-     * @throws ReflectionException
194
-     * @throws RuntimeException
195
-     */
196
-    public function manually_update_registration_status(
197
-        EE_Registration $registration,
198
-        $new_reg_status = '',
199
-        $save = true
200
-    ) {
201
-        // set initial REG_Status
202
-        $this->set_old_reg_status($registration->ID(), $registration->status_ID());
203
-        // set incoming REG_Status
204
-        $this->set_new_reg_status($registration->ID(), $new_reg_status);
205
-        // toggle reg status but only if it has changed and the user can do so
206
-        if (
207
-            $this->reg_status_updated($registration->ID())
208
-            && (
209
-                (! $this->request->isAdmin() || $this->request->isFrontAjax())
210
-                || EE_Registry::instance()->CAP->current_user_can(
211
-                    'ee_edit_registration',
212
-                    'toggle_registration_status',
213
-                    $registration->ID()
214
-                )
215
-            )
216
-        ) {
217
-            // change status to new value
218
-            $updated = $registration->set_status($this->new_reg_status($registration->ID()));
219
-            if ($updated && $save) {
220
-                $registration->save();
221
-            }
222
-            return true;
223
-        }
224
-        return false;
225
-    }
226
-
227
-
228
-    /**
229
-     *    toggle_incomplete_registration_status_to_default
230
-     *        changes any incomplete registrations to either the event or global default registration status
231
-     *
232
-     * @access public
233
-     * @param EE_Registration       $registration
234
-     * @param bool                  $save TRUE will save the registration if the status is updated, FALSE will leave
235
-     *                                    that up to client code
236
-     * @param ContextInterface|null $context
237
-     * @return void
238
-     * @throws EE_Error
239
-     * @throws InvalidArgumentException
240
-     * @throws ReflectionException
241
-     * @throws RuntimeException
242
-     * @throws EntityNotFoundException
243
-     * @throws InvalidDataTypeException
244
-     * @throws InvalidInterfaceException
245
-     */
246
-    public function toggle_incomplete_registration_status_to_default(
247
-        EE_Registration $registration,
248
-        $save = true,
249
-        ContextInterface $context = null
250
-    ) {
251
-        $existing_reg_status = $registration->status_ID();
252
-        // set initial REG_Status
253
-        $this->set_old_reg_status($registration->ID(), $existing_reg_status);
254
-        // is the registration currently incomplete ?
255
-        if ($registration->status_ID() === EEM_Registration::status_id_incomplete) {
256
-            // grab default reg status for the event, if set
257
-            $event_default_registration_status = $registration->event()->default_registration_status();
258
-            // if no default reg status is set for the event, then use the global value
259
-            $STS_ID = ! empty($event_default_registration_status)
260
-                ? $event_default_registration_status
261
-                : EE_Registry::instance()->CFG->registration->default_STS_ID;
262
-            // if the event default reg status is approved, then downgrade temporarily to payment pending to ensure that payments are triggered
263
-            $STS_ID = $STS_ID === EEM_Registration::status_id_approved ? EEM_Registration::status_id_pending_payment
264
-                : $STS_ID;
265
-            // set incoming REG_Status
266
-            $this->set_new_reg_status($registration->ID(), $STS_ID);
267
-            $registration->set_status($STS_ID, false, $context);
268
-            if ($save) {
269
-                $registration->save();
270
-            }
271
-            // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
272
-            if (! EE_Processor_Base::$IPN) {
273
-                // otherwise, send out notifications
274
-                add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
275
-            }
276
-            // DEBUG LOG
277
-            // $this->log(
278
-            //     __CLASS__,
279
-            //     __FUNCTION__,
280
-            //     __LINE__,
281
-            //     $registration->transaction(),
282
-            //     array(
283
-            //         'IPN' => EE_Processor_Base::$IPN,
284
-            //         'deliver_notifications' => has_filter(
285
-            //             'FHEE__EED_Messages___maybe_registration__deliver_notifications'
286
-            //         ),
287
-            //     )
288
-            // );
289
-        }
290
-    }
291
-
292
-
293
-    /**
294
-     *    toggle_registration_status_for_default_approved_events
295
-     *
296
-     * @access public
297
-     * @param EE_Registration $registration
298
-     * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
299
-     *                              to client code
300
-     * @return bool
301
-     * @throws EE_Error
302
-     * @throws EntityNotFoundException
303
-     * @throws InvalidArgumentException
304
-     * @throws InvalidDataTypeException
305
-     * @throws InvalidInterfaceException
306
-     * @throws ReflectionException
307
-     * @throws RuntimeException
308
-     */
309
-    public function toggle_registration_status_for_default_approved_events(EE_Registration $registration, $save = true)
310
-    {
311
-        $reg_status = $registration->status_ID();
312
-        // set initial REG_Status
313
-        $this->set_old_reg_status($registration->ID(), $reg_status);
314
-        // if not already, toggle reg status to approved IF the event default reg status is approved
315
-        // ( as long as the registration wasn't cancelled or declined at some point )
316
-        if (
317
-            $reg_status !== EEM_Registration::status_id_cancelled
318
-            && $reg_status
319
-               !== EEM_Registration::status_id_declined
320
-            && $reg_status !== EEM_Registration::status_id_approved
321
-            && $registration->event()->default_registration_status() === EEM_Registration::status_id_approved
322
-        ) {
323
-            // set incoming REG_Status
324
-            $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
325
-            // toggle status to approved
326
-            $registration->set_status(EEM_Registration::status_id_approved);
327
-            if ($save) {
328
-                $registration->save();
329
-            }
330
-            // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
331
-            if (! EE_Processor_Base::$IPN) {
332
-                // otherwise, send out notifications
333
-                add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
334
-            }
335
-            // DEBUG LOG
336
-            // $this->log(
337
-            //     __CLASS__,
338
-            //     __FUNCTION__,
339
-            //     __LINE__,
340
-            //     $registration->transaction(),
341
-            //     array(
342
-            //         'IPN' => EE_Processor_Base::$IPN,
343
-            //         'deliver_notifications' => has_filter(
344
-            //             'FHEE__EED_Messages___maybe_registration__deliver_notifications'
345
-            //         ),
346
-            //     )
347
-            // );
348
-            return true;
349
-        }
350
-        return false;
351
-    }
352
-
353
-
354
-    /**
355
-     *    toggle_registration_statuses_if_no_monies_owing
356
-     *
357
-     * @access public
358
-     * @param EE_Registration $registration
359
-     * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
360
-     *                              to client code
361
-     * @param array           $additional_details
362
-     * @return bool
363
-     * @throws EE_Error
364
-     * @throws EntityNotFoundException
365
-     * @throws InvalidArgumentException
366
-     * @throws InvalidDataTypeException
367
-     * @throws InvalidInterfaceException
368
-     * @throws ReflectionException
369
-     * @throws RuntimeException
370
-     */
371
-    public function toggle_registration_status_if_no_monies_owing(
372
-        EE_Registration $registration,
373
-        $save = true,
374
-        array $additional_details = array()
375
-    ) {
376
-        // set initial REG_Status
377
-        $this->set_old_reg_status($registration->ID(), $registration->status_ID());
378
-        // was a payment just made ?
379
-        $payment = isset($additional_details['payment_updates'], $additional_details['last_payment'])
380
-                   && $additional_details['payment_updates']
381
-                   && $additional_details['last_payment'] instanceof EE_Payment
382
-            ? $additional_details['last_payment']
383
-            : null;
384
-        $total_paid = array_sum(self::$_amount_paid);
385
-        // toggle reg status to approved IF
386
-        if (
27
+	/**
28
+	 * @var EE_Registration_Processor $_instance
29
+	 * @access    private
30
+	 */
31
+	private static $_instance;
32
+
33
+	/**
34
+	 * initial reg status at the beginning of this request.
35
+	 * indexed by registration ID
36
+	 *
37
+	 * @var array
38
+	 */
39
+	protected $_old_reg_status = array();
40
+
41
+	/**
42
+	 * reg status at the end of the request after all processing.
43
+	 * indexed by registration ID
44
+	 *
45
+	 * @var array
46
+	 */
47
+	protected $_new_reg_status = array();
48
+
49
+	/**
50
+	 * amounts paid at the end of the request after all processing.
51
+	 * indexed by registration ID
52
+	 *
53
+	 * @var array
54
+	 */
55
+	protected static $_amount_paid = array();
56
+
57
+	/**
58
+	 * Cache of the reg final price for registrations corresponding to a ticket line item
59
+	 *
60
+	 * @deprecated
61
+	 * @var array @see EEH_Line_Item::calculate_reg_final_prices_per_line_item()'s return value
62
+	 */
63
+	protected $_reg_final_price_per_tkt_line_item;
64
+
65
+	/**
66
+	 * @var EE_Request $request
67
+	 */
68
+	protected $request;
69
+
70
+
71
+	/**
72
+	 * @singleton method used to instantiate class object
73
+	 * @param EE_Request|null $request
74
+	 * @return EE_Registration_Processor instance
75
+	 * @throws \InvalidArgumentException
76
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
77
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
78
+	 */
79
+	public static function instance(EE_Request $request = null)
80
+	{
81
+		// check if class object is instantiated
82
+		if (! self::$_instance instanceof EE_Registration_Processor) {
83
+			if (! $request instanceof EE_Request) {
84
+				$request = LoaderFactory::getLoader()->getShared('EE_Request');
85
+			}
86
+			self::$_instance = new self($request);
87
+		}
88
+		return self::$_instance;
89
+	}
90
+
91
+
92
+	/**
93
+	 * EE_Registration_Processor constructor.
94
+	 *
95
+	 * @param EE_Request $request
96
+	 */
97
+	public function __construct(EE_Request $request)
98
+	{
99
+		$this->request = $request;
100
+	}
101
+
102
+
103
+	/**
104
+	 * @param int $REG_ID
105
+	 * @return string
106
+	 */
107
+	public function old_reg_status($REG_ID)
108
+	{
109
+		return isset($this->_old_reg_status[ $REG_ID ]) ? $this->_old_reg_status[ $REG_ID ] : null;
110
+	}
111
+
112
+
113
+	/**
114
+	 * @param int    $REG_ID
115
+	 * @param string $old_reg_status
116
+	 */
117
+	public function set_old_reg_status($REG_ID, $old_reg_status)
118
+	{
119
+		// only set the first time
120
+		if (! isset($this->_old_reg_status[ $REG_ID ])) {
121
+			$this->_old_reg_status[ $REG_ID ] = $old_reg_status;
122
+		}
123
+	}
124
+
125
+
126
+	/**
127
+	 * @param int $REG_ID
128
+	 * @return string
129
+	 */
130
+	public function new_reg_status($REG_ID)
131
+	{
132
+		return isset($this->_new_reg_status[ $REG_ID ]) ? $this->_new_reg_status[ $REG_ID ] : null;
133
+	}
134
+
135
+
136
+	/**
137
+	 * @param int    $REG_ID
138
+	 * @param string $new_reg_status
139
+	 */
140
+	public function set_new_reg_status($REG_ID, $new_reg_status)
141
+	{
142
+		$this->_new_reg_status[ $REG_ID ] = $new_reg_status;
143
+	}
144
+
145
+
146
+	/**
147
+	 * reg_status_updated
148
+	 *
149
+	 * @param int $REG_ID
150
+	 * @return bool
151
+	 */
152
+	public function reg_status_updated($REG_ID)
153
+	{
154
+		return $this->new_reg_status($REG_ID) !== $this->old_reg_status($REG_ID);
155
+	}
156
+
157
+
158
+	/**
159
+	 * @param EE_Registration $registration
160
+	 * @throws EE_Error
161
+	 * @throws EntityNotFoundException
162
+	 * @throws InvalidArgumentException
163
+	 * @throws InvalidDataTypeException
164
+	 * @throws InvalidInterfaceException
165
+	 * @throws ReflectionException
166
+	 * @throws RuntimeException
167
+	 */
168
+	public function update_registration_status_and_trigger_notifications(EE_Registration $registration)
169
+	{
170
+		$this->toggle_incomplete_registration_status_to_default($registration, false);
171
+		$this->toggle_registration_status_for_default_approved_events($registration, false);
172
+		$this->toggle_registration_status_if_no_monies_owing($registration, false);
173
+		$registration->save();
174
+		// trigger notifications
175
+		$this->trigger_registration_update_notifications($registration);
176
+	}
177
+
178
+
179
+	/**
180
+	 *    manually_update_registration_status
181
+	 *
182
+	 * @access public
183
+	 * @param EE_Registration $registration
184
+	 * @param string          $new_reg_status
185
+	 * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
186
+	 *                              to client code
187
+	 * @return bool
188
+	 * @throws EE_Error
189
+	 * @throws EntityNotFoundException
190
+	 * @throws InvalidArgumentException
191
+	 * @throws InvalidDataTypeException
192
+	 * @throws InvalidInterfaceException
193
+	 * @throws ReflectionException
194
+	 * @throws RuntimeException
195
+	 */
196
+	public function manually_update_registration_status(
197
+		EE_Registration $registration,
198
+		$new_reg_status = '',
199
+		$save = true
200
+	) {
201
+		// set initial REG_Status
202
+		$this->set_old_reg_status($registration->ID(), $registration->status_ID());
203
+		// set incoming REG_Status
204
+		$this->set_new_reg_status($registration->ID(), $new_reg_status);
205
+		// toggle reg status but only if it has changed and the user can do so
206
+		if (
207
+			$this->reg_status_updated($registration->ID())
208
+			&& (
209
+				(! $this->request->isAdmin() || $this->request->isFrontAjax())
210
+				|| EE_Registry::instance()->CAP->current_user_can(
211
+					'ee_edit_registration',
212
+					'toggle_registration_status',
213
+					$registration->ID()
214
+				)
215
+			)
216
+		) {
217
+			// change status to new value
218
+			$updated = $registration->set_status($this->new_reg_status($registration->ID()));
219
+			if ($updated && $save) {
220
+				$registration->save();
221
+			}
222
+			return true;
223
+		}
224
+		return false;
225
+	}
226
+
227
+
228
+	/**
229
+	 *    toggle_incomplete_registration_status_to_default
230
+	 *        changes any incomplete registrations to either the event or global default registration status
231
+	 *
232
+	 * @access public
233
+	 * @param EE_Registration       $registration
234
+	 * @param bool                  $save TRUE will save the registration if the status is updated, FALSE will leave
235
+	 *                                    that up to client code
236
+	 * @param ContextInterface|null $context
237
+	 * @return void
238
+	 * @throws EE_Error
239
+	 * @throws InvalidArgumentException
240
+	 * @throws ReflectionException
241
+	 * @throws RuntimeException
242
+	 * @throws EntityNotFoundException
243
+	 * @throws InvalidDataTypeException
244
+	 * @throws InvalidInterfaceException
245
+	 */
246
+	public function toggle_incomplete_registration_status_to_default(
247
+		EE_Registration $registration,
248
+		$save = true,
249
+		ContextInterface $context = null
250
+	) {
251
+		$existing_reg_status = $registration->status_ID();
252
+		// set initial REG_Status
253
+		$this->set_old_reg_status($registration->ID(), $existing_reg_status);
254
+		// is the registration currently incomplete ?
255
+		if ($registration->status_ID() === EEM_Registration::status_id_incomplete) {
256
+			// grab default reg status for the event, if set
257
+			$event_default_registration_status = $registration->event()->default_registration_status();
258
+			// if no default reg status is set for the event, then use the global value
259
+			$STS_ID = ! empty($event_default_registration_status)
260
+				? $event_default_registration_status
261
+				: EE_Registry::instance()->CFG->registration->default_STS_ID;
262
+			// if the event default reg status is approved, then downgrade temporarily to payment pending to ensure that payments are triggered
263
+			$STS_ID = $STS_ID === EEM_Registration::status_id_approved ? EEM_Registration::status_id_pending_payment
264
+				: $STS_ID;
265
+			// set incoming REG_Status
266
+			$this->set_new_reg_status($registration->ID(), $STS_ID);
267
+			$registration->set_status($STS_ID, false, $context);
268
+			if ($save) {
269
+				$registration->save();
270
+			}
271
+			// don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
272
+			if (! EE_Processor_Base::$IPN) {
273
+				// otherwise, send out notifications
274
+				add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
275
+			}
276
+			// DEBUG LOG
277
+			// $this->log(
278
+			//     __CLASS__,
279
+			//     __FUNCTION__,
280
+			//     __LINE__,
281
+			//     $registration->transaction(),
282
+			//     array(
283
+			//         'IPN' => EE_Processor_Base::$IPN,
284
+			//         'deliver_notifications' => has_filter(
285
+			//             'FHEE__EED_Messages___maybe_registration__deliver_notifications'
286
+			//         ),
287
+			//     )
288
+			// );
289
+		}
290
+	}
291
+
292
+
293
+	/**
294
+	 *    toggle_registration_status_for_default_approved_events
295
+	 *
296
+	 * @access public
297
+	 * @param EE_Registration $registration
298
+	 * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
299
+	 *                              to client code
300
+	 * @return bool
301
+	 * @throws EE_Error
302
+	 * @throws EntityNotFoundException
303
+	 * @throws InvalidArgumentException
304
+	 * @throws InvalidDataTypeException
305
+	 * @throws InvalidInterfaceException
306
+	 * @throws ReflectionException
307
+	 * @throws RuntimeException
308
+	 */
309
+	public function toggle_registration_status_for_default_approved_events(EE_Registration $registration, $save = true)
310
+	{
311
+		$reg_status = $registration->status_ID();
312
+		// set initial REG_Status
313
+		$this->set_old_reg_status($registration->ID(), $reg_status);
314
+		// if not already, toggle reg status to approved IF the event default reg status is approved
315
+		// ( as long as the registration wasn't cancelled or declined at some point )
316
+		if (
317
+			$reg_status !== EEM_Registration::status_id_cancelled
318
+			&& $reg_status
319
+			   !== EEM_Registration::status_id_declined
320
+			&& $reg_status !== EEM_Registration::status_id_approved
321
+			&& $registration->event()->default_registration_status() === EEM_Registration::status_id_approved
322
+		) {
323
+			// set incoming REG_Status
324
+			$this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
325
+			// toggle status to approved
326
+			$registration->set_status(EEM_Registration::status_id_approved);
327
+			if ($save) {
328
+				$registration->save();
329
+			}
330
+			// don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
331
+			if (! EE_Processor_Base::$IPN) {
332
+				// otherwise, send out notifications
333
+				add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
334
+			}
335
+			// DEBUG LOG
336
+			// $this->log(
337
+			//     __CLASS__,
338
+			//     __FUNCTION__,
339
+			//     __LINE__,
340
+			//     $registration->transaction(),
341
+			//     array(
342
+			//         'IPN' => EE_Processor_Base::$IPN,
343
+			//         'deliver_notifications' => has_filter(
344
+			//             'FHEE__EED_Messages___maybe_registration__deliver_notifications'
345
+			//         ),
346
+			//     )
347
+			// );
348
+			return true;
349
+		}
350
+		return false;
351
+	}
352
+
353
+
354
+	/**
355
+	 *    toggle_registration_statuses_if_no_monies_owing
356
+	 *
357
+	 * @access public
358
+	 * @param EE_Registration $registration
359
+	 * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
360
+	 *                              to client code
361
+	 * @param array           $additional_details
362
+	 * @return bool
363
+	 * @throws EE_Error
364
+	 * @throws EntityNotFoundException
365
+	 * @throws InvalidArgumentException
366
+	 * @throws InvalidDataTypeException
367
+	 * @throws InvalidInterfaceException
368
+	 * @throws ReflectionException
369
+	 * @throws RuntimeException
370
+	 */
371
+	public function toggle_registration_status_if_no_monies_owing(
372
+		EE_Registration $registration,
373
+		$save = true,
374
+		array $additional_details = array()
375
+	) {
376
+		// set initial REG_Status
377
+		$this->set_old_reg_status($registration->ID(), $registration->status_ID());
378
+		// was a payment just made ?
379
+		$payment = isset($additional_details['payment_updates'], $additional_details['last_payment'])
380
+				   && $additional_details['payment_updates']
381
+				   && $additional_details['last_payment'] instanceof EE_Payment
382
+			? $additional_details['last_payment']
383
+			: null;
384
+		$total_paid = array_sum(self::$_amount_paid);
385
+		// toggle reg status to approved IF
386
+		if (
387 387
 // REG status is pending payment
388
-            $registration->status_ID() === EEM_Registration::status_id_pending_payment
389
-            // AND no monies are owing
390
-            && (
391
-                (
392
-                    $registration->transaction()->is_completed()
393
-                    || $registration->transaction()->is_overpaid()
394
-                    || $registration->transaction()->is_free()
395
-                    || apply_filters(
396
-                        'FHEE__EE_Registration_Processor__toggle_registration_status_if_no_monies_owing',
397
-                        false,
398
-                        $registration
399
-                    )
400
-                )
401
-                || (
402
-                    $payment instanceof EE_Payment && $payment->is_approved()
403
-                    && // this specific registration has not yet been paid for
404
-                    ! isset(self::$_amount_paid[ $registration->ID() ])
405
-                    && // payment amount, less what we have already attributed to other registrations, is greater than this reg's final price
406
-                    $payment->amount() - $total_paid >= $registration->final_price()
407
-                )
408
-            )
409
-        ) {
410
-            // mark as paid
411
-            self::$_amount_paid[ $registration->ID() ] = $registration->final_price();
412
-            // track new REG_Status
413
-            $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
414
-            // toggle status to approved
415
-            $registration->set_status(EEM_Registration::status_id_approved);
416
-            if ($save) {
417
-                $registration->save();
418
-            }
419
-            // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
420
-            if (! EE_Processor_Base::$IPN) {
421
-                // otherwise, send out notifications
422
-                add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
423
-            }
424
-            // DEBUG LOG
425
-            // $this->log(
426
-            //     __CLASS__,
427
-            //     __FUNCTION__,
428
-            //     __LINE__,
429
-            //     $registration->transaction(),
430
-            //     array(
431
-            //         'IPN' => EE_Processor_Base::$IPN,
432
-            //         'deliver_notifications' => has_filter(
433
-            //             'FHEE__EED_Messages___maybe_registration__deliver_notifications'
434
-            //         ),
435
-            //     )
436
-            // );
437
-            return true;
438
-        }
439
-        return false;
440
-    }
441
-
442
-
443
-    /**
444
-     *    registration_status_changed
445
-     *
446
-     * @access public
447
-     * @param EE_Registration $registration
448
-     * @param array           $additional_details
449
-     * @return void
450
-     */
451
-    public function trigger_registration_update_notifications($registration, array $additional_details = array())
452
-    {
453
-        try {
454
-            if (! $registration instanceof EE_Registration) {
455
-                throw new EE_Error(
456
-                    esc_html__('An invalid registration was received.', 'event_espresso')
457
-                );
458
-            }
459
-            // EE_Registry::instance()->load_helper('Debug_Tools');
460
-            // EEH_Debug_Tools::log(
461
-            //     __CLASS__,
462
-            //     __FUNCTION__,
463
-            //     __LINE__,
464
-            //     array($registration->transaction(), $additional_details),
465
-            //     false,
466
-            //     'EE_Transaction: ' . $registration->transaction()->ID()
467
-            // );
468
-            if (! $registration->is_primary_registrant()) {
469
-                return;
470
-            }
471
-            do_action(
472
-                'AHEE__EE_Registration_Processor__trigger_registration_update_notifications',
473
-                $registration,
474
-                $additional_details
475
-            );
476
-        } catch (Exception $e) {
477
-            EE_Error::add_error($e->getMessage(), $e->getFile(), 'unknown_function_from_exception', $e->getLine());
478
-        }
479
-    }
480
-
481
-
482
-    /**
483
-     * sets reg status based either on passed param or on transaction status and event pre-approval setting
484
-     *
485
-     * @param EE_Registration $registration
486
-     * @param array           $additional_details
487
-     * @return bool
488
-     * @throws EE_Error
489
-     * @throws EntityNotFoundException
490
-     * @throws InvalidArgumentException
491
-     * @throws InvalidDataTypeException
492
-     * @throws InvalidInterfaceException
493
-     * @throws ReflectionException
494
-     * @throws RuntimeException
495
-     */
496
-    public function update_registration_after_checkout_or_payment(
497
-        EE_Registration $registration,
498
-        array $additional_details = array()
499
-    ) {
500
-        // set initial REG_Status
501
-        $this->set_old_reg_status($registration->ID(), $registration->status_ID());
502
-        // if the registration status gets updated, then save the registration
503
-        if (
504
-            $this->toggle_registration_status_for_default_approved_events($registration, false)
505
-            || $this->toggle_registration_status_if_no_monies_owing(
506
-                $registration,
507
-                false,
508
-                $additional_details
509
-            )
510
-        ) {
511
-            $registration->save();
512
-        }
513
-        // set new  REG_Status
514
-        $this->set_new_reg_status($registration->ID(), $registration->status_ID());
515
-        return $this->reg_status_updated($registration->ID())
516
-               && $this->new_reg_status($registration->ID()) === EEM_Registration::status_id_approved;
517
-    }
518
-
519
-
520
-    /**
521
-     * Updates the registration' final prices based on the current line item tree (taking into account
522
-     * discounts, taxes, and other line items unrelated to tickets.)
523
-     *
524
-     * @param EE_Transaction $transaction
525
-     * @param boolean        $save_regs whether to immediately save registrations in this function or not
526
-     * @return void
527
-     * @throws EE_Error
528
-     * @throws InvalidArgumentException
529
-     * @throws InvalidDataTypeException
530
-     * @throws InvalidInterfaceException
531
-     * @throws RuntimeException
532
-     */
533
-    public function update_registration_final_prices($transaction, $save_regs = true)
534
-    {
535
-        $reg_final_price_per_ticket_line_item = EEH_Line_Item::calculate_reg_final_prices_per_line_item(
536
-            $transaction->total_line_item()
537
-        );
538
-        foreach ($transaction->registrations() as $registration) {
539
-            /** @var EE_Line_Item $line_item */
540
-            $line_item = EEM_Line_Item::instance()->get_line_item_for_registration($registration);
541
-            if (isset($reg_final_price_per_ticket_line_item[ $line_item->ID() ])) {
542
-                $registration->set_final_price($reg_final_price_per_ticket_line_item[ $line_item->ID() ]);
543
-                if ($save_regs) {
544
-                    $registration->save();
545
-                }
546
-            }
547
-        }
548
-        // and make sure there's no rounding problem
549
-        $this->fix_reg_final_price_rounding_issue($transaction);
550
-    }
551
-
552
-
553
-    /**
554
-     * Makes sure there is no rounding errors for the REG_final_prices.
555
-     * Eg, if we have 3 registrations for $1, and there is a $0.01 discount between the three of them,
556
-     * they will each be for $0.99333333, which gets rounded to $1 again.
557
-     * So the transaction total will be $2.99, but each registration will be for $1,
558
-     * so if each registrant paid individually they will have overpaid by $0.01.
559
-     * So in order to overcome this, we check for any difference, and if there is a difference
560
-     * we just grab one registrant at random and make them responsible for it.
561
-     * This should be used after setting REG_final_prices (it's done automatically as part of
562
-     * EE_Registration_Processor::update_registration_final_prices())
563
-     *
564
-     * @param EE_Transaction $transaction
565
-     * @return bool success verifying that there is NO difference after this method is done
566
-     * @throws EE_Error
567
-     * @throws InvalidArgumentException
568
-     * @throws InvalidDataTypeException
569
-     * @throws InvalidInterfaceException
570
-     */
571
-    public function fix_reg_final_price_rounding_issue($transaction)
572
-    {
573
-        $reg_final_price_sum = EEM_Registration::instance()->sum(
574
-            array(
575
-                array(
576
-                    'TXN_ID' => $transaction->ID(),
577
-                ),
578
-            ),
579
-            'REG_final_price'
580
-        );
581
-        $diff = $transaction->total() - $reg_final_price_sum;
582
-        // ok then, just grab one of the registrations
583
-        if ($diff !== 0) {
584
-            $a_reg = EEM_Registration::instance()->get_one(
585
-                array(
586
-                    array(
587
-                        'TXN_ID' => $transaction->ID(),
588
-                    ),
589
-                )
590
-            );
591
-            return $a_reg instanceof EE_Registration
592
-                ? (bool) $a_reg->save(array('REG_final_price' => $a_reg->final_price() + $diff))
593
-                : false;
594
-        }
595
-        return true;
596
-    }
597
-
598
-
599
-    /**
600
-     * update_registration_after_being_canceled_or_declined
601
-     *
602
-     * @param EE_Registration $registration
603
-     * @param array           $closed_reg_statuses
604
-     * @param bool            $update_reg
605
-     * @return bool
606
-     * @throws EE_Error
607
-     * @throws RuntimeException
608
-     */
609
-    public function update_registration_after_being_canceled_or_declined(
610
-        EE_Registration $registration,
611
-        array $closed_reg_statuses = array(),
612
-        $update_reg = true
613
-    ) {
614
-        // these reg statuses should not be considered in any calculations involving monies owing
615
-        $closed_reg_statuses = ! empty($closed_reg_statuses)
616
-            ? $closed_reg_statuses
617
-            : EEM_Registration::closed_reg_statuses();
618
-        if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
619
-            return false;
620
-        }
621
-        // release a reserved ticket by decrementing ticket and datetime reserved values
622
-        $registration->release_reserved_ticket(true, 'RegProcessor:' . __LINE__);
623
-        $registration->set_final_price(0);
624
-        if ($update_reg) {
625
-            $registration->save();
626
-        }
627
-        return true;
628
-    }
629
-
630
-
631
-    /**
632
-     * update_canceled_or_declined_registration_after_being_reinstated
633
-     *
634
-     * @param EE_Registration $registration
635
-     * @param array           $closed_reg_statuses
636
-     * @param bool            $update_reg
637
-     * @return bool
638
-     * @throws EE_Error
639
-     * @throws RuntimeException
640
-     */
641
-    public function update_canceled_or_declined_registration_after_being_reinstated(
642
-        EE_Registration $registration,
643
-        array $closed_reg_statuses = array(),
644
-        $update_reg = true
645
-    ) {
646
-        // these reg statuses should not be considered in any calculations involving monies owing
647
-        $closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
648
-            : EEM_Registration::closed_reg_statuses();
649
-        if (in_array($registration->status_ID(), $closed_reg_statuses, true)) {
650
-            return false;
651
-        }
652
-        $ticket = $registration->ticket();
653
-        if (! $ticket instanceof EE_Ticket) {
654
-            throw new EE_Error(
655
-                sprintf(
656
-                    esc_html__(
657
-                        'The Ticket for Registration %1$d was not found or is invalid.',
658
-                        'event_espresso'
659
-                    ),
660
-                    $registration->ticket_ID()
661
-                )
662
-            );
663
-        }
664
-        $registration->set_final_price($ticket->price());
665
-        if ($update_reg) {
666
-            $registration->save();
667
-        }
668
-        return true;
669
-    }
670
-
671
-
672
-    /**
673
-     * generate_ONE_registration_from_line_item
674
-     * Although a ticket line item may have a quantity greater than 1,
675
-     * this method will ONLY CREATE ONE REGISTRATION !!!
676
-     * Regardless of the ticket line item quantity.
677
-     * This means that any code calling this method is responsible for ensuring
678
-     * that the final registration count matches the ticket line item quantity.
679
-     * This was done to make it easier to match the number of registrations
680
-     * to the number of tickets in the cart, when the cart has been edited
681
-     * after SPCO has already been initialized. So if an additional ticket was added to the cart, you can simply pass
682
-     * the line item to this method to add a second ticket, and in this case, you would not want to add 2 tickets.
683
-     *
684
-     * @deprecated
685
-     * @since 4.9.1
686
-     * @param EE_Line_Item    $line_item
687
-     * @param \EE_Transaction $transaction
688
-     * @param int             $att_nmbr
689
-     * @param int             $total_ticket_count
690
-     * @return EE_Registration | null
691
-     * @throws \OutOfRangeException
692
-     * @throws \EventEspresso\core\exceptions\UnexpectedEntityException
693
-     * @throws \EE_Error
694
-     */
695
-    public function generate_ONE_registration_from_line_item(
696
-        EE_Line_Item $line_item,
697
-        EE_Transaction $transaction,
698
-        $att_nmbr = 1,
699
-        $total_ticket_count = 1
700
-    ) {
701
-        EE_Error::doing_it_wrong(
702
-            __CLASS__ . '::' . __FUNCTION__,
703
-            sprintf(
704
-                esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
705
-                '\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()'
706
-            ),
707
-            '4.9.1',
708
-            '5.0.0'
709
-        );
710
-        // grab the related ticket object for this line_item
711
-        $ticket = $line_item->ticket();
712
-        if (! $ticket instanceof EE_Ticket) {
713
-            EE_Error::add_error(
714
-                sprintf(
715
-                    esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'),
716
-                    $line_item->ID()
717
-                ),
718
-                __FILE__,
719
-                __FUNCTION__,
720
-                __LINE__
721
-            );
722
-            return null;
723
-        }
724
-        $registration_service = new CreateRegistrationService();
725
-        // then generate a new registration from that
726
-        return $registration_service->create(
727
-            $ticket->get_related_event(),
728
-            $transaction,
729
-            $ticket,
730
-            $line_item,
731
-            $att_nmbr,
732
-            $total_ticket_count
733
-        );
734
-    }
735
-
736
-
737
-    /**
738
-     * generates reg_url_link
739
-     *
740
-     * @deprecated
741
-     * @since 4.9.1
742
-     * @param int                   $att_nmbr
743
-     * @param EE_Line_Item | string $item
744
-     * @return string
745
-     * @throws InvalidArgumentException
746
-     */
747
-    public function generate_reg_url_link($att_nmbr, $item)
748
-    {
749
-        EE_Error::doing_it_wrong(
750
-            __CLASS__ . '::' . __FUNCTION__,
751
-            sprintf(
752
-                esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
753
-                'EventEspresso\core\domain\entities\RegUrlLink'
754
-            ),
755
-            '4.9.1',
756
-            '5.0.0'
757
-        );
758
-        return new RegUrlLink($att_nmbr, $item);
759
-    }
760
-
761
-
762
-    /**
763
-     * generates reg code
764
-     *
765
-     * @deprecated
766
-     * @since 4.9.1
767
-     * @param EE_Registration $registration
768
-     * @return string
769
-     * @throws EE_Error
770
-     * @throws EntityNotFoundException
771
-     * @throws InvalidArgumentException
772
-     */
773
-    public function generate_reg_code(EE_Registration $registration)
774
-    {
775
-        EE_Error::doing_it_wrong(
776
-            __CLASS__ . '::' . __FUNCTION__,
777
-            sprintf(
778
-                esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
779
-                'EventEspresso\core\domain\entities\RegCode'
780
-            ),
781
-            '4.9.1',
782
-            '5.0.0'
783
-        );
784
-        return apply_filters(
785
-            'FHEE__EE_Registration_Processor___generate_reg_code__new_reg_code',
786
-            new RegCode(
787
-                RegUrlLink::fromRegistration($registration),
788
-                $registration->transaction(),
789
-                $registration->ticket()
790
-            ),
791
-            $registration
792
-        );
793
-    }
388
+			$registration->status_ID() === EEM_Registration::status_id_pending_payment
389
+			// AND no monies are owing
390
+			&& (
391
+				(
392
+					$registration->transaction()->is_completed()
393
+					|| $registration->transaction()->is_overpaid()
394
+					|| $registration->transaction()->is_free()
395
+					|| apply_filters(
396
+						'FHEE__EE_Registration_Processor__toggle_registration_status_if_no_monies_owing',
397
+						false,
398
+						$registration
399
+					)
400
+				)
401
+				|| (
402
+					$payment instanceof EE_Payment && $payment->is_approved()
403
+					&& // this specific registration has not yet been paid for
404
+					! isset(self::$_amount_paid[ $registration->ID() ])
405
+					&& // payment amount, less what we have already attributed to other registrations, is greater than this reg's final price
406
+					$payment->amount() - $total_paid >= $registration->final_price()
407
+				)
408
+			)
409
+		) {
410
+			// mark as paid
411
+			self::$_amount_paid[ $registration->ID() ] = $registration->final_price();
412
+			// track new REG_Status
413
+			$this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
414
+			// toggle status to approved
415
+			$registration->set_status(EEM_Registration::status_id_approved);
416
+			if ($save) {
417
+				$registration->save();
418
+			}
419
+			// don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
420
+			if (! EE_Processor_Base::$IPN) {
421
+				// otherwise, send out notifications
422
+				add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
423
+			}
424
+			// DEBUG LOG
425
+			// $this->log(
426
+			//     __CLASS__,
427
+			//     __FUNCTION__,
428
+			//     __LINE__,
429
+			//     $registration->transaction(),
430
+			//     array(
431
+			//         'IPN' => EE_Processor_Base::$IPN,
432
+			//         'deliver_notifications' => has_filter(
433
+			//             'FHEE__EED_Messages___maybe_registration__deliver_notifications'
434
+			//         ),
435
+			//     )
436
+			// );
437
+			return true;
438
+		}
439
+		return false;
440
+	}
441
+
442
+
443
+	/**
444
+	 *    registration_status_changed
445
+	 *
446
+	 * @access public
447
+	 * @param EE_Registration $registration
448
+	 * @param array           $additional_details
449
+	 * @return void
450
+	 */
451
+	public function trigger_registration_update_notifications($registration, array $additional_details = array())
452
+	{
453
+		try {
454
+			if (! $registration instanceof EE_Registration) {
455
+				throw new EE_Error(
456
+					esc_html__('An invalid registration was received.', 'event_espresso')
457
+				);
458
+			}
459
+			// EE_Registry::instance()->load_helper('Debug_Tools');
460
+			// EEH_Debug_Tools::log(
461
+			//     __CLASS__,
462
+			//     __FUNCTION__,
463
+			//     __LINE__,
464
+			//     array($registration->transaction(), $additional_details),
465
+			//     false,
466
+			//     'EE_Transaction: ' . $registration->transaction()->ID()
467
+			// );
468
+			if (! $registration->is_primary_registrant()) {
469
+				return;
470
+			}
471
+			do_action(
472
+				'AHEE__EE_Registration_Processor__trigger_registration_update_notifications',
473
+				$registration,
474
+				$additional_details
475
+			);
476
+		} catch (Exception $e) {
477
+			EE_Error::add_error($e->getMessage(), $e->getFile(), 'unknown_function_from_exception', $e->getLine());
478
+		}
479
+	}
480
+
481
+
482
+	/**
483
+	 * sets reg status based either on passed param or on transaction status and event pre-approval setting
484
+	 *
485
+	 * @param EE_Registration $registration
486
+	 * @param array           $additional_details
487
+	 * @return bool
488
+	 * @throws EE_Error
489
+	 * @throws EntityNotFoundException
490
+	 * @throws InvalidArgumentException
491
+	 * @throws InvalidDataTypeException
492
+	 * @throws InvalidInterfaceException
493
+	 * @throws ReflectionException
494
+	 * @throws RuntimeException
495
+	 */
496
+	public function update_registration_after_checkout_or_payment(
497
+		EE_Registration $registration,
498
+		array $additional_details = array()
499
+	) {
500
+		// set initial REG_Status
501
+		$this->set_old_reg_status($registration->ID(), $registration->status_ID());
502
+		// if the registration status gets updated, then save the registration
503
+		if (
504
+			$this->toggle_registration_status_for_default_approved_events($registration, false)
505
+			|| $this->toggle_registration_status_if_no_monies_owing(
506
+				$registration,
507
+				false,
508
+				$additional_details
509
+			)
510
+		) {
511
+			$registration->save();
512
+		}
513
+		// set new  REG_Status
514
+		$this->set_new_reg_status($registration->ID(), $registration->status_ID());
515
+		return $this->reg_status_updated($registration->ID())
516
+			   && $this->new_reg_status($registration->ID()) === EEM_Registration::status_id_approved;
517
+	}
518
+
519
+
520
+	/**
521
+	 * Updates the registration' final prices based on the current line item tree (taking into account
522
+	 * discounts, taxes, and other line items unrelated to tickets.)
523
+	 *
524
+	 * @param EE_Transaction $transaction
525
+	 * @param boolean        $save_regs whether to immediately save registrations in this function or not
526
+	 * @return void
527
+	 * @throws EE_Error
528
+	 * @throws InvalidArgumentException
529
+	 * @throws InvalidDataTypeException
530
+	 * @throws InvalidInterfaceException
531
+	 * @throws RuntimeException
532
+	 */
533
+	public function update_registration_final_prices($transaction, $save_regs = true)
534
+	{
535
+		$reg_final_price_per_ticket_line_item = EEH_Line_Item::calculate_reg_final_prices_per_line_item(
536
+			$transaction->total_line_item()
537
+		);
538
+		foreach ($transaction->registrations() as $registration) {
539
+			/** @var EE_Line_Item $line_item */
540
+			$line_item = EEM_Line_Item::instance()->get_line_item_for_registration($registration);
541
+			if (isset($reg_final_price_per_ticket_line_item[ $line_item->ID() ])) {
542
+				$registration->set_final_price($reg_final_price_per_ticket_line_item[ $line_item->ID() ]);
543
+				if ($save_regs) {
544
+					$registration->save();
545
+				}
546
+			}
547
+		}
548
+		// and make sure there's no rounding problem
549
+		$this->fix_reg_final_price_rounding_issue($transaction);
550
+	}
551
+
552
+
553
+	/**
554
+	 * Makes sure there is no rounding errors for the REG_final_prices.
555
+	 * Eg, if we have 3 registrations for $1, and there is a $0.01 discount between the three of them,
556
+	 * they will each be for $0.99333333, which gets rounded to $1 again.
557
+	 * So the transaction total will be $2.99, but each registration will be for $1,
558
+	 * so if each registrant paid individually they will have overpaid by $0.01.
559
+	 * So in order to overcome this, we check for any difference, and if there is a difference
560
+	 * we just grab one registrant at random and make them responsible for it.
561
+	 * This should be used after setting REG_final_prices (it's done automatically as part of
562
+	 * EE_Registration_Processor::update_registration_final_prices())
563
+	 *
564
+	 * @param EE_Transaction $transaction
565
+	 * @return bool success verifying that there is NO difference after this method is done
566
+	 * @throws EE_Error
567
+	 * @throws InvalidArgumentException
568
+	 * @throws InvalidDataTypeException
569
+	 * @throws InvalidInterfaceException
570
+	 */
571
+	public function fix_reg_final_price_rounding_issue($transaction)
572
+	{
573
+		$reg_final_price_sum = EEM_Registration::instance()->sum(
574
+			array(
575
+				array(
576
+					'TXN_ID' => $transaction->ID(),
577
+				),
578
+			),
579
+			'REG_final_price'
580
+		);
581
+		$diff = $transaction->total() - $reg_final_price_sum;
582
+		// ok then, just grab one of the registrations
583
+		if ($diff !== 0) {
584
+			$a_reg = EEM_Registration::instance()->get_one(
585
+				array(
586
+					array(
587
+						'TXN_ID' => $transaction->ID(),
588
+					),
589
+				)
590
+			);
591
+			return $a_reg instanceof EE_Registration
592
+				? (bool) $a_reg->save(array('REG_final_price' => $a_reg->final_price() + $diff))
593
+				: false;
594
+		}
595
+		return true;
596
+	}
597
+
598
+
599
+	/**
600
+	 * update_registration_after_being_canceled_or_declined
601
+	 *
602
+	 * @param EE_Registration $registration
603
+	 * @param array           $closed_reg_statuses
604
+	 * @param bool            $update_reg
605
+	 * @return bool
606
+	 * @throws EE_Error
607
+	 * @throws RuntimeException
608
+	 */
609
+	public function update_registration_after_being_canceled_or_declined(
610
+		EE_Registration $registration,
611
+		array $closed_reg_statuses = array(),
612
+		$update_reg = true
613
+	) {
614
+		// these reg statuses should not be considered in any calculations involving monies owing
615
+		$closed_reg_statuses = ! empty($closed_reg_statuses)
616
+			? $closed_reg_statuses
617
+			: EEM_Registration::closed_reg_statuses();
618
+		if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
619
+			return false;
620
+		}
621
+		// release a reserved ticket by decrementing ticket and datetime reserved values
622
+		$registration->release_reserved_ticket(true, 'RegProcessor:' . __LINE__);
623
+		$registration->set_final_price(0);
624
+		if ($update_reg) {
625
+			$registration->save();
626
+		}
627
+		return true;
628
+	}
629
+
630
+
631
+	/**
632
+	 * update_canceled_or_declined_registration_after_being_reinstated
633
+	 *
634
+	 * @param EE_Registration $registration
635
+	 * @param array           $closed_reg_statuses
636
+	 * @param bool            $update_reg
637
+	 * @return bool
638
+	 * @throws EE_Error
639
+	 * @throws RuntimeException
640
+	 */
641
+	public function update_canceled_or_declined_registration_after_being_reinstated(
642
+		EE_Registration $registration,
643
+		array $closed_reg_statuses = array(),
644
+		$update_reg = true
645
+	) {
646
+		// these reg statuses should not be considered in any calculations involving monies owing
647
+		$closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
648
+			: EEM_Registration::closed_reg_statuses();
649
+		if (in_array($registration->status_ID(), $closed_reg_statuses, true)) {
650
+			return false;
651
+		}
652
+		$ticket = $registration->ticket();
653
+		if (! $ticket instanceof EE_Ticket) {
654
+			throw new EE_Error(
655
+				sprintf(
656
+					esc_html__(
657
+						'The Ticket for Registration %1$d was not found or is invalid.',
658
+						'event_espresso'
659
+					),
660
+					$registration->ticket_ID()
661
+				)
662
+			);
663
+		}
664
+		$registration->set_final_price($ticket->price());
665
+		if ($update_reg) {
666
+			$registration->save();
667
+		}
668
+		return true;
669
+	}
670
+
671
+
672
+	/**
673
+	 * generate_ONE_registration_from_line_item
674
+	 * Although a ticket line item may have a quantity greater than 1,
675
+	 * this method will ONLY CREATE ONE REGISTRATION !!!
676
+	 * Regardless of the ticket line item quantity.
677
+	 * This means that any code calling this method is responsible for ensuring
678
+	 * that the final registration count matches the ticket line item quantity.
679
+	 * This was done to make it easier to match the number of registrations
680
+	 * to the number of tickets in the cart, when the cart has been edited
681
+	 * after SPCO has already been initialized. So if an additional ticket was added to the cart, you can simply pass
682
+	 * the line item to this method to add a second ticket, and in this case, you would not want to add 2 tickets.
683
+	 *
684
+	 * @deprecated
685
+	 * @since 4.9.1
686
+	 * @param EE_Line_Item    $line_item
687
+	 * @param \EE_Transaction $transaction
688
+	 * @param int             $att_nmbr
689
+	 * @param int             $total_ticket_count
690
+	 * @return EE_Registration | null
691
+	 * @throws \OutOfRangeException
692
+	 * @throws \EventEspresso\core\exceptions\UnexpectedEntityException
693
+	 * @throws \EE_Error
694
+	 */
695
+	public function generate_ONE_registration_from_line_item(
696
+		EE_Line_Item $line_item,
697
+		EE_Transaction $transaction,
698
+		$att_nmbr = 1,
699
+		$total_ticket_count = 1
700
+	) {
701
+		EE_Error::doing_it_wrong(
702
+			__CLASS__ . '::' . __FUNCTION__,
703
+			sprintf(
704
+				esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
705
+				'\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()'
706
+			),
707
+			'4.9.1',
708
+			'5.0.0'
709
+		);
710
+		// grab the related ticket object for this line_item
711
+		$ticket = $line_item->ticket();
712
+		if (! $ticket instanceof EE_Ticket) {
713
+			EE_Error::add_error(
714
+				sprintf(
715
+					esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'),
716
+					$line_item->ID()
717
+				),
718
+				__FILE__,
719
+				__FUNCTION__,
720
+				__LINE__
721
+			);
722
+			return null;
723
+		}
724
+		$registration_service = new CreateRegistrationService();
725
+		// then generate a new registration from that
726
+		return $registration_service->create(
727
+			$ticket->get_related_event(),
728
+			$transaction,
729
+			$ticket,
730
+			$line_item,
731
+			$att_nmbr,
732
+			$total_ticket_count
733
+		);
734
+	}
735
+
736
+
737
+	/**
738
+	 * generates reg_url_link
739
+	 *
740
+	 * @deprecated
741
+	 * @since 4.9.1
742
+	 * @param int                   $att_nmbr
743
+	 * @param EE_Line_Item | string $item
744
+	 * @return string
745
+	 * @throws InvalidArgumentException
746
+	 */
747
+	public function generate_reg_url_link($att_nmbr, $item)
748
+	{
749
+		EE_Error::doing_it_wrong(
750
+			__CLASS__ . '::' . __FUNCTION__,
751
+			sprintf(
752
+				esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
753
+				'EventEspresso\core\domain\entities\RegUrlLink'
754
+			),
755
+			'4.9.1',
756
+			'5.0.0'
757
+		);
758
+		return new RegUrlLink($att_nmbr, $item);
759
+	}
760
+
761
+
762
+	/**
763
+	 * generates reg code
764
+	 *
765
+	 * @deprecated
766
+	 * @since 4.9.1
767
+	 * @param EE_Registration $registration
768
+	 * @return string
769
+	 * @throws EE_Error
770
+	 * @throws EntityNotFoundException
771
+	 * @throws InvalidArgumentException
772
+	 */
773
+	public function generate_reg_code(EE_Registration $registration)
774
+	{
775
+		EE_Error::doing_it_wrong(
776
+			__CLASS__ . '::' . __FUNCTION__,
777
+			sprintf(
778
+				esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
779
+				'EventEspresso\core\domain\entities\RegCode'
780
+			),
781
+			'4.9.1',
782
+			'5.0.0'
783
+		);
784
+		return apply_filters(
785
+			'FHEE__EE_Registration_Processor___generate_reg_code__new_reg_code',
786
+			new RegCode(
787
+				RegUrlLink::fromRegistration($registration),
788
+				$registration->transaction(),
789
+				$registration->ticket()
790
+			),
791
+			$registration
792
+		);
793
+	}
794 794
 }
Please login to merge, or discard this patch.
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -79,8 +79,8 @@  discard block
 block discarded – undo
79 79
     public static function instance(EE_Request $request = null)
80 80
     {
81 81
         // check if class object is instantiated
82
-        if (! self::$_instance instanceof EE_Registration_Processor) {
83
-            if (! $request instanceof EE_Request) {
82
+        if ( ! self::$_instance instanceof EE_Registration_Processor) {
83
+            if ( ! $request instanceof EE_Request) {
84 84
                 $request = LoaderFactory::getLoader()->getShared('EE_Request');
85 85
             }
86 86
             self::$_instance = new self($request);
@@ -106,7 +106,7 @@  discard block
 block discarded – undo
106 106
      */
107 107
     public function old_reg_status($REG_ID)
108 108
     {
109
-        return isset($this->_old_reg_status[ $REG_ID ]) ? $this->_old_reg_status[ $REG_ID ] : null;
109
+        return isset($this->_old_reg_status[$REG_ID]) ? $this->_old_reg_status[$REG_ID] : null;
110 110
     }
111 111
 
112 112
 
@@ -117,8 +117,8 @@  discard block
 block discarded – undo
117 117
     public function set_old_reg_status($REG_ID, $old_reg_status)
118 118
     {
119 119
         // only set the first time
120
-        if (! isset($this->_old_reg_status[ $REG_ID ])) {
121
-            $this->_old_reg_status[ $REG_ID ] = $old_reg_status;
120
+        if ( ! isset($this->_old_reg_status[$REG_ID])) {
121
+            $this->_old_reg_status[$REG_ID] = $old_reg_status;
122 122
         }
123 123
     }
124 124
 
@@ -129,7 +129,7 @@  discard block
 block discarded – undo
129 129
      */
130 130
     public function new_reg_status($REG_ID)
131 131
     {
132
-        return isset($this->_new_reg_status[ $REG_ID ]) ? $this->_new_reg_status[ $REG_ID ] : null;
132
+        return isset($this->_new_reg_status[$REG_ID]) ? $this->_new_reg_status[$REG_ID] : null;
133 133
     }
134 134
 
135 135
 
@@ -139,7 +139,7 @@  discard block
 block discarded – undo
139 139
      */
140 140
     public function set_new_reg_status($REG_ID, $new_reg_status)
141 141
     {
142
-        $this->_new_reg_status[ $REG_ID ] = $new_reg_status;
142
+        $this->_new_reg_status[$REG_ID] = $new_reg_status;
143 143
     }
144 144
 
145 145
 
@@ -206,7 +206,7 @@  discard block
 block discarded – undo
206 206
         if (
207 207
             $this->reg_status_updated($registration->ID())
208 208
             && (
209
-                (! $this->request->isAdmin() || $this->request->isFrontAjax())
209
+                ( ! $this->request->isAdmin() || $this->request->isFrontAjax())
210 210
                 || EE_Registry::instance()->CAP->current_user_can(
211 211
                     'ee_edit_registration',
212 212
                     'toggle_registration_status',
@@ -269,7 +269,7 @@  discard block
 block discarded – undo
269 269
                 $registration->save();
270 270
             }
271 271
             // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
272
-            if (! EE_Processor_Base::$IPN) {
272
+            if ( ! EE_Processor_Base::$IPN) {
273 273
                 // otherwise, send out notifications
274 274
                 add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
275 275
             }
@@ -328,7 +328,7 @@  discard block
 block discarded – undo
328 328
                 $registration->save();
329 329
             }
330 330
             // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
331
-            if (! EE_Processor_Base::$IPN) {
331
+            if ( ! EE_Processor_Base::$IPN) {
332 332
                 // otherwise, send out notifications
333 333
                 add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
334 334
             }
@@ -401,14 +401,14 @@  discard block
 block discarded – undo
401 401
                 || (
402 402
                     $payment instanceof EE_Payment && $payment->is_approved()
403 403
                     && // this specific registration has not yet been paid for
404
-                    ! isset(self::$_amount_paid[ $registration->ID() ])
404
+                    ! isset(self::$_amount_paid[$registration->ID()])
405 405
                     && // payment amount, less what we have already attributed to other registrations, is greater than this reg's final price
406 406
                     $payment->amount() - $total_paid >= $registration->final_price()
407 407
                 )
408 408
             )
409 409
         ) {
410 410
             // mark as paid
411
-            self::$_amount_paid[ $registration->ID() ] = $registration->final_price();
411
+            self::$_amount_paid[$registration->ID()] = $registration->final_price();
412 412
             // track new REG_Status
413 413
             $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
414 414
             // toggle status to approved
@@ -417,7 +417,7 @@  discard block
 block discarded – undo
417 417
                 $registration->save();
418 418
             }
419 419
             // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
420
-            if (! EE_Processor_Base::$IPN) {
420
+            if ( ! EE_Processor_Base::$IPN) {
421 421
                 // otherwise, send out notifications
422 422
                 add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
423 423
             }
@@ -451,7 +451,7 @@  discard block
 block discarded – undo
451 451
     public function trigger_registration_update_notifications($registration, array $additional_details = array())
452 452
     {
453 453
         try {
454
-            if (! $registration instanceof EE_Registration) {
454
+            if ( ! $registration instanceof EE_Registration) {
455 455
                 throw new EE_Error(
456 456
                     esc_html__('An invalid registration was received.', 'event_espresso')
457 457
                 );
@@ -465,7 +465,7 @@  discard block
 block discarded – undo
465 465
             //     false,
466 466
             //     'EE_Transaction: ' . $registration->transaction()->ID()
467 467
             // );
468
-            if (! $registration->is_primary_registrant()) {
468
+            if ( ! $registration->is_primary_registrant()) {
469 469
                 return;
470 470
             }
471 471
             do_action(
@@ -538,8 +538,8 @@  discard block
 block discarded – undo
538 538
         foreach ($transaction->registrations() as $registration) {
539 539
             /** @var EE_Line_Item $line_item */
540 540
             $line_item = EEM_Line_Item::instance()->get_line_item_for_registration($registration);
541
-            if (isset($reg_final_price_per_ticket_line_item[ $line_item->ID() ])) {
542
-                $registration->set_final_price($reg_final_price_per_ticket_line_item[ $line_item->ID() ]);
541
+            if (isset($reg_final_price_per_ticket_line_item[$line_item->ID()])) {
542
+                $registration->set_final_price($reg_final_price_per_ticket_line_item[$line_item->ID()]);
543 543
                 if ($save_regs) {
544 544
                     $registration->save();
545 545
                 }
@@ -615,11 +615,11 @@  discard block
 block discarded – undo
615 615
         $closed_reg_statuses = ! empty($closed_reg_statuses)
616 616
             ? $closed_reg_statuses
617 617
             : EEM_Registration::closed_reg_statuses();
618
-        if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
618
+        if ( ! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
619 619
             return false;
620 620
         }
621 621
         // release a reserved ticket by decrementing ticket and datetime reserved values
622
-        $registration->release_reserved_ticket(true, 'RegProcessor:' . __LINE__);
622
+        $registration->release_reserved_ticket(true, 'RegProcessor:'.__LINE__);
623 623
         $registration->set_final_price(0);
624 624
         if ($update_reg) {
625 625
             $registration->save();
@@ -650,7 +650,7 @@  discard block
 block discarded – undo
650 650
             return false;
651 651
         }
652 652
         $ticket = $registration->ticket();
653
-        if (! $ticket instanceof EE_Ticket) {
653
+        if ( ! $ticket instanceof EE_Ticket) {
654 654
             throw new EE_Error(
655 655
                 sprintf(
656 656
                     esc_html__(
@@ -699,7 +699,7 @@  discard block
 block discarded – undo
699 699
         $total_ticket_count = 1
700 700
     ) {
701 701
         EE_Error::doing_it_wrong(
702
-            __CLASS__ . '::' . __FUNCTION__,
702
+            __CLASS__.'::'.__FUNCTION__,
703 703
             sprintf(
704 704
                 esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
705 705
                 '\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()'
@@ -709,7 +709,7 @@  discard block
 block discarded – undo
709 709
         );
710 710
         // grab the related ticket object for this line_item
711 711
         $ticket = $line_item->ticket();
712
-        if (! $ticket instanceof EE_Ticket) {
712
+        if ( ! $ticket instanceof EE_Ticket) {
713 713
             EE_Error::add_error(
714 714
                 sprintf(
715 715
                     esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'),
@@ -747,7 +747,7 @@  discard block
 block discarded – undo
747 747
     public function generate_reg_url_link($att_nmbr, $item)
748 748
     {
749 749
         EE_Error::doing_it_wrong(
750
-            __CLASS__ . '::' . __FUNCTION__,
750
+            __CLASS__.'::'.__FUNCTION__,
751 751
             sprintf(
752 752
                 esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
753 753
                 'EventEspresso\core\domain\entities\RegUrlLink'
@@ -773,7 +773,7 @@  discard block
 block discarded – undo
773 773
     public function generate_reg_code(EE_Registration $registration)
774 774
     {
775 775
         EE_Error::doing_it_wrong(
776
-            __CLASS__ . '::' . __FUNCTION__,
776
+            __CLASS__.'::'.__FUNCTION__,
777 777
             sprintf(
778 778
                 esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
779 779
                 'EventEspresso\core\domain\entities\RegCode'
Please login to merge, or discard this patch.
core/admin/EE_Admin_Hooks.core.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -222,7 +222,7 @@
 block discarded – undo
222 222
     /**
223 223
      * constructor
224 224
      *
225
-     * @param EE_Admin_Page $admin_page the calling admin_page_object
225
+     * @param EE_Admin_Page $adminpage the calling admin_page_object
226 226
      */
227 227
     public function __construct(EE_Admin_Page $adminpage)
228 228
     {
Please login to merge, or discard this patch.
Indentation   +715 added lines, -715 removed lines patch added patch discarded remove patch
@@ -13,719 +13,719 @@
 block discarded – undo
13 13
 {
14 14
 
15 15
 
16
-    /**
17
-     * we're just going to use this to hold the name of the caller class (child class name)
18
-     *
19
-     * @var string
20
-     */
21
-    public $caller;
22
-
23
-
24
-    /**
25
-     * this is just a flag set automatically to indicate whether we've got an extended hook class running (i.e.
26
-     * espresso_events_Registration_Form_Hooks_Extend extends espresso_events_Registration_Form_Hooks).  This flag is
27
-     * used later to make sure we require the needed files.
28
-     *
29
-     * @var bool
30
-     */
31
-    protected $_extend;
32
-
33
-
34
-    /**
35
-     * child classes MUST set this property so that the page object can be loaded correctly
36
-     *
37
-     * @var string
38
-     */
39
-    protected $_name;
40
-
41
-
42
-    /**
43
-     * This is set by child classes and is an associative array of ajax hooks in the format:
44
-     * array(
45
-     *    'ajax_action_ref' => 'executing_method'; //must be public
46
-     * )
47
-     *
48
-     * @var array
49
-     */
50
-    protected $_ajax_func;
51
-
52
-
53
-    /**
54
-     * This is an array of methods that get executed on a page routes admin_init hook. Use the following format:
55
-     * array(
56
-     *    'page_route' => 'executing_method' //must be public
57
-     * )
58
-     *
59
-     * @var array
60
-     */
61
-    protected $_init_func;
62
-
63
-
64
-    /**
65
-     * This is an array of methods that output metabox content for the given page route.  Use the following format:
66
-     * array(
67
-     *    0 => array(
68
-     *        'page_route' => 'string_for_page_route', //must correspond to a page route in the class being connected
69
-     *        with (i.e. "edit_event") If this is in an array then the same params below will be used but the metabox
70
-     *        will be added to each route.
71
-     *        'func' =>  'executing_method',  //must be public (i.e. public function executing_method($post,
72
-     *        $callback_args){} ).  Note if you include callback args in the array then you need to declare them in the
73
-     *        method arguments.
74
-     *        'id' => 'identifier_for_metabox', //so it can be removed by addons (optional, class will set it
75
-     *        automatically)
76
-     *        'priority' => 'default', //default 'default' (optional)
77
-     *        'label' => __('Localized Title', 'event_espresso'),
78
-     *        'context' => 'advanced' //advanced is default (optional),
79
-     *    'callback_args' => array() //any callback args to include (optional)
80
-     * )
81
-     * Why are we indexing numerically?  Because it's possible there may be more than one metabox per page_route.
82
-     *
83
-     * @var array
84
-     */
85
-    protected $_metaboxes;
86
-
87
-
88
-    /**
89
-     * This is an array of values that indicate any metaboxes we want removed from a given page route.  Usually this is
90
-     * used when caffeinated functionality is replacing decaffeinated functionality.  Use the following format for the
91
-     * array: array(
92
-     *    0 => array(
93
-     *        'page_route' => 'string_for_page_route' //can be string or array of strings that match a page_route(s)
94
-     *        that are in the class being connected with (i.e. 'edit', or 'create_new').
95
-     *        'id' => 'identifier_for_metabox', //what the id is of the metabox being removed
96
-     *        'context' => 'normal', //the context for the metabox being removed (has to match)
97
-     *        'screen' => 'screen_id', //(optional), if not included then this class will attempt to remove the metabox
98
-     *        using the currently loaded screen object->id  however, there may be cases where you have to specify the
99
-     *        id for the screen the metabox is on.
100
-     *    )
101
-     * )
102
-     *
103
-     * @var array
104
-     */
105
-    protected $_remove_metaboxes;
106
-
107
-
108
-    /**
109
-     * This parent class takes care of loading the scripts and styles if the child class has set the properties for
110
-     * them in the following format.  Note, the first array index ('register') is for defining all the registers.  The
111
-     * second array index is for indicating what routes each script/style loads on. array(
112
-     * 'registers' => array(
113
-     *        'script_ref' => array( // if more than one script is to be loaded its best to use the 'dependency'
114
-     *        argument to link scripts together.
115
-     *            'type' => 'js' // 'js' or 'css' (defaults to js).  This tells us what type of wp_function to use
116
-     *            'url' => 'http://urltoscript.css.js',
117
-     *            'depends' => array('jquery'), //an array of dependencies for the scripts. REMEMBER, if a script has
118
-     *            already been registered elsewhere in the system.  You can just use the depends array to make sure it
119
-     *            gets loaded before the one you are setting here.
120
-     *            'footer' => TRUE //defaults to true (styles don't use this parameter)
121
-     *        ),
122
-     *    'enqueues' => array( //this time each key corresponds to the script ref followed by an array of page routes
123
-     *    the script gets enqueued on.
124
-     *        'script_ref' => array('route_one', 'route_two')
125
-     *    ),
126
-     *    'localize' => array( //this allows you to set a localize object.  Indicate which script the object is being
127
-     *    attached to and then include an array indexed by the name of the object and the array of key/value pairs for
128
-     *    the object.
129
-     *        'scrip_ref' => array(
130
-     *            'NAME_OF_JS_OBJECT' => array(
131
-     *                'translate_ref' => __('localized_string', 'event_espresso'),
132
-     *                'some_data' => 5
133
-     *            )
134
-     *        )
135
-     *    )
136
-     * )
137
-     *
138
-     * @var array
139
-     */
140
-    protected $_scripts_styles;
141
-
142
-
143
-    /**
144
-     * This is a property that will contain the current route.
145
-     *
146
-     * @var string;
147
-     */
148
-    protected $_current_route;
149
-
150
-
151
-    /**
152
-     * this optional property can be set by child classes to override the priority for the automatic action/filter hook
153
-     * loading in the `_load_routed_hooks()` method.  Please follow this format: array(
154
-     *    'wp_hook_reference' => 1
155
-     *    )
156
-     * )
157
-     *
158
-     * @var array
159
-     */
160
-    protected $_wp_action_filters_priority;
161
-
162
-
163
-    /**
164
-     * This just holds a merged array of the $_POST and $_GET vars in favor of $_POST
165
-     *
166
-     * @var array
167
-     */
168
-    protected $_req_data;
169
-
170
-
171
-    /**
172
-     * This just holds an instance of the page object for this hook
173
-     *
174
-     * @var EE_Admin_Page
175
-     */
176
-    protected $_page_object;
177
-
178
-
179
-    /**
180
-     * This holds the EE_Admin_Page object from the calling admin page that this object hooks into.
181
-     *
182
-     * @var EE_Admin_Page|EE_Admin_Page_CPT
183
-     */
184
-    protected $_adminpage_obj;
185
-
186
-
187
-    /**
188
-     * Holds EE_Registry object
189
-     *
190
-     * @var EE_Registry
191
-     */
192
-    protected $EE = null;
193
-
194
-
195
-    /**
196
-     * constructor
197
-     *
198
-     * @param EE_Admin_Page $admin_page the calling admin_page_object
199
-     */
200
-    public function __construct(EE_Admin_Page $adminpage)
201
-    {
202
-        $this->_adminpage_obj = $adminpage;
203
-        $this->_req_data = array_merge($_GET, $_POST);
204
-        $this->_set_defaults();
205
-        $this->_set_hooks_properties();
206
-        // first let's verify we're on the right page
207
-        if (
208
-            ! isset($this->_req_data['page'])
209
-            || (isset($this->_req_data['page'])
210
-                && $this->_adminpage_obj->page_slug
211
-                   != $this->_req_data['page'])
212
-        ) {
213
-            return;
214
-        } //get out nothing more to be done here.
215
-        // allow for extends to modify properties
216
-        if (method_exists($this, '_extend_properties')) {
217
-            $this->_extend_properties();
218
-        }
219
-        $this->_set_page_object();
220
-        $this->_init_hooks();
221
-        $this->_load_custom_methods();
222
-        $this->_load_routed_hooks();
223
-        add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts_styles'));
224
-        add_action('admin_enqueue_scripts', array($this, 'add_metaboxes'), 20);
225
-        add_action('admin_enqueue_scripts', array($this, 'remove_metaboxes'), 15);
226
-        $this->_ajax_hooks();
227
-    }
228
-
229
-
230
-    /**
231
-     * used by child classes to set the following properties:
232
-     * $_ajax_func (optional)
233
-     * $_init_func (optional)
234
-     * $_metaboxes (optional)
235
-     * $_scripts (optional)
236
-     * $_styles (optional)
237
-     * $_name (required)
238
-     * Also in this method will be registered any scripts or styles loaded on the targeted page (as indicated in the
239
-     * _scripts/_styles properties) Also children should place in this method any filters/actions that have to happen
240
-     * really early on page load (just after admin_init) if they want to have them registered for handling early.
241
-     *
242
-     * @access protected
243
-     * @abstract
244
-     * @return void
245
-     */
246
-    abstract protected function _set_hooks_properties();
247
-
248
-
249
-    /**
250
-     * The hooks for enqueue_scripts and enqueue_styles will be run in here.  Child classes need to define their
251
-     * scripts and styles in the relevant $_scripts and $_styles properties.  Child classes must have also already
252
-     * registered the scripts and styles using wp_register_script and wp_register_style functions.
253
-     *
254
-     * @access public
255
-     * @return void
256
-     */
257
-    public function enqueue_scripts_styles()
258
-    {
259
-        if (! empty($this->_scripts_styles)) {
260
-            // first let's do all the registrations
261
-            if (! isset($this->_scripts_styles['registers'])) {
262
-                $msg[] = __(
263
-                    'There is no "registers" index in the <code>$this->_scripts_styles</code> property.',
264
-                    'event_espresso'
265
-                );
266
-                $msg[] = sprintf(
267
-                    __(
268
-                        'Make sure you read the phpdoc comments above the definition of the $_scripts_styles property in the <code>EE_Admin_Hooks</code> class and modify according in the %s child',
269
-                        'event_espresso'
270
-                    ),
271
-                    '<strong>' . $this->caller . '</strong>'
272
-                );
273
-                throw new EE_Error(implode('||', $msg));
274
-            }
275
-            foreach ($this->_scripts_styles['registers'] as $ref => $details) {
276
-                $defaults = array(
277
-                    'type'    => 'js',
278
-                    'url'     => '',
279
-                    'depends' => array(),
280
-                    'version' => EVENT_ESPRESSO_VERSION,
281
-                    'footer'  => true,
282
-                );
283
-                $details = wp_parse_args($details, $defaults);
284
-                extract($details);
285
-                // let's make sure that we set the 'registers' type if it's not set! We need it later to determine whhich enqueu we do
286
-                $this->_scripts_styles['registers'][ $ref ]['type'] = $type;
287
-                // let's make sure we're not missing any REQUIRED parameters
288
-                if (empty($url)) {
289
-                    $msg[] = sprintf(
290
-                        __('Missing the url for the requested %s', 'event_espresso'),
291
-                        $type == 'js' ? 'script' : 'stylesheet'
292
-                    );
293
-                    $msg[] = sprintf(
294
-                        __(
295
-                            'Doublecheck your <code>$this->_scripts_styles</code> array in %s and make sure that there is a "url" set for the %s ref',
296
-                            'event_espresso'
297
-                        ),
298
-                        '<strong>' . $this->caller . '</strong>',
299
-                        $ref
300
-                    );
301
-                    throw new EE_Error(implode('||', $msg));
302
-                }
303
-                // made it here so let's do the appropriate registration
304
-                $type == 'js'
305
-                    ? wp_register_script($ref, $url, $depends, $version, $footer)
306
-                    : wp_register_style(
307
-                        $ref,
308
-                        $url,
309
-                        $depends,
310
-                        $version
311
-                    );
312
-            }
313
-            // k now lets do the enqueues
314
-            if (! isset($this->_scripts_styles['enqueues'])) {
315
-                return;
316
-            }  //not sure if we should throw an error here or not.
317
-
318
-            foreach ($this->_scripts_styles['enqueues'] as $ref => $routes) {
319
-                // make sure $routes is an array
320
-                $routes = (array) $routes;
321
-                if (in_array($this->_current_route, $routes)) {
322
-                    $this->_scripts_styles['registers'][ $ref ]['type'] == 'js' ? wp_enqueue_script($ref)
323
-                        : wp_enqueue_style($ref);
324
-                    // if we have a localization for the script let's do that too.
325
-                    if (isset($this->_scripts_styles['localize'][ $ref ])) {
326
-                        foreach ($this->_scripts_styles['localize'][ $ref ] as $object_name => $indexes) {
327
-                            wp_localize_script(
328
-                                $ref,
329
-                                $object_name,
330
-                                $this->_scripts_styles['localize'][ $ref ][ $object_name ]
331
-                            );
332
-                        }
333
-                    }
334
-                }
335
-            }
336
-            // let's do the deregisters
337
-            if (! isset($this->_scripts_styles['deregisters'])) {
338
-                return;
339
-            }
340
-            foreach ($this->_scripts_styles['deregisters'] as $ref => $details) {
341
-                $defaults = array(
342
-                    'type' => 'js',
343
-                );
344
-                $details = wp_parse_args($details, $defaults);
345
-                extract($details);
346
-                $type == 'js' ? wp_deregister_script($ref) : wp_deregister_style($ref);
347
-            }
348
-        }
349
-    }
350
-
351
-
352
-    /**
353
-     * just set the defaults for the hooks properties.
354
-     *
355
-     * @access private
356
-     * @return void
357
-     */
358
-    private function _set_defaults()
359
-    {
360
-        $this->_ajax_func = $this->_init_func = $this->_metaboxes = $this->_scripts = $this->_styles = $this->_wp_action_filters_priority = array();
361
-        $this->_current_route = $this->getCurrentRoute();
362
-        $this->caller = get_class($this);
363
-        $this->_extend = stripos($this->caller, 'Extend') ? true : false;
364
-    }
365
-
366
-
367
-    /**
368
-     * A helper for determining the current route.
369
-     * @return string
370
-     */
371
-    private function getCurrentRoute()
372
-    {
373
-        // list tables do something else with 'action' for bulk actions.
374
-        $action = ! empty($_REQUEST['action']) && $_REQUEST['action'] !== '-1' ? $_REQUEST['action'] : 'default';
375
-        // we set a 'route' variable in some cases where action is being used by something else.
376
-        $action = $action === 'default' && isset($_REQUEST['route']) ? $_REQUEST['route'] : $action;
377
-        return sanitize_key($action);
378
-    }
379
-
380
-
381
-    /**
382
-     * this sets the _page_object property
383
-     *
384
-     * @access protected
385
-     * @return void
386
-     */
387
-    protected function _set_page_object()
388
-    {
389
-        // first make sure $this->_name is set
390
-        if (empty($this->_name)) {
391
-            $msg[] = __('We can\'t load the page object', 'event_espresso');
392
-            $msg[] = sprintf(
393
-                __("This is because the %s child class has not set the '_name' property", 'event_espresso'),
394
-                $this->caller
395
-            );
396
-            throw new EE_Error(implode('||', $msg));
397
-        }
398
-        $ref = str_replace('_', ' ', $this->_name); // take the_message -> the message
399
-        $ref = str_replace(' ', '_', ucwords($ref)) . '_Admin_Page'; // take the message -> The_Message
400
-        // first default file (if exists)
401
-        $decaf_file = EE_ADMIN_PAGES . $this->_name . '/' . $ref . '.core.php';
402
-        if (is_readable($decaf_file)) {
403
-            require_once($decaf_file);
404
-        }
405
-        // now we have to do require for extended file (if needed)
406
-        if ($this->_extend) {
407
-            require_once(EE_CORE_CAF_ADMIN_EXTEND . $this->_name . '/Extend_' . $ref . '.core.php');
408
-        }
409
-        // if we've got an extended class we use that!
410
-        $ref = $this->_extend ? 'Extend_' . $ref : $ref;
411
-        // let's make sure the class exists
412
-        if (! class_exists($ref)) {
413
-            $msg[] = __('We can\'t load the page object', 'event_espresso');
414
-            $msg[] = sprintf(
415
-                __(
416
-                    'The class name that was given is %s. Check the spelling and make sure its correct, also there needs to be an autoloader setup for the class',
417
-                    'event_espresso'
418
-                ),
419
-                $ref
420
-            );
421
-            throw new EE_Error(implode('||', $msg));
422
-        }
423
-        $a = new ReflectionClass($ref);
424
-        $this->_page_object = $a->newInstance(false);
425
-    }
426
-
427
-
428
-    /**
429
-     * Child "hook" classes can declare any methods that they want executed when a specific page route is loaded.  The
430
-     * advantage of this is when doing things like running our own db interactions on saves etc.  Remember that
431
-     * $this->_req_data (all the _POST and _GET data) is available to your methods.
432
-     *
433
-     * @access private
434
-     * @return void
435
-     */
436
-    private function _load_custom_methods()
437
-    {
438
-        /**
439
-         * method cannot be named 'default' (@see http://us3.php
440
-         * .net/manual/en/reserved.keywords.php) so need to
441
-         * handle routes that are "default"
442
-         *
443
-         * @since 4.3.0
444
-         */
445
-        $method_callback = $this->_current_route == 'default' ? 'default_callback' : $this->_current_route;
446
-        // these run before the Admin_Page route executes.
447
-        if (method_exists($this, $method_callback)) {
448
-            call_user_func(array($this, $method_callback));
449
-        }
450
-        // these run via the _redirect_after_action method in EE_Admin_Page which usually happens after non_UI methods in EE_Admin_Page classes.  There are two redirect actions, the first fires before $query_args might be manipulated by "save and close" actions and the seond fires right before the actual redirect happens.
451
-        // first the actions
452
-        // note that these action hooks will have the $query_args value available.
453
-        $admin_class_name = get_class($this->_adminpage_obj);
454
-        if (method_exists($this, '_redirect_action_early_' . $this->_current_route)) {
455
-            add_action(
456
-                'AHEE__'
457
-                . $admin_class_name
458
-                . '___redirect_after_action__before_redirect_modification_'
459
-                . $this->_current_route,
460
-                array($this, '_redirect_action_early_' . $this->_current_route),
461
-                10
462
-            );
463
-        }
464
-        if (method_exists($this, '_redirect_action_' . $this->_current_route)) {
465
-            add_action(
466
-                'AHEE_redirect_' . $admin_class_name . $this->_current_route,
467
-                array($this, '_redirect_action_' . $this->_current_route),
468
-                10
469
-            );
470
-        }
471
-        // let's hook into the _redirect itself and allow for changing where the user goes after redirect.  This will have $query_args and $redirect_url available.
472
-        if (method_exists($this, '_redirect_filter_' . $this->_current_route)) {
473
-            add_filter(
474
-                'FHEE_redirect_' . $admin_class_name . $this->_current_route,
475
-                array($this, '_redirect_filter_' . $this->_current_route),
476
-                10,
477
-                2
478
-            );
479
-        }
480
-    }
481
-
482
-
483
-    /**
484
-     * This method will search for a corresponding method with a name matching the route and the wp_hook to run.  This
485
-     * allows child hook classes to target hooking into a specific wp action or filter hook ONLY on a certain route.
486
-     * just remember, methods MUST be public Future hooks should be added in here to be access by child classes.
487
-     *
488
-     * @return void
489
-     */
490
-    private function _load_routed_hooks()
491
-    {
492
-
493
-        // this array provides the hook action names that will be referenced.  Key is the action. Value is an array with the type (action or filter) and the number of parameters for the hook.  We'll default all priorities for automatic hooks to 10.
494
-        $hook_filter_array = array(
495
-            'admin_footer'                                                                            => array(
496
-                'type'     => 'action',
497
-                'argnum'   => 1,
498
-                'priority' => 10,
499
-            ),
500
-            'FHEE_list_table_views_' . $this->_adminpage_obj->page_slug . '_' . $this->_current_route => array(
501
-                'type'     => 'filter',
502
-                'argnum'   => 1,
503
-                'priority' => 10,
504
-            ),
505
-            'FHEE_list_table_views_' . $this->_adminpage_obj->page_slug                               => array(
506
-                'type'     => 'filter',
507
-                'argnum'   => 1,
508
-                'priority' => 10,
509
-            ),
510
-            'FHEE_list_table_views'                                                                   => array(
511
-                'type'     => 'filter',
512
-                'argnum'   => 1,
513
-                'priority' => 10,
514
-            ),
515
-            'AHEE__EE_Admin_Page___display_admin_page__modify_metaboxes'                              => array(
516
-                'type'     => 'action',
517
-                'argnum'   => 1,
518
-                'priority' => 10,
519
-            ),
520
-        );
521
-        foreach ($hook_filter_array as $hook => $args) {
522
-            if (method_exists($this, $this->_current_route . '_' . $hook)) {
523
-                if (isset($this->_wp_action_filters_priority[ $hook ])) {
524
-                    $args['priority'] = $this->_wp_action_filters_priority[ $hook ];
525
-                }
526
-                if ($args['type'] == 'action') {
527
-                    add_action(
528
-                        $hook,
529
-                        array($this, $this->_current_route . '_' . $hook),
530
-                        $args['priority'],
531
-                        $args['argnum']
532
-                    );
533
-                } else {
534
-                    add_filter(
535
-                        $hook,
536
-                        array($this, $this->_current_route . '_' . $hook),
537
-                        $args['priority'],
538
-                        $args['argnum']
539
-                    );
540
-                }
541
-            }
542
-        }
543
-    }
544
-
545
-
546
-    /**
547
-     * Loop throught the $_ajax_func array and add_actions for the array.
548
-     *
549
-     * @return void
550
-     */
551
-    private function _ajax_hooks()
552
-    {
553
-        if (empty($this->_ajax_func)) {
554
-            return;
555
-        } //get out there's nothing to take care of.
556
-        foreach ($this->_ajax_func as $action => $method) {
557
-            // make sure method exists
558
-            if (! method_exists($this, $method)) {
559
-                $msg[] = __(
560
-                    'There is no corresponding method for the hook labeled in the _ajax_func array',
561
-                    'event_espresso'
562
-                ) . '<br />';
563
-                $msg[] = sprintf(
564
-                    __(
565
-                        'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
566
-                        'event_espresso'
567
-                    ),
568
-                    $method,
569
-                    $this->caller
570
-                );
571
-                throw new EE_Error(implode('||', $msg));
572
-            }
573
-            add_action('wp_ajax_' . $action, array($this, $method));
574
-        }
575
-    }
576
-
577
-
578
-    /**
579
-     * Loop throught the $_init_func array and add_actions for the array.
580
-     *
581
-     * @return void
582
-     */
583
-    protected function _init_hooks()
584
-    {
585
-        if (empty($this->_init_func)) {
586
-            return;
587
-        } //get out there's nothing to take care of.
588
-        // We need to determine what page_route we are on!
589
-        $current_route = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'default';
590
-        foreach ($this->_init_func as $route => $method) {
591
-            // make sure method exists
592
-            if (! method_exists($this, $method)) {
593
-                $msg[] = __(
594
-                    'There is no corresponding method for the hook labeled in the _init_func array',
595
-                    'event_espresso'
596
-                ) . '<br />';
597
-                $msg[] = sprintf(
598
-                    __(
599
-                        'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
600
-                        'event_espresso'
601
-                    ),
602
-                    $method,
603
-                    $this->caller
604
-                );
605
-                throw new EE_Error(implode('||', $msg));
606
-            }
607
-            if ($route == $this->_current_route) {
608
-                add_action('admin_init', array($this, $method));
609
-            }
610
-        }
611
-    }
612
-
613
-
614
-    /**
615
-     * Loop through the _metaboxes property and add_metaboxes accordingly
616
-     * //todo we could eventually make this a config component class (i.e. new EE_Metabox);
617
-     *
618
-     * @access public
619
-     * @return void
620
-     */
621
-    public function add_metaboxes()
622
-    {
623
-        if (empty($this->_metaboxes)) {
624
-            return;
625
-        } //get out we don't have any metaboxes to set for this connection
626
-        $this->_handle_metabox_array($this->_metaboxes);
627
-    }
628
-
629
-
630
-    private function _handle_metabox_array($boxes, $add = true)
631
-    {
632
-        foreach ($boxes as $box) {
633
-            if (! isset($box['page_route'])) {
634
-                continue;
635
-            } //we dont' have a valid array
636
-            // let's make sure $box['page_route'] is an array so the "foreach" will work.
637
-            $box['page_route'] = (array) $box['page_route'];
638
-            foreach ($box['page_route'] as $route) {
639
-                if ($route != $this->_current_route) {
640
-                    continue;
641
-                } //get out we only add metaboxes for set route.
642
-                if ($add) {
643
-                    $this->_add_metabox($box);
644
-                } else {
645
-                    $this->_remove_metabox($box);
646
-                }
647
-            }
648
-        }
649
-    }
650
-
651
-
652
-    /**
653
-     * Loop through the _remove_metaboxes property and remove metaboxes accordingly.
654
-     *
655
-     * @access public
656
-     * @return void
657
-     */
658
-    public function remove_metaboxes()
659
-    {
660
-        if (empty($this->_remove_metaboxes)) {
661
-            return;
662
-        } //get out there are no metaboxes to remove
663
-        $this->_handle_metabox_array($this->_remove_metaboxes, false);
664
-    }
665
-
666
-
667
-    /**
668
-     * This just handles adding a metabox
669
-     *
670
-     * @access private
671
-     * @param array $args an array of args that have been set for this metabox by the child class
672
-     */
673
-    private function _add_metabox($args)
674
-    {
675
-        $current_screen = get_current_screen();
676
-        $screen_id = is_object($current_screen) ? $current_screen->id : null;
677
-        $func = isset($args['func']) ? $args['func'] : 'some_invalid_callback';
678
-        // set defaults
679
-        $defaults = array(
680
-            'func'          => $func,
681
-            'id'            => $this->caller . '_' . $func . '_metabox',
682
-            'priority'      => 'default',
683
-            'label'         => $this->caller,
684
-            'context'       => 'advanced',
685
-            'callback_args' => array(),
686
-            'page'          => isset($args['page']) ? $args['page'] : $screen_id,
687
-        );
688
-        $args = wp_parse_args($args, $defaults);
689
-        extract($args);
690
-        // make sure method exists
691
-        if (! method_exists($this, $func)) {
692
-            $msg[] = __('There is no corresponding method to display the metabox content', 'event_espresso') . '<br />';
693
-            $msg[] = sprintf(
694
-                __(
695
-                    'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
696
-                    'event_espresso'
697
-                ),
698
-                $func,
699
-                $this->caller
700
-            );
701
-            throw new EE_Error(implode('||', $msg));
702
-        }
703
-        // everything checks out so lets add the metabox
704
-        add_meta_box($id, $label, array($this, $func), $page, $context, $priority, $callback_args);
705
-    }
706
-
707
-
708
-    private function _remove_metabox($args)
709
-    {
710
-        $current_screen = get_current_screen();
711
-        $screen_id = is_object($current_screen) ? $current_screen->id : null;
712
-        $func = isset($args['func']) ? $args['func'] : 'some_invalid_callback';
713
-        // set defaults
714
-        $defaults = array(
715
-            'id'      => isset($args['id'])
716
-                ? $args['id']
717
-                : $this->_current_route
718
-                  . '_'
719
-                  . $this->caller
720
-                  . '_'
721
-                  . $func
722
-                  . '_metabox',
723
-            'context' => 'default',
724
-            'screen'  => isset($args['screen']) ? $args['screen'] : $screen_id,
725
-        );
726
-        $args = wp_parse_args($args, $defaults);
727
-        extract($args);
728
-        // everything checks out so lets remove the box!
729
-        remove_meta_box($id, $screen, $context);
730
-    }
16
+	/**
17
+	 * we're just going to use this to hold the name of the caller class (child class name)
18
+	 *
19
+	 * @var string
20
+	 */
21
+	public $caller;
22
+
23
+
24
+	/**
25
+	 * this is just a flag set automatically to indicate whether we've got an extended hook class running (i.e.
26
+	 * espresso_events_Registration_Form_Hooks_Extend extends espresso_events_Registration_Form_Hooks).  This flag is
27
+	 * used later to make sure we require the needed files.
28
+	 *
29
+	 * @var bool
30
+	 */
31
+	protected $_extend;
32
+
33
+
34
+	/**
35
+	 * child classes MUST set this property so that the page object can be loaded correctly
36
+	 *
37
+	 * @var string
38
+	 */
39
+	protected $_name;
40
+
41
+
42
+	/**
43
+	 * This is set by child classes and is an associative array of ajax hooks in the format:
44
+	 * array(
45
+	 *    'ajax_action_ref' => 'executing_method'; //must be public
46
+	 * )
47
+	 *
48
+	 * @var array
49
+	 */
50
+	protected $_ajax_func;
51
+
52
+
53
+	/**
54
+	 * This is an array of methods that get executed on a page routes admin_init hook. Use the following format:
55
+	 * array(
56
+	 *    'page_route' => 'executing_method' //must be public
57
+	 * )
58
+	 *
59
+	 * @var array
60
+	 */
61
+	protected $_init_func;
62
+
63
+
64
+	/**
65
+	 * This is an array of methods that output metabox content for the given page route.  Use the following format:
66
+	 * array(
67
+	 *    0 => array(
68
+	 *        'page_route' => 'string_for_page_route', //must correspond to a page route in the class being connected
69
+	 *        with (i.e. "edit_event") If this is in an array then the same params below will be used but the metabox
70
+	 *        will be added to each route.
71
+	 *        'func' =>  'executing_method',  //must be public (i.e. public function executing_method($post,
72
+	 *        $callback_args){} ).  Note if you include callback args in the array then you need to declare them in the
73
+	 *        method arguments.
74
+	 *        'id' => 'identifier_for_metabox', //so it can be removed by addons (optional, class will set it
75
+	 *        automatically)
76
+	 *        'priority' => 'default', //default 'default' (optional)
77
+	 *        'label' => __('Localized Title', 'event_espresso'),
78
+	 *        'context' => 'advanced' //advanced is default (optional),
79
+	 *    'callback_args' => array() //any callback args to include (optional)
80
+	 * )
81
+	 * Why are we indexing numerically?  Because it's possible there may be more than one metabox per page_route.
82
+	 *
83
+	 * @var array
84
+	 */
85
+	protected $_metaboxes;
86
+
87
+
88
+	/**
89
+	 * This is an array of values that indicate any metaboxes we want removed from a given page route.  Usually this is
90
+	 * used when caffeinated functionality is replacing decaffeinated functionality.  Use the following format for the
91
+	 * array: array(
92
+	 *    0 => array(
93
+	 *        'page_route' => 'string_for_page_route' //can be string or array of strings that match a page_route(s)
94
+	 *        that are in the class being connected with (i.e. 'edit', or 'create_new').
95
+	 *        'id' => 'identifier_for_metabox', //what the id is of the metabox being removed
96
+	 *        'context' => 'normal', //the context for the metabox being removed (has to match)
97
+	 *        'screen' => 'screen_id', //(optional), if not included then this class will attempt to remove the metabox
98
+	 *        using the currently loaded screen object->id  however, there may be cases where you have to specify the
99
+	 *        id for the screen the metabox is on.
100
+	 *    )
101
+	 * )
102
+	 *
103
+	 * @var array
104
+	 */
105
+	protected $_remove_metaboxes;
106
+
107
+
108
+	/**
109
+	 * This parent class takes care of loading the scripts and styles if the child class has set the properties for
110
+	 * them in the following format.  Note, the first array index ('register') is for defining all the registers.  The
111
+	 * second array index is for indicating what routes each script/style loads on. array(
112
+	 * 'registers' => array(
113
+	 *        'script_ref' => array( // if more than one script is to be loaded its best to use the 'dependency'
114
+	 *        argument to link scripts together.
115
+	 *            'type' => 'js' // 'js' or 'css' (defaults to js).  This tells us what type of wp_function to use
116
+	 *            'url' => 'http://urltoscript.css.js',
117
+	 *            'depends' => array('jquery'), //an array of dependencies for the scripts. REMEMBER, if a script has
118
+	 *            already been registered elsewhere in the system.  You can just use the depends array to make sure it
119
+	 *            gets loaded before the one you are setting here.
120
+	 *            'footer' => TRUE //defaults to true (styles don't use this parameter)
121
+	 *        ),
122
+	 *    'enqueues' => array( //this time each key corresponds to the script ref followed by an array of page routes
123
+	 *    the script gets enqueued on.
124
+	 *        'script_ref' => array('route_one', 'route_two')
125
+	 *    ),
126
+	 *    'localize' => array( //this allows you to set a localize object.  Indicate which script the object is being
127
+	 *    attached to and then include an array indexed by the name of the object and the array of key/value pairs for
128
+	 *    the object.
129
+	 *        'scrip_ref' => array(
130
+	 *            'NAME_OF_JS_OBJECT' => array(
131
+	 *                'translate_ref' => __('localized_string', 'event_espresso'),
132
+	 *                'some_data' => 5
133
+	 *            )
134
+	 *        )
135
+	 *    )
136
+	 * )
137
+	 *
138
+	 * @var array
139
+	 */
140
+	protected $_scripts_styles;
141
+
142
+
143
+	/**
144
+	 * This is a property that will contain the current route.
145
+	 *
146
+	 * @var string;
147
+	 */
148
+	protected $_current_route;
149
+
150
+
151
+	/**
152
+	 * this optional property can be set by child classes to override the priority for the automatic action/filter hook
153
+	 * loading in the `_load_routed_hooks()` method.  Please follow this format: array(
154
+	 *    'wp_hook_reference' => 1
155
+	 *    )
156
+	 * )
157
+	 *
158
+	 * @var array
159
+	 */
160
+	protected $_wp_action_filters_priority;
161
+
162
+
163
+	/**
164
+	 * This just holds a merged array of the $_POST and $_GET vars in favor of $_POST
165
+	 *
166
+	 * @var array
167
+	 */
168
+	protected $_req_data;
169
+
170
+
171
+	/**
172
+	 * This just holds an instance of the page object for this hook
173
+	 *
174
+	 * @var EE_Admin_Page
175
+	 */
176
+	protected $_page_object;
177
+
178
+
179
+	/**
180
+	 * This holds the EE_Admin_Page object from the calling admin page that this object hooks into.
181
+	 *
182
+	 * @var EE_Admin_Page|EE_Admin_Page_CPT
183
+	 */
184
+	protected $_adminpage_obj;
185
+
186
+
187
+	/**
188
+	 * Holds EE_Registry object
189
+	 *
190
+	 * @var EE_Registry
191
+	 */
192
+	protected $EE = null;
193
+
194
+
195
+	/**
196
+	 * constructor
197
+	 *
198
+	 * @param EE_Admin_Page $admin_page the calling admin_page_object
199
+	 */
200
+	public function __construct(EE_Admin_Page $adminpage)
201
+	{
202
+		$this->_adminpage_obj = $adminpage;
203
+		$this->_req_data = array_merge($_GET, $_POST);
204
+		$this->_set_defaults();
205
+		$this->_set_hooks_properties();
206
+		// first let's verify we're on the right page
207
+		if (
208
+			! isset($this->_req_data['page'])
209
+			|| (isset($this->_req_data['page'])
210
+				&& $this->_adminpage_obj->page_slug
211
+				   != $this->_req_data['page'])
212
+		) {
213
+			return;
214
+		} //get out nothing more to be done here.
215
+		// allow for extends to modify properties
216
+		if (method_exists($this, '_extend_properties')) {
217
+			$this->_extend_properties();
218
+		}
219
+		$this->_set_page_object();
220
+		$this->_init_hooks();
221
+		$this->_load_custom_methods();
222
+		$this->_load_routed_hooks();
223
+		add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts_styles'));
224
+		add_action('admin_enqueue_scripts', array($this, 'add_metaboxes'), 20);
225
+		add_action('admin_enqueue_scripts', array($this, 'remove_metaboxes'), 15);
226
+		$this->_ajax_hooks();
227
+	}
228
+
229
+
230
+	/**
231
+	 * used by child classes to set the following properties:
232
+	 * $_ajax_func (optional)
233
+	 * $_init_func (optional)
234
+	 * $_metaboxes (optional)
235
+	 * $_scripts (optional)
236
+	 * $_styles (optional)
237
+	 * $_name (required)
238
+	 * Also in this method will be registered any scripts or styles loaded on the targeted page (as indicated in the
239
+	 * _scripts/_styles properties) Also children should place in this method any filters/actions that have to happen
240
+	 * really early on page load (just after admin_init) if they want to have them registered for handling early.
241
+	 *
242
+	 * @access protected
243
+	 * @abstract
244
+	 * @return void
245
+	 */
246
+	abstract protected function _set_hooks_properties();
247
+
248
+
249
+	/**
250
+	 * The hooks for enqueue_scripts and enqueue_styles will be run in here.  Child classes need to define their
251
+	 * scripts and styles in the relevant $_scripts and $_styles properties.  Child classes must have also already
252
+	 * registered the scripts and styles using wp_register_script and wp_register_style functions.
253
+	 *
254
+	 * @access public
255
+	 * @return void
256
+	 */
257
+	public function enqueue_scripts_styles()
258
+	{
259
+		if (! empty($this->_scripts_styles)) {
260
+			// first let's do all the registrations
261
+			if (! isset($this->_scripts_styles['registers'])) {
262
+				$msg[] = __(
263
+					'There is no "registers" index in the <code>$this->_scripts_styles</code> property.',
264
+					'event_espresso'
265
+				);
266
+				$msg[] = sprintf(
267
+					__(
268
+						'Make sure you read the phpdoc comments above the definition of the $_scripts_styles property in the <code>EE_Admin_Hooks</code> class and modify according in the %s child',
269
+						'event_espresso'
270
+					),
271
+					'<strong>' . $this->caller . '</strong>'
272
+				);
273
+				throw new EE_Error(implode('||', $msg));
274
+			}
275
+			foreach ($this->_scripts_styles['registers'] as $ref => $details) {
276
+				$defaults = array(
277
+					'type'    => 'js',
278
+					'url'     => '',
279
+					'depends' => array(),
280
+					'version' => EVENT_ESPRESSO_VERSION,
281
+					'footer'  => true,
282
+				);
283
+				$details = wp_parse_args($details, $defaults);
284
+				extract($details);
285
+				// let's make sure that we set the 'registers' type if it's not set! We need it later to determine whhich enqueu we do
286
+				$this->_scripts_styles['registers'][ $ref ]['type'] = $type;
287
+				// let's make sure we're not missing any REQUIRED parameters
288
+				if (empty($url)) {
289
+					$msg[] = sprintf(
290
+						__('Missing the url for the requested %s', 'event_espresso'),
291
+						$type == 'js' ? 'script' : 'stylesheet'
292
+					);
293
+					$msg[] = sprintf(
294
+						__(
295
+							'Doublecheck your <code>$this->_scripts_styles</code> array in %s and make sure that there is a "url" set for the %s ref',
296
+							'event_espresso'
297
+						),
298
+						'<strong>' . $this->caller . '</strong>',
299
+						$ref
300
+					);
301
+					throw new EE_Error(implode('||', $msg));
302
+				}
303
+				// made it here so let's do the appropriate registration
304
+				$type == 'js'
305
+					? wp_register_script($ref, $url, $depends, $version, $footer)
306
+					: wp_register_style(
307
+						$ref,
308
+						$url,
309
+						$depends,
310
+						$version
311
+					);
312
+			}
313
+			// k now lets do the enqueues
314
+			if (! isset($this->_scripts_styles['enqueues'])) {
315
+				return;
316
+			}  //not sure if we should throw an error here or not.
317
+
318
+			foreach ($this->_scripts_styles['enqueues'] as $ref => $routes) {
319
+				// make sure $routes is an array
320
+				$routes = (array) $routes;
321
+				if (in_array($this->_current_route, $routes)) {
322
+					$this->_scripts_styles['registers'][ $ref ]['type'] == 'js' ? wp_enqueue_script($ref)
323
+						: wp_enqueue_style($ref);
324
+					// if we have a localization for the script let's do that too.
325
+					if (isset($this->_scripts_styles['localize'][ $ref ])) {
326
+						foreach ($this->_scripts_styles['localize'][ $ref ] as $object_name => $indexes) {
327
+							wp_localize_script(
328
+								$ref,
329
+								$object_name,
330
+								$this->_scripts_styles['localize'][ $ref ][ $object_name ]
331
+							);
332
+						}
333
+					}
334
+				}
335
+			}
336
+			// let's do the deregisters
337
+			if (! isset($this->_scripts_styles['deregisters'])) {
338
+				return;
339
+			}
340
+			foreach ($this->_scripts_styles['deregisters'] as $ref => $details) {
341
+				$defaults = array(
342
+					'type' => 'js',
343
+				);
344
+				$details = wp_parse_args($details, $defaults);
345
+				extract($details);
346
+				$type == 'js' ? wp_deregister_script($ref) : wp_deregister_style($ref);
347
+			}
348
+		}
349
+	}
350
+
351
+
352
+	/**
353
+	 * just set the defaults for the hooks properties.
354
+	 *
355
+	 * @access private
356
+	 * @return void
357
+	 */
358
+	private function _set_defaults()
359
+	{
360
+		$this->_ajax_func = $this->_init_func = $this->_metaboxes = $this->_scripts = $this->_styles = $this->_wp_action_filters_priority = array();
361
+		$this->_current_route = $this->getCurrentRoute();
362
+		$this->caller = get_class($this);
363
+		$this->_extend = stripos($this->caller, 'Extend') ? true : false;
364
+	}
365
+
366
+
367
+	/**
368
+	 * A helper for determining the current route.
369
+	 * @return string
370
+	 */
371
+	private function getCurrentRoute()
372
+	{
373
+		// list tables do something else with 'action' for bulk actions.
374
+		$action = ! empty($_REQUEST['action']) && $_REQUEST['action'] !== '-1' ? $_REQUEST['action'] : 'default';
375
+		// we set a 'route' variable in some cases where action is being used by something else.
376
+		$action = $action === 'default' && isset($_REQUEST['route']) ? $_REQUEST['route'] : $action;
377
+		return sanitize_key($action);
378
+	}
379
+
380
+
381
+	/**
382
+	 * this sets the _page_object property
383
+	 *
384
+	 * @access protected
385
+	 * @return void
386
+	 */
387
+	protected function _set_page_object()
388
+	{
389
+		// first make sure $this->_name is set
390
+		if (empty($this->_name)) {
391
+			$msg[] = __('We can\'t load the page object', 'event_espresso');
392
+			$msg[] = sprintf(
393
+				__("This is because the %s child class has not set the '_name' property", 'event_espresso'),
394
+				$this->caller
395
+			);
396
+			throw new EE_Error(implode('||', $msg));
397
+		}
398
+		$ref = str_replace('_', ' ', $this->_name); // take the_message -> the message
399
+		$ref = str_replace(' ', '_', ucwords($ref)) . '_Admin_Page'; // take the message -> The_Message
400
+		// first default file (if exists)
401
+		$decaf_file = EE_ADMIN_PAGES . $this->_name . '/' . $ref . '.core.php';
402
+		if (is_readable($decaf_file)) {
403
+			require_once($decaf_file);
404
+		}
405
+		// now we have to do require for extended file (if needed)
406
+		if ($this->_extend) {
407
+			require_once(EE_CORE_CAF_ADMIN_EXTEND . $this->_name . '/Extend_' . $ref . '.core.php');
408
+		}
409
+		// if we've got an extended class we use that!
410
+		$ref = $this->_extend ? 'Extend_' . $ref : $ref;
411
+		// let's make sure the class exists
412
+		if (! class_exists($ref)) {
413
+			$msg[] = __('We can\'t load the page object', 'event_espresso');
414
+			$msg[] = sprintf(
415
+				__(
416
+					'The class name that was given is %s. Check the spelling and make sure its correct, also there needs to be an autoloader setup for the class',
417
+					'event_espresso'
418
+				),
419
+				$ref
420
+			);
421
+			throw new EE_Error(implode('||', $msg));
422
+		}
423
+		$a = new ReflectionClass($ref);
424
+		$this->_page_object = $a->newInstance(false);
425
+	}
426
+
427
+
428
+	/**
429
+	 * Child "hook" classes can declare any methods that they want executed when a specific page route is loaded.  The
430
+	 * advantage of this is when doing things like running our own db interactions on saves etc.  Remember that
431
+	 * $this->_req_data (all the _POST and _GET data) is available to your methods.
432
+	 *
433
+	 * @access private
434
+	 * @return void
435
+	 */
436
+	private function _load_custom_methods()
437
+	{
438
+		/**
439
+		 * method cannot be named 'default' (@see http://us3.php
440
+		 * .net/manual/en/reserved.keywords.php) so need to
441
+		 * handle routes that are "default"
442
+		 *
443
+		 * @since 4.3.0
444
+		 */
445
+		$method_callback = $this->_current_route == 'default' ? 'default_callback' : $this->_current_route;
446
+		// these run before the Admin_Page route executes.
447
+		if (method_exists($this, $method_callback)) {
448
+			call_user_func(array($this, $method_callback));
449
+		}
450
+		// these run via the _redirect_after_action method in EE_Admin_Page which usually happens after non_UI methods in EE_Admin_Page classes.  There are two redirect actions, the first fires before $query_args might be manipulated by "save and close" actions and the seond fires right before the actual redirect happens.
451
+		// first the actions
452
+		// note that these action hooks will have the $query_args value available.
453
+		$admin_class_name = get_class($this->_adminpage_obj);
454
+		if (method_exists($this, '_redirect_action_early_' . $this->_current_route)) {
455
+			add_action(
456
+				'AHEE__'
457
+				. $admin_class_name
458
+				. '___redirect_after_action__before_redirect_modification_'
459
+				. $this->_current_route,
460
+				array($this, '_redirect_action_early_' . $this->_current_route),
461
+				10
462
+			);
463
+		}
464
+		if (method_exists($this, '_redirect_action_' . $this->_current_route)) {
465
+			add_action(
466
+				'AHEE_redirect_' . $admin_class_name . $this->_current_route,
467
+				array($this, '_redirect_action_' . $this->_current_route),
468
+				10
469
+			);
470
+		}
471
+		// let's hook into the _redirect itself and allow for changing where the user goes after redirect.  This will have $query_args and $redirect_url available.
472
+		if (method_exists($this, '_redirect_filter_' . $this->_current_route)) {
473
+			add_filter(
474
+				'FHEE_redirect_' . $admin_class_name . $this->_current_route,
475
+				array($this, '_redirect_filter_' . $this->_current_route),
476
+				10,
477
+				2
478
+			);
479
+		}
480
+	}
481
+
482
+
483
+	/**
484
+	 * This method will search for a corresponding method with a name matching the route and the wp_hook to run.  This
485
+	 * allows child hook classes to target hooking into a specific wp action or filter hook ONLY on a certain route.
486
+	 * just remember, methods MUST be public Future hooks should be added in here to be access by child classes.
487
+	 *
488
+	 * @return void
489
+	 */
490
+	private function _load_routed_hooks()
491
+	{
492
+
493
+		// this array provides the hook action names that will be referenced.  Key is the action. Value is an array with the type (action or filter) and the number of parameters for the hook.  We'll default all priorities for automatic hooks to 10.
494
+		$hook_filter_array = array(
495
+			'admin_footer'                                                                            => array(
496
+				'type'     => 'action',
497
+				'argnum'   => 1,
498
+				'priority' => 10,
499
+			),
500
+			'FHEE_list_table_views_' . $this->_adminpage_obj->page_slug . '_' . $this->_current_route => array(
501
+				'type'     => 'filter',
502
+				'argnum'   => 1,
503
+				'priority' => 10,
504
+			),
505
+			'FHEE_list_table_views_' . $this->_adminpage_obj->page_slug                               => array(
506
+				'type'     => 'filter',
507
+				'argnum'   => 1,
508
+				'priority' => 10,
509
+			),
510
+			'FHEE_list_table_views'                                                                   => array(
511
+				'type'     => 'filter',
512
+				'argnum'   => 1,
513
+				'priority' => 10,
514
+			),
515
+			'AHEE__EE_Admin_Page___display_admin_page__modify_metaboxes'                              => array(
516
+				'type'     => 'action',
517
+				'argnum'   => 1,
518
+				'priority' => 10,
519
+			),
520
+		);
521
+		foreach ($hook_filter_array as $hook => $args) {
522
+			if (method_exists($this, $this->_current_route . '_' . $hook)) {
523
+				if (isset($this->_wp_action_filters_priority[ $hook ])) {
524
+					$args['priority'] = $this->_wp_action_filters_priority[ $hook ];
525
+				}
526
+				if ($args['type'] == 'action') {
527
+					add_action(
528
+						$hook,
529
+						array($this, $this->_current_route . '_' . $hook),
530
+						$args['priority'],
531
+						$args['argnum']
532
+					);
533
+				} else {
534
+					add_filter(
535
+						$hook,
536
+						array($this, $this->_current_route . '_' . $hook),
537
+						$args['priority'],
538
+						$args['argnum']
539
+					);
540
+				}
541
+			}
542
+		}
543
+	}
544
+
545
+
546
+	/**
547
+	 * Loop throught the $_ajax_func array and add_actions for the array.
548
+	 *
549
+	 * @return void
550
+	 */
551
+	private function _ajax_hooks()
552
+	{
553
+		if (empty($this->_ajax_func)) {
554
+			return;
555
+		} //get out there's nothing to take care of.
556
+		foreach ($this->_ajax_func as $action => $method) {
557
+			// make sure method exists
558
+			if (! method_exists($this, $method)) {
559
+				$msg[] = __(
560
+					'There is no corresponding method for the hook labeled in the _ajax_func array',
561
+					'event_espresso'
562
+				) . '<br />';
563
+				$msg[] = sprintf(
564
+					__(
565
+						'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
566
+						'event_espresso'
567
+					),
568
+					$method,
569
+					$this->caller
570
+				);
571
+				throw new EE_Error(implode('||', $msg));
572
+			}
573
+			add_action('wp_ajax_' . $action, array($this, $method));
574
+		}
575
+	}
576
+
577
+
578
+	/**
579
+	 * Loop throught the $_init_func array and add_actions for the array.
580
+	 *
581
+	 * @return void
582
+	 */
583
+	protected function _init_hooks()
584
+	{
585
+		if (empty($this->_init_func)) {
586
+			return;
587
+		} //get out there's nothing to take care of.
588
+		// We need to determine what page_route we are on!
589
+		$current_route = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'default';
590
+		foreach ($this->_init_func as $route => $method) {
591
+			// make sure method exists
592
+			if (! method_exists($this, $method)) {
593
+				$msg[] = __(
594
+					'There is no corresponding method for the hook labeled in the _init_func array',
595
+					'event_espresso'
596
+				) . '<br />';
597
+				$msg[] = sprintf(
598
+					__(
599
+						'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
600
+						'event_espresso'
601
+					),
602
+					$method,
603
+					$this->caller
604
+				);
605
+				throw new EE_Error(implode('||', $msg));
606
+			}
607
+			if ($route == $this->_current_route) {
608
+				add_action('admin_init', array($this, $method));
609
+			}
610
+		}
611
+	}
612
+
613
+
614
+	/**
615
+	 * Loop through the _metaboxes property and add_metaboxes accordingly
616
+	 * //todo we could eventually make this a config component class (i.e. new EE_Metabox);
617
+	 *
618
+	 * @access public
619
+	 * @return void
620
+	 */
621
+	public function add_metaboxes()
622
+	{
623
+		if (empty($this->_metaboxes)) {
624
+			return;
625
+		} //get out we don't have any metaboxes to set for this connection
626
+		$this->_handle_metabox_array($this->_metaboxes);
627
+	}
628
+
629
+
630
+	private function _handle_metabox_array($boxes, $add = true)
631
+	{
632
+		foreach ($boxes as $box) {
633
+			if (! isset($box['page_route'])) {
634
+				continue;
635
+			} //we dont' have a valid array
636
+			// let's make sure $box['page_route'] is an array so the "foreach" will work.
637
+			$box['page_route'] = (array) $box['page_route'];
638
+			foreach ($box['page_route'] as $route) {
639
+				if ($route != $this->_current_route) {
640
+					continue;
641
+				} //get out we only add metaboxes for set route.
642
+				if ($add) {
643
+					$this->_add_metabox($box);
644
+				} else {
645
+					$this->_remove_metabox($box);
646
+				}
647
+			}
648
+		}
649
+	}
650
+
651
+
652
+	/**
653
+	 * Loop through the _remove_metaboxes property and remove metaboxes accordingly.
654
+	 *
655
+	 * @access public
656
+	 * @return void
657
+	 */
658
+	public function remove_metaboxes()
659
+	{
660
+		if (empty($this->_remove_metaboxes)) {
661
+			return;
662
+		} //get out there are no metaboxes to remove
663
+		$this->_handle_metabox_array($this->_remove_metaboxes, false);
664
+	}
665
+
666
+
667
+	/**
668
+	 * This just handles adding a metabox
669
+	 *
670
+	 * @access private
671
+	 * @param array $args an array of args that have been set for this metabox by the child class
672
+	 */
673
+	private function _add_metabox($args)
674
+	{
675
+		$current_screen = get_current_screen();
676
+		$screen_id = is_object($current_screen) ? $current_screen->id : null;
677
+		$func = isset($args['func']) ? $args['func'] : 'some_invalid_callback';
678
+		// set defaults
679
+		$defaults = array(
680
+			'func'          => $func,
681
+			'id'            => $this->caller . '_' . $func . '_metabox',
682
+			'priority'      => 'default',
683
+			'label'         => $this->caller,
684
+			'context'       => 'advanced',
685
+			'callback_args' => array(),
686
+			'page'          => isset($args['page']) ? $args['page'] : $screen_id,
687
+		);
688
+		$args = wp_parse_args($args, $defaults);
689
+		extract($args);
690
+		// make sure method exists
691
+		if (! method_exists($this, $func)) {
692
+			$msg[] = __('There is no corresponding method to display the metabox content', 'event_espresso') . '<br />';
693
+			$msg[] = sprintf(
694
+				__(
695
+					'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
696
+					'event_espresso'
697
+				),
698
+				$func,
699
+				$this->caller
700
+			);
701
+			throw new EE_Error(implode('||', $msg));
702
+		}
703
+		// everything checks out so lets add the metabox
704
+		add_meta_box($id, $label, array($this, $func), $page, $context, $priority, $callback_args);
705
+	}
706
+
707
+
708
+	private function _remove_metabox($args)
709
+	{
710
+		$current_screen = get_current_screen();
711
+		$screen_id = is_object($current_screen) ? $current_screen->id : null;
712
+		$func = isset($args['func']) ? $args['func'] : 'some_invalid_callback';
713
+		// set defaults
714
+		$defaults = array(
715
+			'id'      => isset($args['id'])
716
+				? $args['id']
717
+				: $this->_current_route
718
+				  . '_'
719
+				  . $this->caller
720
+				  . '_'
721
+				  . $func
722
+				  . '_metabox',
723
+			'context' => 'default',
724
+			'screen'  => isset($args['screen']) ? $args['screen'] : $screen_id,
725
+		);
726
+		$args = wp_parse_args($args, $defaults);
727
+		extract($args);
728
+		// everything checks out so lets remove the box!
729
+		remove_meta_box($id, $screen, $context);
730
+	}
731 731
 }
Please login to merge, or discard this patch.
Spacing   +40 added lines, -40 removed lines patch added patch discarded remove patch
@@ -256,9 +256,9 @@  discard block
 block discarded – undo
256 256
      */
257 257
     public function enqueue_scripts_styles()
258 258
     {
259
-        if (! empty($this->_scripts_styles)) {
259
+        if ( ! empty($this->_scripts_styles)) {
260 260
             // first let's do all the registrations
261
-            if (! isset($this->_scripts_styles['registers'])) {
261
+            if ( ! isset($this->_scripts_styles['registers'])) {
262 262
                 $msg[] = __(
263 263
                     'There is no "registers" index in the <code>$this->_scripts_styles</code> property.',
264 264
                     'event_espresso'
@@ -268,7 +268,7 @@  discard block
 block discarded – undo
268 268
                         'Make sure you read the phpdoc comments above the definition of the $_scripts_styles property in the <code>EE_Admin_Hooks</code> class and modify according in the %s child',
269 269
                         'event_espresso'
270 270
                     ),
271
-                    '<strong>' . $this->caller . '</strong>'
271
+                    '<strong>'.$this->caller.'</strong>'
272 272
                 );
273 273
                 throw new EE_Error(implode('||', $msg));
274 274
             }
@@ -283,7 +283,7 @@  discard block
 block discarded – undo
283 283
                 $details = wp_parse_args($details, $defaults);
284 284
                 extract($details);
285 285
                 // let's make sure that we set the 'registers' type if it's not set! We need it later to determine whhich enqueu we do
286
-                $this->_scripts_styles['registers'][ $ref ]['type'] = $type;
286
+                $this->_scripts_styles['registers'][$ref]['type'] = $type;
287 287
                 // let's make sure we're not missing any REQUIRED parameters
288 288
                 if (empty($url)) {
289 289
                     $msg[] = sprintf(
@@ -295,7 +295,7 @@  discard block
 block discarded – undo
295 295
                             'Doublecheck your <code>$this->_scripts_styles</code> array in %s and make sure that there is a "url" set for the %s ref',
296 296
                             'event_espresso'
297 297
                         ),
298
-                        '<strong>' . $this->caller . '</strong>',
298
+                        '<strong>'.$this->caller.'</strong>',
299 299
                         $ref
300 300
                     );
301 301
                     throw new EE_Error(implode('||', $msg));
@@ -311,7 +311,7 @@  discard block
 block discarded – undo
311 311
                     );
312 312
             }
313 313
             // k now lets do the enqueues
314
-            if (! isset($this->_scripts_styles['enqueues'])) {
314
+            if ( ! isset($this->_scripts_styles['enqueues'])) {
315 315
                 return;
316 316
             }  //not sure if we should throw an error here or not.
317 317
 
@@ -319,22 +319,22 @@  discard block
 block discarded – undo
319 319
                 // make sure $routes is an array
320 320
                 $routes = (array) $routes;
321 321
                 if (in_array($this->_current_route, $routes)) {
322
-                    $this->_scripts_styles['registers'][ $ref ]['type'] == 'js' ? wp_enqueue_script($ref)
322
+                    $this->_scripts_styles['registers'][$ref]['type'] == 'js' ? wp_enqueue_script($ref)
323 323
                         : wp_enqueue_style($ref);
324 324
                     // if we have a localization for the script let's do that too.
325
-                    if (isset($this->_scripts_styles['localize'][ $ref ])) {
326
-                        foreach ($this->_scripts_styles['localize'][ $ref ] as $object_name => $indexes) {
325
+                    if (isset($this->_scripts_styles['localize'][$ref])) {
326
+                        foreach ($this->_scripts_styles['localize'][$ref] as $object_name => $indexes) {
327 327
                             wp_localize_script(
328 328
                                 $ref,
329 329
                                 $object_name,
330
-                                $this->_scripts_styles['localize'][ $ref ][ $object_name ]
330
+                                $this->_scripts_styles['localize'][$ref][$object_name]
331 331
                             );
332 332
                         }
333 333
                     }
334 334
                 }
335 335
             }
336 336
             // let's do the deregisters
337
-            if (! isset($this->_scripts_styles['deregisters'])) {
337
+            if ( ! isset($this->_scripts_styles['deregisters'])) {
338 338
                 return;
339 339
             }
340 340
             foreach ($this->_scripts_styles['deregisters'] as $ref => $details) {
@@ -396,20 +396,20 @@  discard block
 block discarded – undo
396 396
             throw new EE_Error(implode('||', $msg));
397 397
         }
398 398
         $ref = str_replace('_', ' ', $this->_name); // take the_message -> the message
399
-        $ref = str_replace(' ', '_', ucwords($ref)) . '_Admin_Page'; // take the message -> The_Message
399
+        $ref = str_replace(' ', '_', ucwords($ref)).'_Admin_Page'; // take the message -> The_Message
400 400
         // first default file (if exists)
401
-        $decaf_file = EE_ADMIN_PAGES . $this->_name . '/' . $ref . '.core.php';
401
+        $decaf_file = EE_ADMIN_PAGES.$this->_name.'/'.$ref.'.core.php';
402 402
         if (is_readable($decaf_file)) {
403 403
             require_once($decaf_file);
404 404
         }
405 405
         // now we have to do require for extended file (if needed)
406 406
         if ($this->_extend) {
407
-            require_once(EE_CORE_CAF_ADMIN_EXTEND . $this->_name . '/Extend_' . $ref . '.core.php');
407
+            require_once(EE_CORE_CAF_ADMIN_EXTEND.$this->_name.'/Extend_'.$ref.'.core.php');
408 408
         }
409 409
         // if we've got an extended class we use that!
410
-        $ref = $this->_extend ? 'Extend_' . $ref : $ref;
410
+        $ref = $this->_extend ? 'Extend_'.$ref : $ref;
411 411
         // let's make sure the class exists
412
-        if (! class_exists($ref)) {
412
+        if ( ! class_exists($ref)) {
413 413
             $msg[] = __('We can\'t load the page object', 'event_espresso');
414 414
             $msg[] = sprintf(
415 415
                 __(
@@ -451,28 +451,28 @@  discard block
 block discarded – undo
451 451
         // first the actions
452 452
         // note that these action hooks will have the $query_args value available.
453 453
         $admin_class_name = get_class($this->_adminpage_obj);
454
-        if (method_exists($this, '_redirect_action_early_' . $this->_current_route)) {
454
+        if (method_exists($this, '_redirect_action_early_'.$this->_current_route)) {
455 455
             add_action(
456 456
                 'AHEE__'
457 457
                 . $admin_class_name
458 458
                 . '___redirect_after_action__before_redirect_modification_'
459 459
                 . $this->_current_route,
460
-                array($this, '_redirect_action_early_' . $this->_current_route),
460
+                array($this, '_redirect_action_early_'.$this->_current_route),
461 461
                 10
462 462
             );
463 463
         }
464
-        if (method_exists($this, '_redirect_action_' . $this->_current_route)) {
464
+        if (method_exists($this, '_redirect_action_'.$this->_current_route)) {
465 465
             add_action(
466
-                'AHEE_redirect_' . $admin_class_name . $this->_current_route,
467
-                array($this, '_redirect_action_' . $this->_current_route),
466
+                'AHEE_redirect_'.$admin_class_name.$this->_current_route,
467
+                array($this, '_redirect_action_'.$this->_current_route),
468 468
                 10
469 469
             );
470 470
         }
471 471
         // let's hook into the _redirect itself and allow for changing where the user goes after redirect.  This will have $query_args and $redirect_url available.
472
-        if (method_exists($this, '_redirect_filter_' . $this->_current_route)) {
472
+        if (method_exists($this, '_redirect_filter_'.$this->_current_route)) {
473 473
             add_filter(
474
-                'FHEE_redirect_' . $admin_class_name . $this->_current_route,
475
-                array($this, '_redirect_filter_' . $this->_current_route),
474
+                'FHEE_redirect_'.$admin_class_name.$this->_current_route,
475
+                array($this, '_redirect_filter_'.$this->_current_route),
476 476
                 10,
477 477
                 2
478 478
             );
@@ -497,12 +497,12 @@  discard block
 block discarded – undo
497 497
                 'argnum'   => 1,
498 498
                 'priority' => 10,
499 499
             ),
500
-            'FHEE_list_table_views_' . $this->_adminpage_obj->page_slug . '_' . $this->_current_route => array(
500
+            'FHEE_list_table_views_'.$this->_adminpage_obj->page_slug.'_'.$this->_current_route => array(
501 501
                 'type'     => 'filter',
502 502
                 'argnum'   => 1,
503 503
                 'priority' => 10,
504 504
             ),
505
-            'FHEE_list_table_views_' . $this->_adminpage_obj->page_slug                               => array(
505
+            'FHEE_list_table_views_'.$this->_adminpage_obj->page_slug                               => array(
506 506
                 'type'     => 'filter',
507 507
                 'argnum'   => 1,
508 508
                 'priority' => 10,
@@ -519,21 +519,21 @@  discard block
 block discarded – undo
519 519
             ),
520 520
         );
521 521
         foreach ($hook_filter_array as $hook => $args) {
522
-            if (method_exists($this, $this->_current_route . '_' . $hook)) {
523
-                if (isset($this->_wp_action_filters_priority[ $hook ])) {
524
-                    $args['priority'] = $this->_wp_action_filters_priority[ $hook ];
522
+            if (method_exists($this, $this->_current_route.'_'.$hook)) {
523
+                if (isset($this->_wp_action_filters_priority[$hook])) {
524
+                    $args['priority'] = $this->_wp_action_filters_priority[$hook];
525 525
                 }
526 526
                 if ($args['type'] == 'action') {
527 527
                     add_action(
528 528
                         $hook,
529
-                        array($this, $this->_current_route . '_' . $hook),
529
+                        array($this, $this->_current_route.'_'.$hook),
530 530
                         $args['priority'],
531 531
                         $args['argnum']
532 532
                     );
533 533
                 } else {
534 534
                     add_filter(
535 535
                         $hook,
536
-                        array($this, $this->_current_route . '_' . $hook),
536
+                        array($this, $this->_current_route.'_'.$hook),
537 537
                         $args['priority'],
538 538
                         $args['argnum']
539 539
                     );
@@ -555,11 +555,11 @@  discard block
 block discarded – undo
555 555
         } //get out there's nothing to take care of.
556 556
         foreach ($this->_ajax_func as $action => $method) {
557 557
             // make sure method exists
558
-            if (! method_exists($this, $method)) {
558
+            if ( ! method_exists($this, $method)) {
559 559
                 $msg[] = __(
560 560
                     'There is no corresponding method for the hook labeled in the _ajax_func array',
561 561
                     'event_espresso'
562
-                ) . '<br />';
562
+                ).'<br />';
563 563
                 $msg[] = sprintf(
564 564
                     __(
565 565
                         'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
@@ -570,7 +570,7 @@  discard block
 block discarded – undo
570 570
                 );
571 571
                 throw new EE_Error(implode('||', $msg));
572 572
             }
573
-            add_action('wp_ajax_' . $action, array($this, $method));
573
+            add_action('wp_ajax_'.$action, array($this, $method));
574 574
         }
575 575
     }
576 576
 
@@ -589,11 +589,11 @@  discard block
 block discarded – undo
589 589
         $current_route = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'default';
590 590
         foreach ($this->_init_func as $route => $method) {
591 591
             // make sure method exists
592
-            if (! method_exists($this, $method)) {
592
+            if ( ! method_exists($this, $method)) {
593 593
                 $msg[] = __(
594 594
                     'There is no corresponding method for the hook labeled in the _init_func array',
595 595
                     'event_espresso'
596
-                ) . '<br />';
596
+                ).'<br />';
597 597
                 $msg[] = sprintf(
598 598
                     __(
599 599
                         'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
@@ -630,7 +630,7 @@  discard block
 block discarded – undo
630 630
     private function _handle_metabox_array($boxes, $add = true)
631 631
     {
632 632
         foreach ($boxes as $box) {
633
-            if (! isset($box['page_route'])) {
633
+            if ( ! isset($box['page_route'])) {
634 634
                 continue;
635 635
             } //we dont' have a valid array
636 636
             // let's make sure $box['page_route'] is an array so the "foreach" will work.
@@ -678,7 +678,7 @@  discard block
 block discarded – undo
678 678
         // set defaults
679 679
         $defaults = array(
680 680
             'func'          => $func,
681
-            'id'            => $this->caller . '_' . $func . '_metabox',
681
+            'id'            => $this->caller.'_'.$func.'_metabox',
682 682
             'priority'      => 'default',
683 683
             'label'         => $this->caller,
684 684
             'context'       => 'advanced',
@@ -688,8 +688,8 @@  discard block
 block discarded – undo
688 688
         $args = wp_parse_args($args, $defaults);
689 689
         extract($args);
690 690
         // make sure method exists
691
-        if (! method_exists($this, $func)) {
692
-            $msg[] = __('There is no corresponding method to display the metabox content', 'event_espresso') . '<br />';
691
+        if ( ! method_exists($this, $func)) {
692
+            $msg[] = __('There is no corresponding method to display the metabox content', 'event_espresso').'<br />';
693 693
             $msg[] = sprintf(
694 694
                 __(
695 695
                     'The method name given in the array is %s, check the spelling and make sure it exists in the %s class',
Please login to merge, or discard this patch.