Completed
Branch Gutenberg/switch-eventespresso... (7adb18)
by
unknown
16:22 queued 14:31
created
modules/ticket_selector/DisplayTicketSelector.php 2 patches
Indentation   +710 added lines, -710 removed lines patch added patch discarded remove patch
@@ -33,717 +33,717 @@
 block discarded – undo
33 33
 class DisplayTicketSelector
34 34
 {
35 35
 
36
-    /**
37
-     * event that ticket selector is being generated for
38
-     *
39
-     * @access protected
40
-     * @var EE_Event $event
41
-     */
42
-    protected $event;
43
-
44
-    /**
45
-     * Used to flag when the ticket selector is being called from an external iframe.
46
-     *
47
-     * @var bool $iframe
48
-     */
49
-    protected $iframe = false;
50
-
51
-    /**
52
-     * max attendees that can register for event at one time
53
-     *
54
-     * @var int $max_attendees
55
-     */
56
-    private $max_attendees = EE_INF;
57
-
58
-    /**
59
-     * @var string $date_format
60
-     */
61
-    private $date_format;
62
-
63
-    /**
64
-     * @var string $time_format
65
-     */
66
-    private $time_format;
67
-
68
-    /**
69
-     * @var boolean $display_full_ui
70
-     */
71
-    private $display_full_ui;
72
-
73
-
74
-    /**
75
-     * DisplayTicketSelector constructor.
76
-     *
77
-     * @param bool $iframe
78
-     */
79
-    public function __construct($iframe = false)
80
-    {
81
-        $this->iframe = $iframe;
82
-        $this->date_format = apply_filters(
83
-            'FHEE__EED_Ticket_Selector__display_ticket_selector__date_format',
84
-            get_option('date_format')
85
-        );
86
-        $this->time_format = apply_filters(
87
-            'FHEE__EED_Ticket_Selector__display_ticket_selector__time_format',
88
-            get_option('time_format')
89
-        );
90
-    }
91
-
92
-
93
-    /**
94
-     * @return bool
95
-     */
96
-    public function isIframe()
97
-    {
98
-        return $this->iframe;
99
-    }
100
-
101
-
102
-    /**
103
-     * @param boolean $iframe
104
-     */
105
-    public function setIframe($iframe = true)
106
-    {
107
-        $this->iframe = filter_var($iframe, FILTER_VALIDATE_BOOLEAN);
108
-    }
109
-
110
-
111
-    /**
112
-     * finds and sets the \EE_Event object for use throughout class
113
-     *
114
-     * @param mixed $event
115
-     * @return bool
116
-     * @throws EE_Error
117
-     * @throws InvalidDataTypeException
118
-     * @throws InvalidInterfaceException
119
-     * @throws InvalidArgumentException
120
-     */
121
-    protected function setEvent($event = null)
122
-    {
123
-        if ($event === null) {
124
-            global $post;
125
-            $event = $post;
126
-        }
127
-        if ($event instanceof EE_Event) {
128
-            $this->event = $event;
129
-        } elseif ($event instanceof WP_Post) {
130
-            if (isset($event->EE_Event) && $event->EE_Event instanceof EE_Event) {
131
-                $this->event = $event->EE_Event;
132
-            } elseif ($event->post_type === 'espresso_events') {
133
-                $event->EE_Event = EEM_Event::instance()->instantiate_class_from_post_object($event);
134
-                $this->event = $event->EE_Event;
135
-            }
136
-        } else {
137
-            $user_msg = __('No Event object or an invalid Event object was supplied.', 'event_espresso');
138
-            $dev_msg = $user_msg . __(
139
-                'In order to generate a ticket selector, please ensure you are passing either an EE_Event object or a WP_Post object of the post type "espresso_event" to the EE_Ticket_Selector class constructor.',
140
-                'event_espresso'
141
-            );
142
-            EE_Error::add_error($user_msg . '||' . $dev_msg, __FILE__, __FUNCTION__, __LINE__);
143
-            return false;
144
-        }
145
-        return true;
146
-    }
147
-
148
-
149
-    /**
150
-     * @return int
151
-     */
152
-    public function getMaxAttendees()
153
-    {
154
-        return $this->max_attendees;
155
-    }
156
-
157
-
158
-    /**
159
-     * @param int $max_attendees
160
-     */
161
-    public function setMaxAttendees($max_attendees)
162
-    {
163
-        $this->max_attendees = absint(
164
-            apply_filters(
165
-                'FHEE__EE_Ticket_Selector__display_ticket_selector__max_tickets',
166
-                $max_attendees
167
-            )
168
-        );
169
-    }
170
-
171
-
172
-    /**
173
-     * Returns whether or not the full ticket selector should be shown or not.
174
-     * Currently, it displays on the frontend (including ajax requests) but not the backend
175
-     *
176
-     * @return bool
177
-     */
178
-    private function display_full_ui()
179
-    {
180
-        if ($this->display_full_ui === null) {
181
-            $this->display_full_ui = ! is_admin() || (defined('DOING_AJAX') && DOING_AJAX);
182
-        }
183
-        return $this->display_full_ui;
184
-    }
185
-
186
-
187
-    /**
188
-     * creates buttons for selecting number of attendees for an event
189
-     *
190
-     * @param WP_Post|int $event
191
-     * @param bool        $view_details
192
-     * @return string
193
-     * @throws EE_Error
194
-     * @throws InvalidArgumentException
195
-     * @throws InvalidDataTypeException
196
-     * @throws InvalidInterfaceException
197
-     */
198
-    public function display($event = null, $view_details = false)
199
-    {
200
-        // reset filter for displaying submit button
201
-        remove_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
202
-        // poke and prod incoming event till it tells us what it is
203
-        if (! $this->setEvent($event)) {
204
-            return false;
205
-        }
206
-        // begin gathering template arguments by getting event status
207
-        $template_args = array('event_status' => $this->event->get_active_status());
208
-        if ($this->activeEventAndShowTicketSelector(
209
-            $event,
210
-            $template_args['event_status'],
211
-            $view_details
212
-        )) {
213
-            return ! is_single() ? $this->displayViewDetailsButton() : '';
214
-        }
215
-        // filter the maximum qty that can appear in the Ticket Selector qty dropdowns
216
-        $this->setMaxAttendees($this->event->additional_limit());
217
-        if ($this->getMaxAttendees() < 1) {
218
-            return $this->ticketSalesClosedMessage();
219
-        }
220
-        // is the event expired ?
221
-        $template_args['event_is_expired'] = $this->event->is_expired();
222
-        if ($template_args['event_is_expired']) {
223
-            return $this->expiredEventMessage();
224
-        }
225
-        // get all tickets for this event ordered by the datetime
226
-        $tickets = $this->getTickets();
227
-        if (count($tickets) < 1) {
228
-            return $this->noTicketAvailableMessage();
229
-        }
230
-        // redirecting to another site for registration ??
231
-        $external_url = (string) $this->event->external_url();
232
-        // if redirecting to another site for registration, then we don't load the TS
233
-        $ticket_selector = $external_url
234
-            ? $this->externalEventRegistration()
235
-            : $this->loadTicketSelector($tickets, $template_args);
236
-        // now set up the form (but not for the admin)
237
-        $ticket_selector = $this->display_full_ui()
238
-            ? $this->formOpen($this->event->ID(), $external_url) . $ticket_selector
239
-            : $ticket_selector;
240
-        // submit button and form close tag
241
-        $ticket_selector .= $this->display_full_ui() ? $this->displaySubmitButton($external_url) : '';
242
-        return $ticket_selector;
243
-    }
244
-
245
-
246
-    /**
247
-     * displayTicketSelector
248
-     * examines the event properties and determines whether a Ticket Selector should be displayed
249
-     *
250
-     * @param WP_Post|int $event
251
-     * @param string      $_event_active_status
252
-     * @param bool        $view_details
253
-     * @return bool
254
-     * @throws EE_Error
255
-     */
256
-    protected function activeEventAndShowTicketSelector($event, $_event_active_status, $view_details)
257
-    {
258
-        $event_post = $this->event instanceof EE_Event ? $this->event->ID() : $event;
259
-        return $this->display_full_ui()
260
-               && (
261
-                   ! $this->event->display_ticket_selector()
262
-                   || $view_details
263
-                   || post_password_required($event_post)
264
-                   || (
265
-                       $_event_active_status !== EE_Datetime::active
266
-                       && $_event_active_status !== EE_Datetime::upcoming
267
-                       && $_event_active_status !== EE_Datetime::sold_out
268
-                       && ! (
269
-                           $_event_active_status === EE_Datetime::inactive
270
-                           && is_user_logged_in()
271
-                       )
272
-                   )
273
-               );
274
-    }
275
-
276
-
277
-    /**
278
-     * noTicketAvailableMessage
279
-     * notice displayed if event is expired
280
-     *
281
-     * @return string
282
-     * @throws EE_Error
283
-     */
284
-    protected function expiredEventMessage()
285
-    {
286
-        return '<div class="ee-event-expired-notice"><span class="important-notice">' . esc_html__(
287
-            'We\'re sorry, but all tickets sales have ended because the event is expired.',
288
-            'event_espresso'
289
-        ) . '</span></div><!-- .ee-event-expired-notice -->';
290
-    }
291
-
292
-
293
-    /**
294
-     * noTicketAvailableMessage
295
-     * notice displayed if event has no more tickets available
296
-     *
297
-     * @return string
298
-     * @throws EE_Error
299
-     */
300
-    protected function noTicketAvailableMessage()
301
-    {
302
-        $no_ticket_available_msg = esc_html__('We\'re sorry, but all ticket sales have ended.', 'event_espresso');
303
-        if (current_user_can('edit_post', $this->event->ID())) {
304
-            $no_ticket_available_msg .= sprintf(
305
-                esc_html__(
306
-                    '%1$sNote to Event Admin:%2$sNo tickets were found for this event. This effectively turns off ticket sales. Please ensure that at least one ticket is available for if you want people to be able to register.%3$s(click to edit this event)%4$s',
307
-                    'event_espresso'
308
-                ),
309
-                '<div class="ee-attention" style="text-align: left;"><b>',
310
-                '</b><br />',
311
-                '<span class="edit-link"><a class="post-edit-link" href="'
312
-                . get_edit_post_link($this->event->ID())
313
-                . '">',
314
-                '</a></span></div><!-- .ee-attention noTicketAvailableMessage -->'
315
-            );
316
-        }
317
-        return '
36
+	/**
37
+	 * event that ticket selector is being generated for
38
+	 *
39
+	 * @access protected
40
+	 * @var EE_Event $event
41
+	 */
42
+	protected $event;
43
+
44
+	/**
45
+	 * Used to flag when the ticket selector is being called from an external iframe.
46
+	 *
47
+	 * @var bool $iframe
48
+	 */
49
+	protected $iframe = false;
50
+
51
+	/**
52
+	 * max attendees that can register for event at one time
53
+	 *
54
+	 * @var int $max_attendees
55
+	 */
56
+	private $max_attendees = EE_INF;
57
+
58
+	/**
59
+	 * @var string $date_format
60
+	 */
61
+	private $date_format;
62
+
63
+	/**
64
+	 * @var string $time_format
65
+	 */
66
+	private $time_format;
67
+
68
+	/**
69
+	 * @var boolean $display_full_ui
70
+	 */
71
+	private $display_full_ui;
72
+
73
+
74
+	/**
75
+	 * DisplayTicketSelector constructor.
76
+	 *
77
+	 * @param bool $iframe
78
+	 */
79
+	public function __construct($iframe = false)
80
+	{
81
+		$this->iframe = $iframe;
82
+		$this->date_format = apply_filters(
83
+			'FHEE__EED_Ticket_Selector__display_ticket_selector__date_format',
84
+			get_option('date_format')
85
+		);
86
+		$this->time_format = apply_filters(
87
+			'FHEE__EED_Ticket_Selector__display_ticket_selector__time_format',
88
+			get_option('time_format')
89
+		);
90
+	}
91
+
92
+
93
+	/**
94
+	 * @return bool
95
+	 */
96
+	public function isIframe()
97
+	{
98
+		return $this->iframe;
99
+	}
100
+
101
+
102
+	/**
103
+	 * @param boolean $iframe
104
+	 */
105
+	public function setIframe($iframe = true)
106
+	{
107
+		$this->iframe = filter_var($iframe, FILTER_VALIDATE_BOOLEAN);
108
+	}
109
+
110
+
111
+	/**
112
+	 * finds and sets the \EE_Event object for use throughout class
113
+	 *
114
+	 * @param mixed $event
115
+	 * @return bool
116
+	 * @throws EE_Error
117
+	 * @throws InvalidDataTypeException
118
+	 * @throws InvalidInterfaceException
119
+	 * @throws InvalidArgumentException
120
+	 */
121
+	protected function setEvent($event = null)
122
+	{
123
+		if ($event === null) {
124
+			global $post;
125
+			$event = $post;
126
+		}
127
+		if ($event instanceof EE_Event) {
128
+			$this->event = $event;
129
+		} elseif ($event instanceof WP_Post) {
130
+			if (isset($event->EE_Event) && $event->EE_Event instanceof EE_Event) {
131
+				$this->event = $event->EE_Event;
132
+			} elseif ($event->post_type === 'espresso_events') {
133
+				$event->EE_Event = EEM_Event::instance()->instantiate_class_from_post_object($event);
134
+				$this->event = $event->EE_Event;
135
+			}
136
+		} else {
137
+			$user_msg = __('No Event object or an invalid Event object was supplied.', 'event_espresso');
138
+			$dev_msg = $user_msg . __(
139
+				'In order to generate a ticket selector, please ensure you are passing either an EE_Event object or a WP_Post object of the post type "espresso_event" to the EE_Ticket_Selector class constructor.',
140
+				'event_espresso'
141
+			);
142
+			EE_Error::add_error($user_msg . '||' . $dev_msg, __FILE__, __FUNCTION__, __LINE__);
143
+			return false;
144
+		}
145
+		return true;
146
+	}
147
+
148
+
149
+	/**
150
+	 * @return int
151
+	 */
152
+	public function getMaxAttendees()
153
+	{
154
+		return $this->max_attendees;
155
+	}
156
+
157
+
158
+	/**
159
+	 * @param int $max_attendees
160
+	 */
161
+	public function setMaxAttendees($max_attendees)
162
+	{
163
+		$this->max_attendees = absint(
164
+			apply_filters(
165
+				'FHEE__EE_Ticket_Selector__display_ticket_selector__max_tickets',
166
+				$max_attendees
167
+			)
168
+		);
169
+	}
170
+
171
+
172
+	/**
173
+	 * Returns whether or not the full ticket selector should be shown or not.
174
+	 * Currently, it displays on the frontend (including ajax requests) but not the backend
175
+	 *
176
+	 * @return bool
177
+	 */
178
+	private function display_full_ui()
179
+	{
180
+		if ($this->display_full_ui === null) {
181
+			$this->display_full_ui = ! is_admin() || (defined('DOING_AJAX') && DOING_AJAX);
182
+		}
183
+		return $this->display_full_ui;
184
+	}
185
+
186
+
187
+	/**
188
+	 * creates buttons for selecting number of attendees for an event
189
+	 *
190
+	 * @param WP_Post|int $event
191
+	 * @param bool        $view_details
192
+	 * @return string
193
+	 * @throws EE_Error
194
+	 * @throws InvalidArgumentException
195
+	 * @throws InvalidDataTypeException
196
+	 * @throws InvalidInterfaceException
197
+	 */
198
+	public function display($event = null, $view_details = false)
199
+	{
200
+		// reset filter for displaying submit button
201
+		remove_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
202
+		// poke and prod incoming event till it tells us what it is
203
+		if (! $this->setEvent($event)) {
204
+			return false;
205
+		}
206
+		// begin gathering template arguments by getting event status
207
+		$template_args = array('event_status' => $this->event->get_active_status());
208
+		if ($this->activeEventAndShowTicketSelector(
209
+			$event,
210
+			$template_args['event_status'],
211
+			$view_details
212
+		)) {
213
+			return ! is_single() ? $this->displayViewDetailsButton() : '';
214
+		}
215
+		// filter the maximum qty that can appear in the Ticket Selector qty dropdowns
216
+		$this->setMaxAttendees($this->event->additional_limit());
217
+		if ($this->getMaxAttendees() < 1) {
218
+			return $this->ticketSalesClosedMessage();
219
+		}
220
+		// is the event expired ?
221
+		$template_args['event_is_expired'] = $this->event->is_expired();
222
+		if ($template_args['event_is_expired']) {
223
+			return $this->expiredEventMessage();
224
+		}
225
+		// get all tickets for this event ordered by the datetime
226
+		$tickets = $this->getTickets();
227
+		if (count($tickets) < 1) {
228
+			return $this->noTicketAvailableMessage();
229
+		}
230
+		// redirecting to another site for registration ??
231
+		$external_url = (string) $this->event->external_url();
232
+		// if redirecting to another site for registration, then we don't load the TS
233
+		$ticket_selector = $external_url
234
+			? $this->externalEventRegistration()
235
+			: $this->loadTicketSelector($tickets, $template_args);
236
+		// now set up the form (but not for the admin)
237
+		$ticket_selector = $this->display_full_ui()
238
+			? $this->formOpen($this->event->ID(), $external_url) . $ticket_selector
239
+			: $ticket_selector;
240
+		// submit button and form close tag
241
+		$ticket_selector .= $this->display_full_ui() ? $this->displaySubmitButton($external_url) : '';
242
+		return $ticket_selector;
243
+	}
244
+
245
+
246
+	/**
247
+	 * displayTicketSelector
248
+	 * examines the event properties and determines whether a Ticket Selector should be displayed
249
+	 *
250
+	 * @param WP_Post|int $event
251
+	 * @param string      $_event_active_status
252
+	 * @param bool        $view_details
253
+	 * @return bool
254
+	 * @throws EE_Error
255
+	 */
256
+	protected function activeEventAndShowTicketSelector($event, $_event_active_status, $view_details)
257
+	{
258
+		$event_post = $this->event instanceof EE_Event ? $this->event->ID() : $event;
259
+		return $this->display_full_ui()
260
+			   && (
261
+				   ! $this->event->display_ticket_selector()
262
+				   || $view_details
263
+				   || post_password_required($event_post)
264
+				   || (
265
+					   $_event_active_status !== EE_Datetime::active
266
+					   && $_event_active_status !== EE_Datetime::upcoming
267
+					   && $_event_active_status !== EE_Datetime::sold_out
268
+					   && ! (
269
+						   $_event_active_status === EE_Datetime::inactive
270
+						   && is_user_logged_in()
271
+					   )
272
+				   )
273
+			   );
274
+	}
275
+
276
+
277
+	/**
278
+	 * noTicketAvailableMessage
279
+	 * notice displayed if event is expired
280
+	 *
281
+	 * @return string
282
+	 * @throws EE_Error
283
+	 */
284
+	protected function expiredEventMessage()
285
+	{
286
+		return '<div class="ee-event-expired-notice"><span class="important-notice">' . esc_html__(
287
+			'We\'re sorry, but all tickets sales have ended because the event is expired.',
288
+			'event_espresso'
289
+		) . '</span></div><!-- .ee-event-expired-notice -->';
290
+	}
291
+
292
+
293
+	/**
294
+	 * noTicketAvailableMessage
295
+	 * notice displayed if event has no more tickets available
296
+	 *
297
+	 * @return string
298
+	 * @throws EE_Error
299
+	 */
300
+	protected function noTicketAvailableMessage()
301
+	{
302
+		$no_ticket_available_msg = esc_html__('We\'re sorry, but all ticket sales have ended.', 'event_espresso');
303
+		if (current_user_can('edit_post', $this->event->ID())) {
304
+			$no_ticket_available_msg .= sprintf(
305
+				esc_html__(
306
+					'%1$sNote to Event Admin:%2$sNo tickets were found for this event. This effectively turns off ticket sales. Please ensure that at least one ticket is available for if you want people to be able to register.%3$s(click to edit this event)%4$s',
307
+					'event_espresso'
308
+				),
309
+				'<div class="ee-attention" style="text-align: left;"><b>',
310
+				'</b><br />',
311
+				'<span class="edit-link"><a class="post-edit-link" href="'
312
+				. get_edit_post_link($this->event->ID())
313
+				. '">',
314
+				'</a></span></div><!-- .ee-attention noTicketAvailableMessage -->'
315
+			);
316
+		}
317
+		return '
318 318
             <div class="ee-event-expired-notice">
319 319
                 <span class="important-notice">' . $no_ticket_available_msg . '</span>
320 320
             </div><!-- .ee-event-expired-notice -->';
321
-    }
322
-
323
-
324
-    /**
325
-     * ticketSalesClosed
326
-     * notice displayed if event ticket sales are turned off
327
-     *
328
-     * @return string
329
-     * @throws EE_Error
330
-     */
331
-    protected function ticketSalesClosedMessage()
332
-    {
333
-        $sales_closed_msg = esc_html__(
334
-            'We\'re sorry, but ticket sales have been closed at this time. Please check back again later.',
335
-            'event_espresso'
336
-        );
337
-        if (current_user_can('edit_post', $this->event->ID())) {
338
-            $sales_closed_msg .= sprintf(
339
-                esc_html__(
340
-                    '%sNote to Event Admin:%sThe "Maximum number of tickets allowed per order for this event" in the Event Registration Options has been set to "0". This effectively turns off ticket sales. %s(click to edit this event)%s',
341
-                    'event_espresso'
342
-                ),
343
-                '<div class="ee-attention" style="text-align: left;"><b>',
344
-                '</b><br />',
345
-                '<span class="edit-link"><a class="post-edit-link" href="'
346
-                . get_edit_post_link($this->event->ID())
347
-                . '">',
348
-                '</a></span></div><!-- .ee-attention ticketSalesClosedMessage -->'
349
-            );
350
-        }
351
-        return '<p><span class="important-notice">' . $sales_closed_msg . '</span></p>';
352
-    }
353
-
354
-
355
-    /**
356
-     * getTickets
357
-     *
358
-     * @return \EE_Base_Class[]|\EE_Ticket[]
359
-     * @throws EE_Error
360
-     * @throws InvalidDataTypeException
361
-     * @throws InvalidInterfaceException
362
-     * @throws InvalidArgumentException
363
-     */
364
-    protected function getTickets()
365
-    {
366
-        $ticket_query_args = array(
367
-            array('Datetime.EVT_ID' => $this->event->ID()),
368
-            'order_by' => array(
369
-                'TKT_order'              => 'ASC',
370
-                'TKT_required'           => 'DESC',
371
-                'TKT_start_date'         => 'ASC',
372
-                'TKT_end_date'           => 'ASC',
373
-                'Datetime.DTT_EVT_start' => 'DESC',
374
-            ),
375
-        );
376
-        if (! (
377
-            EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector instanceof EE_Ticket_Selector_Config
378
-            && EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector->show_expired_tickets
379
-        )) {
380
-            // use the correct applicable time query depending on what version of core is being run.
381
-            $current_time = method_exists('EEM_Datetime', 'current_time_for_query')
382
-                ? time()
383
-                : current_time('timestamp');
384
-            $ticket_query_args[0]['TKT_end_date'] = array('>', $current_time);
385
-        }
386
-        return EEM_Ticket::instance()->get_all($ticket_query_args);
387
-    }
388
-
389
-
390
-    /**
391
-     * loadTicketSelector
392
-     * begins to assemble template arguments
393
-     * and decides whether to load a "simple" ticket selector, or the standard
394
-     *
395
-     * @param \EE_Ticket[] $tickets
396
-     * @param array        $template_args
397
-     * @return string
398
-     * @throws EE_Error
399
-     */
400
-    protected function loadTicketSelector(array $tickets, array $template_args)
401
-    {
402
-        $template_args['event'] = $this->event;
403
-        $template_args['EVT_ID'] = $this->event->ID();
404
-        $template_args['event_is_expired'] = $this->event->is_expired();
405
-        $template_args['max_atndz'] = $this->getMaxAttendees();
406
-        $template_args['date_format'] = $this->date_format;
407
-        $template_args['time_format'] = $this->time_format;
408
-        /**
409
-         * Filters the anchor ID used when redirecting to the Ticket Selector if no quantity selected
410
-         *
411
-         * @since 4.9.13
412
-         * @param     string  '#tkt-slctr-tbl-' . $EVT_ID The html ID to anchor to
413
-         * @param int $EVT_ID The Event ID
414
-         */
415
-        $template_args['anchor_id'] = apply_filters(
416
-            'FHEE__EE_Ticket_Selector__redirect_anchor_id',
417
-            '#tkt-slctr-tbl-' . $this->event->ID(),
418
-            $this->event->ID()
419
-        );
420
-        $template_args['tickets'] = $tickets;
421
-        $template_args['ticket_count'] = count($tickets);
422
-        $ticket_selector = $this->simpleTicketSelector($tickets, $template_args);
423
-        return $ticket_selector instanceof TicketSelectorSimple
424
-            ? $ticket_selector
425
-            : new TicketSelectorStandard(
426
-                $this->event,
427
-                $tickets,
428
-                $this->getMaxAttendees(),
429
-                $template_args,
430
-                $this->date_format,
431
-                $this->time_format
432
-            );
433
-    }
434
-
435
-
436
-    /**
437
-     * simpleTicketSelector
438
-     * there's one ticket, and max attendees is set to one,
439
-     * so if the event is free, then this is a "simple" ticket selector
440
-     * a.k.a. "Dude Where's my Ticket Selector?"
441
-     *
442
-     * @param \EE_Ticket[] $tickets
443
-     * @param array        $template_args
444
-     * @return string
445
-     * @throws EE_Error
446
-     */
447
-    protected function simpleTicketSelector($tickets, array $template_args)
448
-    {
449
-        // if there is only ONE ticket with a max qty of ONE
450
-        if (count($tickets) > 1 || $this->getMaxAttendees() !== 1) {
451
-            return '';
452
-        }
453
-        /** @var \EE_Ticket $ticket */
454
-        $ticket = reset($tickets);
455
-        // if the ticket is free... then not much need for the ticket selector
456
-        if (apply_filters(
457
-            'FHEE__ticket_selector_chart_template__hide_ticket_selector',
458
-            $ticket->is_free(),
459
-            $this->event->ID()
460
-        )) {
461
-            return new TicketSelectorSimple(
462
-                $this->event,
463
-                $ticket,
464
-                $this->getMaxAttendees(),
465
-                $template_args
466
-            );
467
-        }
468
-        return '';
469
-    }
470
-
471
-
472
-    /**
473
-     * externalEventRegistration
474
-     *
475
-     * @return string
476
-     */
477
-    public function externalEventRegistration()
478
-    {
479
-        // if not we still need to trigger the display of the submit button
480
-        add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
481
-        // display notice to admin that registration is external
482
-        return $this->display_full_ui()
483
-            ? esc_html__(
484
-                'Registration is at an external URL for this event.',
485
-                'event_espresso'
486
-            )
487
-            : '';
488
-    }
489
-
490
-
491
-    /**
492
-     * formOpen
493
-     *
494
-     * @param        int    $ID
495
-     * @param        string $external_url
496
-     * @return        string
497
-     */
498
-    public function formOpen($ID = 0, $external_url = '')
499
-    {
500
-        // if redirecting, we don't need any anything else
501
-        if ($external_url) {
502
-            $html = '<form method="GET" ';
503
-            $html .= 'action="' . EEH_URL::refactor_url($external_url) . '" ';
504
-            $html .= 'name="ticket-selector-form-' . $ID . '"';
505
-            // open link in new window ?
506
-            $html .= apply_filters(
507
-                'FHEE__EventEspresso_modules_ticket_selector_DisplayTicketSelector__formOpen__external_url_target_blank',
508
-                $this->isIframe(),
509
-                $this
510
-            )
511
-                ? ' target="_blank"'
512
-                : '';
513
-            $html .= '>';
514
-            $query_args = EEH_URL::get_query_string($external_url);
515
-            foreach ((array) $query_args as $query_arg => $value) {
516
-                $html .= '<input type="hidden" name="' . $query_arg . '" value="' . $value . '">';
517
-            }
518
-            return $html;
519
-        }
520
-        // if there is no submit button, then don't start building a form
521
-        // because the "View Details" button will build its own form
522
-        if (! apply_filters('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', false)) {
523
-            return '';
524
-        }
525
-        $checkout_url = EEH_Event_View::event_link_url($ID);
526
-        if (! $checkout_url) {
527
-            EE_Error::add_error(
528
-                esc_html__('The URL for the Event Details page could not be retrieved.', 'event_espresso'),
529
-                __FILE__,
530
-                __FUNCTION__,
531
-                __LINE__
532
-            );
533
-        }
534
-        // set no cache headers and constants
535
-        EE_System::do_not_cache();
536
-        $html = '<form method="POST" ';
537
-        $html .= 'action="' . $checkout_url . '" ';
538
-        $html .= 'name="ticket-selector-form-' . $ID . '"';
539
-        $html .= $this->iframe ? ' target="_blank"' : '';
540
-        $html .= '>';
541
-        $html .= '<input type="hidden" name="ee" value="process_ticket_selections">';
542
-        $html = apply_filters('FHEE__EE_Ticket_Selector__ticket_selector_form_open__html', $html, $this->event);
543
-        return $html;
544
-    }
545
-
546
-
547
-    /**
548
-     * displaySubmitButton
549
-     *
550
-     * @param  string $external_url
551
-     * @return string
552
-     * @throws EE_Error
553
-     */
554
-    public function displaySubmitButton($external_url = '')
555
-    {
556
-        $html = '';
557
-        if ($this->display_full_ui()) {
558
-            // standard TS displayed with submit button, ie: "Register Now"
559
-            if (apply_filters('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', false)) {
560
-                $html .= $this->displayRegisterNowButton();
561
-                $html .= empty($external_url)
562
-                    ? $this->ticketSelectorEndDiv()
563
-                    : $this->clearTicketSelector();
564
-                $html .= '<br/>' . $this->formClose();
565
-            } elseif ($this->getMaxAttendees() === 1) {
566
-                // its a "Dude Where's my Ticket Selector?" (DWMTS) type event (ie: $_max_atndz === 1)
567
-                if ($this->event->is_sold_out()) {
568
-                    // then instead of a View Details or Submit button, just display a "Sold Out" message
569
-                    $html .= apply_filters(
570
-                        'FHEE__EE_Ticket_Selector__display_ticket_selector_submit__sold_out_msg',
571
-                        sprintf(
572
-                            __(
573
-                                '%1$s"%2$s" is currently sold out.%4$sPlease check back again later, as spots may become available.%3$s',
574
-                                'event_espresso'
575
-                            ),
576
-                            '<p class="no-ticket-selector-msg clear-float">',
577
-                            $this->event->name(),
578
-                            '</p>',
579
-                            '<br />'
580
-                        ),
581
-                        $this->event
582
-                    );
583
-                    if (apply_filters(
584
-                        'FHEE__EE_Ticket_Selector__display_ticket_selector_submit__no_tickets_but_display_register_now_button',
585
-                        false,
586
-                        $this->event
587
-                    )) {
588
-                        $html .= $this->displayRegisterNowButton();
589
-                    }
590
-                    // sold out DWMTS event, no TS, no submit or view details button, but has additional content
591
-                    $html .= $this->ticketSelectorEndDiv();
592
-                } elseif (apply_filters('FHEE__EE_Ticket_Selector__hide_ticket_selector', false)
593
-                          && ! is_single()
594
-                ) {
595
-                    // this is a "Dude Where's my Ticket Selector?" (DWMTS) type event,
596
-                    // but no tickets are available, so display event's "View Details" button.
597
-                    // it is being viewed via somewhere other than a single post
598
-                    $html .= $this->displayViewDetailsButton(true);
599
-                } else {
600
-                    $html .= $this->ticketSelectorEndDiv();
601
-                }
602
-            } elseif (is_archive()) {
603
-                // event list, no tickets available so display event's "View Details" button
604
-                $html .= $this->ticketSelectorEndDiv();
605
-                $html .= $this->displayViewDetailsButton();
606
-            } else {
607
-                if (apply_filters(
608
-                    'FHEE__EE_Ticket_Selector__display_ticket_selector_submit__no_tickets_but_display_register_now_button',
609
-                    false,
610
-                    $this->event
611
-                )) {
612
-                    $html .= $this->displayRegisterNowButton();
613
-                }
614
-                // no submit or view details button, and no additional content
615
-                $html .= $this->ticketSelectorEndDiv();
616
-            }
617
-            if (! $this->iframe && ! is_archive()) {
618
-                $html .= EEH_Template::powered_by_event_espresso('', '', array('utm_content' => 'ticket_selector'));
619
-            }
620
-        }
621
-        return apply_filters(
622
-            'FHEE__EventEspresso_modules_ticket_selector_DisplayTicketSelector__displaySubmitButton__html',
623
-            $html,
624
-            $this->event,
625
-            $this
626
-        );
627
-    }
628
-
629
-
630
-    /**
631
-     * @return string
632
-     * @throws EE_Error
633
-     */
634
-    public function displayRegisterNowButton()
635
-    {
636
-        $btn_text = apply_filters(
637
-            'FHEE__EE_Ticket_Selector__display_ticket_selector_submit__btn_text',
638
-            __('Register Now', 'event_espresso'),
639
-            $this->event
640
-        );
641
-        $external_url = $this->event->external_url();
642
-        $html = EEH_HTML::div(
643
-            '',
644
-            'ticket-selector-submit-' . $this->event->ID() . '-btn-wrap',
645
-            'ticket-selector-submit-btn-wrap'
646
-        );
647
-        $html .= '<input id="ticket-selector-submit-' . $this->event->ID() . '-btn"';
648
-        $html .= ' class="ticket-selector-submit-btn ';
649
-        $html .= empty($external_url) ? 'ticket-selector-submit-ajax"' : '"';
650
-        $html .= ' type="submit" value="' . $btn_text . '" />';
651
-        $html .= EEH_HTML::divx() . '<!-- .ticket-selector-submit-btn-wrap -->';
652
-        $html .= apply_filters(
653
-            'FHEE__EE_Ticket_Selector__after_ticket_selector_submit',
654
-            '',
655
-            $this->event,
656
-            $this->iframe
657
-        );
658
-        return $html;
659
-    }
660
-
661
-
662
-    /**
663
-     * displayViewDetailsButton
664
-     *
665
-     * @param bool $DWMTS indicates a "Dude Where's my Ticket Selector?" (DWMTS) type event
666
-     *                    (ie: $_max_atndz === 1) where there are no available tickets,
667
-     *                    either because they are sold out, expired, or not yet on sale.
668
-     *                    In this case, we need to close the form BEFORE adding any closing divs
669
-     * @return string
670
-     * @throws EE_Error
671
-     */
672
-    public function displayViewDetailsButton($DWMTS = false)
673
-    {
674
-        if (! $this->event->get_permalink()) {
675
-            EE_Error::add_error(
676
-                esc_html__('The URL for the Event Details page could not be retrieved.', 'event_espresso'),
677
-                __FILE__,
678
-                __FUNCTION__,
679
-                __LINE__
680
-            );
681
-        }
682
-        $view_details_btn = '<form method="POST" action="';
683
-        $view_details_btn .= apply_filters(
684
-            'FHEE__EE_Ticket_Selector__display_view_details_btn__btn_url',
685
-            $this->event->get_permalink(),
686
-            $this->event
687
-        );
688
-        $view_details_btn .= '"';
689
-        // open link in new window ?
690
-        $view_details_btn .= apply_filters(
691
-            'FHEE__EventEspresso_modules_ticket_selector_DisplayTicketSelector__displayViewDetailsButton__url_target_blank',
692
-            $this->isIframe(),
693
-            $this
694
-        )
695
-            ? ' target="_blank"'
696
-            : '';
697
-        $view_details_btn .= '>';
698
-        $btn_text = apply_filters(
699
-            'FHEE__EE_Ticket_Selector__display_view_details_btn__btn_text',
700
-            esc_html__('View Details', 'event_espresso'),
701
-            $this->event
702
-        );
703
-        $view_details_btn .= '<input id="ticket-selector-submit-'
704
-                             . $this->event->ID()
705
-                             . '-btn" class="ticket-selector-submit-btn view-details-btn" type="submit" value="'
706
-                             . $btn_text
707
-                             . '" />';
708
-        $view_details_btn .= apply_filters('FHEE__EE_Ticket_Selector__after_view_details_btn', '', $this->event);
709
-        if ($DWMTS) {
710
-            $view_details_btn .= $this->formClose();
711
-            $view_details_btn .= $this->ticketSelectorEndDiv();
712
-            $view_details_btn .= '<br/>';
713
-        } else {
714
-            $view_details_btn .= $this->clearTicketSelector();
715
-            $view_details_btn .= '<br/>';
716
-            $view_details_btn .= $this->formClose();
717
-        }
718
-        return $view_details_btn;
719
-    }
720
-
721
-
722
-    /**
723
-     * @return string
724
-     */
725
-    public function ticketSelectorEndDiv()
726
-    {
727
-        return $this->clearTicketSelector() . '</div><!-- ticketSelectorEndDiv -->';
728
-    }
729
-
730
-
731
-    /**
732
-     * @return string
733
-     */
734
-    public function clearTicketSelector()
735
-    {
736
-        // standard TS displayed, appears after a "Register Now" or "view Details" button
737
-        return '<div class="clear"></div><!-- clearTicketSelector -->';
738
-    }
739
-
740
-
741
-    /**
742
-     * @access        public
743
-     * @return        string
744
-     */
745
-    public function formClose()
746
-    {
747
-        return '</form>';
748
-    }
321
+	}
322
+
323
+
324
+	/**
325
+	 * ticketSalesClosed
326
+	 * notice displayed if event ticket sales are turned off
327
+	 *
328
+	 * @return string
329
+	 * @throws EE_Error
330
+	 */
331
+	protected function ticketSalesClosedMessage()
332
+	{
333
+		$sales_closed_msg = esc_html__(
334
+			'We\'re sorry, but ticket sales have been closed at this time. Please check back again later.',
335
+			'event_espresso'
336
+		);
337
+		if (current_user_can('edit_post', $this->event->ID())) {
338
+			$sales_closed_msg .= sprintf(
339
+				esc_html__(
340
+					'%sNote to Event Admin:%sThe "Maximum number of tickets allowed per order for this event" in the Event Registration Options has been set to "0". This effectively turns off ticket sales. %s(click to edit this event)%s',
341
+					'event_espresso'
342
+				),
343
+				'<div class="ee-attention" style="text-align: left;"><b>',
344
+				'</b><br />',
345
+				'<span class="edit-link"><a class="post-edit-link" href="'
346
+				. get_edit_post_link($this->event->ID())
347
+				. '">',
348
+				'</a></span></div><!-- .ee-attention ticketSalesClosedMessage -->'
349
+			);
350
+		}
351
+		return '<p><span class="important-notice">' . $sales_closed_msg . '</span></p>';
352
+	}
353
+
354
+
355
+	/**
356
+	 * getTickets
357
+	 *
358
+	 * @return \EE_Base_Class[]|\EE_Ticket[]
359
+	 * @throws EE_Error
360
+	 * @throws InvalidDataTypeException
361
+	 * @throws InvalidInterfaceException
362
+	 * @throws InvalidArgumentException
363
+	 */
364
+	protected function getTickets()
365
+	{
366
+		$ticket_query_args = array(
367
+			array('Datetime.EVT_ID' => $this->event->ID()),
368
+			'order_by' => array(
369
+				'TKT_order'              => 'ASC',
370
+				'TKT_required'           => 'DESC',
371
+				'TKT_start_date'         => 'ASC',
372
+				'TKT_end_date'           => 'ASC',
373
+				'Datetime.DTT_EVT_start' => 'DESC',
374
+			),
375
+		);
376
+		if (! (
377
+			EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector instanceof EE_Ticket_Selector_Config
378
+			&& EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector->show_expired_tickets
379
+		)) {
380
+			// use the correct applicable time query depending on what version of core is being run.
381
+			$current_time = method_exists('EEM_Datetime', 'current_time_for_query')
382
+				? time()
383
+				: current_time('timestamp');
384
+			$ticket_query_args[0]['TKT_end_date'] = array('>', $current_time);
385
+		}
386
+		return EEM_Ticket::instance()->get_all($ticket_query_args);
387
+	}
388
+
389
+
390
+	/**
391
+	 * loadTicketSelector
392
+	 * begins to assemble template arguments
393
+	 * and decides whether to load a "simple" ticket selector, or the standard
394
+	 *
395
+	 * @param \EE_Ticket[] $tickets
396
+	 * @param array        $template_args
397
+	 * @return string
398
+	 * @throws EE_Error
399
+	 */
400
+	protected function loadTicketSelector(array $tickets, array $template_args)
401
+	{
402
+		$template_args['event'] = $this->event;
403
+		$template_args['EVT_ID'] = $this->event->ID();
404
+		$template_args['event_is_expired'] = $this->event->is_expired();
405
+		$template_args['max_atndz'] = $this->getMaxAttendees();
406
+		$template_args['date_format'] = $this->date_format;
407
+		$template_args['time_format'] = $this->time_format;
408
+		/**
409
+		 * Filters the anchor ID used when redirecting to the Ticket Selector if no quantity selected
410
+		 *
411
+		 * @since 4.9.13
412
+		 * @param     string  '#tkt-slctr-tbl-' . $EVT_ID The html ID to anchor to
413
+		 * @param int $EVT_ID The Event ID
414
+		 */
415
+		$template_args['anchor_id'] = apply_filters(
416
+			'FHEE__EE_Ticket_Selector__redirect_anchor_id',
417
+			'#tkt-slctr-tbl-' . $this->event->ID(),
418
+			$this->event->ID()
419
+		);
420
+		$template_args['tickets'] = $tickets;
421
+		$template_args['ticket_count'] = count($tickets);
422
+		$ticket_selector = $this->simpleTicketSelector($tickets, $template_args);
423
+		return $ticket_selector instanceof TicketSelectorSimple
424
+			? $ticket_selector
425
+			: new TicketSelectorStandard(
426
+				$this->event,
427
+				$tickets,
428
+				$this->getMaxAttendees(),
429
+				$template_args,
430
+				$this->date_format,
431
+				$this->time_format
432
+			);
433
+	}
434
+
435
+
436
+	/**
437
+	 * simpleTicketSelector
438
+	 * there's one ticket, and max attendees is set to one,
439
+	 * so if the event is free, then this is a "simple" ticket selector
440
+	 * a.k.a. "Dude Where's my Ticket Selector?"
441
+	 *
442
+	 * @param \EE_Ticket[] $tickets
443
+	 * @param array        $template_args
444
+	 * @return string
445
+	 * @throws EE_Error
446
+	 */
447
+	protected function simpleTicketSelector($tickets, array $template_args)
448
+	{
449
+		// if there is only ONE ticket with a max qty of ONE
450
+		if (count($tickets) > 1 || $this->getMaxAttendees() !== 1) {
451
+			return '';
452
+		}
453
+		/** @var \EE_Ticket $ticket */
454
+		$ticket = reset($tickets);
455
+		// if the ticket is free... then not much need for the ticket selector
456
+		if (apply_filters(
457
+			'FHEE__ticket_selector_chart_template__hide_ticket_selector',
458
+			$ticket->is_free(),
459
+			$this->event->ID()
460
+		)) {
461
+			return new TicketSelectorSimple(
462
+				$this->event,
463
+				$ticket,
464
+				$this->getMaxAttendees(),
465
+				$template_args
466
+			);
467
+		}
468
+		return '';
469
+	}
470
+
471
+
472
+	/**
473
+	 * externalEventRegistration
474
+	 *
475
+	 * @return string
476
+	 */
477
+	public function externalEventRegistration()
478
+	{
479
+		// if not we still need to trigger the display of the submit button
480
+		add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
481
+		// display notice to admin that registration is external
482
+		return $this->display_full_ui()
483
+			? esc_html__(
484
+				'Registration is at an external URL for this event.',
485
+				'event_espresso'
486
+			)
487
+			: '';
488
+	}
489
+
490
+
491
+	/**
492
+	 * formOpen
493
+	 *
494
+	 * @param        int    $ID
495
+	 * @param        string $external_url
496
+	 * @return        string
497
+	 */
498
+	public function formOpen($ID = 0, $external_url = '')
499
+	{
500
+		// if redirecting, we don't need any anything else
501
+		if ($external_url) {
502
+			$html = '<form method="GET" ';
503
+			$html .= 'action="' . EEH_URL::refactor_url($external_url) . '" ';
504
+			$html .= 'name="ticket-selector-form-' . $ID . '"';
505
+			// open link in new window ?
506
+			$html .= apply_filters(
507
+				'FHEE__EventEspresso_modules_ticket_selector_DisplayTicketSelector__formOpen__external_url_target_blank',
508
+				$this->isIframe(),
509
+				$this
510
+			)
511
+				? ' target="_blank"'
512
+				: '';
513
+			$html .= '>';
514
+			$query_args = EEH_URL::get_query_string($external_url);
515
+			foreach ((array) $query_args as $query_arg => $value) {
516
+				$html .= '<input type="hidden" name="' . $query_arg . '" value="' . $value . '">';
517
+			}
518
+			return $html;
519
+		}
520
+		// if there is no submit button, then don't start building a form
521
+		// because the "View Details" button will build its own form
522
+		if (! apply_filters('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', false)) {
523
+			return '';
524
+		}
525
+		$checkout_url = EEH_Event_View::event_link_url($ID);
526
+		if (! $checkout_url) {
527
+			EE_Error::add_error(
528
+				esc_html__('The URL for the Event Details page could not be retrieved.', 'event_espresso'),
529
+				__FILE__,
530
+				__FUNCTION__,
531
+				__LINE__
532
+			);
533
+		}
534
+		// set no cache headers and constants
535
+		EE_System::do_not_cache();
536
+		$html = '<form method="POST" ';
537
+		$html .= 'action="' . $checkout_url . '" ';
538
+		$html .= 'name="ticket-selector-form-' . $ID . '"';
539
+		$html .= $this->iframe ? ' target="_blank"' : '';
540
+		$html .= '>';
541
+		$html .= '<input type="hidden" name="ee" value="process_ticket_selections">';
542
+		$html = apply_filters('FHEE__EE_Ticket_Selector__ticket_selector_form_open__html', $html, $this->event);
543
+		return $html;
544
+	}
545
+
546
+
547
+	/**
548
+	 * displaySubmitButton
549
+	 *
550
+	 * @param  string $external_url
551
+	 * @return string
552
+	 * @throws EE_Error
553
+	 */
554
+	public function displaySubmitButton($external_url = '')
555
+	{
556
+		$html = '';
557
+		if ($this->display_full_ui()) {
558
+			// standard TS displayed with submit button, ie: "Register Now"
559
+			if (apply_filters('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', false)) {
560
+				$html .= $this->displayRegisterNowButton();
561
+				$html .= empty($external_url)
562
+					? $this->ticketSelectorEndDiv()
563
+					: $this->clearTicketSelector();
564
+				$html .= '<br/>' . $this->formClose();
565
+			} elseif ($this->getMaxAttendees() === 1) {
566
+				// its a "Dude Where's my Ticket Selector?" (DWMTS) type event (ie: $_max_atndz === 1)
567
+				if ($this->event->is_sold_out()) {
568
+					// then instead of a View Details or Submit button, just display a "Sold Out" message
569
+					$html .= apply_filters(
570
+						'FHEE__EE_Ticket_Selector__display_ticket_selector_submit__sold_out_msg',
571
+						sprintf(
572
+							__(
573
+								'%1$s"%2$s" is currently sold out.%4$sPlease check back again later, as spots may become available.%3$s',
574
+								'event_espresso'
575
+							),
576
+							'<p class="no-ticket-selector-msg clear-float">',
577
+							$this->event->name(),
578
+							'</p>',
579
+							'<br />'
580
+						),
581
+						$this->event
582
+					);
583
+					if (apply_filters(
584
+						'FHEE__EE_Ticket_Selector__display_ticket_selector_submit__no_tickets_but_display_register_now_button',
585
+						false,
586
+						$this->event
587
+					)) {
588
+						$html .= $this->displayRegisterNowButton();
589
+					}
590
+					// sold out DWMTS event, no TS, no submit or view details button, but has additional content
591
+					$html .= $this->ticketSelectorEndDiv();
592
+				} elseif (apply_filters('FHEE__EE_Ticket_Selector__hide_ticket_selector', false)
593
+						  && ! is_single()
594
+				) {
595
+					// this is a "Dude Where's my Ticket Selector?" (DWMTS) type event,
596
+					// but no tickets are available, so display event's "View Details" button.
597
+					// it is being viewed via somewhere other than a single post
598
+					$html .= $this->displayViewDetailsButton(true);
599
+				} else {
600
+					$html .= $this->ticketSelectorEndDiv();
601
+				}
602
+			} elseif (is_archive()) {
603
+				// event list, no tickets available so display event's "View Details" button
604
+				$html .= $this->ticketSelectorEndDiv();
605
+				$html .= $this->displayViewDetailsButton();
606
+			} else {
607
+				if (apply_filters(
608
+					'FHEE__EE_Ticket_Selector__display_ticket_selector_submit__no_tickets_but_display_register_now_button',
609
+					false,
610
+					$this->event
611
+				)) {
612
+					$html .= $this->displayRegisterNowButton();
613
+				}
614
+				// no submit or view details button, and no additional content
615
+				$html .= $this->ticketSelectorEndDiv();
616
+			}
617
+			if (! $this->iframe && ! is_archive()) {
618
+				$html .= EEH_Template::powered_by_event_espresso('', '', array('utm_content' => 'ticket_selector'));
619
+			}
620
+		}
621
+		return apply_filters(
622
+			'FHEE__EventEspresso_modules_ticket_selector_DisplayTicketSelector__displaySubmitButton__html',
623
+			$html,
624
+			$this->event,
625
+			$this
626
+		);
627
+	}
628
+
629
+
630
+	/**
631
+	 * @return string
632
+	 * @throws EE_Error
633
+	 */
634
+	public function displayRegisterNowButton()
635
+	{
636
+		$btn_text = apply_filters(
637
+			'FHEE__EE_Ticket_Selector__display_ticket_selector_submit__btn_text',
638
+			__('Register Now', 'event_espresso'),
639
+			$this->event
640
+		);
641
+		$external_url = $this->event->external_url();
642
+		$html = EEH_HTML::div(
643
+			'',
644
+			'ticket-selector-submit-' . $this->event->ID() . '-btn-wrap',
645
+			'ticket-selector-submit-btn-wrap'
646
+		);
647
+		$html .= '<input id="ticket-selector-submit-' . $this->event->ID() . '-btn"';
648
+		$html .= ' class="ticket-selector-submit-btn ';
649
+		$html .= empty($external_url) ? 'ticket-selector-submit-ajax"' : '"';
650
+		$html .= ' type="submit" value="' . $btn_text . '" />';
651
+		$html .= EEH_HTML::divx() . '<!-- .ticket-selector-submit-btn-wrap -->';
652
+		$html .= apply_filters(
653
+			'FHEE__EE_Ticket_Selector__after_ticket_selector_submit',
654
+			'',
655
+			$this->event,
656
+			$this->iframe
657
+		);
658
+		return $html;
659
+	}
660
+
661
+
662
+	/**
663
+	 * displayViewDetailsButton
664
+	 *
665
+	 * @param bool $DWMTS indicates a "Dude Where's my Ticket Selector?" (DWMTS) type event
666
+	 *                    (ie: $_max_atndz === 1) where there are no available tickets,
667
+	 *                    either because they are sold out, expired, or not yet on sale.
668
+	 *                    In this case, we need to close the form BEFORE adding any closing divs
669
+	 * @return string
670
+	 * @throws EE_Error
671
+	 */
672
+	public function displayViewDetailsButton($DWMTS = false)
673
+	{
674
+		if (! $this->event->get_permalink()) {
675
+			EE_Error::add_error(
676
+				esc_html__('The URL for the Event Details page could not be retrieved.', 'event_espresso'),
677
+				__FILE__,
678
+				__FUNCTION__,
679
+				__LINE__
680
+			);
681
+		}
682
+		$view_details_btn = '<form method="POST" action="';
683
+		$view_details_btn .= apply_filters(
684
+			'FHEE__EE_Ticket_Selector__display_view_details_btn__btn_url',
685
+			$this->event->get_permalink(),
686
+			$this->event
687
+		);
688
+		$view_details_btn .= '"';
689
+		// open link in new window ?
690
+		$view_details_btn .= apply_filters(
691
+			'FHEE__EventEspresso_modules_ticket_selector_DisplayTicketSelector__displayViewDetailsButton__url_target_blank',
692
+			$this->isIframe(),
693
+			$this
694
+		)
695
+			? ' target="_blank"'
696
+			: '';
697
+		$view_details_btn .= '>';
698
+		$btn_text = apply_filters(
699
+			'FHEE__EE_Ticket_Selector__display_view_details_btn__btn_text',
700
+			esc_html__('View Details', 'event_espresso'),
701
+			$this->event
702
+		);
703
+		$view_details_btn .= '<input id="ticket-selector-submit-'
704
+							 . $this->event->ID()
705
+							 . '-btn" class="ticket-selector-submit-btn view-details-btn" type="submit" value="'
706
+							 . $btn_text
707
+							 . '" />';
708
+		$view_details_btn .= apply_filters('FHEE__EE_Ticket_Selector__after_view_details_btn', '', $this->event);
709
+		if ($DWMTS) {
710
+			$view_details_btn .= $this->formClose();
711
+			$view_details_btn .= $this->ticketSelectorEndDiv();
712
+			$view_details_btn .= '<br/>';
713
+		} else {
714
+			$view_details_btn .= $this->clearTicketSelector();
715
+			$view_details_btn .= '<br/>';
716
+			$view_details_btn .= $this->formClose();
717
+		}
718
+		return $view_details_btn;
719
+	}
720
+
721
+
722
+	/**
723
+	 * @return string
724
+	 */
725
+	public function ticketSelectorEndDiv()
726
+	{
727
+		return $this->clearTicketSelector() . '</div><!-- ticketSelectorEndDiv -->';
728
+	}
729
+
730
+
731
+	/**
732
+	 * @return string
733
+	 */
734
+	public function clearTicketSelector()
735
+	{
736
+		// standard TS displayed, appears after a "Register Now" or "view Details" button
737
+		return '<div class="clear"></div><!-- clearTicketSelector -->';
738
+	}
739
+
740
+
741
+	/**
742
+	 * @access        public
743
+	 * @return        string
744
+	 */
745
+	public function formClose()
746
+	{
747
+		return '</form>';
748
+	}
749 749
 }
Please login to merge, or discard this patch.
Spacing   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -135,11 +135,11 @@  discard block
 block discarded – undo
135 135
             }
136 136
         } else {
137 137
             $user_msg = __('No Event object or an invalid Event object was supplied.', 'event_espresso');
138
-            $dev_msg = $user_msg . __(
138
+            $dev_msg = $user_msg.__(
139 139
                 'In order to generate a ticket selector, please ensure you are passing either an EE_Event object or a WP_Post object of the post type "espresso_event" to the EE_Ticket_Selector class constructor.',
140 140
                 'event_espresso'
141 141
             );
142
-            EE_Error::add_error($user_msg . '||' . $dev_msg, __FILE__, __FUNCTION__, __LINE__);
142
+            EE_Error::add_error($user_msg.'||'.$dev_msg, __FILE__, __FUNCTION__, __LINE__);
143 143
             return false;
144 144
         }
145 145
         return true;
@@ -200,7 +200,7 @@  discard block
 block discarded – undo
200 200
         // reset filter for displaying submit button
201 201
         remove_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
202 202
         // poke and prod incoming event till it tells us what it is
203
-        if (! $this->setEvent($event)) {
203
+        if ( ! $this->setEvent($event)) {
204 204
             return false;
205 205
         }
206 206
         // begin gathering template arguments by getting event status
@@ -235,7 +235,7 @@  discard block
 block discarded – undo
235 235
             : $this->loadTicketSelector($tickets, $template_args);
236 236
         // now set up the form (but not for the admin)
237 237
         $ticket_selector = $this->display_full_ui()
238
-            ? $this->formOpen($this->event->ID(), $external_url) . $ticket_selector
238
+            ? $this->formOpen($this->event->ID(), $external_url).$ticket_selector
239 239
             : $ticket_selector;
240 240
         // submit button and form close tag
241 241
         $ticket_selector .= $this->display_full_ui() ? $this->displaySubmitButton($external_url) : '';
@@ -283,10 +283,10 @@  discard block
 block discarded – undo
283 283
      */
284 284
     protected function expiredEventMessage()
285 285
     {
286
-        return '<div class="ee-event-expired-notice"><span class="important-notice">' . esc_html__(
286
+        return '<div class="ee-event-expired-notice"><span class="important-notice">'.esc_html__(
287 287
             'We\'re sorry, but all tickets sales have ended because the event is expired.',
288 288
             'event_espresso'
289
-        ) . '</span></div><!-- .ee-event-expired-notice -->';
289
+        ).'</span></div><!-- .ee-event-expired-notice -->';
290 290
     }
291 291
 
292 292
 
@@ -316,7 +316,7 @@  discard block
 block discarded – undo
316 316
         }
317 317
         return '
318 318
             <div class="ee-event-expired-notice">
319
-                <span class="important-notice">' . $no_ticket_available_msg . '</span>
319
+                <span class="important-notice">' . $no_ticket_available_msg.'</span>
320 320
             </div><!-- .ee-event-expired-notice -->';
321 321
     }
322 322
 
@@ -348,7 +348,7 @@  discard block
 block discarded – undo
348 348
                 '</a></span></div><!-- .ee-attention ticketSalesClosedMessage -->'
349 349
             );
350 350
         }
351
-        return '<p><span class="important-notice">' . $sales_closed_msg . '</span></p>';
351
+        return '<p><span class="important-notice">'.$sales_closed_msg.'</span></p>';
352 352
     }
353 353
 
354 354
 
@@ -373,7 +373,7 @@  discard block
 block discarded – undo
373 373
                 'Datetime.DTT_EVT_start' => 'DESC',
374 374
             ),
375 375
         );
376
-        if (! (
376
+        if ( ! (
377 377
             EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector instanceof EE_Ticket_Selector_Config
378 378
             && EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector->show_expired_tickets
379 379
         )) {
@@ -414,7 +414,7 @@  discard block
 block discarded – undo
414 414
          */
415 415
         $template_args['anchor_id'] = apply_filters(
416 416
             'FHEE__EE_Ticket_Selector__redirect_anchor_id',
417
-            '#tkt-slctr-tbl-' . $this->event->ID(),
417
+            '#tkt-slctr-tbl-'.$this->event->ID(),
418 418
             $this->event->ID()
419 419
         );
420 420
         $template_args['tickets'] = $tickets;
@@ -500,8 +500,8 @@  discard block
 block discarded – undo
500 500
         // if redirecting, we don't need any anything else
501 501
         if ($external_url) {
502 502
             $html = '<form method="GET" ';
503
-            $html .= 'action="' . EEH_URL::refactor_url($external_url) . '" ';
504
-            $html .= 'name="ticket-selector-form-' . $ID . '"';
503
+            $html .= 'action="'.EEH_URL::refactor_url($external_url).'" ';
504
+            $html .= 'name="ticket-selector-form-'.$ID.'"';
505 505
             // open link in new window ?
506 506
             $html .= apply_filters(
507 507
                 'FHEE__EventEspresso_modules_ticket_selector_DisplayTicketSelector__formOpen__external_url_target_blank',
@@ -513,17 +513,17 @@  discard block
 block discarded – undo
513 513
             $html .= '>';
514 514
             $query_args = EEH_URL::get_query_string($external_url);
515 515
             foreach ((array) $query_args as $query_arg => $value) {
516
-                $html .= '<input type="hidden" name="' . $query_arg . '" value="' . $value . '">';
516
+                $html .= '<input type="hidden" name="'.$query_arg.'" value="'.$value.'">';
517 517
             }
518 518
             return $html;
519 519
         }
520 520
         // if there is no submit button, then don't start building a form
521 521
         // because the "View Details" button will build its own form
522
-        if (! apply_filters('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', false)) {
522
+        if ( ! apply_filters('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', false)) {
523 523
             return '';
524 524
         }
525 525
         $checkout_url = EEH_Event_View::event_link_url($ID);
526
-        if (! $checkout_url) {
526
+        if ( ! $checkout_url) {
527 527
             EE_Error::add_error(
528 528
                 esc_html__('The URL for the Event Details page could not be retrieved.', 'event_espresso'),
529 529
                 __FILE__,
@@ -534,8 +534,8 @@  discard block
 block discarded – undo
534 534
         // set no cache headers and constants
535 535
         EE_System::do_not_cache();
536 536
         $html = '<form method="POST" ';
537
-        $html .= 'action="' . $checkout_url . '" ';
538
-        $html .= 'name="ticket-selector-form-' . $ID . '"';
537
+        $html .= 'action="'.$checkout_url.'" ';
538
+        $html .= 'name="ticket-selector-form-'.$ID.'"';
539 539
         $html .= $this->iframe ? ' target="_blank"' : '';
540 540
         $html .= '>';
541 541
         $html .= '<input type="hidden" name="ee" value="process_ticket_selections">';
@@ -561,7 +561,7 @@  discard block
 block discarded – undo
561 561
                 $html .= empty($external_url)
562 562
                     ? $this->ticketSelectorEndDiv()
563 563
                     : $this->clearTicketSelector();
564
-                $html .= '<br/>' . $this->formClose();
564
+                $html .= '<br/>'.$this->formClose();
565 565
             } elseif ($this->getMaxAttendees() === 1) {
566 566
                 // its a "Dude Where's my Ticket Selector?" (DWMTS) type event (ie: $_max_atndz === 1)
567 567
                 if ($this->event->is_sold_out()) {
@@ -614,7 +614,7 @@  discard block
 block discarded – undo
614 614
                 // no submit or view details button, and no additional content
615 615
                 $html .= $this->ticketSelectorEndDiv();
616 616
             }
617
-            if (! $this->iframe && ! is_archive()) {
617
+            if ( ! $this->iframe && ! is_archive()) {
618 618
                 $html .= EEH_Template::powered_by_event_espresso('', '', array('utm_content' => 'ticket_selector'));
619 619
             }
620 620
         }
@@ -641,14 +641,14 @@  discard block
 block discarded – undo
641 641
         $external_url = $this->event->external_url();
642 642
         $html = EEH_HTML::div(
643 643
             '',
644
-            'ticket-selector-submit-' . $this->event->ID() . '-btn-wrap',
644
+            'ticket-selector-submit-'.$this->event->ID().'-btn-wrap',
645 645
             'ticket-selector-submit-btn-wrap'
646 646
         );
647
-        $html .= '<input id="ticket-selector-submit-' . $this->event->ID() . '-btn"';
647
+        $html .= '<input id="ticket-selector-submit-'.$this->event->ID().'-btn"';
648 648
         $html .= ' class="ticket-selector-submit-btn ';
649 649
         $html .= empty($external_url) ? 'ticket-selector-submit-ajax"' : '"';
650
-        $html .= ' type="submit" value="' . $btn_text . '" />';
651
-        $html .= EEH_HTML::divx() . '<!-- .ticket-selector-submit-btn-wrap -->';
650
+        $html .= ' type="submit" value="'.$btn_text.'" />';
651
+        $html .= EEH_HTML::divx().'<!-- .ticket-selector-submit-btn-wrap -->';
652 652
         $html .= apply_filters(
653 653
             'FHEE__EE_Ticket_Selector__after_ticket_selector_submit',
654 654
             '',
@@ -671,7 +671,7 @@  discard block
 block discarded – undo
671 671
      */
672 672
     public function displayViewDetailsButton($DWMTS = false)
673 673
     {
674
-        if (! $this->event->get_permalink()) {
674
+        if ( ! $this->event->get_permalink()) {
675 675
             EE_Error::add_error(
676 676
                 esc_html__('The URL for the Event Details page could not be retrieved.', 'event_espresso'),
677 677
                 __FILE__,
@@ -724,7 +724,7 @@  discard block
 block discarded – undo
724 724
      */
725 725
     public function ticketSelectorEndDiv()
726 726
     {
727
-        return $this->clearTicketSelector() . '</div><!-- ticketSelectorEndDiv -->';
727
+        return $this->clearTicketSelector().'</div><!-- ticketSelectorEndDiv -->';
728 728
     }
729 729
 
730 730
 
Please login to merge, or discard this patch.
modules/ticket_selector/ProcessTicketSelector.php 2 patches
Indentation   +497 added lines, -497 removed lines patch added patch discarded remove patch
@@ -33,526 +33,526 @@
 block discarded – undo
33 33
 class ProcessTicketSelector
34 34
 {
35 35
 
36
-    /**
37
-     * @var EE_Cart $cart
38
-     */
39
-    private $cart;
36
+	/**
37
+	 * @var EE_Cart $cart
38
+	 */
39
+	private $cart;
40 40
 
41
-    /**
42
-     * @var EE_Core_Config $core_config
43
-     */
44
-    private $core_config;
41
+	/**
42
+	 * @var EE_Core_Config $core_config
43
+	 */
44
+	private $core_config;
45 45
 
46
-    /**
47
-     * @var Request $request
48
-     */
49
-    private $request;
46
+	/**
47
+	 * @var Request $request
48
+	 */
49
+	private $request;
50 50
 
51
-    /**
52
-     * @var EE_Session $session
53
-     */
54
-    private $session;
51
+	/**
52
+	 * @var EE_Session $session
53
+	 */
54
+	private $session;
55 55
 
56
-    /**
57
-     * @var EEM_Ticket $ticket_model
58
-     */
59
-    private $ticket_model;
56
+	/**
57
+	 * @var EEM_Ticket $ticket_model
58
+	 */
59
+	private $ticket_model;
60 60
 
61
-    /**
62
-     * @var TicketDatetimeAvailabilityTracker $tracker
63
-     */
64
-    private $tracker;
61
+	/**
62
+	 * @var TicketDatetimeAvailabilityTracker $tracker
63
+	 */
64
+	private $tracker;
65 65
 
66 66
 
67
-    /**
68
-     * ProcessTicketSelector constructor.
69
-     * NOTE: PLZ use the Loader to instantiate this class if need be
70
-     * so that all dependencies get injected correctly (which will happen automatically)
71
-     * Null values for parameters are only for backwards compatibility but will be removed later on.
72
-     *
73
-     * @param EE_Core_Config                    $core_config
74
-     * @param Request                           $request
75
-     * @param EE_Session                        $session
76
-     * @param EEM_Ticket                        $ticket_model
77
-     * @param TicketDatetimeAvailabilityTracker $tracker
78
-     * @throws InvalidArgumentException
79
-     * @throws InvalidDataTypeException
80
-     * @throws InvalidInterfaceException
81
-     */
82
-    public function __construct(
83
-        EE_Core_Config $core_config = null,
84
-        Request $request = null,
85
-        EE_Session $session = null,
86
-        EEM_Ticket $ticket_model = null,
87
-        TicketDatetimeAvailabilityTracker $tracker = null
88
-    ) {
89
-        /** @var LoaderInterface $loader */
90
-        $loader = LoaderFactory::getLoader();
91
-        $this->core_config = $core_config instanceof EE_Core_Config
92
-            ? $core_config
93
-            : $loader->getShared('EE_Core_Config');
94
-        $this->request = $request instanceof Request
95
-            ? $request
96
-            : $loader->getShared('EventEspresso\core\services\request\Request');
97
-        $this->session = $session instanceof EE_Session
98
-            ? $session
99
-            : $loader->getShared('EE_Session');
100
-        $this->ticket_model = $ticket_model instanceof EEM_Ticket
101
-            ? $ticket_model
102
-            : $loader->getShared('EEM_Ticket');
103
-        $this->tracker = $tracker instanceof TicketDatetimeAvailabilityTracker
104
-            ? $tracker
105
-            : $loader->getShared('EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker');
106
-    }
67
+	/**
68
+	 * ProcessTicketSelector constructor.
69
+	 * NOTE: PLZ use the Loader to instantiate this class if need be
70
+	 * so that all dependencies get injected correctly (which will happen automatically)
71
+	 * Null values for parameters are only for backwards compatibility but will be removed later on.
72
+	 *
73
+	 * @param EE_Core_Config                    $core_config
74
+	 * @param Request                           $request
75
+	 * @param EE_Session                        $session
76
+	 * @param EEM_Ticket                        $ticket_model
77
+	 * @param TicketDatetimeAvailabilityTracker $tracker
78
+	 * @throws InvalidArgumentException
79
+	 * @throws InvalidDataTypeException
80
+	 * @throws InvalidInterfaceException
81
+	 */
82
+	public function __construct(
83
+		EE_Core_Config $core_config = null,
84
+		Request $request = null,
85
+		EE_Session $session = null,
86
+		EEM_Ticket $ticket_model = null,
87
+		TicketDatetimeAvailabilityTracker $tracker = null
88
+	) {
89
+		/** @var LoaderInterface $loader */
90
+		$loader = LoaderFactory::getLoader();
91
+		$this->core_config = $core_config instanceof EE_Core_Config
92
+			? $core_config
93
+			: $loader->getShared('EE_Core_Config');
94
+		$this->request = $request instanceof Request
95
+			? $request
96
+			: $loader->getShared('EventEspresso\core\services\request\Request');
97
+		$this->session = $session instanceof EE_Session
98
+			? $session
99
+			: $loader->getShared('EE_Session');
100
+		$this->ticket_model = $ticket_model instanceof EEM_Ticket
101
+			? $ticket_model
102
+			: $loader->getShared('EEM_Ticket');
103
+		$this->tracker = $tracker instanceof TicketDatetimeAvailabilityTracker
104
+			? $tracker
105
+			: $loader->getShared('EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker');
106
+	}
107 107
 
108 108
 
109
-    /**
110
-     * cancelTicketSelections
111
-     *
112
-     * @return bool
113
-     * @throws EE_Error
114
-     * @throws InvalidArgumentException
115
-     * @throws InvalidInterfaceException
116
-     * @throws InvalidDataTypeException
117
-     */
118
-    public function cancelTicketSelections()
119
-    {
120
-        // check nonce
121
-        if (! $this->processTicketSelectorNonce('cancel_ticket_selections')) {
122
-            return false;
123
-        }
124
-        $this->session->clear_session(__CLASS__, __FUNCTION__);
125
-        if ($this->request->requestParamIsSet('event_id')) {
126
-            EEH_URL::safeRedirectAndExit(
127
-                EEH_Event_View::event_link_url(
128
-                    $this->request->getRequestParam('event_id')
129
-                )
130
-            );
131
-        }
132
-        EEH_URL::safeRedirectAndExit(
133
-            site_url('/' . $this->core_config->event_cpt_slug . '/')
134
-        );
135
-        return true;
136
-    }
109
+	/**
110
+	 * cancelTicketSelections
111
+	 *
112
+	 * @return bool
113
+	 * @throws EE_Error
114
+	 * @throws InvalidArgumentException
115
+	 * @throws InvalidInterfaceException
116
+	 * @throws InvalidDataTypeException
117
+	 */
118
+	public function cancelTicketSelections()
119
+	{
120
+		// check nonce
121
+		if (! $this->processTicketSelectorNonce('cancel_ticket_selections')) {
122
+			return false;
123
+		}
124
+		$this->session->clear_session(__CLASS__, __FUNCTION__);
125
+		if ($this->request->requestParamIsSet('event_id')) {
126
+			EEH_URL::safeRedirectAndExit(
127
+				EEH_Event_View::event_link_url(
128
+					$this->request->getRequestParam('event_id')
129
+				)
130
+			);
131
+		}
132
+		EEH_URL::safeRedirectAndExit(
133
+			site_url('/' . $this->core_config->event_cpt_slug . '/')
134
+		);
135
+		return true;
136
+	}
137 137
 
138 138
 
139
-    /**
140
-     * processTicketSelectorNonce
141
-     *
142
-     * @param  string $nonce_name
143
-     * @param string  $id
144
-     * @return bool
145
-     */
146
-    private function processTicketSelectorNonce($nonce_name, $id = '')
147
-    {
148
-        $nonce_name_with_id = ! empty($id) ? "{$nonce_name}_nonce_{$id}" : "{$nonce_name}_nonce";
149
-        if (! $this->request->isAdmin()
150
-            && (
151
-                ! $this->request->is_set($nonce_name_with_id)
152
-                || ! wp_verify_nonce(
153
-                    $this->request->get($nonce_name_with_id),
154
-                    $nonce_name
155
-                )
156
-            )
157
-        ) {
158
-            EE_Error::add_error(
159
-                sprintf(
160
-                    esc_html__(
161
-                        'We\'re sorry but your request failed to pass a security check.%sPlease click the back button on your browser and try again.',
162
-                        'event_espresso'
163
-                    ),
164
-                    '<br/>'
165
-                ),
166
-                __FILE__,
167
-                __FUNCTION__,
168
-                __LINE__
169
-            );
170
-            return false;
171
-        }
172
-        return true;
173
-    }
139
+	/**
140
+	 * processTicketSelectorNonce
141
+	 *
142
+	 * @param  string $nonce_name
143
+	 * @param string  $id
144
+	 * @return bool
145
+	 */
146
+	private function processTicketSelectorNonce($nonce_name, $id = '')
147
+	{
148
+		$nonce_name_with_id = ! empty($id) ? "{$nonce_name}_nonce_{$id}" : "{$nonce_name}_nonce";
149
+		if (! $this->request->isAdmin()
150
+			&& (
151
+				! $this->request->is_set($nonce_name_with_id)
152
+				|| ! wp_verify_nonce(
153
+					$this->request->get($nonce_name_with_id),
154
+					$nonce_name
155
+				)
156
+			)
157
+		) {
158
+			EE_Error::add_error(
159
+				sprintf(
160
+					esc_html__(
161
+						'We\'re sorry but your request failed to pass a security check.%sPlease click the back button on your browser and try again.',
162
+						'event_espresso'
163
+					),
164
+					'<br/>'
165
+				),
166
+				__FILE__,
167
+				__FUNCTION__,
168
+				__LINE__
169
+			);
170
+			return false;
171
+		}
172
+		return true;
173
+	}
174 174
 
175 175
 
176
-    /**
177
-     * process_ticket_selections
178
-     *
179
-     * @return array|bool
180
-     * @throws EE_Error
181
-     * @throws InvalidArgumentException
182
-     * @throws InvalidDataTypeException
183
-     * @throws InvalidInterfaceException
184
-     */
185
-    public function processTicketSelections()
186
-    {
187
-        do_action('EED_Ticket_Selector__process_ticket_selections__before');
188
-        if ($this->request->isBot()) {
189
-            EEH_URL::safeRedirectAndExit(
190
-                apply_filters(
191
-                    'FHEE__EE_Ticket_Selector__process_ticket_selections__bot_redirect_url',
192
-                    site_url()
193
-                )
194
-            );
195
-        }
196
-        // do we have an event id?
197
-        $id = $this->getEventId();
198
-        // we should really only have 1 registration in the works now
199
-        // (ie, no MER) so unless otherwise requested, clear the session
200
-        if (apply_filters('FHEE__EE_Ticket_Selector__process_ticket_selections__clear_session', true)) {
201
-            $this->session->clear_session(__CLASS__, __FUNCTION__);
202
-        }
203
-        // validate/sanitize/filter data
204
-        $valid = apply_filters(
205
-            'FHEE__EED_Ticket_Selector__process_ticket_selections__valid_post_data',
206
-            $this->validatePostData($id)
207
-        );
208
-        // check total tickets ordered vs max number of attendees that can register
209
-        if ($valid['total_tickets'] > $valid['max_atndz']) {
210
-            $this->maxAttendeesViolation($valid);
211
-        } else {
212
-            // all data appears to be valid
213
-            if ($this->processSuccessfulCart($this->addTicketsToCart($valid))) {
214
-                return true;
215
-            }
216
-        }
217
-        // die(); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< KILL BEFORE REDIRECT
218
-        // at this point, just return if registration is being made from admin
219
-        if ($this->request->isAdmin() || $this->request->isFrontAjax()) {
220
-            return false;
221
-        }
222
-        if ($valid['return_url']) {
223
-            EEH_URL::safeRedirectAndExit($valid['return_url']);
224
-        }
225
-        if ($id) {
226
-            EEH_URL::safeRedirectAndExit(get_permalink($id));
227
-        }
228
-        echo EE_Error::get_notices();
229
-        return false;
230
-    }
176
+	/**
177
+	 * process_ticket_selections
178
+	 *
179
+	 * @return array|bool
180
+	 * @throws EE_Error
181
+	 * @throws InvalidArgumentException
182
+	 * @throws InvalidDataTypeException
183
+	 * @throws InvalidInterfaceException
184
+	 */
185
+	public function processTicketSelections()
186
+	{
187
+		do_action('EED_Ticket_Selector__process_ticket_selections__before');
188
+		if ($this->request->isBot()) {
189
+			EEH_URL::safeRedirectAndExit(
190
+				apply_filters(
191
+					'FHEE__EE_Ticket_Selector__process_ticket_selections__bot_redirect_url',
192
+					site_url()
193
+				)
194
+			);
195
+		}
196
+		// do we have an event id?
197
+		$id = $this->getEventId();
198
+		// we should really only have 1 registration in the works now
199
+		// (ie, no MER) so unless otherwise requested, clear the session
200
+		if (apply_filters('FHEE__EE_Ticket_Selector__process_ticket_selections__clear_session', true)) {
201
+			$this->session->clear_session(__CLASS__, __FUNCTION__);
202
+		}
203
+		// validate/sanitize/filter data
204
+		$valid = apply_filters(
205
+			'FHEE__EED_Ticket_Selector__process_ticket_selections__valid_post_data',
206
+			$this->validatePostData($id)
207
+		);
208
+		// check total tickets ordered vs max number of attendees that can register
209
+		if ($valid['total_tickets'] > $valid['max_atndz']) {
210
+			$this->maxAttendeesViolation($valid);
211
+		} else {
212
+			// all data appears to be valid
213
+			if ($this->processSuccessfulCart($this->addTicketsToCart($valid))) {
214
+				return true;
215
+			}
216
+		}
217
+		// die(); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< KILL BEFORE REDIRECT
218
+		// at this point, just return if registration is being made from admin
219
+		if ($this->request->isAdmin() || $this->request->isFrontAjax()) {
220
+			return false;
221
+		}
222
+		if ($valid['return_url']) {
223
+			EEH_URL::safeRedirectAndExit($valid['return_url']);
224
+		}
225
+		if ($id) {
226
+			EEH_URL::safeRedirectAndExit(get_permalink($id));
227
+		}
228
+		echo EE_Error::get_notices();
229
+		return false;
230
+	}
231 231
 
232 232
 
233
-    /**
234
-     * @return int
235
-     */
236
-    private function getEventId()
237
-    {
238
-        // do we have an event id?
239
-        if (! $this->request->requestParamIsSet('tkt-slctr-event-id')) {
240
-            // $_POST['tkt-slctr-event-id'] was not set ?!?!?!?
241
-            EE_Error::add_error(
242
-                sprintf(
243
-                    esc_html__(
244
-                        'An event id was not provided or was not received.%sPlease click the back button on your browser and try again.',
245
-                        'event_espresso'
246
-                    ),
247
-                    '<br/>'
248
-                ),
249
-                __FILE__,
250
-                __FUNCTION__,
251
-                __LINE__
252
-            );
253
-        }
254
-        // if event id is valid
255
-        return absint($this->request->getRequestParam('tkt-slctr-event-id'));
256
-    }
233
+	/**
234
+	 * @return int
235
+	 */
236
+	private function getEventId()
237
+	{
238
+		// do we have an event id?
239
+		if (! $this->request->requestParamIsSet('tkt-slctr-event-id')) {
240
+			// $_POST['tkt-slctr-event-id'] was not set ?!?!?!?
241
+			EE_Error::add_error(
242
+				sprintf(
243
+					esc_html__(
244
+						'An event id was not provided or was not received.%sPlease click the back button on your browser and try again.',
245
+						'event_espresso'
246
+					),
247
+					'<br/>'
248
+				),
249
+				__FILE__,
250
+				__FUNCTION__,
251
+				__LINE__
252
+			);
253
+		}
254
+		// if event id is valid
255
+		return absint($this->request->getRequestParam('tkt-slctr-event-id'));
256
+	}
257 257
 
258 258
 
259
-    /**
260
-     * validate_post_data
261
-     *
262
-     * @param int $id
263
-     * @return array|FALSE
264
-     */
265
-    private function validatePostData($id = 0)
266
-    {
267
-        if (! $id) {
268
-            EE_Error::add_error(
269
-                esc_html__('The event id provided was not valid.', 'event_espresso'),
270
-                __FILE__,
271
-                __FUNCTION__,
272
-                __LINE__
273
-            );
274
-            return false;
275
-        }
276
-        // start with an empty array()
277
-        $valid_data = array();
278
-        // grab valid id
279
-        $valid_data['id'] = $id;
280
-        // array of other form names
281
-        $inputs_to_clean = array(
282
-            'event_id'   => 'tkt-slctr-event-id',
283
-            'max_atndz'  => 'tkt-slctr-max-atndz-',
284
-            'rows'       => 'tkt-slctr-rows-',
285
-            'qty'        => 'tkt-slctr-qty-',
286
-            'ticket_id'  => 'tkt-slctr-ticket-id-',
287
-            'return_url' => 'tkt-slctr-return-url-',
288
-        );
289
-        // let's track the total number of tickets ordered.'
290
-        $valid_data['total_tickets'] = 0;
291
-        // cycle through $inputs_to_clean array
292
-        foreach ($inputs_to_clean as $what => $input_to_clean) {
293
-            // check for POST data
294
-            if ($this->request->requestParamIsSet($input_to_clean . $id)) {
295
-                // grab value
296
-                $input_value = $this->request->getRequestParam($input_to_clean . $id);
297
-                switch ($what) {
298
-                    // integers
299
-                    case 'event_id':
300
-                        $valid_data[ $what ] = absint($input_value);
301
-                        // get event via the event id we put in the form
302
-                        break;
303
-                    case 'rows':
304
-                    case 'max_atndz':
305
-                        $valid_data[ $what ] = absint($input_value);
306
-                        break;
307
-                    // arrays of integers
308
-                    case 'qty':
309
-                        /** @var array $row_qty */
310
-                        $row_qty = $input_value;
311
-                        // if qty is coming from a radio button input, then we need to assemble an array of rows
312
-                        if (! is_array($row_qty)) {
313
-                            /** @var string $row_qty */
314
-                            // get number of rows
315
-                            $rows = $this->request->requestParamIsSet('tkt-slctr-rows-' . $id)
316
-                                ? absint($this->request->getRequestParam('tkt-slctr-rows-' . $id))
317
-                                : 1;
318
-                            // explode integers by the dash
319
-                            $row_qty = explode('-', $row_qty);
320
-                            $row = isset($row_qty[0]) ? absint($row_qty[0]) : 1;
321
-                            $qty = isset($row_qty[1]) ? absint($row_qty[1]) : 0;
322
-                            $row_qty = array($row => $qty);
323
-                            for ($x = 1; $x <= $rows; $x++) {
324
-                                if (! isset($row_qty[ $x ])) {
325
-                                    $row_qty[ $x ] = 0;
326
-                                }
327
-                            }
328
-                        }
329
-                        ksort($row_qty);
330
-                        // cycle thru values
331
-                        foreach ($row_qty as $qty) {
332
-                            $qty = absint($qty);
333
-                            // sanitize as integers
334
-                            $valid_data[ $what ][] = $qty;
335
-                            $valid_data['total_tickets'] += $qty;
336
-                        }
337
-                        break;
338
-                    // array of integers
339
-                    case 'ticket_id':
340
-                        // cycle thru values
341
-                        foreach ((array) $input_value as $key => $value) {
342
-                            // allow only integers
343
-                            $valid_data[ $what ][ $key ] = absint($value);
344
-                        }
345
-                        break;
346
-                    case 'return_url':
347
-                        // grab and sanitize return-url
348
-                        $input_value = esc_url_raw($input_value);
349
-                        // was the request coming from an iframe ? if so, then:
350
-                        if (strpos($input_value, 'event_list=iframe')) {
351
-                            // get anchor fragment
352
-                            $input_value = explode('#', $input_value);
353
-                            $input_value = end($input_value);
354
-                            // use event list url instead, but append anchor
355
-                            $input_value = EEH_Event_View::event_archive_url() . '#' . $input_value;
356
-                        }
357
-                        $valid_data[ $what ] = $input_value;
358
-                        break;
359
-                }    // end switch $what
360
-            }
361
-        }    // end foreach $inputs_to_clean
362
-        return $valid_data;
363
-    }
259
+	/**
260
+	 * validate_post_data
261
+	 *
262
+	 * @param int $id
263
+	 * @return array|FALSE
264
+	 */
265
+	private function validatePostData($id = 0)
266
+	{
267
+		if (! $id) {
268
+			EE_Error::add_error(
269
+				esc_html__('The event id provided was not valid.', 'event_espresso'),
270
+				__FILE__,
271
+				__FUNCTION__,
272
+				__LINE__
273
+			);
274
+			return false;
275
+		}
276
+		// start with an empty array()
277
+		$valid_data = array();
278
+		// grab valid id
279
+		$valid_data['id'] = $id;
280
+		// array of other form names
281
+		$inputs_to_clean = array(
282
+			'event_id'   => 'tkt-slctr-event-id',
283
+			'max_atndz'  => 'tkt-slctr-max-atndz-',
284
+			'rows'       => 'tkt-slctr-rows-',
285
+			'qty'        => 'tkt-slctr-qty-',
286
+			'ticket_id'  => 'tkt-slctr-ticket-id-',
287
+			'return_url' => 'tkt-slctr-return-url-',
288
+		);
289
+		// let's track the total number of tickets ordered.'
290
+		$valid_data['total_tickets'] = 0;
291
+		// cycle through $inputs_to_clean array
292
+		foreach ($inputs_to_clean as $what => $input_to_clean) {
293
+			// check for POST data
294
+			if ($this->request->requestParamIsSet($input_to_clean . $id)) {
295
+				// grab value
296
+				$input_value = $this->request->getRequestParam($input_to_clean . $id);
297
+				switch ($what) {
298
+					// integers
299
+					case 'event_id':
300
+						$valid_data[ $what ] = absint($input_value);
301
+						// get event via the event id we put in the form
302
+						break;
303
+					case 'rows':
304
+					case 'max_atndz':
305
+						$valid_data[ $what ] = absint($input_value);
306
+						break;
307
+					// arrays of integers
308
+					case 'qty':
309
+						/** @var array $row_qty */
310
+						$row_qty = $input_value;
311
+						// if qty is coming from a radio button input, then we need to assemble an array of rows
312
+						if (! is_array($row_qty)) {
313
+							/** @var string $row_qty */
314
+							// get number of rows
315
+							$rows = $this->request->requestParamIsSet('tkt-slctr-rows-' . $id)
316
+								? absint($this->request->getRequestParam('tkt-slctr-rows-' . $id))
317
+								: 1;
318
+							// explode integers by the dash
319
+							$row_qty = explode('-', $row_qty);
320
+							$row = isset($row_qty[0]) ? absint($row_qty[0]) : 1;
321
+							$qty = isset($row_qty[1]) ? absint($row_qty[1]) : 0;
322
+							$row_qty = array($row => $qty);
323
+							for ($x = 1; $x <= $rows; $x++) {
324
+								if (! isset($row_qty[ $x ])) {
325
+									$row_qty[ $x ] = 0;
326
+								}
327
+							}
328
+						}
329
+						ksort($row_qty);
330
+						// cycle thru values
331
+						foreach ($row_qty as $qty) {
332
+							$qty = absint($qty);
333
+							// sanitize as integers
334
+							$valid_data[ $what ][] = $qty;
335
+							$valid_data['total_tickets'] += $qty;
336
+						}
337
+						break;
338
+					// array of integers
339
+					case 'ticket_id':
340
+						// cycle thru values
341
+						foreach ((array) $input_value as $key => $value) {
342
+							// allow only integers
343
+							$valid_data[ $what ][ $key ] = absint($value);
344
+						}
345
+						break;
346
+					case 'return_url':
347
+						// grab and sanitize return-url
348
+						$input_value = esc_url_raw($input_value);
349
+						// was the request coming from an iframe ? if so, then:
350
+						if (strpos($input_value, 'event_list=iframe')) {
351
+							// get anchor fragment
352
+							$input_value = explode('#', $input_value);
353
+							$input_value = end($input_value);
354
+							// use event list url instead, but append anchor
355
+							$input_value = EEH_Event_View::event_archive_url() . '#' . $input_value;
356
+						}
357
+						$valid_data[ $what ] = $input_value;
358
+						break;
359
+				}    // end switch $what
360
+			}
361
+		}    // end foreach $inputs_to_clean
362
+		return $valid_data;
363
+	}
364 364
 
365 365
 
366
-    /**
367
-     * @param array $valid
368
-     */
369
-    private function maxAttendeesViolation(array $valid)
370
-    {
371
-        // ordering too many tickets !!!
372
-        $total_tickets_string = esc_html(
373
-            _n(
374
-                'You have attempted to purchase %s ticket.',
375
-                'You have attempted to purchase %s tickets.',
376
-                $valid['total_tickets'],
377
-                'event_espresso'
378
-            )
379
-        );
380
-        $limit_error_1 = sprintf($total_tickets_string, $valid['total_tickets']);
381
-        // dev only message
382
-        $max_attendees_string = esc_html(
383
-            _n(
384
-                'The registration limit for this event is %s ticket per registration, therefore the total number of tickets you may purchase at a time can not exceed %s.',
385
-                'The registration limit for this event is %s tickets per registration, therefore the total number of tickets you may purchase at a time can not exceed %s.',
386
-                $valid['max_atndz'],
387
-                'event_espresso'
388
-            )
389
-        );
390
-        $limit_error_2 = sprintf($max_attendees_string, $valid['max_atndz'], $valid['max_atndz']);
391
-        EE_Error::add_error($limit_error_1 . '<br/>' . $limit_error_2, __FILE__, __FUNCTION__, __LINE__);
392
-    }
366
+	/**
367
+	 * @param array $valid
368
+	 */
369
+	private function maxAttendeesViolation(array $valid)
370
+	{
371
+		// ordering too many tickets !!!
372
+		$total_tickets_string = esc_html(
373
+			_n(
374
+				'You have attempted to purchase %s ticket.',
375
+				'You have attempted to purchase %s tickets.',
376
+				$valid['total_tickets'],
377
+				'event_espresso'
378
+			)
379
+		);
380
+		$limit_error_1 = sprintf($total_tickets_string, $valid['total_tickets']);
381
+		// dev only message
382
+		$max_attendees_string = esc_html(
383
+			_n(
384
+				'The registration limit for this event is %s ticket per registration, therefore the total number of tickets you may purchase at a time can not exceed %s.',
385
+				'The registration limit for this event is %s tickets per registration, therefore the total number of tickets you may purchase at a time can not exceed %s.',
386
+				$valid['max_atndz'],
387
+				'event_espresso'
388
+			)
389
+		);
390
+		$limit_error_2 = sprintf($max_attendees_string, $valid['max_atndz'], $valid['max_atndz']);
391
+		EE_Error::add_error($limit_error_1 . '<br/>' . $limit_error_2, __FILE__, __FUNCTION__, __LINE__);
392
+	}
393 393
 
394 394
 
395
-    /**
396
-     * @param array $valid
397
-     * @return int|TRUE
398
-     * @throws EE_Error
399
-     * @throws InvalidArgumentException
400
-     * @throws InvalidDataTypeException
401
-     * @throws InvalidInterfaceException
402
-     */
403
-    private function addTicketsToCart(array $valid)
404
-    {
405
-        $tickets_added = 0;
406
-        $tickets_selected = false;
407
-        if ($valid['total_tickets'] > 0) {
408
-            // load cart using factory because we don't want to do so until actually needed
409
-            $this->cart = CartFactory::getCart();
410
-            // cycle thru the number of data rows sent from the event listing
411
-            for ($x = 0; $x < $valid['rows']; $x++) {
412
-                // does this row actually contain a ticket quantity?
413
-                if (isset($valid['qty'][ $x ]) && $valid['qty'][ $x ] > 0) {
414
-                    // YES we have a ticket quantity
415
-                    $tickets_selected = true;
416
-                    $valid_ticket = false;
417
-                    // \EEH_Debug_Tools::printr(
418
-                    //     $valid['ticket_id'][ $x ],
419
-                    //     '$valid[\'ticket_id\'][ $x ]',
420
-                    //     __FILE__, __LINE__
421
-                    // );
422
-                    if (isset($valid['ticket_id'][ $x ])) {
423
-                        // get ticket via the ticket id we put in the form
424
-                        $ticket = $this->ticket_model->get_one_by_ID($valid['ticket_id'][ $x ]);
425
-                        if ($ticket instanceof EE_Ticket) {
426
-                            $valid_ticket = true;
427
-                            $tickets_added += $this->addTicketToCart(
428
-                                $ticket,
429
-                                $valid['qty'][ $x ]
430
-                            );
431
-                        }
432
-                    }
433
-                    if ($valid_ticket !== true) {
434
-                        // nothing added to cart retrieved
435
-                        EE_Error::add_error(
436
-                            sprintf(
437
-                                esc_html__(
438
-                                    'A valid ticket could not be retrieved for the event.%sPlease click the back button on your browser and try again.',
439
-                                    'event_espresso'
440
-                                ),
441
-                                '<br/>'
442
-                            ),
443
-                            __FILE__,
444
-                            __FUNCTION__,
445
-                            __LINE__
446
-                        );
447
-                    }
448
-                    if (EE_Error::has_error()) {
449
-                        break;
450
-                    }
451
-                }
452
-            }
453
-        }
454
-        do_action(
455
-            'AHEE__EE_Ticket_Selector__process_ticket_selections__after_tickets_added_to_cart',
456
-            $this->cart,
457
-            $this
458
-        );
459
-        if (! apply_filters('FHEE__EED_Ticket_Selector__process_ticket_selections__tckts_slctd', $tickets_selected)) {
460
-            // no ticket quantities were selected
461
-            EE_Error::add_error(
462
-                esc_html__('You need to select a ticket quantity before you can proceed.', 'event_espresso'),
463
-                __FILE__,
464
-                __FUNCTION__,
465
-                __LINE__
466
-            );
467
-        }
468
-        return $tickets_added;
469
-    }
395
+	/**
396
+	 * @param array $valid
397
+	 * @return int|TRUE
398
+	 * @throws EE_Error
399
+	 * @throws InvalidArgumentException
400
+	 * @throws InvalidDataTypeException
401
+	 * @throws InvalidInterfaceException
402
+	 */
403
+	private function addTicketsToCart(array $valid)
404
+	{
405
+		$tickets_added = 0;
406
+		$tickets_selected = false;
407
+		if ($valid['total_tickets'] > 0) {
408
+			// load cart using factory because we don't want to do so until actually needed
409
+			$this->cart = CartFactory::getCart();
410
+			// cycle thru the number of data rows sent from the event listing
411
+			for ($x = 0; $x < $valid['rows']; $x++) {
412
+				// does this row actually contain a ticket quantity?
413
+				if (isset($valid['qty'][ $x ]) && $valid['qty'][ $x ] > 0) {
414
+					// YES we have a ticket quantity
415
+					$tickets_selected = true;
416
+					$valid_ticket = false;
417
+					// \EEH_Debug_Tools::printr(
418
+					//     $valid['ticket_id'][ $x ],
419
+					//     '$valid[\'ticket_id\'][ $x ]',
420
+					//     __FILE__, __LINE__
421
+					// );
422
+					if (isset($valid['ticket_id'][ $x ])) {
423
+						// get ticket via the ticket id we put in the form
424
+						$ticket = $this->ticket_model->get_one_by_ID($valid['ticket_id'][ $x ]);
425
+						if ($ticket instanceof EE_Ticket) {
426
+							$valid_ticket = true;
427
+							$tickets_added += $this->addTicketToCart(
428
+								$ticket,
429
+								$valid['qty'][ $x ]
430
+							);
431
+						}
432
+					}
433
+					if ($valid_ticket !== true) {
434
+						// nothing added to cart retrieved
435
+						EE_Error::add_error(
436
+							sprintf(
437
+								esc_html__(
438
+									'A valid ticket could not be retrieved for the event.%sPlease click the back button on your browser and try again.',
439
+									'event_espresso'
440
+								),
441
+								'<br/>'
442
+							),
443
+							__FILE__,
444
+							__FUNCTION__,
445
+							__LINE__
446
+						);
447
+					}
448
+					if (EE_Error::has_error()) {
449
+						break;
450
+					}
451
+				}
452
+			}
453
+		}
454
+		do_action(
455
+			'AHEE__EE_Ticket_Selector__process_ticket_selections__after_tickets_added_to_cart',
456
+			$this->cart,
457
+			$this
458
+		);
459
+		if (! apply_filters('FHEE__EED_Ticket_Selector__process_ticket_selections__tckts_slctd', $tickets_selected)) {
460
+			// no ticket quantities were selected
461
+			EE_Error::add_error(
462
+				esc_html__('You need to select a ticket quantity before you can proceed.', 'event_espresso'),
463
+				__FILE__,
464
+				__FUNCTION__,
465
+				__LINE__
466
+			);
467
+		}
468
+		return $tickets_added;
469
+	}
470 470
 
471 471
 
472
-    /**
473
-     * adds a ticket to the cart
474
-     *
475
-     * @param EE_Ticket $ticket
476
-     * @param int       $qty
477
-     * @return TRUE on success, FALSE on fail
478
-     * @throws InvalidArgumentException
479
-     * @throws InvalidInterfaceException
480
-     * @throws InvalidDataTypeException
481
-     * @throws EE_Error
482
-     */
483
-    private function addTicketToCart(EE_Ticket $ticket, $qty = 1)
484
-    {
485
-        // get the number of spaces left for this datetime ticket
486
-        $available_spaces = $this->tracker->ticketDatetimeAvailability($ticket);
487
-        // compare available spaces against the number of tickets being purchased
488
-        if ($available_spaces >= $qty) {
489
-            // allow addons to prevent a ticket from being added to cart
490
-            if (! apply_filters(
491
-                'FHEE__EE_Ticket_Selector___add_ticket_to_cart__allow_add_to_cart',
492
-                true,
493
-                $ticket,
494
-                $qty,
495
-                $available_spaces
496
-            )) {
497
-                return false;
498
-            }
499
-            $qty = absint(apply_filters('FHEE__EE_Ticket_Selector___add_ticket_to_cart__ticket_qty', $qty, $ticket));
500
-            // add event to cart
501
-            if ($this->cart->add_ticket_to_cart($ticket, $qty)) {
502
-                $this->tracker->recalculateTicketDatetimeAvailability($ticket, $qty);
503
-                return true;
504
-            }
505
-            return false;
506
-        }
507
-        $this->tracker->processAvailabilityError($ticket, $qty, $this->cart->all_ticket_quantity_count());
508
-        return false;
509
-    }
472
+	/**
473
+	 * adds a ticket to the cart
474
+	 *
475
+	 * @param EE_Ticket $ticket
476
+	 * @param int       $qty
477
+	 * @return TRUE on success, FALSE on fail
478
+	 * @throws InvalidArgumentException
479
+	 * @throws InvalidInterfaceException
480
+	 * @throws InvalidDataTypeException
481
+	 * @throws EE_Error
482
+	 */
483
+	private function addTicketToCart(EE_Ticket $ticket, $qty = 1)
484
+	{
485
+		// get the number of spaces left for this datetime ticket
486
+		$available_spaces = $this->tracker->ticketDatetimeAvailability($ticket);
487
+		// compare available spaces against the number of tickets being purchased
488
+		if ($available_spaces >= $qty) {
489
+			// allow addons to prevent a ticket from being added to cart
490
+			if (! apply_filters(
491
+				'FHEE__EE_Ticket_Selector___add_ticket_to_cart__allow_add_to_cart',
492
+				true,
493
+				$ticket,
494
+				$qty,
495
+				$available_spaces
496
+			)) {
497
+				return false;
498
+			}
499
+			$qty = absint(apply_filters('FHEE__EE_Ticket_Selector___add_ticket_to_cart__ticket_qty', $qty, $ticket));
500
+			// add event to cart
501
+			if ($this->cart->add_ticket_to_cart($ticket, $qty)) {
502
+				$this->tracker->recalculateTicketDatetimeAvailability($ticket, $qty);
503
+				return true;
504
+			}
505
+			return false;
506
+		}
507
+		$this->tracker->processAvailabilityError($ticket, $qty, $this->cart->all_ticket_quantity_count());
508
+		return false;
509
+	}
510 510
 
511 511
 
512
-    /**
513
-     * @param $tickets_added
514
-     * @return bool
515
-     * @throws InvalidInterfaceException
516
-     * @throws InvalidDataTypeException
517
-     * @throws EE_Error
518
-     * @throws InvalidArgumentException
519
-     */
520
-    private function processSuccessfulCart($tickets_added)
521
-    {
522
-        // exit('KILL REDIRECT BEFORE CART UPDATE'); // <<<<<<<<<<<<<<<<< KILL REDIRECT HERE BEFORE CART UPDATE
523
-        if (apply_filters('FHEE__EED_Ticket_Selector__process_ticket_selections__success', $tickets_added)) {
524
-            // make sure cart is loaded
525
-            if (! $this->cart instanceof EE_Cart) {
526
-                $this->cart = CartFactory::getCart();
527
-            }
528
-            do_action(
529
-                'FHEE__EE_Ticket_Selector__process_ticket_selections__before_redirecting_to_checkout',
530
-                $this->cart,
531
-                $this
532
-            );
533
-            $this->cart->recalculate_all_cart_totals();
534
-            $this->cart->save_cart(false);
535
-            // exit('KILL REDIRECT AFTER CART UPDATE'); // <<<<<<<<  OR HERE TO KILL REDIRECT AFTER CART UPDATE
536
-            // just return TRUE for registrations being made from admin
537
-            if ($this->request->isAdmin() || $this->request->isFrontAjax()) {
538
-                return true;
539
-            }
540
-            EEH_URL::safeRedirectAndExit(
541
-                apply_filters(
542
-                    'FHEE__EE_Ticket_Selector__process_ticket_selections__success_redirect_url',
543
-                    $this->core_config->reg_page_url()
544
-                )
545
-            );
546
-        }
547
-        if (! EE_Error::has_error() && ! EE_Error::has_error(true, 'attention')) {
548
-            // nothing added to cart
549
-            EE_Error::add_attention(
550
-                esc_html__('No tickets were added for the event', 'event_espresso'),
551
-                __FILE__,
552
-                __FUNCTION__,
553
-                __LINE__
554
-            );
555
-        }
556
-        return false;
557
-    }
512
+	/**
513
+	 * @param $tickets_added
514
+	 * @return bool
515
+	 * @throws InvalidInterfaceException
516
+	 * @throws InvalidDataTypeException
517
+	 * @throws EE_Error
518
+	 * @throws InvalidArgumentException
519
+	 */
520
+	private function processSuccessfulCart($tickets_added)
521
+	{
522
+		// exit('KILL REDIRECT BEFORE CART UPDATE'); // <<<<<<<<<<<<<<<<< KILL REDIRECT HERE BEFORE CART UPDATE
523
+		if (apply_filters('FHEE__EED_Ticket_Selector__process_ticket_selections__success', $tickets_added)) {
524
+			// make sure cart is loaded
525
+			if (! $this->cart instanceof EE_Cart) {
526
+				$this->cart = CartFactory::getCart();
527
+			}
528
+			do_action(
529
+				'FHEE__EE_Ticket_Selector__process_ticket_selections__before_redirecting_to_checkout',
530
+				$this->cart,
531
+				$this
532
+			);
533
+			$this->cart->recalculate_all_cart_totals();
534
+			$this->cart->save_cart(false);
535
+			// exit('KILL REDIRECT AFTER CART UPDATE'); // <<<<<<<<  OR HERE TO KILL REDIRECT AFTER CART UPDATE
536
+			// just return TRUE for registrations being made from admin
537
+			if ($this->request->isAdmin() || $this->request->isFrontAjax()) {
538
+				return true;
539
+			}
540
+			EEH_URL::safeRedirectAndExit(
541
+				apply_filters(
542
+					'FHEE__EE_Ticket_Selector__process_ticket_selections__success_redirect_url',
543
+					$this->core_config->reg_page_url()
544
+				)
545
+			);
546
+		}
547
+		if (! EE_Error::has_error() && ! EE_Error::has_error(true, 'attention')) {
548
+			// nothing added to cart
549
+			EE_Error::add_attention(
550
+				esc_html__('No tickets were added for the event', 'event_espresso'),
551
+				__FILE__,
552
+				__FUNCTION__,
553
+				__LINE__
554
+			);
555
+		}
556
+		return false;
557
+	}
558 558
 }
Please login to merge, or discard this patch.
Spacing   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -118,7 +118,7 @@  discard block
 block discarded – undo
118 118
     public function cancelTicketSelections()
119 119
     {
120 120
         // check nonce
121
-        if (! $this->processTicketSelectorNonce('cancel_ticket_selections')) {
121
+        if ( ! $this->processTicketSelectorNonce('cancel_ticket_selections')) {
122 122
             return false;
123 123
         }
124 124
         $this->session->clear_session(__CLASS__, __FUNCTION__);
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
             );
131 131
         }
132 132
         EEH_URL::safeRedirectAndExit(
133
-            site_url('/' . $this->core_config->event_cpt_slug . '/')
133
+            site_url('/'.$this->core_config->event_cpt_slug.'/')
134 134
         );
135 135
         return true;
136 136
     }
@@ -146,7 +146,7 @@  discard block
 block discarded – undo
146 146
     private function processTicketSelectorNonce($nonce_name, $id = '')
147 147
     {
148 148
         $nonce_name_with_id = ! empty($id) ? "{$nonce_name}_nonce_{$id}" : "{$nonce_name}_nonce";
149
-        if (! $this->request->isAdmin()
149
+        if ( ! $this->request->isAdmin()
150 150
             && (
151 151
                 ! $this->request->is_set($nonce_name_with_id)
152 152
                 || ! wp_verify_nonce(
@@ -236,7 +236,7 @@  discard block
 block discarded – undo
236 236
     private function getEventId()
237 237
     {
238 238
         // do we have an event id?
239
-        if (! $this->request->requestParamIsSet('tkt-slctr-event-id')) {
239
+        if ( ! $this->request->requestParamIsSet('tkt-slctr-event-id')) {
240 240
             // $_POST['tkt-slctr-event-id'] was not set ?!?!?!?
241 241
             EE_Error::add_error(
242 242
                 sprintf(
@@ -264,7 +264,7 @@  discard block
 block discarded – undo
264 264
      */
265 265
     private function validatePostData($id = 0)
266 266
     {
267
-        if (! $id) {
267
+        if ( ! $id) {
268 268
             EE_Error::add_error(
269 269
                 esc_html__('The event id provided was not valid.', 'event_espresso'),
270 270
                 __FILE__,
@@ -291,29 +291,29 @@  discard block
 block discarded – undo
291 291
         // cycle through $inputs_to_clean array
292 292
         foreach ($inputs_to_clean as $what => $input_to_clean) {
293 293
             // check for POST data
294
-            if ($this->request->requestParamIsSet($input_to_clean . $id)) {
294
+            if ($this->request->requestParamIsSet($input_to_clean.$id)) {
295 295
                 // grab value
296
-                $input_value = $this->request->getRequestParam($input_to_clean . $id);
296
+                $input_value = $this->request->getRequestParam($input_to_clean.$id);
297 297
                 switch ($what) {
298 298
                     // integers
299 299
                     case 'event_id':
300
-                        $valid_data[ $what ] = absint($input_value);
300
+                        $valid_data[$what] = absint($input_value);
301 301
                         // get event via the event id we put in the form
302 302
                         break;
303 303
                     case 'rows':
304 304
                     case 'max_atndz':
305
-                        $valid_data[ $what ] = absint($input_value);
305
+                        $valid_data[$what] = absint($input_value);
306 306
                         break;
307 307
                     // arrays of integers
308 308
                     case 'qty':
309 309
                         /** @var array $row_qty */
310 310
                         $row_qty = $input_value;
311 311
                         // if qty is coming from a radio button input, then we need to assemble an array of rows
312
-                        if (! is_array($row_qty)) {
312
+                        if ( ! is_array($row_qty)) {
313 313
                             /** @var string $row_qty */
314 314
                             // get number of rows
315
-                            $rows = $this->request->requestParamIsSet('tkt-slctr-rows-' . $id)
316
-                                ? absint($this->request->getRequestParam('tkt-slctr-rows-' . $id))
315
+                            $rows = $this->request->requestParamIsSet('tkt-slctr-rows-'.$id)
316
+                                ? absint($this->request->getRequestParam('tkt-slctr-rows-'.$id))
317 317
                                 : 1;
318 318
                             // explode integers by the dash
319 319
                             $row_qty = explode('-', $row_qty);
@@ -321,8 +321,8 @@  discard block
 block discarded – undo
321 321
                             $qty = isset($row_qty[1]) ? absint($row_qty[1]) : 0;
322 322
                             $row_qty = array($row => $qty);
323 323
                             for ($x = 1; $x <= $rows; $x++) {
324
-                                if (! isset($row_qty[ $x ])) {
325
-                                    $row_qty[ $x ] = 0;
324
+                                if ( ! isset($row_qty[$x])) {
325
+                                    $row_qty[$x] = 0;
326 326
                                 }
327 327
                             }
328 328
                         }
@@ -331,7 +331,7 @@  discard block
 block discarded – undo
331 331
                         foreach ($row_qty as $qty) {
332 332
                             $qty = absint($qty);
333 333
                             // sanitize as integers
334
-                            $valid_data[ $what ][] = $qty;
334
+                            $valid_data[$what][] = $qty;
335 335
                             $valid_data['total_tickets'] += $qty;
336 336
                         }
337 337
                         break;
@@ -340,7 +340,7 @@  discard block
 block discarded – undo
340 340
                         // cycle thru values
341 341
                         foreach ((array) $input_value as $key => $value) {
342 342
                             // allow only integers
343
-                            $valid_data[ $what ][ $key ] = absint($value);
343
+                            $valid_data[$what][$key] = absint($value);
344 344
                         }
345 345
                         break;
346 346
                     case 'return_url':
@@ -352,9 +352,9 @@  discard block
 block discarded – undo
352 352
                             $input_value = explode('#', $input_value);
353 353
                             $input_value = end($input_value);
354 354
                             // use event list url instead, but append anchor
355
-                            $input_value = EEH_Event_View::event_archive_url() . '#' . $input_value;
355
+                            $input_value = EEH_Event_View::event_archive_url().'#'.$input_value;
356 356
                         }
357
-                        $valid_data[ $what ] = $input_value;
357
+                        $valid_data[$what] = $input_value;
358 358
                         break;
359 359
                 }    // end switch $what
360 360
             }
@@ -388,7 +388,7 @@  discard block
 block discarded – undo
388 388
             )
389 389
         );
390 390
         $limit_error_2 = sprintf($max_attendees_string, $valid['max_atndz'], $valid['max_atndz']);
391
-        EE_Error::add_error($limit_error_1 . '<br/>' . $limit_error_2, __FILE__, __FUNCTION__, __LINE__);
391
+        EE_Error::add_error($limit_error_1.'<br/>'.$limit_error_2, __FILE__, __FUNCTION__, __LINE__);
392 392
     }
393 393
 
394 394
 
@@ -410,7 +410,7 @@  discard block
 block discarded – undo
410 410
             // cycle thru the number of data rows sent from the event listing
411 411
             for ($x = 0; $x < $valid['rows']; $x++) {
412 412
                 // does this row actually contain a ticket quantity?
413
-                if (isset($valid['qty'][ $x ]) && $valid['qty'][ $x ] > 0) {
413
+                if (isset($valid['qty'][$x]) && $valid['qty'][$x] > 0) {
414 414
                     // YES we have a ticket quantity
415 415
                     $tickets_selected = true;
416 416
                     $valid_ticket = false;
@@ -419,14 +419,14 @@  discard block
 block discarded – undo
419 419
                     //     '$valid[\'ticket_id\'][ $x ]',
420 420
                     //     __FILE__, __LINE__
421 421
                     // );
422
-                    if (isset($valid['ticket_id'][ $x ])) {
422
+                    if (isset($valid['ticket_id'][$x])) {
423 423
                         // get ticket via the ticket id we put in the form
424
-                        $ticket = $this->ticket_model->get_one_by_ID($valid['ticket_id'][ $x ]);
424
+                        $ticket = $this->ticket_model->get_one_by_ID($valid['ticket_id'][$x]);
425 425
                         if ($ticket instanceof EE_Ticket) {
426 426
                             $valid_ticket = true;
427 427
                             $tickets_added += $this->addTicketToCart(
428 428
                                 $ticket,
429
-                                $valid['qty'][ $x ]
429
+                                $valid['qty'][$x]
430 430
                             );
431 431
                         }
432 432
                     }
@@ -456,7 +456,7 @@  discard block
 block discarded – undo
456 456
             $this->cart,
457 457
             $this
458 458
         );
459
-        if (! apply_filters('FHEE__EED_Ticket_Selector__process_ticket_selections__tckts_slctd', $tickets_selected)) {
459
+        if ( ! apply_filters('FHEE__EED_Ticket_Selector__process_ticket_selections__tckts_slctd', $tickets_selected)) {
460 460
             // no ticket quantities were selected
461 461
             EE_Error::add_error(
462 462
                 esc_html__('You need to select a ticket quantity before you can proceed.', 'event_espresso'),
@@ -487,7 +487,7 @@  discard block
 block discarded – undo
487 487
         // compare available spaces against the number of tickets being purchased
488 488
         if ($available_spaces >= $qty) {
489 489
             // allow addons to prevent a ticket from being added to cart
490
-            if (! apply_filters(
490
+            if ( ! apply_filters(
491 491
                 'FHEE__EE_Ticket_Selector___add_ticket_to_cart__allow_add_to_cart',
492 492
                 true,
493 493
                 $ticket,
@@ -522,7 +522,7 @@  discard block
 block discarded – undo
522 522
         // exit('KILL REDIRECT BEFORE CART UPDATE'); // <<<<<<<<<<<<<<<<< KILL REDIRECT HERE BEFORE CART UPDATE
523 523
         if (apply_filters('FHEE__EED_Ticket_Selector__process_ticket_selections__success', $tickets_added)) {
524 524
             // make sure cart is loaded
525
-            if (! $this->cart instanceof EE_Cart) {
525
+            if ( ! $this->cart instanceof EE_Cart) {
526 526
                 $this->cart = CartFactory::getCart();
527 527
             }
528 528
             do_action(
@@ -544,7 +544,7 @@  discard block
 block discarded – undo
544 544
                 )
545 545
             );
546 546
         }
547
-        if (! EE_Error::has_error() && ! EE_Error::has_error(true, 'attention')) {
547
+        if ( ! EE_Error::has_error() && ! EE_Error::has_error(true, 'attention')) {
548 548
             // nothing added to cart
549 549
             EE_Error::add_attention(
550 550
                 esc_html__('No tickets were added for the event', 'event_espresso'),
Please login to merge, or discard this patch.
modules/ticket_selector/DatetimeSelector.php 2 patches
Indentation   +167 added lines, -167 removed lines patch added patch discarded remove patch
@@ -12,171 +12,171 @@
 block discarded – undo
12 12
 class DatetimeSelector
13 13
 {
14 14
 
15
-    /**
16
-     * @var \EE_Event $event
17
-     */
18
-    protected $event;
19
-
20
-    /**
21
-     * @var \EE_Ticket[] $tickets
22
-     */
23
-    protected $tickets;
24
-
25
-    /**
26
-     * @var \EE_Datetime[] $datetimes
27
-     */
28
-    protected $datetimes;
29
-
30
-    /**
31
-     * @var \EE_Datetime[] $unique_dates
32
-     */
33
-    protected $unique_dates;
34
-
35
-    /**
36
-     * @var \EE_Ticket_Selector_Config $template_settings
37
-     */
38
-    protected $template_settings;
39
-
40
-    /**
41
-     * @var boolean $active
42
-     */
43
-    protected $active = false;
44
-
45
-
46
-    /**
47
-     * DatetimeSelector constructor.
48
-     *
49
-     * @param \EE_Event                  $event
50
-     * @param \EE_Ticket[]               $tickets
51
-     * @param \EE_Ticket_Selector_Config $template_settings
52
-     * @param string                     $date_format
53
-     * @param string                     $time_format
54
-     * @throws \EE_Error
55
-     */
56
-    public function __construct(
57
-        \EE_Event $event,
58
-        array $tickets,
59
-        \EE_Ticket_Selector_Config $template_settings,
60
-        $date_format = 'Y-m-d',
61
-        $time_format = 'g:i a'
62
-    ) {
63
-        $this->event = $event;
64
-        $this->tickets = $tickets;
65
-        $this->template_settings = $template_settings;
66
-        $this->datetimes = $this->getAllDatetimesForAllTicket($tickets);
67
-        $this->unique_dates = $this->getUniqueDatetimeOptions($date_format, $time_format);
68
-        $this->active = $this->template_settings->showDatetimeSelector($this->unique_dates);
69
-    }
70
-
71
-
72
-    /**
73
-     * @param \EE_Ticket[] $tickets
74
-     * @return array
75
-     * @throws \EE_Error
76
-     */
77
-    protected function getAllDatetimesForAllTicket($tickets = array())
78
-    {
79
-        $datetimes = array();
80
-        foreach ($tickets as $ticket) {
81
-            $datetimes = $this->getTicketDatetimes($ticket, $datetimes);
82
-        }
83
-        return $datetimes;
84
-    }
85
-
86
-
87
-    /**
88
-     * @param \EE_Ticket      $ticket
89
-     * @param  \EE_Datetime[] $datetimes
90
-     * @return \EE_Datetime[]
91
-     * @throws \EE_Error
92
-     */
93
-    protected function getTicketDatetimes(\EE_Ticket $ticket, $datetimes = array())
94
-    {
95
-        $ticket_datetimes = $ticket->datetimes(
96
-            array(
97
-                'order_by'                 => array(
98
-                    'DTT_order'     => 'ASC',
99
-                    'DTT_EVT_start' => 'ASC',
100
-                ),
101
-                'default_where_conditions' => 'none',
102
-            )
103
-        );
104
-        foreach ($ticket_datetimes as $ticket_datetime) {
105
-            if (! $ticket_datetime instanceof \EE_Datetime) {
106
-                continue;
107
-            }
108
-            $datetimes[ $ticket_datetime->ID() ] = $ticket_datetime;
109
-        }
110
-        return $datetimes;
111
-    }
112
-
113
-
114
-    /**
115
-     * @param \EE_Ticket $ticket
116
-     * @return string
117
-     * @throws \EE_Error
118
-     */
119
-    public function getTicketDatetimeClasses(\EE_Ticket $ticket)
120
-    {
121
-        if (! $this->active) {
122
-            return '';
123
-        }
124
-        $ticket_datetimes = $this->getTicketDatetimes($ticket);
125
-        $classes = '';
126
-        foreach ($this->datetimes as $datetime) {
127
-            if (! $datetime instanceof \EE_Datetime || ! in_array($datetime, $ticket_datetimes, true)) {
128
-                continue;
129
-            }
130
-            $classes .= ' ee-ticket-datetimes-' . $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_');
131
-        }
132
-        return $classes;
133
-    }
134
-
135
-
136
-    /**
137
-     * @param string $date_format
138
-     * @param string $time_format
139
-     * @return array
140
-     * @throws \EE_Error
141
-     */
142
-    public function getUniqueDatetimeOptions($date_format = 'Y-m-d', $time_format = 'g:i a')
143
-    {
144
-        $datetime_options = array();
145
-        foreach ($this->datetimes as $datetime) {
146
-            if (! $datetime instanceof \EE_Datetime) {
147
-                continue;
148
-            }
149
-            $datetime_options[ $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_') ] =
150
-                $datetime->date_and_time_range($date_format, $time_format, ' - ');
151
-        }
152
-        return $datetime_options;
153
-    }
154
-
155
-
156
-    /**
157
-     * @return string
158
-     * @throws \EE_Error
159
-     */
160
-    public function getDatetimeSelector()
161
-    {
162
-        if (! $this->active) {
163
-            return '';
164
-        }
165
-        $dropdown_selector = new \EE_Checkbox_Dropdown_Selector_Input(
166
-            $this->unique_dates,
167
-            array(
168
-                'html_id'               => 'datetime-selector-' . $this->event->ID(),
169
-                'html_name'             => 'datetime_selector_' . $this->event->ID(),
170
-                'html_class'            => 'datetime-selector',
171
-                'select_button_text'    => '<span class="dashicons dashicons-calendar-alt"></span> '
172
-                                           . esc_html__('Filter by Date', 'event_espresso'),
173
-                'other_html_attributes' => ' data-tkt_slctr_evt="' . $this->event->ID() . '"',
174
-            )
175
-        );
176
-        return \EEH_HTML::div(
177
-            $dropdown_selector->get_html_for_input(),
178
-            '',
179
-            'datetime_selector-dv'
180
-        );
181
-    }
15
+	/**
16
+	 * @var \EE_Event $event
17
+	 */
18
+	protected $event;
19
+
20
+	/**
21
+	 * @var \EE_Ticket[] $tickets
22
+	 */
23
+	protected $tickets;
24
+
25
+	/**
26
+	 * @var \EE_Datetime[] $datetimes
27
+	 */
28
+	protected $datetimes;
29
+
30
+	/**
31
+	 * @var \EE_Datetime[] $unique_dates
32
+	 */
33
+	protected $unique_dates;
34
+
35
+	/**
36
+	 * @var \EE_Ticket_Selector_Config $template_settings
37
+	 */
38
+	protected $template_settings;
39
+
40
+	/**
41
+	 * @var boolean $active
42
+	 */
43
+	protected $active = false;
44
+
45
+
46
+	/**
47
+	 * DatetimeSelector constructor.
48
+	 *
49
+	 * @param \EE_Event                  $event
50
+	 * @param \EE_Ticket[]               $tickets
51
+	 * @param \EE_Ticket_Selector_Config $template_settings
52
+	 * @param string                     $date_format
53
+	 * @param string                     $time_format
54
+	 * @throws \EE_Error
55
+	 */
56
+	public function __construct(
57
+		\EE_Event $event,
58
+		array $tickets,
59
+		\EE_Ticket_Selector_Config $template_settings,
60
+		$date_format = 'Y-m-d',
61
+		$time_format = 'g:i a'
62
+	) {
63
+		$this->event = $event;
64
+		$this->tickets = $tickets;
65
+		$this->template_settings = $template_settings;
66
+		$this->datetimes = $this->getAllDatetimesForAllTicket($tickets);
67
+		$this->unique_dates = $this->getUniqueDatetimeOptions($date_format, $time_format);
68
+		$this->active = $this->template_settings->showDatetimeSelector($this->unique_dates);
69
+	}
70
+
71
+
72
+	/**
73
+	 * @param \EE_Ticket[] $tickets
74
+	 * @return array
75
+	 * @throws \EE_Error
76
+	 */
77
+	protected function getAllDatetimesForAllTicket($tickets = array())
78
+	{
79
+		$datetimes = array();
80
+		foreach ($tickets as $ticket) {
81
+			$datetimes = $this->getTicketDatetimes($ticket, $datetimes);
82
+		}
83
+		return $datetimes;
84
+	}
85
+
86
+
87
+	/**
88
+	 * @param \EE_Ticket      $ticket
89
+	 * @param  \EE_Datetime[] $datetimes
90
+	 * @return \EE_Datetime[]
91
+	 * @throws \EE_Error
92
+	 */
93
+	protected function getTicketDatetimes(\EE_Ticket $ticket, $datetimes = array())
94
+	{
95
+		$ticket_datetimes = $ticket->datetimes(
96
+			array(
97
+				'order_by'                 => array(
98
+					'DTT_order'     => 'ASC',
99
+					'DTT_EVT_start' => 'ASC',
100
+				),
101
+				'default_where_conditions' => 'none',
102
+			)
103
+		);
104
+		foreach ($ticket_datetimes as $ticket_datetime) {
105
+			if (! $ticket_datetime instanceof \EE_Datetime) {
106
+				continue;
107
+			}
108
+			$datetimes[ $ticket_datetime->ID() ] = $ticket_datetime;
109
+		}
110
+		return $datetimes;
111
+	}
112
+
113
+
114
+	/**
115
+	 * @param \EE_Ticket $ticket
116
+	 * @return string
117
+	 * @throws \EE_Error
118
+	 */
119
+	public function getTicketDatetimeClasses(\EE_Ticket $ticket)
120
+	{
121
+		if (! $this->active) {
122
+			return '';
123
+		}
124
+		$ticket_datetimes = $this->getTicketDatetimes($ticket);
125
+		$classes = '';
126
+		foreach ($this->datetimes as $datetime) {
127
+			if (! $datetime instanceof \EE_Datetime || ! in_array($datetime, $ticket_datetimes, true)) {
128
+				continue;
129
+			}
130
+			$classes .= ' ee-ticket-datetimes-' . $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_');
131
+		}
132
+		return $classes;
133
+	}
134
+
135
+
136
+	/**
137
+	 * @param string $date_format
138
+	 * @param string $time_format
139
+	 * @return array
140
+	 * @throws \EE_Error
141
+	 */
142
+	public function getUniqueDatetimeOptions($date_format = 'Y-m-d', $time_format = 'g:i a')
143
+	{
144
+		$datetime_options = array();
145
+		foreach ($this->datetimes as $datetime) {
146
+			if (! $datetime instanceof \EE_Datetime) {
147
+				continue;
148
+			}
149
+			$datetime_options[ $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_') ] =
150
+				$datetime->date_and_time_range($date_format, $time_format, ' - ');
151
+		}
152
+		return $datetime_options;
153
+	}
154
+
155
+
156
+	/**
157
+	 * @return string
158
+	 * @throws \EE_Error
159
+	 */
160
+	public function getDatetimeSelector()
161
+	{
162
+		if (! $this->active) {
163
+			return '';
164
+		}
165
+		$dropdown_selector = new \EE_Checkbox_Dropdown_Selector_Input(
166
+			$this->unique_dates,
167
+			array(
168
+				'html_id'               => 'datetime-selector-' . $this->event->ID(),
169
+				'html_name'             => 'datetime_selector_' . $this->event->ID(),
170
+				'html_class'            => 'datetime-selector',
171
+				'select_button_text'    => '<span class="dashicons dashicons-calendar-alt"></span> '
172
+										   . esc_html__('Filter by Date', 'event_espresso'),
173
+				'other_html_attributes' => ' data-tkt_slctr_evt="' . $this->event->ID() . '"',
174
+			)
175
+		);
176
+		return \EEH_HTML::div(
177
+			$dropdown_selector->get_html_for_input(),
178
+			'',
179
+			'datetime_selector-dv'
180
+		);
181
+	}
182 182
 }
Please login to merge, or discard this patch.
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -102,10 +102,10 @@  discard block
 block discarded – undo
102 102
             )
103 103
         );
104 104
         foreach ($ticket_datetimes as $ticket_datetime) {
105
-            if (! $ticket_datetime instanceof \EE_Datetime) {
105
+            if ( ! $ticket_datetime instanceof \EE_Datetime) {
106 106
                 continue;
107 107
             }
108
-            $datetimes[ $ticket_datetime->ID() ] = $ticket_datetime;
108
+            $datetimes[$ticket_datetime->ID()] = $ticket_datetime;
109 109
         }
110 110
         return $datetimes;
111 111
     }
@@ -118,16 +118,16 @@  discard block
 block discarded – undo
118 118
      */
119 119
     public function getTicketDatetimeClasses(\EE_Ticket $ticket)
120 120
     {
121
-        if (! $this->active) {
121
+        if ( ! $this->active) {
122 122
             return '';
123 123
         }
124 124
         $ticket_datetimes = $this->getTicketDatetimes($ticket);
125 125
         $classes = '';
126 126
         foreach ($this->datetimes as $datetime) {
127
-            if (! $datetime instanceof \EE_Datetime || ! in_array($datetime, $ticket_datetimes, true)) {
127
+            if ( ! $datetime instanceof \EE_Datetime || ! in_array($datetime, $ticket_datetimes, true)) {
128 128
                 continue;
129 129
             }
130
-            $classes .= ' ee-ticket-datetimes-' . $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_');
130
+            $classes .= ' ee-ticket-datetimes-'.$datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_');
131 131
         }
132 132
         return $classes;
133 133
     }
@@ -143,10 +143,10 @@  discard block
 block discarded – undo
143 143
     {
144 144
         $datetime_options = array();
145 145
         foreach ($this->datetimes as $datetime) {
146
-            if (! $datetime instanceof \EE_Datetime) {
146
+            if ( ! $datetime instanceof \EE_Datetime) {
147 147
                 continue;
148 148
             }
149
-            $datetime_options[ $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_') ] =
149
+            $datetime_options[$datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_')] =
150 150
                 $datetime->date_and_time_range($date_format, $time_format, ' - ');
151 151
         }
152 152
         return $datetime_options;
@@ -159,18 +159,18 @@  discard block
 block discarded – undo
159 159
      */
160 160
     public function getDatetimeSelector()
161 161
     {
162
-        if (! $this->active) {
162
+        if ( ! $this->active) {
163 163
             return '';
164 164
         }
165 165
         $dropdown_selector = new \EE_Checkbox_Dropdown_Selector_Input(
166 166
             $this->unique_dates,
167 167
             array(
168
-                'html_id'               => 'datetime-selector-' . $this->event->ID(),
169
-                'html_name'             => 'datetime_selector_' . $this->event->ID(),
168
+                'html_id'               => 'datetime-selector-'.$this->event->ID(),
169
+                'html_name'             => 'datetime_selector_'.$this->event->ID(),
170 170
                 'html_class'            => 'datetime-selector',
171 171
                 'select_button_text'    => '<span class="dashicons dashicons-calendar-alt"></span> '
172 172
                                            . esc_html__('Filter by Date', 'event_espresso'),
173
-                'other_html_attributes' => ' data-tkt_slctr_evt="' . $this->event->ID() . '"',
173
+                'other_html_attributes' => ' data-tkt_slctr_evt="'.$this->event->ID().'"',
174 174
             )
175 175
         );
176 176
         return \EEH_HTML::div(
Please login to merge, or discard this patch.
caffeinated/modules/recaptcha/ReCaptcha/Response.php 2 patches
Indentation   +61 added lines, -61 removed lines patch added patch discarded remove patch
@@ -28,74 +28,74 @@
 block discarded – undo
28 28
  */
29 29
 class Response
30 30
 {
31
-    /**
32
-     * Succes or failure.
33
-     *
34
-     * @var boolean
35
-     */
36
-    private $success = false;
31
+	/**
32
+	 * Succes or failure.
33
+	 *
34
+	 * @var boolean
35
+	 */
36
+	private $success = false;
37 37
 
38
-    /**
39
-     * Error code strings.
40
-     *
41
-     * @var array
42
-     */
43
-    private $errorCodes = array();
38
+	/**
39
+	 * Error code strings.
40
+	 *
41
+	 * @var array
42
+	 */
43
+	private $errorCodes = array();
44 44
 
45
-    /**
46
-     * Build the response from the expected JSON returned by the service.
47
-     *
48
-     * @param string $json
49
-     * @return \ReCaptcha\Response
50
-     */
51
-    public static function fromJson($json)
52
-    {
53
-        $responseData = json_decode($json, true);
45
+	/**
46
+	 * Build the response from the expected JSON returned by the service.
47
+	 *
48
+	 * @param string $json
49
+	 * @return \ReCaptcha\Response
50
+	 */
51
+	public static function fromJson($json)
52
+	{
53
+		$responseData = json_decode($json, true);
54 54
 
55
-        if (! $responseData) {
56
-            return new Response(false, array('invalid-json'));
57
-        }
55
+		if (! $responseData) {
56
+			return new Response(false, array('invalid-json'));
57
+		}
58 58
 
59
-        if (isset($responseData['success']) && $responseData['success'] == true) {
60
-            return new Response(true);
61
-        }
59
+		if (isset($responseData['success']) && $responseData['success'] == true) {
60
+			return new Response(true);
61
+		}
62 62
 
63
-        if (isset($responseData['error-codes']) && is_array($responseData['error-codes'])) {
64
-            return new Response(false, $responseData['error-codes']);
65
-        }
63
+		if (isset($responseData['error-codes']) && is_array($responseData['error-codes'])) {
64
+			return new Response(false, $responseData['error-codes']);
65
+		}
66 66
 
67
-        return new Response(false);
68
-    }
67
+		return new Response(false);
68
+	}
69 69
 
70
-    /**
71
-     * Constructor.
72
-     *
73
-     * @param boolean $success
74
-     * @param array   $errorCodes
75
-     */
76
-    public function __construct($success, array $errorCodes = array())
77
-    {
78
-        $this->success = $success;
79
-        $this->errorCodes = $errorCodes;
80
-    }
70
+	/**
71
+	 * Constructor.
72
+	 *
73
+	 * @param boolean $success
74
+	 * @param array   $errorCodes
75
+	 */
76
+	public function __construct($success, array $errorCodes = array())
77
+	{
78
+		$this->success = $success;
79
+		$this->errorCodes = $errorCodes;
80
+	}
81 81
 
82
-    /**
83
-     * Is success?
84
-     *
85
-     * @return boolean
86
-     */
87
-    public function isSuccess()
88
-    {
89
-        return $this->success;
90
-    }
82
+	/**
83
+	 * Is success?
84
+	 *
85
+	 * @return boolean
86
+	 */
87
+	public function isSuccess()
88
+	{
89
+		return $this->success;
90
+	}
91 91
 
92
-    /**
93
-     * Get error codes.
94
-     *
95
-     * @return array
96
-     */
97
-    public function getErrorCodes()
98
-    {
99
-        return $this->errorCodes;
100
-    }
92
+	/**
93
+	 * Get error codes.
94
+	 *
95
+	 * @return array
96
+	 */
97
+	public function getErrorCodes()
98
+	{
99
+		return $this->errorCodes;
100
+	}
101 101
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@
 block discarded – undo
52 52
     {
53 53
         $responseData = json_decode($json, true);
54 54
 
55
-        if (! $responseData) {
55
+        if ( ! $responseData) {
56 56
             return new Response(false, array('invalid-json'));
57 57
         }
58 58
 
Please login to merge, or discard this patch.
core/exceptions/ExceptionStackTraceDisplay.php 2 patches
Indentation   +285 added lines, -285 removed lines patch added patch discarded remove patch
@@ -19,52 +19,52 @@  discard block
 block discarded – undo
19 19
 {
20 20
 
21 21
 
22
-    /**
23
-     * @param Exception $exception
24
-     * @throws Exception
25
-     */
26
-    public function __construct(Exception $exception)
27
-    {
28
-        if (WP_DEBUG && ! defined('EE_TESTS_DIR')) {
29
-            $this->displayException($exception);
30
-        } else {
31
-            throw $exception;
32
-        }
33
-    }
22
+	/**
23
+	 * @param Exception $exception
24
+	 * @throws Exception
25
+	 */
26
+	public function __construct(Exception $exception)
27
+	{
28
+		if (WP_DEBUG && ! defined('EE_TESTS_DIR')) {
29
+			$this->displayException($exception);
30
+		} else {
31
+			throw $exception;
32
+		}
33
+	}
34 34
 
35 35
 
36
-    /**
37
-     * @access protected
38
-     * @param Exception $exception
39
-     * @throws ReflectionException
40
-     */
41
-    protected function displayException(Exception $exception)
42
-    {
43
-        $error_code = '';
44
-        $trace_details = '';
45
-        $time = time();
46
-        $trace = $exception->getTrace();
47
-        // get separate user and developer messages if they exist
48
-        $msg = explode('||', $exception->getMessage());
49
-        $user_msg = $msg[0];
50
-        $dev_msg = isset($msg[1]) ? $msg[1] : $msg[0];
51
-        $msg = WP_DEBUG ? $dev_msg : $user_msg;
52
-        // start gathering output
53
-        $output = $this->exceptionStyles();
54
-        $output .= '
36
+	/**
37
+	 * @access protected
38
+	 * @param Exception $exception
39
+	 * @throws ReflectionException
40
+	 */
41
+	protected function displayException(Exception $exception)
42
+	{
43
+		$error_code = '';
44
+		$trace_details = '';
45
+		$time = time();
46
+		$trace = $exception->getTrace();
47
+		// get separate user and developer messages if they exist
48
+		$msg = explode('||', $exception->getMessage());
49
+		$user_msg = $msg[0];
50
+		$dev_msg = isset($msg[1]) ? $msg[1] : $msg[0];
51
+		$msg = WP_DEBUG ? $dev_msg : $user_msg;
52
+		// start gathering output
53
+		$output = $this->exceptionStyles();
54
+		$output .= '
55 55
 <div id="ee-error-message" class="error">';
56
-        if (! WP_DEBUG) {
57
-            $output .= '
56
+		if (! WP_DEBUG) {
57
+			$output .= '
58 58
 	<p>';
59
-        }
60
-        // process trace info
61
-        if (empty($trace)) {
62
-            $trace_details .= __(
63
-                'Sorry, but no trace information was available for this exception.',
64
-                'event_espresso'
65
-            );
66
-        } else {
67
-            $trace_details .= '
59
+		}
60
+		// process trace info
61
+		if (empty($trace)) {
62
+			$trace_details .= __(
63
+				'Sorry, but no trace information was available for this exception.',
64
+				'event_espresso'
65
+			);
66
+		} else {
67
+			$trace_details .= '
68 68
 			<div id="ee-trace-details">
69 69
 			<table width="100%" border="0" cellpadding="5" cellspacing="0">
70 70
 				<tr>
@@ -72,263 +72,263 @@  discard block
 block discarded – undo
72 72
 					<th scope="col" align="right" style="width:3.5%;">Line</th>
73 73
 					<th scope="col" align="left" style="width:40%;">File</th>
74 74
 					<th scope="col" align="left">' . __('Class', 'event_espresso') . '->'
75
-                              . __(
76
-                                  'Method( arguments )',
77
-                                  'event_espresso'
78
-                              ) . '</th>
75
+							  . __(
76
+								  'Method( arguments )',
77
+								  'event_espresso'
78
+							  ) . '</th>
79 79
 				</tr>';
80
-            $last_on_stack = count($trace) - 1;
81
-            // reverse array so that stack is in proper chronological order
82
-            $sorted_trace = array_reverse($trace);
83
-            foreach ($sorted_trace as $nmbr => $trace) {
84
-                $file = isset($trace['file']) ? $trace['file'] : '';
85
-                $class = isset($trace['class']) ? $trace['class'] : '';
86
-                $type = isset($trace['type']) ? $trace['type'] : '';
87
-                $function = isset($trace['function']) ? $trace['function'] : '';
88
-                $args = isset($trace['args']) ? $this->_convert_args_to_string($trace['args']) : '';
89
-                $args = isset($trace['args']) && count($trace['args']) > 4 ? ' <br />' . $args . '<br />' : $args;
90
-                $line = isset($trace['line']) ? $trace['line'] : '';
91
-                $zebra = $nmbr % 2 !== 0 ? ' odd' : '';
92
-                if (empty($file) && ! empty($class)) {
93
-                    $a = new ReflectionClass($class);
94
-                    $file = $a->getFileName();
95
-                    if (empty($line) && ! empty($function)) {
96
-                        try {
97
-                            // if $function is a closure, this throws an exception
98
-                            $b = new ReflectionMethod($class, $function);
99
-                            $line = $b->getStartLine();
100
-                        } catch (Exception $closure_exception) {
101
-                            $line = 'unknown';
102
-                        }
103
-                    }
104
-                }
105
-                if ($nmbr === $last_on_stack) {
106
-                    $file = $exception->getFile() !== '' ? $exception->getFile() : $file;
107
-                    $line = $exception->getLine() !== '' ? $exception->getLine() : $line;
108
-                    $error_code = $this->generate_error_code($file, $trace['function'], $line);
109
-                }
110
-                $file = \EEH_File::standardise_directory_separators($file);
111
-                $nmbr = ! empty($nmbr) ? $nmbr : '&nbsp;';
112
-                $line = ! empty($line) ? $line : '&nbsp;';
113
-                $file = ! empty($file) ? $file : '&nbsp;';
114
-                $class_display = ! empty($class) ? $class : '';
115
-                $type = ! empty($type) ? $type : '';
116
-                $function = ! empty($function) ? $function : '';
117
-                $args = ! empty($args) ? '( ' . $args . ' )' : '()';
118
-                $trace_details .= '
80
+			$last_on_stack = count($trace) - 1;
81
+			// reverse array so that stack is in proper chronological order
82
+			$sorted_trace = array_reverse($trace);
83
+			foreach ($sorted_trace as $nmbr => $trace) {
84
+				$file = isset($trace['file']) ? $trace['file'] : '';
85
+				$class = isset($trace['class']) ? $trace['class'] : '';
86
+				$type = isset($trace['type']) ? $trace['type'] : '';
87
+				$function = isset($trace['function']) ? $trace['function'] : '';
88
+				$args = isset($trace['args']) ? $this->_convert_args_to_string($trace['args']) : '';
89
+				$args = isset($trace['args']) && count($trace['args']) > 4 ? ' <br />' . $args . '<br />' : $args;
90
+				$line = isset($trace['line']) ? $trace['line'] : '';
91
+				$zebra = $nmbr % 2 !== 0 ? ' odd' : '';
92
+				if (empty($file) && ! empty($class)) {
93
+					$a = new ReflectionClass($class);
94
+					$file = $a->getFileName();
95
+					if (empty($line) && ! empty($function)) {
96
+						try {
97
+							// if $function is a closure, this throws an exception
98
+							$b = new ReflectionMethod($class, $function);
99
+							$line = $b->getStartLine();
100
+						} catch (Exception $closure_exception) {
101
+							$line = 'unknown';
102
+						}
103
+					}
104
+				}
105
+				if ($nmbr === $last_on_stack) {
106
+					$file = $exception->getFile() !== '' ? $exception->getFile() : $file;
107
+					$line = $exception->getLine() !== '' ? $exception->getLine() : $line;
108
+					$error_code = $this->generate_error_code($file, $trace['function'], $line);
109
+				}
110
+				$file = \EEH_File::standardise_directory_separators($file);
111
+				$nmbr = ! empty($nmbr) ? $nmbr : '&nbsp;';
112
+				$line = ! empty($line) ? $line : '&nbsp;';
113
+				$file = ! empty($file) ? $file : '&nbsp;';
114
+				$class_display = ! empty($class) ? $class : '';
115
+				$type = ! empty($type) ? $type : '';
116
+				$function = ! empty($function) ? $function : '';
117
+				$args = ! empty($args) ? '( ' . $args . ' )' : '()';
118
+				$trace_details .= '
119 119
 					<tr>
120 120
 						<td align="right" valign="top" class="'
121
-                                  . $zebra
122
-                                  . '">'
123
-                                  . $nmbr
124
-                                  . '</td>
121
+								  . $zebra
122
+								  . '">'
123
+								  . $nmbr
124
+								  . '</td>
125 125
 						<td align="right" valign="top" class="'
126
-                                  . $zebra
127
-                                  . '">'
128
-                                  . $line
129
-                                  . '</td>
126
+								  . $zebra
127
+								  . '">'
128
+								  . $line
129
+								  . '</td>
130 130
 						<td align="left" valign="top" class="'
131
-                                  . $zebra
132
-                                  . '">'
133
-                                  . $file
134
-                                  . '</td>
131
+								  . $zebra
132
+								  . '">'
133
+								  . $file
134
+								  . '</td>
135 135
 						<td align="left" valign="top" class="'
136
-                                  . $zebra
137
-                                  . '">'
138
-                                  . $class_display
139
-                                  . $type
140
-                                  . $function
141
-                                  . $args
142
-                                  . '</td>
136
+								  . $zebra
137
+								  . '">'
138
+								  . $class_display
139
+								  . $type
140
+								  . $function
141
+								  . $args
142
+								  . '</td>
143 143
 					</tr>';
144
-            }
145
-            $trace_details .= '
144
+			}
145
+			$trace_details .= '
146 146
 			 </table>
147 147
 			</div>';
148
-        }
149
-        $code = $exception->getCode() ? $exception->getCode() : $error_code;
150
-        // add generic non-identifying messages for non-privileged users
151
-        if (! WP_DEBUG) {
152
-            $output .= '<span class="ee-error-user-msg-spn">'
153
-                       . trim($msg)
154
-                       . '</span> &nbsp; <sup>'
155
-                       . $code
156
-                       . '</sup><br />';
157
-        } else {
158
-            // or helpful developer messages if debugging is on
159
-            $output .= '
148
+		}
149
+		$code = $exception->getCode() ? $exception->getCode() : $error_code;
150
+		// add generic non-identifying messages for non-privileged users
151
+		if (! WP_DEBUG) {
152
+			$output .= '<span class="ee-error-user-msg-spn">'
153
+					   . trim($msg)
154
+					   . '</span> &nbsp; <sup>'
155
+					   . $code
156
+					   . '</sup><br />';
157
+		} else {
158
+			// or helpful developer messages if debugging is on
159
+			$output .= '
160 160
 		<div class="ee-error-dev-msg-dv">
161 161
 			<p class="ee-error-dev-msg-pg">
162 162
 				'
163
-                       . sprintf(
164
-                           __('%1$sAn %2$s was thrown!%3$s code: %4$s', 'event_espresso'),
165
-                           '<strong class="ee-error-dev-msg-str">',
166
-                           get_class($exception),
167
-                           '</strong>  &nbsp; <span>',
168
-                           $code . '</span>'
169
-                       )
170
-                       . '<br />
163
+					   . sprintf(
164
+						   __('%1$sAn %2$s was thrown!%3$s code: %4$s', 'event_espresso'),
165
+						   '<strong class="ee-error-dev-msg-str">',
166
+						   get_class($exception),
167
+						   '</strong>  &nbsp; <span>',
168
+						   $code . '</span>'
169
+					   )
170
+					   . '<br />
171 171
 				<span class="big-text">"'
172
-                       . trim($msg)
173
-                       . '"</span><br/>
172
+					   . trim($msg)
173
+					   . '"</span><br/>
174 174
 				<a id="display-ee-error-trace-1'
175
-                       . $time
176
-                       . '" class="display-ee-error-trace-lnk small-text" rel="ee-error-trace-1'
177
-                       . $time
178
-                       . '">
175
+					   . $time
176
+					   . '" class="display-ee-error-trace-lnk small-text" rel="ee-error-trace-1'
177
+					   . $time
178
+					   . '">
179 179
 					'
180
-                       . __('click to view backtrace and class/method details', 'event_espresso')
181
-                       . '
180
+					   . __('click to view backtrace and class/method details', 'event_espresso')
181
+					   . '
182 182
 				</a><br />
183 183
 				'
184
-                       . $exception->getFile()
185
-                       . sprintf(
186
-                           __('%1$s( line no: %2$s )%3$s', 'event_espresso'),
187
-                           ' &nbsp; <span class="small-text lt-grey-text">',
188
-                           $exception->getLine(),
189
-                           '</span>'
190
-                       )
191
-                       . '
184
+					   . $exception->getFile()
185
+					   . sprintf(
186
+						   __('%1$s( line no: %2$s )%3$s', 'event_espresso'),
187
+						   ' &nbsp; <span class="small-text lt-grey-text">',
188
+						   $exception->getLine(),
189
+						   '</span>'
190
+					   )
191
+					   . '
192 192
 			</p>
193 193
 			<div id="ee-error-trace-1'
194
-                       . $time
195
-                       . '-dv" class="ee-error-trace-dv" style="display: none;">
194
+					   . $time
195
+					   . '-dv" class="ee-error-trace-dv" style="display: none;">
196 196
 				'
197
-                       . $trace_details;
198
-            if (! empty($class)) {
199
-                $output .= '
197
+					   . $trace_details;
198
+			if (! empty($class)) {
199
+				$output .= '
200 200
 				<div style="padding:3px; margin:0 0 1em; border:1px solid #999; background:#fff; border-radius:3px;">
201 201
 					<div style="padding:1em 2em; border:1px solid #999; background:#fcfcfc;">
202 202
 						<h3>' . __('Class Details', 'event_espresso') . '</h3>';
203
-                $a = new ReflectionClass($class);
204
-                $output .= '
203
+				$a = new ReflectionClass($class);
204
+				$output .= '
205 205
 						<pre>' . $a . '</pre>
206 206
 					</div>
207 207
 				</div>';
208
-            }
209
-            $output .= '
208
+			}
209
+			$output .= '
210 210
 			</div>
211 211
 		</div>
212 212
 		<br />';
213
-        }
214
-        // remove last linebreak
215
-        $output = substr($output, 0, -6);
216
-        if (! WP_DEBUG) {
217
-            $output .= '
213
+		}
214
+		// remove last linebreak
215
+		$output = substr($output, 0, -6);
216
+		if (! WP_DEBUG) {
217
+			$output .= '
218 218
 	</p>';
219
-        }
220
-        $output .= '
219
+		}
220
+		$output .= '
221 221
 </div>';
222
-        $output .= $this->printScripts(true);
223
-        if (defined('DOING_AJAX')) {
224
-            echo wp_json_encode(array('error' => $output));
225
-            exit();
226
-        }
227
-        echo $output;
228
-    }
222
+		$output .= $this->printScripts(true);
223
+		if (defined('DOING_AJAX')) {
224
+			echo wp_json_encode(array('error' => $output));
225
+			exit();
226
+		}
227
+		echo $output;
228
+	}
229 229
 
230 230
 
231
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
232
-    // phpcs:disable PSR2.Methods.MethodDeclaration.Underscore
231
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
232
+	// phpcs:disable PSR2.Methods.MethodDeclaration.Underscore
233 233
 
234
-    /**
235
-     * generate string from exception trace args
236
-     *
237
-     * @param array $arguments
238
-     * @param int   $indent
239
-     * @param bool  $array
240
-     * @return string
241
-     */
242
-    private function _convert_args_to_string($arguments = array(), $indent = 0, $array = false)
243
-    {
244
-        $args = array();
245
-        $args_count = count($arguments);
246
-        if ($args_count > 2) {
247
-            $indent++;
248
-            $args[] = '<br />';
249
-        }
250
-        $x = 0;
251
-        foreach ($arguments as $arg) {
252
-            $x++;
253
-            for ($i = 0; $i < $indent; $i++) {
254
-                $args[] = ' &nbsp;&nbsp; ';
255
-            }
256
-            if (is_string($arg)) {
257
-                if (! $array && strlen($arg) > 75) {
258
-                    $args[] = '<br />';
259
-                    for ($i = 0; $i <= $indent; $i++) {
260
-                        $args[] = ' &nbsp;&nbsp; ';
261
-                    }
262
-                    $args[] = "'" . $arg . "'<br />";
263
-                } else {
264
-                    $args[] = " '" . $arg . "'";
265
-                }
266
-            } elseif (is_array($arg)) {
267
-                $arg_count = count($arg);
268
-                if ($arg_count > 2) {
269
-                    $indent++;
270
-                    $args[] = ' array(' . $this->_convert_args_to_string($arg, $indent, true) . ')';
271
-                    $indent--;
272
-                } elseif ($arg_count === 0) {
273
-                    $args[] = ' array()';
274
-                } else {
275
-                    $args[] = ' array( ' . $this->_convert_args_to_string($arg) . ' )';
276
-                }
277
-            } elseif ($arg === null) {
278
-                $args[] = ' null';
279
-            } elseif (is_bool($arg)) {
280
-                $args[] = $arg ? ' true' : ' false';
281
-            } elseif (is_object($arg)) {
282
-                $args[] = get_class($arg);
283
-            } elseif (is_resource($arg)) {
284
-                $args[] = get_resource_type($arg);
285
-            } else {
286
-                $args[] = $arg;
287
-            }
288
-            if ($x === $args_count) {
289
-                if ($args_count > 2) {
290
-                    $args[] = '<br />';
291
-                    $indent--;
292
-                    for ($i = 1; $i < $indent; $i++) {
293
-                        $args[] = ' &nbsp;&nbsp; ';
294
-                    }
295
-                }
296
-            } else {
297
-                $args[] = $args_count > 2 ? ',<br />' : ', ';
298
-            }
299
-        }
300
-        return implode('', $args);
301
-    }
234
+	/**
235
+	 * generate string from exception trace args
236
+	 *
237
+	 * @param array $arguments
238
+	 * @param int   $indent
239
+	 * @param bool  $array
240
+	 * @return string
241
+	 */
242
+	private function _convert_args_to_string($arguments = array(), $indent = 0, $array = false)
243
+	{
244
+		$args = array();
245
+		$args_count = count($arguments);
246
+		if ($args_count > 2) {
247
+			$indent++;
248
+			$args[] = '<br />';
249
+		}
250
+		$x = 0;
251
+		foreach ($arguments as $arg) {
252
+			$x++;
253
+			for ($i = 0; $i < $indent; $i++) {
254
+				$args[] = ' &nbsp;&nbsp; ';
255
+			}
256
+			if (is_string($arg)) {
257
+				if (! $array && strlen($arg) > 75) {
258
+					$args[] = '<br />';
259
+					for ($i = 0; $i <= $indent; $i++) {
260
+						$args[] = ' &nbsp;&nbsp; ';
261
+					}
262
+					$args[] = "'" . $arg . "'<br />";
263
+				} else {
264
+					$args[] = " '" . $arg . "'";
265
+				}
266
+			} elseif (is_array($arg)) {
267
+				$arg_count = count($arg);
268
+				if ($arg_count > 2) {
269
+					$indent++;
270
+					$args[] = ' array(' . $this->_convert_args_to_string($arg, $indent, true) . ')';
271
+					$indent--;
272
+				} elseif ($arg_count === 0) {
273
+					$args[] = ' array()';
274
+				} else {
275
+					$args[] = ' array( ' . $this->_convert_args_to_string($arg) . ' )';
276
+				}
277
+			} elseif ($arg === null) {
278
+				$args[] = ' null';
279
+			} elseif (is_bool($arg)) {
280
+				$args[] = $arg ? ' true' : ' false';
281
+			} elseif (is_object($arg)) {
282
+				$args[] = get_class($arg);
283
+			} elseif (is_resource($arg)) {
284
+				$args[] = get_resource_type($arg);
285
+			} else {
286
+				$args[] = $arg;
287
+			}
288
+			if ($x === $args_count) {
289
+				if ($args_count > 2) {
290
+					$args[] = '<br />';
291
+					$indent--;
292
+					for ($i = 1; $i < $indent; $i++) {
293
+						$args[] = ' &nbsp;&nbsp; ';
294
+					}
295
+				}
296
+			} else {
297
+				$args[] = $args_count > 2 ? ',<br />' : ', ';
298
+			}
299
+		}
300
+		return implode('', $args);
301
+	}
302 302
 
303 303
 
304
-    /**
305
-     * create error code from filepath, function name,
306
-     * and line number where exception or error was thrown
307
-     *
308
-     * @access protected
309
-     * @param string $file
310
-     * @param string $func
311
-     * @param string $line
312
-     * @return string
313
-     */
314
-    protected function generate_error_code($file = '', $func = '', $line = '')
315
-    {
316
-        $file_bits = explode('.', basename($file));
317
-        $error_code = ! empty($file_bits[0]) ? $file_bits[0] : '';
318
-        $error_code .= ! empty($func) ? ' - ' . $func : '';
319
-        $error_code .= ! empty($line) ? ' - ' . $line : '';
320
-        return $error_code;
321
-    }
304
+	/**
305
+	 * create error code from filepath, function name,
306
+	 * and line number where exception or error was thrown
307
+	 *
308
+	 * @access protected
309
+	 * @param string $file
310
+	 * @param string $func
311
+	 * @param string $line
312
+	 * @return string
313
+	 */
314
+	protected function generate_error_code($file = '', $func = '', $line = '')
315
+	{
316
+		$file_bits = explode('.', basename($file));
317
+		$error_code = ! empty($file_bits[0]) ? $file_bits[0] : '';
318
+		$error_code .= ! empty($func) ? ' - ' . $func : '';
319
+		$error_code .= ! empty($line) ? ' - ' . $line : '';
320
+		return $error_code;
321
+	}
322 322
 
323 323
 
324
-    /**
325
-     * _exception_styles
326
-     *
327
-     * @return string
328
-     */
329
-    private function exceptionStyles()
330
-    {
331
-        return '
324
+	/**
325
+	 * _exception_styles
326
+	 *
327
+	 * @return string
328
+	 */
329
+	private function exceptionStyles()
330
+	{
331
+		return '
332 332
 <style type="text/css">
333 333
 	#ee-error-message {
334 334
 		max-width:90% !important;
@@ -385,29 +385,29 @@  discard block
 block discarded – undo
385 385
 		color: #999;
386 386
 	}
387 387
 </style>';
388
-    }
388
+	}
389 389
 
390 390
 
391
-    /**
392
-     * _print_scripts
393
-     *
394
-     * @param bool $force_print
395
-     * @return string
396
-     */
397
-    private function printScripts($force_print = false)
398
-    {
399
-        if (! $force_print && (did_action('admin_enqueue_scripts') || did_action('wp_enqueue_scripts'))) {
400
-            if (wp_script_is('ee_error_js', 'enqueued')) {
401
-                return '';
402
-            }
403
-            if (wp_script_is('ee_error_js', 'registered')) {
404
-                wp_enqueue_style('espresso_default');
405
-                wp_enqueue_style('espresso_custom_css');
406
-                wp_enqueue_script('ee_error_js');
407
-                wp_localize_script('ee_error_js', 'ee_settings', array('wp_debug' => WP_DEBUG));
408
-            }
409
-        } else {
410
-            return '
391
+	/**
392
+	 * _print_scripts
393
+	 *
394
+	 * @param bool $force_print
395
+	 * @return string
396
+	 */
397
+	private function printScripts($force_print = false)
398
+	{
399
+		if (! $force_print && (did_action('admin_enqueue_scripts') || did_action('wp_enqueue_scripts'))) {
400
+			if (wp_script_is('ee_error_js', 'enqueued')) {
401
+				return '';
402
+			}
403
+			if (wp_script_is('ee_error_js', 'registered')) {
404
+				wp_enqueue_style('espresso_default');
405
+				wp_enqueue_style('espresso_custom_css');
406
+				wp_enqueue_script('ee_error_js');
407
+				wp_localize_script('ee_error_js', 'ee_settings', array('wp_debug' => WP_DEBUG));
408
+			}
409
+		} else {
410
+			return '
411 411
 <script>
412 412
 /* <![CDATA[ */
413 413
 var ee_settings = {"wp_debug":"' . WP_DEBUG . '"};
@@ -417,7 +417,7 @@  discard block
 block discarded – undo
417 417
 <script src="' . EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js' . '?ver=' . espresso_version() . '" type="text/javascript"></script>
418 418
 <script src="' . EE_GLOBAL_ASSETS_URL . 'scripts/EE_Error.js' . '?ver=' . espresso_version() . '" type="text/javascript"></script>
419 419
 ';
420
-        }
421
-        return '';
422
-    }
420
+		}
421
+		return '';
422
+	}
423 423
 }
Please login to merge, or discard this patch.
Spacing   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
         $output = $this->exceptionStyles();
54 54
         $output .= '
55 55
 <div id="ee-error-message" class="error">';
56
-        if (! WP_DEBUG) {
56
+        if ( ! WP_DEBUG) {
57 57
             $output .= '
58 58
 	<p>';
59 59
         }
@@ -71,11 +71,11 @@  discard block
 block discarded – undo
71 71
 					<th scope="col" align="right" style="width:2.5%;">#</th>
72 72
 					<th scope="col" align="right" style="width:3.5%;">Line</th>
73 73
 					<th scope="col" align="left" style="width:40%;">File</th>
74
-					<th scope="col" align="left">' . __('Class', 'event_espresso') . '->'
74
+					<th scope="col" align="left">' . __('Class', 'event_espresso').'->'
75 75
                               . __(
76 76
                                   'Method( arguments )',
77 77
                                   'event_espresso'
78
-                              ) . '</th>
78
+                              ).'</th>
79 79
 				</tr>';
80 80
             $last_on_stack = count($trace) - 1;
81 81
             // reverse array so that stack is in proper chronological order
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
                 $type = isset($trace['type']) ? $trace['type'] : '';
87 87
                 $function = isset($trace['function']) ? $trace['function'] : '';
88 88
                 $args = isset($trace['args']) ? $this->_convert_args_to_string($trace['args']) : '';
89
-                $args = isset($trace['args']) && count($trace['args']) > 4 ? ' <br />' . $args . '<br />' : $args;
89
+                $args = isset($trace['args']) && count($trace['args']) > 4 ? ' <br />'.$args.'<br />' : $args;
90 90
                 $line = isset($trace['line']) ? $trace['line'] : '';
91 91
                 $zebra = $nmbr % 2 !== 0 ? ' odd' : '';
92 92
                 if (empty($file) && ! empty($class)) {
@@ -114,7 +114,7 @@  discard block
 block discarded – undo
114 114
                 $class_display = ! empty($class) ? $class : '';
115 115
                 $type = ! empty($type) ? $type : '';
116 116
                 $function = ! empty($function) ? $function : '';
117
-                $args = ! empty($args) ? '( ' . $args . ' )' : '()';
117
+                $args = ! empty($args) ? '( '.$args.' )' : '()';
118 118
                 $trace_details .= '
119 119
 					<tr>
120 120
 						<td align="right" valign="top" class="'
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
         }
149 149
         $code = $exception->getCode() ? $exception->getCode() : $error_code;
150 150
         // add generic non-identifying messages for non-privileged users
151
-        if (! WP_DEBUG) {
151
+        if ( ! WP_DEBUG) {
152 152
             $output .= '<span class="ee-error-user-msg-spn">'
153 153
                        . trim($msg)
154 154
                        . '</span> &nbsp; <sup>'
@@ -165,7 +165,7 @@  discard block
 block discarded – undo
165 165
                            '<strong class="ee-error-dev-msg-str">',
166 166
                            get_class($exception),
167 167
                            '</strong>  &nbsp; <span>',
168
-                           $code . '</span>'
168
+                           $code.'</span>'
169 169
                        )
170 170
                        . '<br />
171 171
 				<span class="big-text">"'
@@ -195,14 +195,14 @@  discard block
 block discarded – undo
195 195
                        . '-dv" class="ee-error-trace-dv" style="display: none;">
196 196
 				'
197 197
                        . $trace_details;
198
-            if (! empty($class)) {
198
+            if ( ! empty($class)) {
199 199
                 $output .= '
200 200
 				<div style="padding:3px; margin:0 0 1em; border:1px solid #999; background:#fff; border-radius:3px;">
201 201
 					<div style="padding:1em 2em; border:1px solid #999; background:#fcfcfc;">
202
-						<h3>' . __('Class Details', 'event_espresso') . '</h3>';
202
+						<h3>' . __('Class Details', 'event_espresso').'</h3>';
203 203
                 $a = new ReflectionClass($class);
204 204
                 $output .= '
205
-						<pre>' . $a . '</pre>
205
+						<pre>' . $a.'</pre>
206 206
 					</div>
207 207
 				</div>';
208 208
             }
@@ -213,7 +213,7 @@  discard block
 block discarded – undo
213 213
         }
214 214
         // remove last linebreak
215 215
         $output = substr($output, 0, -6);
216
-        if (! WP_DEBUG) {
216
+        if ( ! WP_DEBUG) {
217 217
             $output .= '
218 218
 	</p>';
219 219
         }
@@ -254,25 +254,25 @@  discard block
 block discarded – undo
254 254
                 $args[] = ' &nbsp;&nbsp; ';
255 255
             }
256 256
             if (is_string($arg)) {
257
-                if (! $array && strlen($arg) > 75) {
257
+                if ( ! $array && strlen($arg) > 75) {
258 258
                     $args[] = '<br />';
259 259
                     for ($i = 0; $i <= $indent; $i++) {
260 260
                         $args[] = ' &nbsp;&nbsp; ';
261 261
                     }
262
-                    $args[] = "'" . $arg . "'<br />";
262
+                    $args[] = "'".$arg."'<br />";
263 263
                 } else {
264
-                    $args[] = " '" . $arg . "'";
264
+                    $args[] = " '".$arg."'";
265 265
                 }
266 266
             } elseif (is_array($arg)) {
267 267
                 $arg_count = count($arg);
268 268
                 if ($arg_count > 2) {
269 269
                     $indent++;
270
-                    $args[] = ' array(' . $this->_convert_args_to_string($arg, $indent, true) . ')';
270
+                    $args[] = ' array('.$this->_convert_args_to_string($arg, $indent, true).')';
271 271
                     $indent--;
272 272
                 } elseif ($arg_count === 0) {
273 273
                     $args[] = ' array()';
274 274
                 } else {
275
-                    $args[] = ' array( ' . $this->_convert_args_to_string($arg) . ' )';
275
+                    $args[] = ' array( '.$this->_convert_args_to_string($arg).' )';
276 276
                 }
277 277
             } elseif ($arg === null) {
278 278
                 $args[] = ' null';
@@ -315,8 +315,8 @@  discard block
 block discarded – undo
315 315
     {
316 316
         $file_bits = explode('.', basename($file));
317 317
         $error_code = ! empty($file_bits[0]) ? $file_bits[0] : '';
318
-        $error_code .= ! empty($func) ? ' - ' . $func : '';
319
-        $error_code .= ! empty($line) ? ' - ' . $line : '';
318
+        $error_code .= ! empty($func) ? ' - '.$func : '';
319
+        $error_code .= ! empty($line) ? ' - '.$line : '';
320 320
         return $error_code;
321 321
     }
322 322
 
@@ -396,7 +396,7 @@  discard block
 block discarded – undo
396 396
      */
397 397
     private function printScripts($force_print = false)
398 398
     {
399
-        if (! $force_print && (did_action('admin_enqueue_scripts') || did_action('wp_enqueue_scripts'))) {
399
+        if ( ! $force_print && (did_action('admin_enqueue_scripts') || did_action('wp_enqueue_scripts'))) {
400 400
             if (wp_script_is('ee_error_js', 'enqueued')) {
401 401
                 return '';
402 402
             }
@@ -410,12 +410,12 @@  discard block
 block discarded – undo
410 410
             return '
411 411
 <script>
412 412
 /* <![CDATA[ */
413
-var ee_settings = {"wp_debug":"' . WP_DEBUG . '"};
413
+var ee_settings = {"wp_debug":"' . WP_DEBUG.'"};
414 414
 /* ]]> */
415 415
 </script>
416
-<script src="' . includes_url() . 'js/jquery/jquery.js" type="text/javascript"></script>
417
-<script src="' . EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js' . '?ver=' . espresso_version() . '" type="text/javascript"></script>
418
-<script src="' . EE_GLOBAL_ASSETS_URL . 'scripts/EE_Error.js' . '?ver=' . espresso_version() . '" type="text/javascript"></script>
416
+<script src="' . includes_url().'js/jquery/jquery.js" type="text/javascript"></script>
417
+<script src="' . EE_GLOBAL_ASSETS_URL.'scripts/espresso_core.js'.'?ver='.espresso_version().'" type="text/javascript"></script>
418
+<script src="' . EE_GLOBAL_ASSETS_URL.'scripts/EE_Error.js'.'?ver='.espresso_version().'" type="text/javascript"></script>
419 419
 ';
420 420
         }
421 421
         return '';
Please login to merge, or discard this patch.
core/Psr4Autoloader.php 2 patches
Indentation   +146 added lines, -146 removed lines patch added patch discarded remove patch
@@ -45,150 +45,150 @@
 block discarded – undo
45 45
 class Psr4Autoloader
46 46
 {
47 47
 
48
-    /**
49
-     * namespace separator
50
-     */
51
-    const NS = '\\';
52
-
53
-    /**
54
-     * An associative array where the key is a namespace prefix and the value
55
-     * is an array of base directories for classes in that namespace.
56
-     *
57
-     * @var array
58
-     */
59
-    protected $prefixes = array();
60
-
61
-
62
-    /**
63
-     * returns an array of registered namespace prefixes
64
-     *
65
-     * @param string $prefix
66
-     * @return array
67
-     */
68
-    public function prefixes($prefix = '')
69
-    {
70
-        if (! empty($prefix)) {
71
-            // are there any base directories for this namespace prefix?
72
-            return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
73
-        }
74
-        return $this->prefixes;
75
-    }
76
-
77
-
78
-    /**
79
-     * Register loader with SPL autoloader stack.
80
-     *
81
-     * @return void
82
-     */
83
-    public function register()
84
-    {
85
-        spl_autoload_register(array($this, 'loadClass'));
86
-    }
87
-
88
-
89
-    /**
90
-     * Adds a base directory for a namespace prefix.
91
-     *
92
-     * @param string $prefix   The namespace prefix.
93
-     * @param string $base_dir A base directory for class files in the
94
-     *                         namespace.
95
-     * @param bool   $prepend  If true, prepend the base directory to the stack
96
-     *                         instead of appending it; this causes it to be searched first rather
97
-     *                         than last.
98
-     * @return void
99
-     */
100
-    public function addNamespace($prefix, $base_dir, $prepend = false)
101
-    {
102
-        // normalize namespace prefix
103
-        $prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
104
-        // normalize the base directory with a trailing separator
105
-        $base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
106
-        // initialize the namespace prefix array
107
-        if (isset($this->prefixes[ $prefix ]) === false) {
108
-            $this->prefixes[ $prefix ] = array();
109
-        }
110
-        // retain the base directory for the namespace prefix
111
-        if ($prepend) {
112
-            array_unshift($this->prefixes[ $prefix ], $base_dir);
113
-        } else {
114
-            $this->prefixes[ $prefix ][] = $base_dir;
115
-        }
116
-    }
117
-
118
-
119
-    /**
120
-     * Loads the class file for a given class name.
121
-     *
122
-     * @param string $class The fully-qualified class name.
123
-     * @return mixed The mapped file name on success, or boolean false on
124
-     *                      failure.
125
-     */
126
-    public function loadClass($class)
127
-    {
128
-        // the current namespace prefix
129
-        $prefix = $class;
130
-        // work backwards through the namespace names of the fully-qualified
131
-        // class name to find a mapped file name
132
-        while (false !== $pos = strrpos($prefix, Psr4Autoloader::NS)) {
133
-            // retain the trailing namespace separator in the prefix
134
-            $prefix = substr($class, 0, $pos + 1);
135
-            // the rest is the relative class name
136
-            $relative_class = substr($class, $pos + 1);
137
-            // try to load a mapped file for the prefix and relative class
138
-            $mapped_file = $this->loadMappedFile($prefix, $relative_class);
139
-            if ($mapped_file) {
140
-                return $mapped_file;
141
-            }
142
-            // remove the trailing namespace separator for the next iteration
143
-            // of strrpos()
144
-            $prefix = rtrim($prefix, Psr4Autoloader::NS);
145
-        }
146
-        // never found a mapped file
147
-        return false;
148
-    }
149
-
150
-
151
-    /**
152
-     * Load the mapped file for a namespace prefix and relative class.
153
-     *
154
-     * @param string $prefix         The namespace prefix.
155
-     * @param string $relative_class The relative class name.
156
-     * @return mixed Boolean false if no mapped file can be loaded, or the
157
-     *                               name of the mapped file that was loaded.
158
-     */
159
-    protected function loadMappedFile($prefix, $relative_class)
160
-    {
161
-        // look through base directories for this namespace prefix
162
-        foreach ($this->prefixes($prefix) as $base_dir) {
163
-            // replace the namespace prefix with the base directory,
164
-            // replace namespace separators with directory separators
165
-            // in the relative class name, append with .php
166
-            $file = $base_dir
167
-                    . str_replace(Psr4Autoloader::NS, DS, $relative_class)
168
-                    . '.php';
169
-            // if the mapped file exists, require it
170
-            if ($this->requireFile($file)) {
171
-                // yes, we're done
172
-                return $file;
173
-            }
174
-        }
175
-        // never found it
176
-        return false;
177
-    }
178
-
179
-
180
-    /**
181
-     * If a file exists, require it from the file system.
182
-     *
183
-     * @param string $file The file to require.
184
-     * @return bool True if the file exists, false if not.
185
-     */
186
-    protected function requireFile($file)
187
-    {
188
-        if (file_exists($file)) {
189
-            require $file;
190
-            return true;
191
-        }
192
-        return false;
193
-    }
48
+	/**
49
+	 * namespace separator
50
+	 */
51
+	const NS = '\\';
52
+
53
+	/**
54
+	 * An associative array where the key is a namespace prefix and the value
55
+	 * is an array of base directories for classes in that namespace.
56
+	 *
57
+	 * @var array
58
+	 */
59
+	protected $prefixes = array();
60
+
61
+
62
+	/**
63
+	 * returns an array of registered namespace prefixes
64
+	 *
65
+	 * @param string $prefix
66
+	 * @return array
67
+	 */
68
+	public function prefixes($prefix = '')
69
+	{
70
+		if (! empty($prefix)) {
71
+			// are there any base directories for this namespace prefix?
72
+			return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
73
+		}
74
+		return $this->prefixes;
75
+	}
76
+
77
+
78
+	/**
79
+	 * Register loader with SPL autoloader stack.
80
+	 *
81
+	 * @return void
82
+	 */
83
+	public function register()
84
+	{
85
+		spl_autoload_register(array($this, 'loadClass'));
86
+	}
87
+
88
+
89
+	/**
90
+	 * Adds a base directory for a namespace prefix.
91
+	 *
92
+	 * @param string $prefix   The namespace prefix.
93
+	 * @param string $base_dir A base directory for class files in the
94
+	 *                         namespace.
95
+	 * @param bool   $prepend  If true, prepend the base directory to the stack
96
+	 *                         instead of appending it; this causes it to be searched first rather
97
+	 *                         than last.
98
+	 * @return void
99
+	 */
100
+	public function addNamespace($prefix, $base_dir, $prepend = false)
101
+	{
102
+		// normalize namespace prefix
103
+		$prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
104
+		// normalize the base directory with a trailing separator
105
+		$base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
106
+		// initialize the namespace prefix array
107
+		if (isset($this->prefixes[ $prefix ]) === false) {
108
+			$this->prefixes[ $prefix ] = array();
109
+		}
110
+		// retain the base directory for the namespace prefix
111
+		if ($prepend) {
112
+			array_unshift($this->prefixes[ $prefix ], $base_dir);
113
+		} else {
114
+			$this->prefixes[ $prefix ][] = $base_dir;
115
+		}
116
+	}
117
+
118
+
119
+	/**
120
+	 * Loads the class file for a given class name.
121
+	 *
122
+	 * @param string $class The fully-qualified class name.
123
+	 * @return mixed The mapped file name on success, or boolean false on
124
+	 *                      failure.
125
+	 */
126
+	public function loadClass($class)
127
+	{
128
+		// the current namespace prefix
129
+		$prefix = $class;
130
+		// work backwards through the namespace names of the fully-qualified
131
+		// class name to find a mapped file name
132
+		while (false !== $pos = strrpos($prefix, Psr4Autoloader::NS)) {
133
+			// retain the trailing namespace separator in the prefix
134
+			$prefix = substr($class, 0, $pos + 1);
135
+			// the rest is the relative class name
136
+			$relative_class = substr($class, $pos + 1);
137
+			// try to load a mapped file for the prefix and relative class
138
+			$mapped_file = $this->loadMappedFile($prefix, $relative_class);
139
+			if ($mapped_file) {
140
+				return $mapped_file;
141
+			}
142
+			// remove the trailing namespace separator for the next iteration
143
+			// of strrpos()
144
+			$prefix = rtrim($prefix, Psr4Autoloader::NS);
145
+		}
146
+		// never found a mapped file
147
+		return false;
148
+	}
149
+
150
+
151
+	/**
152
+	 * Load the mapped file for a namespace prefix and relative class.
153
+	 *
154
+	 * @param string $prefix         The namespace prefix.
155
+	 * @param string $relative_class The relative class name.
156
+	 * @return mixed Boolean false if no mapped file can be loaded, or the
157
+	 *                               name of the mapped file that was loaded.
158
+	 */
159
+	protected function loadMappedFile($prefix, $relative_class)
160
+	{
161
+		// look through base directories for this namespace prefix
162
+		foreach ($this->prefixes($prefix) as $base_dir) {
163
+			// replace the namespace prefix with the base directory,
164
+			// replace namespace separators with directory separators
165
+			// in the relative class name, append with .php
166
+			$file = $base_dir
167
+					. str_replace(Psr4Autoloader::NS, DS, $relative_class)
168
+					. '.php';
169
+			// if the mapped file exists, require it
170
+			if ($this->requireFile($file)) {
171
+				// yes, we're done
172
+				return $file;
173
+			}
174
+		}
175
+		// never found it
176
+		return false;
177
+	}
178
+
179
+
180
+	/**
181
+	 * If a file exists, require it from the file system.
182
+	 *
183
+	 * @param string $file The file to require.
184
+	 * @return bool True if the file exists, false if not.
185
+	 */
186
+	protected function requireFile($file)
187
+	{
188
+		if (file_exists($file)) {
189
+			require $file;
190
+			return true;
191
+		}
192
+		return false;
193
+	}
194 194
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -67,9 +67,9 @@  discard block
 block discarded – undo
67 67
      */
68 68
     public function prefixes($prefix = '')
69 69
     {
70
-        if (! empty($prefix)) {
70
+        if ( ! empty($prefix)) {
71 71
             // are there any base directories for this namespace prefix?
72
-            return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
72
+            return isset($this->prefixes[$prefix]) ? $this->prefixes[$prefix] : array();
73 73
         }
74 74
         return $this->prefixes;
75 75
     }
@@ -100,18 +100,18 @@  discard block
 block discarded – undo
100 100
     public function addNamespace($prefix, $base_dir, $prepend = false)
101 101
     {
102 102
         // normalize namespace prefix
103
-        $prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
103
+        $prefix = trim($prefix, Psr4Autoloader::NS).Psr4Autoloader::NS;
104 104
         // normalize the base directory with a trailing separator
105 105
         $base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
106 106
         // initialize the namespace prefix array
107
-        if (isset($this->prefixes[ $prefix ]) === false) {
108
-            $this->prefixes[ $prefix ] = array();
107
+        if (isset($this->prefixes[$prefix]) === false) {
108
+            $this->prefixes[$prefix] = array();
109 109
         }
110 110
         // retain the base directory for the namespace prefix
111 111
         if ($prepend) {
112
-            array_unshift($this->prefixes[ $prefix ], $base_dir);
112
+            array_unshift($this->prefixes[$prefix], $base_dir);
113 113
         } else {
114
-            $this->prefixes[ $prefix ][] = $base_dir;
114
+            $this->prefixes[$prefix][] = $base_dir;
115 115
         }
116 116
     }
117 117
 
Please login to merge, or discard this patch.
core/services/cache/PostRelatedCacheManager.php 2 patches
Indentation   +117 added lines, -117 removed lines patch added patch discarded remove patch
@@ -13,121 +13,121 @@
 block discarded – undo
13 13
 class PostRelatedCacheManager extends BasicCacheManager
14 14
 {
15 15
 
16
-    /**
17
-     * @type string
18
-     */
19
-    const POST_CACHE_PREFIX = 'ee_cache_post_';
20
-
21
-    /**
22
-     * wp-option option_name for tracking post related cache
23
-     *
24
-     * @type string
25
-     */
26
-    const POST_CACHE_OPTIONS_KEY = 'ee_post_cache';
27
-
28
-
29
-    /**
30
-     * PostRelatedCacheManager constructor.
31
-     *
32
-     * @param CacheStorageInterface $cache_storage
33
-     */
34
-    public function __construct(CacheStorageInterface $cache_storage)
35
-    {
36
-        parent::__construct($cache_storage);
37
-        add_action('save_post', array($this, 'clearPostRelatedCache'));
38
-    }
39
-
40
-
41
-    /**
42
-     * returns a string that will be prepended to all cache identifiers
43
-     *
44
-     * @return string
45
-     */
46
-    public function cachePrefix()
47
-    {
48
-        return PostRelatedCacheManager::POST_CACHE_PREFIX;
49
-    }
50
-
51
-
52
-    /**
53
-     * @return array
54
-     */
55
-    protected function getPostRelatedCache()
56
-    {
57
-        $post_related_cache = get_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, array());
58
-        // verify that cached data was not truncated or corrupted and no longer an array
59
-        if (! is_array($post_related_cache)) {
60
-            // uh-oh... let's get rid of any transients using our cache prefix
61
-            $this->clear(PostRelatedCacheManager::CACHE_PREFIX);
62
-            // then update the post related cache tracking option
63
-            $post_related_cache = array();
64
-            $this->updatePostRelatedCache($post_related_cache);
65
-        }
66
-        return $post_related_cache;
67
-    }
68
-
69
-
70
-    /**
71
-     * @param array $post_related_cache
72
-     */
73
-    protected function updatePostRelatedCache(array $post_related_cache = array())
74
-    {
75
-        update_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, $post_related_cache);
76
-    }
77
-
78
-
79
-    /**
80
-     * If you are caching content that pertains to a Post of any type,
81
-     * then it is recommended to pass the post id and cache id prefix to this method
82
-     * so that it can be added to the post related cache tracking.
83
-     * Then, whenever that post is updated, the cache will automatically be deleted,
84
-     * which helps to ensure that outdated cache content will not be served
85
-     *
86
-     * @param int    $post_ID    [required]
87
-     * @param string $id_prefix  [required] Appended to all cache IDs. Can be helpful in finding specific cache types.
88
-     *                           May also be helpful to include an additional specific identifier,
89
-     *                           such as a post ID as part of the $id_prefix so that individual caches
90
-     *                           can be found and/or cleared. ex: "venue-28", or "shortcode-156".
91
-     *                           BasicCacheManager::CACHE_PREFIX will also be prepended to the cache id.
92
-     */
93
-    public function clearPostRelatedCacheOnUpdate($post_ID, $id_prefix)
94
-    {
95
-        $post_related_cache = $this->getPostRelatedCache();
96
-        // if post is not already being tracked
97
-        if (! isset($post_related_cache[ $post_ID ])) {
98
-            // add array to add cache ids to
99
-            $post_related_cache[ $post_ID ] = array();
100
-        }
101
-        if (! in_array($id_prefix, $post_related_cache[ $post_ID ], true)) {
102
-            // add cache id to be tracked
103
-            $post_related_cache[ $post_ID ][] = $id_prefix;
104
-            $this->updatePostRelatedCache($post_related_cache);
105
-        }
106
-    }
107
-
108
-
109
-    /**
110
-     * callback hooked into the WordPress "save_post" action
111
-     * deletes any cache content associated with the post
112
-     *
113
-     * @param int $post_ID [required]
114
-     */
115
-    public function clearPostRelatedCache($post_ID)
116
-    {
117
-        $post_related_cache = $this->getPostRelatedCache();
118
-        // if post is not being tracked
119
-        if (! isset($post_related_cache[ $post_ID ])) {
120
-            // let's clean up some of the duplicate IDs that were getting added
121
-            foreach ($post_related_cache as $other_post_ID => $cache_IDs) {
122
-                // remove duplicates
123
-                $post_related_cache[ $other_post_ID ] = array_unique($post_related_cache[ $other_post_ID ]);
124
-            }
125
-            $this->updatePostRelatedCache($post_related_cache);
126
-            return;
127
-        }
128
-        // get cache id prefixes for post, and delete their corresponding transients
129
-        $this->clear($post_related_cache[ $post_ID ]);
130
-        unset($post_related_cache[ $post_ID ]);
131
-        $this->updatePostRelatedCache($post_related_cache);
132
-    }
16
+	/**
17
+	 * @type string
18
+	 */
19
+	const POST_CACHE_PREFIX = 'ee_cache_post_';
20
+
21
+	/**
22
+	 * wp-option option_name for tracking post related cache
23
+	 *
24
+	 * @type string
25
+	 */
26
+	const POST_CACHE_OPTIONS_KEY = 'ee_post_cache';
27
+
28
+
29
+	/**
30
+	 * PostRelatedCacheManager constructor.
31
+	 *
32
+	 * @param CacheStorageInterface $cache_storage
33
+	 */
34
+	public function __construct(CacheStorageInterface $cache_storage)
35
+	{
36
+		parent::__construct($cache_storage);
37
+		add_action('save_post', array($this, 'clearPostRelatedCache'));
38
+	}
39
+
40
+
41
+	/**
42
+	 * returns a string that will be prepended to all cache identifiers
43
+	 *
44
+	 * @return string
45
+	 */
46
+	public function cachePrefix()
47
+	{
48
+		return PostRelatedCacheManager::POST_CACHE_PREFIX;
49
+	}
50
+
51
+
52
+	/**
53
+	 * @return array
54
+	 */
55
+	protected function getPostRelatedCache()
56
+	{
57
+		$post_related_cache = get_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, array());
58
+		// verify that cached data was not truncated or corrupted and no longer an array
59
+		if (! is_array($post_related_cache)) {
60
+			// uh-oh... let's get rid of any transients using our cache prefix
61
+			$this->clear(PostRelatedCacheManager::CACHE_PREFIX);
62
+			// then update the post related cache tracking option
63
+			$post_related_cache = array();
64
+			$this->updatePostRelatedCache($post_related_cache);
65
+		}
66
+		return $post_related_cache;
67
+	}
68
+
69
+
70
+	/**
71
+	 * @param array $post_related_cache
72
+	 */
73
+	protected function updatePostRelatedCache(array $post_related_cache = array())
74
+	{
75
+		update_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, $post_related_cache);
76
+	}
77
+
78
+
79
+	/**
80
+	 * If you are caching content that pertains to a Post of any type,
81
+	 * then it is recommended to pass the post id and cache id prefix to this method
82
+	 * so that it can be added to the post related cache tracking.
83
+	 * Then, whenever that post is updated, the cache will automatically be deleted,
84
+	 * which helps to ensure that outdated cache content will not be served
85
+	 *
86
+	 * @param int    $post_ID    [required]
87
+	 * @param string $id_prefix  [required] Appended to all cache IDs. Can be helpful in finding specific cache types.
88
+	 *                           May also be helpful to include an additional specific identifier,
89
+	 *                           such as a post ID as part of the $id_prefix so that individual caches
90
+	 *                           can be found and/or cleared. ex: "venue-28", or "shortcode-156".
91
+	 *                           BasicCacheManager::CACHE_PREFIX will also be prepended to the cache id.
92
+	 */
93
+	public function clearPostRelatedCacheOnUpdate($post_ID, $id_prefix)
94
+	{
95
+		$post_related_cache = $this->getPostRelatedCache();
96
+		// if post is not already being tracked
97
+		if (! isset($post_related_cache[ $post_ID ])) {
98
+			// add array to add cache ids to
99
+			$post_related_cache[ $post_ID ] = array();
100
+		}
101
+		if (! in_array($id_prefix, $post_related_cache[ $post_ID ], true)) {
102
+			// add cache id to be tracked
103
+			$post_related_cache[ $post_ID ][] = $id_prefix;
104
+			$this->updatePostRelatedCache($post_related_cache);
105
+		}
106
+	}
107
+
108
+
109
+	/**
110
+	 * callback hooked into the WordPress "save_post" action
111
+	 * deletes any cache content associated with the post
112
+	 *
113
+	 * @param int $post_ID [required]
114
+	 */
115
+	public function clearPostRelatedCache($post_ID)
116
+	{
117
+		$post_related_cache = $this->getPostRelatedCache();
118
+		// if post is not being tracked
119
+		if (! isset($post_related_cache[ $post_ID ])) {
120
+			// let's clean up some of the duplicate IDs that were getting added
121
+			foreach ($post_related_cache as $other_post_ID => $cache_IDs) {
122
+				// remove duplicates
123
+				$post_related_cache[ $other_post_ID ] = array_unique($post_related_cache[ $other_post_ID ]);
124
+			}
125
+			$this->updatePostRelatedCache($post_related_cache);
126
+			return;
127
+		}
128
+		// get cache id prefixes for post, and delete their corresponding transients
129
+		$this->clear($post_related_cache[ $post_ID ]);
130
+		unset($post_related_cache[ $post_ID ]);
131
+		$this->updatePostRelatedCache($post_related_cache);
132
+	}
133 133
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
     {
57 57
         $post_related_cache = get_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, array());
58 58
         // verify that cached data was not truncated or corrupted and no longer an array
59
-        if (! is_array($post_related_cache)) {
59
+        if ( ! is_array($post_related_cache)) {
60 60
             // uh-oh... let's get rid of any transients using our cache prefix
61 61
             $this->clear(PostRelatedCacheManager::CACHE_PREFIX);
62 62
             // then update the post related cache tracking option
@@ -94,13 +94,13 @@  discard block
 block discarded – undo
94 94
     {
95 95
         $post_related_cache = $this->getPostRelatedCache();
96 96
         // if post is not already being tracked
97
-        if (! isset($post_related_cache[ $post_ID ])) {
97
+        if ( ! isset($post_related_cache[$post_ID])) {
98 98
             // add array to add cache ids to
99
-            $post_related_cache[ $post_ID ] = array();
99
+            $post_related_cache[$post_ID] = array();
100 100
         }
101
-        if (! in_array($id_prefix, $post_related_cache[ $post_ID ], true)) {
101
+        if ( ! in_array($id_prefix, $post_related_cache[$post_ID], true)) {
102 102
             // add cache id to be tracked
103
-            $post_related_cache[ $post_ID ][] = $id_prefix;
103
+            $post_related_cache[$post_ID][] = $id_prefix;
104 104
             $this->updatePostRelatedCache($post_related_cache);
105 105
         }
106 106
     }
@@ -116,18 +116,18 @@  discard block
 block discarded – undo
116 116
     {
117 117
         $post_related_cache = $this->getPostRelatedCache();
118 118
         // if post is not being tracked
119
-        if (! isset($post_related_cache[ $post_ID ])) {
119
+        if ( ! isset($post_related_cache[$post_ID])) {
120 120
             // let's clean up some of the duplicate IDs that were getting added
121 121
             foreach ($post_related_cache as $other_post_ID => $cache_IDs) {
122 122
                 // remove duplicates
123
-                $post_related_cache[ $other_post_ID ] = array_unique($post_related_cache[ $other_post_ID ]);
123
+                $post_related_cache[$other_post_ID] = array_unique($post_related_cache[$other_post_ID]);
124 124
             }
125 125
             $this->updatePostRelatedCache($post_related_cache);
126 126
             return;
127 127
         }
128 128
         // get cache id prefixes for post, and delete their corresponding transients
129
-        $this->clear($post_related_cache[ $post_ID ]);
130
-        unset($post_related_cache[ $post_ID ]);
129
+        $this->clear($post_related_cache[$post_ID]);
130
+        unset($post_related_cache[$post_ID]);
131 131
         $this->updatePostRelatedCache($post_related_cache);
132 132
     }
133 133
 }
Please login to merge, or discard this patch.
core/services/cache/TransientCacheStorage.php 2 patches
Indentation   +362 added lines, -362 removed lines patch added patch discarded remove patch
@@ -16,366 +16,366 @@
 block discarded – undo
16 16
 class TransientCacheStorage implements CacheStorageInterface
17 17
 {
18 18
 
19
-    /**
20
-     * wp-option option_name for tracking transients
21
-     *
22
-     * @type string
23
-     */
24
-    const TRANSIENT_SCHEDULE_OPTIONS_KEY = 'ee_transient_schedule';
25
-
26
-    /**
27
-     * @var int $current_time
28
-     */
29
-    private $current_time;
30
-
31
-    /**
32
-     * how often to perform transient cleanup
33
-     *
34
-     * @var string $transient_cleanup_frequency
35
-     */
36
-    private $transient_cleanup_frequency;
37
-
38
-    /**
39
-     * options for how often to perform transient cleanup
40
-     *
41
-     * @var array $transient_cleanup_frequency_options
42
-     */
43
-    private $transient_cleanup_frequency_options = array();
44
-
45
-    /**
46
-     * @var array $transients
47
-     */
48
-    private $transients;
49
-
50
-
51
-    /**
52
-     * TransientCacheStorage constructor.
53
-     */
54
-    public function __construct()
55
-    {
56
-        $this->transient_cleanup_frequency = $this->setTransientCleanupFrequency();
57
-        // round current time down to closest 5 minutes to simplify scheduling
58
-        $this->current_time = $this->roundTimestamp(time(), '5-minutes', false);
59
-        $this->transients = (array) get_option(TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY, array());
60
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && $this->transient_cleanup_frequency !== 'off') {
61
-            add_action('shutdown', array($this, 'checkTransientCleanupSchedule'), 999);
62
-        }
63
-    }
64
-
65
-
66
-    /**
67
-     * Sets how often transient cleanup occurs
68
-     *
69
-     * @return string
70
-     */
71
-    private function setTransientCleanupFrequency()
72
-    {
73
-        // sets how often transients are cleaned up
74
-        $this->transient_cleanup_frequency_options = apply_filters(
75
-            'FHEE__TransientCacheStorage__transient_cleanup_schedule_options',
76
-            array(
77
-                'off',
78
-                '15-minutes',
79
-                'hour',
80
-                '12-hours',
81
-                'day',
82
-            )
83
-        );
84
-        $transient_cleanup_frequency = apply_filters(
85
-            'FHEE__TransientCacheStorage__transient_cleanup_schedule',
86
-            'hour'
87
-        );
88
-        return in_array(
89
-            $transient_cleanup_frequency,
90
-            $this->transient_cleanup_frequency_options,
91
-            true
92
-        )
93
-            ? $transient_cleanup_frequency
94
-            : 'hour';
95
-    }
96
-
97
-
98
-    /**
99
-     * we need to be able to round timestamps off to match the set transient cleanup frequency
100
-     * so if a transient is set to expire at 1:17 pm for example, and our cleanup schedule is every hour,
101
-     * then that timestamp needs to be rounded up to 2:00 pm so that it is removed
102
-     * during the next scheduled cleanup after its expiration.
103
-     * We also round off the current time timestamp to the closest 5 minutes
104
-     * just to make the timestamps a little easier to round which helps with debugging.
105
-     *
106
-     * @param int    $timestamp [required]
107
-     * @param string $cleanup_frequency
108
-     * @param bool   $round_up
109
-     * @return int
110
-     */
111
-    private function roundTimestamp($timestamp, $cleanup_frequency = 'hour', $round_up = true)
112
-    {
113
-        $cleanup_frequency = $cleanup_frequency ? $cleanup_frequency : $this->transient_cleanup_frequency;
114
-        // in order to round the time to the closest xx minutes (or hours),
115
-        // we take the minutes (or hours) portion of the timestamp and divide it by xx,
116
-        // round down to a whole number, then multiply by xx to bring us almost back up to where we were
117
-        // why round down ? so the minutes (or hours) don't go over 60 (or 24)
118
-        // and bump the hour, which could bump the day, which could bump the month, etc,
119
-        // which would be bad because we don't always want to round up,
120
-        // but when we do we can easily achieve that by simply adding the desired offset,
121
-        $minutes = '00';
122
-        $hours = 'H';
123
-        switch ($cleanup_frequency) {
124
-            case '5-minutes':
125
-                $minutes = floor((int) date('i', $timestamp) / 5) * 5;
126
-                $minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
127
-                $offset = MINUTE_IN_SECONDS * 5;
128
-                break;
129
-            case '15-minutes':
130
-                $minutes = floor((int) date('i', $timestamp) / 15) * 15;
131
-                $minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
132
-                $offset = MINUTE_IN_SECONDS * 15;
133
-                break;
134
-            case '12-hours':
135
-                $hours = floor((int) date('H', $timestamp) / 12) * 12;
136
-                $hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
137
-                $offset = HOUR_IN_SECONDS * 12;
138
-                break;
139
-            case 'day':
140
-                $hours = '03'; // run cleanup at 3:00 am (or first site hit after that)
141
-                $offset = DAY_IN_SECONDS;
142
-                break;
143
-            case 'hour':
144
-            default:
145
-                $offset = HOUR_IN_SECONDS;
146
-                break;
147
-        }
148
-        $rounded_timestamp = (int) strtotime(date("Y-m-d {$hours}:{$minutes}:00", $timestamp));
149
-        $rounded_timestamp += $round_up ? $offset : 0;
150
-        return apply_filters(
151
-            'FHEE__TransientCacheStorage__roundTimestamp__timestamp',
152
-            $rounded_timestamp,
153
-            $timestamp,
154
-            $cleanup_frequency,
155
-            $round_up
156
-        );
157
-    }
158
-
159
-
160
-    /**
161
-     * Saves supplied data to a transient
162
-     * if an expiration is set, then it automatically schedules the transient for cleanup
163
-     *
164
-     * @param string $transient_key [required]
165
-     * @param string $data          [required]
166
-     * @param int    $expiration    number of seconds until the cache expires
167
-     * @return bool
168
-     */
169
-    public function add($transient_key, $data, $expiration = 0)
170
-    {
171
-        $expiration = (int) abs($expiration);
172
-        $saved = set_transient($transient_key, $data, $expiration);
173
-        if ($saved && $expiration) {
174
-            $this->scheduleTransientCleanup($transient_key, $expiration);
175
-        }
176
-        return $saved;
177
-    }
178
-
179
-
180
-    /**
181
-     * retrieves transient data
182
-     * automatically triggers early cache refresh for standard cache items
183
-     * in order to avoid cache stampedes on busy sites.
184
-     * For non-standard cache items like PHP Session data where early refreshing is not wanted,
185
-     * the $standard_cache parameter should be set to false when retrieving data
186
-     *
187
-     * @param string $transient_key [required]
188
-     * @param bool   $standard_cache
189
-     * @return mixed|null
190
-     */
191
-    public function get($transient_key, $standard_cache = true)
192
-    {
193
-        if (isset($this->transients[ $transient_key ])) {
194
-            // to avoid cache stampedes (AKA:dogpiles) for standard cache items,
195
-            // check if known cache expires within the next minute,
196
-            // and if so, remove it from our tracking and and return nothing.
197
-            // this should trigger the cache content to be regenerated during this request,
198
-            // while allowing any following requests to still access the existing cache
199
-            // until it gets replaced with the refreshed content
200
-            if ($standard_cache
201
-                && $this->transients[ $transient_key ] - time() <= MINUTE_IN_SECONDS
202
-            ) {
203
-                unset($this->transients[ $transient_key ]);
204
-                $this->updateTransients();
205
-                return null;
206
-            }
207
-
208
-            // for non standard cache items, remove the key from our tracking,
209
-            // but proceed to retrieve the transient so that it also gets removed from the db
210
-            if ($this->transients[ $transient_key ] <= time()) {
211
-                unset($this->transients[ $transient_key ]);
212
-                $this->updateTransients();
213
-            }
214
-        }
215
-
216
-        $content = get_transient($transient_key);
217
-        return $content !== false ? $content : null;
218
-    }
219
-
220
-
221
-    /**
222
-     * delete a single transient and remove tracking
223
-     *
224
-     * @param string $transient_key [required] full or partial transient key to be deleted
225
-     */
226
-    public function delete($transient_key)
227
-    {
228
-        $this->deleteMany(array($transient_key));
229
-    }
230
-
231
-
232
-    /**
233
-     * delete multiple transients and remove tracking
234
-     *
235
-     * @param array $transient_keys [required] array of full or partial transient keys to be deleted
236
-     * @param bool  $force_delete   [optional] if true, then will not check incoming keys against those being tracked
237
-     *                              and proceed directly to deleting those entries from the cache storage
238
-     */
239
-    public function deleteMany(array $transient_keys, $force_delete = false)
240
-    {
241
-        $full_transient_keys = $force_delete ? $transient_keys : array();
242
-        if (empty($full_transient_keys)) {
243
-            foreach ($this->transients as $transient_key => $expiration) {
244
-                foreach ($transient_keys as $transient_key_to_delete) {
245
-                    if (strpos($transient_key, $transient_key_to_delete) !== false) {
246
-                        $full_transient_keys[] = $transient_key;
247
-                    }
248
-                }
249
-            }
250
-        }
251
-        if ($this->deleteTransientKeys($full_transient_keys)) {
252
-            $this->updateTransients();
253
-        }
254
-    }
255
-
256
-
257
-    /**
258
-     * sorts transients numerically by timestamp
259
-     * then saves the transient schedule to a WP option
260
-     */
261
-    private function updateTransients()
262
-    {
263
-        asort($this->transients, SORT_NUMERIC);
264
-        update_option(
265
-            TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY,
266
-            $this->transients
267
-        );
268
-    }
269
-
270
-
271
-    /**
272
-     * schedules a transient for cleanup by adding it to the transient tracking
273
-     *
274
-     * @param string $transient_key [required]
275
-     * @param int    $expiration    [required]
276
-     */
277
-    private function scheduleTransientCleanup($transient_key, $expiration)
278
-    {
279
-        // make sure a valid future timestamp is set
280
-        $expiration += $expiration < time() ? time() : 0;
281
-        // and round to the closest 15 minutes
282
-        $expiration = $this->roundTimestamp($expiration);
283
-        // save transients to clear using their ID as the key to avoid duplicates
284
-        $this->transients[ $transient_key ] = $expiration;
285
-        $this->updateTransients();
286
-    }
287
-
288
-
289
-    /**
290
-     * Since our tracked transients are sorted by their timestamps
291
-     * we can grab the first transient and see when it is scheduled for cleanup.
292
-     * If that timestamp is less than or equal to the current time,
293
-     * then cleanup is triggered
294
-     */
295
-    public function checkTransientCleanupSchedule()
296
-    {
297
-        if (empty($this->transients)) {
298
-            return;
299
-        }
300
-        // when do we run the next cleanup job?
301
-        reset($this->transients);
302
-        $next_scheduled_cleanup = current($this->transients);
303
-        // if the next cleanup job is scheduled for the current hour
304
-        if ($next_scheduled_cleanup <= $this->current_time) {
305
-            if ($this->cleanupExpiredTransients()) {
306
-                $this->updateTransients();
307
-            }
308
-        }
309
-    }
310
-
311
-
312
-    /**
313
-     * loops through the array of tracked transients,
314
-     * compiles a list of those that have expired, and sends that list off for deletion.
315
-     * Also removes any bad records from the transients array
316
-     *
317
-     * @return bool
318
-     */
319
-    private function cleanupExpiredTransients()
320
-    {
321
-        $update = false;
322
-        // filter the query limit. Set to 0 to turn off garbage collection
323
-        $limit = (int) abs(
324
-            apply_filters(
325
-                'FHEE__TransientCacheStorage__clearExpiredTransients__limit',
326
-                50
327
-            )
328
-        );
329
-        // non-zero LIMIT means take out the trash
330
-        if ($limit) {
331
-            $transient_keys = array();
332
-            foreach ($this->transients as $transient_key => $expiration) {
333
-                if ($expiration > $this->current_time) {
334
-                    continue;
335
-                }
336
-                if (! $expiration || ! $transient_key) {
337
-                    unset($this->transients[ $transient_key ]);
338
-                    $update = true;
339
-                    continue;
340
-                }
341
-                $transient_keys[] = $transient_key;
342
-            }
343
-            // delete expired keys, but maintain value of $update if nothing is deleted
344
-            $update = $this->deleteTransientKeys($transient_keys, $limit) ? true : $update;
345
-            do_action('FHEE__TransientCacheStorage__clearExpiredTransients__end', $this);
346
-        }
347
-        return $update;
348
-    }
349
-
350
-
351
-    /**
352
-     * calls delete_transient() on each transient key provided, up to the specified limit
353
-     *
354
-     * @param array $transient_keys [required]
355
-     * @param int   $limit
356
-     * @return bool
357
-     */
358
-    private function deleteTransientKeys(array $transient_keys, $limit = 50)
359
-    {
360
-        if (empty($transient_keys)) {
361
-            return false;
362
-        }
363
-        $counter = 0;
364
-        foreach ($transient_keys as $transient_key) {
365
-            if ($counter === $limit) {
366
-                break;
367
-            }
368
-            // remove any transient prefixes
369
-            $transient_key = strpos($transient_key, '_transient_timeout_') === 0
370
-                ? str_replace('_transient_timeout_', '', $transient_key)
371
-                : $transient_key;
372
-            $transient_key = strpos($transient_key, '_transient_') === 0
373
-                ? str_replace('_transient_', '', $transient_key)
374
-                : $transient_key;
375
-            delete_transient($transient_key);
376
-            unset($this->transients[ $transient_key ]);
377
-            $counter++;
378
-        }
379
-        return $counter > 0;
380
-    }
19
+	/**
20
+	 * wp-option option_name for tracking transients
21
+	 *
22
+	 * @type string
23
+	 */
24
+	const TRANSIENT_SCHEDULE_OPTIONS_KEY = 'ee_transient_schedule';
25
+
26
+	/**
27
+	 * @var int $current_time
28
+	 */
29
+	private $current_time;
30
+
31
+	/**
32
+	 * how often to perform transient cleanup
33
+	 *
34
+	 * @var string $transient_cleanup_frequency
35
+	 */
36
+	private $transient_cleanup_frequency;
37
+
38
+	/**
39
+	 * options for how often to perform transient cleanup
40
+	 *
41
+	 * @var array $transient_cleanup_frequency_options
42
+	 */
43
+	private $transient_cleanup_frequency_options = array();
44
+
45
+	/**
46
+	 * @var array $transients
47
+	 */
48
+	private $transients;
49
+
50
+
51
+	/**
52
+	 * TransientCacheStorage constructor.
53
+	 */
54
+	public function __construct()
55
+	{
56
+		$this->transient_cleanup_frequency = $this->setTransientCleanupFrequency();
57
+		// round current time down to closest 5 minutes to simplify scheduling
58
+		$this->current_time = $this->roundTimestamp(time(), '5-minutes', false);
59
+		$this->transients = (array) get_option(TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY, array());
60
+		if (! (defined('DOING_AJAX') && DOING_AJAX) && $this->transient_cleanup_frequency !== 'off') {
61
+			add_action('shutdown', array($this, 'checkTransientCleanupSchedule'), 999);
62
+		}
63
+	}
64
+
65
+
66
+	/**
67
+	 * Sets how often transient cleanup occurs
68
+	 *
69
+	 * @return string
70
+	 */
71
+	private function setTransientCleanupFrequency()
72
+	{
73
+		// sets how often transients are cleaned up
74
+		$this->transient_cleanup_frequency_options = apply_filters(
75
+			'FHEE__TransientCacheStorage__transient_cleanup_schedule_options',
76
+			array(
77
+				'off',
78
+				'15-minutes',
79
+				'hour',
80
+				'12-hours',
81
+				'day',
82
+			)
83
+		);
84
+		$transient_cleanup_frequency = apply_filters(
85
+			'FHEE__TransientCacheStorage__transient_cleanup_schedule',
86
+			'hour'
87
+		);
88
+		return in_array(
89
+			$transient_cleanup_frequency,
90
+			$this->transient_cleanup_frequency_options,
91
+			true
92
+		)
93
+			? $transient_cleanup_frequency
94
+			: 'hour';
95
+	}
96
+
97
+
98
+	/**
99
+	 * we need to be able to round timestamps off to match the set transient cleanup frequency
100
+	 * so if a transient is set to expire at 1:17 pm for example, and our cleanup schedule is every hour,
101
+	 * then that timestamp needs to be rounded up to 2:00 pm so that it is removed
102
+	 * during the next scheduled cleanup after its expiration.
103
+	 * We also round off the current time timestamp to the closest 5 minutes
104
+	 * just to make the timestamps a little easier to round which helps with debugging.
105
+	 *
106
+	 * @param int    $timestamp [required]
107
+	 * @param string $cleanup_frequency
108
+	 * @param bool   $round_up
109
+	 * @return int
110
+	 */
111
+	private function roundTimestamp($timestamp, $cleanup_frequency = 'hour', $round_up = true)
112
+	{
113
+		$cleanup_frequency = $cleanup_frequency ? $cleanup_frequency : $this->transient_cleanup_frequency;
114
+		// in order to round the time to the closest xx minutes (or hours),
115
+		// we take the minutes (or hours) portion of the timestamp and divide it by xx,
116
+		// round down to a whole number, then multiply by xx to bring us almost back up to where we were
117
+		// why round down ? so the minutes (or hours) don't go over 60 (or 24)
118
+		// and bump the hour, which could bump the day, which could bump the month, etc,
119
+		// which would be bad because we don't always want to round up,
120
+		// but when we do we can easily achieve that by simply adding the desired offset,
121
+		$minutes = '00';
122
+		$hours = 'H';
123
+		switch ($cleanup_frequency) {
124
+			case '5-minutes':
125
+				$minutes = floor((int) date('i', $timestamp) / 5) * 5;
126
+				$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
127
+				$offset = MINUTE_IN_SECONDS * 5;
128
+				break;
129
+			case '15-minutes':
130
+				$minutes = floor((int) date('i', $timestamp) / 15) * 15;
131
+				$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
132
+				$offset = MINUTE_IN_SECONDS * 15;
133
+				break;
134
+			case '12-hours':
135
+				$hours = floor((int) date('H', $timestamp) / 12) * 12;
136
+				$hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
137
+				$offset = HOUR_IN_SECONDS * 12;
138
+				break;
139
+			case 'day':
140
+				$hours = '03'; // run cleanup at 3:00 am (or first site hit after that)
141
+				$offset = DAY_IN_SECONDS;
142
+				break;
143
+			case 'hour':
144
+			default:
145
+				$offset = HOUR_IN_SECONDS;
146
+				break;
147
+		}
148
+		$rounded_timestamp = (int) strtotime(date("Y-m-d {$hours}:{$minutes}:00", $timestamp));
149
+		$rounded_timestamp += $round_up ? $offset : 0;
150
+		return apply_filters(
151
+			'FHEE__TransientCacheStorage__roundTimestamp__timestamp',
152
+			$rounded_timestamp,
153
+			$timestamp,
154
+			$cleanup_frequency,
155
+			$round_up
156
+		);
157
+	}
158
+
159
+
160
+	/**
161
+	 * Saves supplied data to a transient
162
+	 * if an expiration is set, then it automatically schedules the transient for cleanup
163
+	 *
164
+	 * @param string $transient_key [required]
165
+	 * @param string $data          [required]
166
+	 * @param int    $expiration    number of seconds until the cache expires
167
+	 * @return bool
168
+	 */
169
+	public function add($transient_key, $data, $expiration = 0)
170
+	{
171
+		$expiration = (int) abs($expiration);
172
+		$saved = set_transient($transient_key, $data, $expiration);
173
+		if ($saved && $expiration) {
174
+			$this->scheduleTransientCleanup($transient_key, $expiration);
175
+		}
176
+		return $saved;
177
+	}
178
+
179
+
180
+	/**
181
+	 * retrieves transient data
182
+	 * automatically triggers early cache refresh for standard cache items
183
+	 * in order to avoid cache stampedes on busy sites.
184
+	 * For non-standard cache items like PHP Session data where early refreshing is not wanted,
185
+	 * the $standard_cache parameter should be set to false when retrieving data
186
+	 *
187
+	 * @param string $transient_key [required]
188
+	 * @param bool   $standard_cache
189
+	 * @return mixed|null
190
+	 */
191
+	public function get($transient_key, $standard_cache = true)
192
+	{
193
+		if (isset($this->transients[ $transient_key ])) {
194
+			// to avoid cache stampedes (AKA:dogpiles) for standard cache items,
195
+			// check if known cache expires within the next minute,
196
+			// and if so, remove it from our tracking and and return nothing.
197
+			// this should trigger the cache content to be regenerated during this request,
198
+			// while allowing any following requests to still access the existing cache
199
+			// until it gets replaced with the refreshed content
200
+			if ($standard_cache
201
+				&& $this->transients[ $transient_key ] - time() <= MINUTE_IN_SECONDS
202
+			) {
203
+				unset($this->transients[ $transient_key ]);
204
+				$this->updateTransients();
205
+				return null;
206
+			}
207
+
208
+			// for non standard cache items, remove the key from our tracking,
209
+			// but proceed to retrieve the transient so that it also gets removed from the db
210
+			if ($this->transients[ $transient_key ] <= time()) {
211
+				unset($this->transients[ $transient_key ]);
212
+				$this->updateTransients();
213
+			}
214
+		}
215
+
216
+		$content = get_transient($transient_key);
217
+		return $content !== false ? $content : null;
218
+	}
219
+
220
+
221
+	/**
222
+	 * delete a single transient and remove tracking
223
+	 *
224
+	 * @param string $transient_key [required] full or partial transient key to be deleted
225
+	 */
226
+	public function delete($transient_key)
227
+	{
228
+		$this->deleteMany(array($transient_key));
229
+	}
230
+
231
+
232
+	/**
233
+	 * delete multiple transients and remove tracking
234
+	 *
235
+	 * @param array $transient_keys [required] array of full or partial transient keys to be deleted
236
+	 * @param bool  $force_delete   [optional] if true, then will not check incoming keys against those being tracked
237
+	 *                              and proceed directly to deleting those entries from the cache storage
238
+	 */
239
+	public function deleteMany(array $transient_keys, $force_delete = false)
240
+	{
241
+		$full_transient_keys = $force_delete ? $transient_keys : array();
242
+		if (empty($full_transient_keys)) {
243
+			foreach ($this->transients as $transient_key => $expiration) {
244
+				foreach ($transient_keys as $transient_key_to_delete) {
245
+					if (strpos($transient_key, $transient_key_to_delete) !== false) {
246
+						$full_transient_keys[] = $transient_key;
247
+					}
248
+				}
249
+			}
250
+		}
251
+		if ($this->deleteTransientKeys($full_transient_keys)) {
252
+			$this->updateTransients();
253
+		}
254
+	}
255
+
256
+
257
+	/**
258
+	 * sorts transients numerically by timestamp
259
+	 * then saves the transient schedule to a WP option
260
+	 */
261
+	private function updateTransients()
262
+	{
263
+		asort($this->transients, SORT_NUMERIC);
264
+		update_option(
265
+			TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY,
266
+			$this->transients
267
+		);
268
+	}
269
+
270
+
271
+	/**
272
+	 * schedules a transient for cleanup by adding it to the transient tracking
273
+	 *
274
+	 * @param string $transient_key [required]
275
+	 * @param int    $expiration    [required]
276
+	 */
277
+	private function scheduleTransientCleanup($transient_key, $expiration)
278
+	{
279
+		// make sure a valid future timestamp is set
280
+		$expiration += $expiration < time() ? time() : 0;
281
+		// and round to the closest 15 minutes
282
+		$expiration = $this->roundTimestamp($expiration);
283
+		// save transients to clear using their ID as the key to avoid duplicates
284
+		$this->transients[ $transient_key ] = $expiration;
285
+		$this->updateTransients();
286
+	}
287
+
288
+
289
+	/**
290
+	 * Since our tracked transients are sorted by their timestamps
291
+	 * we can grab the first transient and see when it is scheduled for cleanup.
292
+	 * If that timestamp is less than or equal to the current time,
293
+	 * then cleanup is triggered
294
+	 */
295
+	public function checkTransientCleanupSchedule()
296
+	{
297
+		if (empty($this->transients)) {
298
+			return;
299
+		}
300
+		// when do we run the next cleanup job?
301
+		reset($this->transients);
302
+		$next_scheduled_cleanup = current($this->transients);
303
+		// if the next cleanup job is scheduled for the current hour
304
+		if ($next_scheduled_cleanup <= $this->current_time) {
305
+			if ($this->cleanupExpiredTransients()) {
306
+				$this->updateTransients();
307
+			}
308
+		}
309
+	}
310
+
311
+
312
+	/**
313
+	 * loops through the array of tracked transients,
314
+	 * compiles a list of those that have expired, and sends that list off for deletion.
315
+	 * Also removes any bad records from the transients array
316
+	 *
317
+	 * @return bool
318
+	 */
319
+	private function cleanupExpiredTransients()
320
+	{
321
+		$update = false;
322
+		// filter the query limit. Set to 0 to turn off garbage collection
323
+		$limit = (int) abs(
324
+			apply_filters(
325
+				'FHEE__TransientCacheStorage__clearExpiredTransients__limit',
326
+				50
327
+			)
328
+		);
329
+		// non-zero LIMIT means take out the trash
330
+		if ($limit) {
331
+			$transient_keys = array();
332
+			foreach ($this->transients as $transient_key => $expiration) {
333
+				if ($expiration > $this->current_time) {
334
+					continue;
335
+				}
336
+				if (! $expiration || ! $transient_key) {
337
+					unset($this->transients[ $transient_key ]);
338
+					$update = true;
339
+					continue;
340
+				}
341
+				$transient_keys[] = $transient_key;
342
+			}
343
+			// delete expired keys, but maintain value of $update if nothing is deleted
344
+			$update = $this->deleteTransientKeys($transient_keys, $limit) ? true : $update;
345
+			do_action('FHEE__TransientCacheStorage__clearExpiredTransients__end', $this);
346
+		}
347
+		return $update;
348
+	}
349
+
350
+
351
+	/**
352
+	 * calls delete_transient() on each transient key provided, up to the specified limit
353
+	 *
354
+	 * @param array $transient_keys [required]
355
+	 * @param int   $limit
356
+	 * @return bool
357
+	 */
358
+	private function deleteTransientKeys(array $transient_keys, $limit = 50)
359
+	{
360
+		if (empty($transient_keys)) {
361
+			return false;
362
+		}
363
+		$counter = 0;
364
+		foreach ($transient_keys as $transient_key) {
365
+			if ($counter === $limit) {
366
+				break;
367
+			}
368
+			// remove any transient prefixes
369
+			$transient_key = strpos($transient_key, '_transient_timeout_') === 0
370
+				? str_replace('_transient_timeout_', '', $transient_key)
371
+				: $transient_key;
372
+			$transient_key = strpos($transient_key, '_transient_') === 0
373
+				? str_replace('_transient_', '', $transient_key)
374
+				: $transient_key;
375
+			delete_transient($transient_key);
376
+			unset($this->transients[ $transient_key ]);
377
+			$counter++;
378
+		}
379
+		return $counter > 0;
380
+	}
381 381
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -57,7 +57,7 @@  discard block
 block discarded – undo
57 57
         // round current time down to closest 5 minutes to simplify scheduling
58 58
         $this->current_time = $this->roundTimestamp(time(), '5-minutes', false);
59 59
         $this->transients = (array) get_option(TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY, array());
60
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && $this->transient_cleanup_frequency !== 'off') {
60
+        if ( ! (defined('DOING_AJAX') && DOING_AJAX) && $this->transient_cleanup_frequency !== 'off') {
61 61
             add_action('shutdown', array($this, 'checkTransientCleanupSchedule'), 999);
62 62
         }
63 63
     }
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
      */
191 191
     public function get($transient_key, $standard_cache = true)
192 192
     {
193
-        if (isset($this->transients[ $transient_key ])) {
193
+        if (isset($this->transients[$transient_key])) {
194 194
             // to avoid cache stampedes (AKA:dogpiles) for standard cache items,
195 195
             // check if known cache expires within the next minute,
196 196
             // and if so, remove it from our tracking and and return nothing.
@@ -198,17 +198,17 @@  discard block
 block discarded – undo
198 198
             // while allowing any following requests to still access the existing cache
199 199
             // until it gets replaced with the refreshed content
200 200
             if ($standard_cache
201
-                && $this->transients[ $transient_key ] - time() <= MINUTE_IN_SECONDS
201
+                && $this->transients[$transient_key] - time() <= MINUTE_IN_SECONDS
202 202
             ) {
203
-                unset($this->transients[ $transient_key ]);
203
+                unset($this->transients[$transient_key]);
204 204
                 $this->updateTransients();
205 205
                 return null;
206 206
             }
207 207
 
208 208
             // for non standard cache items, remove the key from our tracking,
209 209
             // but proceed to retrieve the transient so that it also gets removed from the db
210
-            if ($this->transients[ $transient_key ] <= time()) {
211
-                unset($this->transients[ $transient_key ]);
210
+            if ($this->transients[$transient_key] <= time()) {
211
+                unset($this->transients[$transient_key]);
212 212
                 $this->updateTransients();
213 213
             }
214 214
         }
@@ -281,7 +281,7 @@  discard block
 block discarded – undo
281 281
         // and round to the closest 15 minutes
282 282
         $expiration = $this->roundTimestamp($expiration);
283 283
         // save transients to clear using their ID as the key to avoid duplicates
284
-        $this->transients[ $transient_key ] = $expiration;
284
+        $this->transients[$transient_key] = $expiration;
285 285
         $this->updateTransients();
286 286
     }
287 287
 
@@ -333,8 +333,8 @@  discard block
 block discarded – undo
333 333
                 if ($expiration > $this->current_time) {
334 334
                     continue;
335 335
                 }
336
-                if (! $expiration || ! $transient_key) {
337
-                    unset($this->transients[ $transient_key ]);
336
+                if ( ! $expiration || ! $transient_key) {
337
+                    unset($this->transients[$transient_key]);
338 338
                     $update = true;
339 339
                     continue;
340 340
                 }
@@ -373,7 +373,7 @@  discard block
 block discarded – undo
373 373
                 ? str_replace('_transient_', '', $transient_key)
374 374
                 : $transient_key;
375 375
             delete_transient($transient_key);
376
-            unset($this->transients[ $transient_key ]);
376
+            unset($this->transients[$transient_key]);
377 377
             $counter++;
378 378
         }
379 379
         return $counter > 0;
Please login to merge, or discard this patch.
core/services/Benchmark.php 2 patches
Indentation   +320 added lines, -320 removed lines patch added patch discarded remove patch
@@ -15,324 +15,324 @@
 block discarded – undo
15 15
 class Benchmark
16 16
 {
17 17
 
18
-    /**
19
-     * @var string $output
20
-     */
21
-    private static $output;
22
-
23
-    /**
24
-     * @var array $start_times array containing the start time for the timers
25
-     */
26
-    private static $start_times;
27
-
28
-    /**
29
-     * @var array $times array containing all the timer'd times, which can be outputted via show_times()
30
-     */
31
-    private static $times = array();
32
-
33
-    /**
34
-     * @var array $memory_usage
35
-     */
36
-    protected static $memory_usage = array();
37
-
38
-
39
-    /**
40
-     * @param string $output
41
-     * @param bool   $formatted
42
-     */
43
-    public static function addOutput($output, $formatted = true)
44
-    {
45
-        Benchmark::$output .= $formatted
46
-            ? "<br />{$output}"
47
-            : "\n{$output}";
48
-    }
49
-
50
-
51
-    /**
52
-     * @return void
53
-     */
54
-    public static function resetOutput()
55
-    {
56
-        Benchmark::$output = '';
57
-    }
58
-
59
-    /**
60
-     * whether to benchmark code or not
61
-     */
62
-    public static function doNotRun()
63
-    {
64
-        return ! WP_DEBUG || (defined('DOING_AJAX') && DOING_AJAX);
65
-    }
66
-
67
-
68
-    /**
69
-     * resetTimes
70
-     */
71
-    public static function resetTimes()
72
-    {
73
-        Benchmark::$times = array();
74
-    }
75
-
76
-
77
-    /**
78
-     * Add Benchmark::startTimer() before a block of code you want to measure the performance of
79
-     *
80
-     * @param null $timer_name
81
-     */
82
-    public static function startTimer($timer_name = null)
83
-    {
84
-        if (Benchmark::doNotRun()) {
85
-            return;
86
-        }
87
-        $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
88
-        Benchmark::$start_times[ $timer_name ] = microtime(true);
89
-    }
90
-
91
-
92
-    /**
93
-     * Add Benchmark::stopTimer() after a block of code you want to measure the performance of
94
-     *
95
-     * @param string $timer_name
96
-     */
97
-    public static function stopTimer($timer_name = '')
98
-    {
99
-        if (Benchmark::doNotRun()) {
100
-            return;
101
-        }
102
-        $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
103
-        if (isset(Benchmark::$start_times[ $timer_name ])) {
104
-            $start_time = Benchmark::$start_times[ $timer_name ];
105
-            unset(Benchmark::$start_times[ $timer_name ]);
106
-        } else {
107
-            $start_time = array_pop(Benchmark::$start_times);
108
-        }
109
-        Benchmark::$times[ $timer_name ] = number_format(microtime(true) - $start_time, 8);
110
-    }
111
-
112
-
113
-    /**
114
-     * Measure the memory usage by PHP so far.
115
-     *
116
-     * @param string  $label      The label to show for this time eg "Start of calling Some_Class::some_function"
117
-     * @param boolean $output_now whether to echo now, or wait until EEH_Debug_Tools::show_times() is called
118
-     * @param bool    $formatted
119
-     * @return void
120
-     */
121
-    public static function measureMemory($label = 'memory usage', $output_now = false, $formatted = true)
122
-    {
123
-        if (Benchmark::doNotRun()) {
124
-            return;
125
-        }
126
-        $memory_used = Benchmark::convert(memory_get_usage(true));
127
-        Benchmark::$memory_usage[ $label ] = $memory_used;
128
-        if ($output_now) {
129
-            echo $formatted
130
-                ? "<br>{$label} : {$memory_used}"
131
-                : "\n {$label} : {$memory_used}";
132
-        }
133
-    }
134
-
135
-
136
-    /**
137
-     * will display the benchmarking results at shutdown
138
-     *
139
-     * @param bool $formatted
140
-     * @return void
141
-     */
142
-    public static function displayResultsAtShutdown($formatted = true)
143
-    {
144
-        Benchmark::resetOutput();
145
-        add_action(
146
-            'shutdown',
147
-            function () use ($formatted) {
148
-                Benchmark::displayResults(true, $formatted);
149
-            },
150
-            999999
151
-        );
152
-    }
153
-
154
-
155
-    /**
156
-     * will display the benchmarking results at shutdown
157
-     *
158
-     * @param string $filepath
159
-     * @param bool   $formatted
160
-     * @param bool   $append
161
-     * @return void
162
-     */
163
-    public static function writeResultsAtShutdown($filepath = '', $formatted = true, $append = true)
164
-    {
165
-        Benchmark::resetOutput();
166
-        add_action(
167
-            'shutdown',
168
-            function () use ($filepath, $formatted, $append) {
169
-                Benchmark::writeResultsToFile($filepath, $formatted, $append);
170
-            },
171
-            999999
172
-        );
173
-    }
174
-
175
-
176
-    /**
177
-     * @param bool $formatted
178
-     * @return string
179
-     */
180
-    private static function generateResults($formatted = true)
181
-    {
182
-        if (Benchmark::doNotRun()) {
183
-            return '';
184
-        }
185
-        if (! empty(Benchmark::$times)) {
186
-            $total = 0;
187
-            Benchmark::$output .= $formatted
188
-                ? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
189
-                : '';
190
-            foreach (Benchmark::$times as $timer_name => $total_time) {
191
-                Benchmark::$output .= Benchmark::formatTime($timer_name, $total_time, $formatted);
192
-                Benchmark::$output .= $formatted ? '<br />' : "\n";
193
-                $total += $total_time;
194
-            }
195
-            if ($formatted) {
196
-                Benchmark::$output .= '<br />';
197
-                Benchmark::$output .= '<h4>TOTAL TIME</h4>';
198
-                Benchmark::$output .= Benchmark::formatTime('', $total, $formatted);
199
-                Benchmark::$output .= '<span style="color:#999999; font-size:.8em;"> milliseconds</span><br />';
200
-                Benchmark::$output .= '<br />';
201
-                Benchmark::$output .= '<h5>Performance scale (from best to worse)</h5>';
202
-                Benchmark::$output .= '<span style="color:mediumpurple">Like wow! How about a Scooby snack?</span><br />';
203
-                Benchmark::$output .= '<span style="color:deepskyblue">Like...no way man!</span><br />';
204
-                Benchmark::$output .= '<span style="color:limegreen">Like...groovy!</span><br />';
205
-                Benchmark::$output .= '<span style="color:gold">Ruh Oh</span><br />';
206
-                Benchmark::$output .= '<span style="color:darkorange">Zoinks!</span><br />';
207
-                Benchmark::$output .= '<span style="color:red">Like...HEEELLLP</span><br />';
208
-            }
209
-        }
210
-        if (! empty(Benchmark::$memory_usage)) {
211
-            Benchmark::$output .= $formatted
212
-                ? '<h5>Memory</h5>'
213
-                : "\nMemory";
214
-            foreach (Benchmark::$memory_usage as $label => $memory_usage) {
215
-                Benchmark::$output .= $formatted
216
-                    ? "<br />{$memory_usage} : {$label}"
217
-                    : "\n{$memory_usage} : {$label}";
218
-            }
219
-        }
220
-        if (empty(Benchmark::$output)) {
221
-            return '';
222
-        }
223
-        Benchmark::$output = $formatted
224
-            ? '<div style="border:1px solid #dddddd; background-color:#ffffff;'
225
-              . (is_admin()
226
-                ? ' margin:2em 2em 2em 180px;'
227
-                : ' margin:2em;')
228
-              . ' padding:2em;">'
229
-              . '<h4>BENCHMARKING</h4>'
230
-              . Benchmark::$output
231
-              . '</div>'
232
-            : Benchmark::$output;
233
-        return Benchmark::$output;
234
-    }
235
-
236
-
237
-    /**
238
-     * @param bool $echo
239
-     * @param bool $formatted
240
-     * @return string
241
-     */
242
-    public static function displayResults($echo = true, $formatted = true)
243
-    {
244
-        $results = Benchmark::generateResults($formatted);
245
-        if ($echo) {
246
-            echo $results;
247
-            $results = '';
248
-        }
249
-        return $results;
250
-    }
251
-
252
-
253
-    /**
254
-     * @param string $filepath
255
-     * @param bool   $formatted
256
-     * @param bool   $append
257
-     * @throws EE_Error
258
-     */
259
-    public static function writeResultsToFile($filepath = '', $formatted = true, $append = true)
260
-    {
261
-        $filepath = ! empty($filepath) && is_readable(dirname($filepath))
262
-            ? $filepath
263
-            : '';
264
-        if (empty($filepath)) {
265
-            $filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
266
-        }
267
-        EEH_File::ensure_file_exists_and_is_writable($filepath);
268
-        file_put_contents(
269
-            $filepath,
270
-            "\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
271
-            $append ? FILE_APPEND | LOCK_EX : LOCK_EX
272
-        );
273
-    }
274
-
275
-
276
-    /**
277
-     * Converts a measure of memory bytes into the most logical units (eg kb, mb, etc)
278
-     *
279
-     * @param int $size
280
-     * @return string
281
-     */
282
-    public static function convert($size)
283
-    {
284
-        $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
285
-        return round(
286
-            $size / pow(1024, $i = floor(log($size, 1024))),
287
-            2
288
-        ) . ' ' . $unit[ absint($i) ];
289
-    }
290
-
291
-
292
-    /**
293
-     * @param string $timer_name
294
-     * @param float  $total_time
295
-     * @param bool   $formatted
296
-     * @return string
297
-     */
298
-    public static function formatTime($timer_name, $total_time, $formatted = true)
299
-    {
300
-        $total_time *= 1000;
301
-        switch ($total_time) {
302
-            case $total_time > 12500:
303
-                $color = 'red';
304
-                $bold = 'bold';
305
-                break;
306
-            case $total_time > 2500:
307
-                $color = 'darkorange';
308
-                $bold = 'bold';
309
-                break;
310
-            case $total_time > 500:
311
-                $color = 'gold';
312
-                $bold = 'bold';
313
-                break;
314
-            case $total_time > 100:
315
-                $color = 'limegreen';
316
-                $bold = 'normal';
317
-                break;
318
-            case $total_time > 20:
319
-                $color = 'deepskyblue';
320
-                $bold = 'normal';
321
-                break;
322
-            default:
323
-                $color = 'mediumpurple';
324
-                $bold = 'normal';
325
-                break;
326
-        }
327
-        return $formatted
328
-            ? '<span style="min-width: 10px; margin:0 1em; color:'
329
-              . $color
330
-              . '; font-weight:'
331
-              . $bold
332
-              . '; font-size:1.2em;">'
333
-              . str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT)
334
-              . '</span> '
335
-              . $timer_name
336
-            : str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT);
337
-    }
18
+	/**
19
+	 * @var string $output
20
+	 */
21
+	private static $output;
22
+
23
+	/**
24
+	 * @var array $start_times array containing the start time for the timers
25
+	 */
26
+	private static $start_times;
27
+
28
+	/**
29
+	 * @var array $times array containing all the timer'd times, which can be outputted via show_times()
30
+	 */
31
+	private static $times = array();
32
+
33
+	/**
34
+	 * @var array $memory_usage
35
+	 */
36
+	protected static $memory_usage = array();
37
+
38
+
39
+	/**
40
+	 * @param string $output
41
+	 * @param bool   $formatted
42
+	 */
43
+	public static function addOutput($output, $formatted = true)
44
+	{
45
+		Benchmark::$output .= $formatted
46
+			? "<br />{$output}"
47
+			: "\n{$output}";
48
+	}
49
+
50
+
51
+	/**
52
+	 * @return void
53
+	 */
54
+	public static function resetOutput()
55
+	{
56
+		Benchmark::$output = '';
57
+	}
58
+
59
+	/**
60
+	 * whether to benchmark code or not
61
+	 */
62
+	public static function doNotRun()
63
+	{
64
+		return ! WP_DEBUG || (defined('DOING_AJAX') && DOING_AJAX);
65
+	}
66
+
67
+
68
+	/**
69
+	 * resetTimes
70
+	 */
71
+	public static function resetTimes()
72
+	{
73
+		Benchmark::$times = array();
74
+	}
75
+
76
+
77
+	/**
78
+	 * Add Benchmark::startTimer() before a block of code you want to measure the performance of
79
+	 *
80
+	 * @param null $timer_name
81
+	 */
82
+	public static function startTimer($timer_name = null)
83
+	{
84
+		if (Benchmark::doNotRun()) {
85
+			return;
86
+		}
87
+		$timer_name = $timer_name !== '' ? $timer_name : get_called_class();
88
+		Benchmark::$start_times[ $timer_name ] = microtime(true);
89
+	}
90
+
91
+
92
+	/**
93
+	 * Add Benchmark::stopTimer() after a block of code you want to measure the performance of
94
+	 *
95
+	 * @param string $timer_name
96
+	 */
97
+	public static function stopTimer($timer_name = '')
98
+	{
99
+		if (Benchmark::doNotRun()) {
100
+			return;
101
+		}
102
+		$timer_name = $timer_name !== '' ? $timer_name : get_called_class();
103
+		if (isset(Benchmark::$start_times[ $timer_name ])) {
104
+			$start_time = Benchmark::$start_times[ $timer_name ];
105
+			unset(Benchmark::$start_times[ $timer_name ]);
106
+		} else {
107
+			$start_time = array_pop(Benchmark::$start_times);
108
+		}
109
+		Benchmark::$times[ $timer_name ] = number_format(microtime(true) - $start_time, 8);
110
+	}
111
+
112
+
113
+	/**
114
+	 * Measure the memory usage by PHP so far.
115
+	 *
116
+	 * @param string  $label      The label to show for this time eg "Start of calling Some_Class::some_function"
117
+	 * @param boolean $output_now whether to echo now, or wait until EEH_Debug_Tools::show_times() is called
118
+	 * @param bool    $formatted
119
+	 * @return void
120
+	 */
121
+	public static function measureMemory($label = 'memory usage', $output_now = false, $formatted = true)
122
+	{
123
+		if (Benchmark::doNotRun()) {
124
+			return;
125
+		}
126
+		$memory_used = Benchmark::convert(memory_get_usage(true));
127
+		Benchmark::$memory_usage[ $label ] = $memory_used;
128
+		if ($output_now) {
129
+			echo $formatted
130
+				? "<br>{$label} : {$memory_used}"
131
+				: "\n {$label} : {$memory_used}";
132
+		}
133
+	}
134
+
135
+
136
+	/**
137
+	 * will display the benchmarking results at shutdown
138
+	 *
139
+	 * @param bool $formatted
140
+	 * @return void
141
+	 */
142
+	public static function displayResultsAtShutdown($formatted = true)
143
+	{
144
+		Benchmark::resetOutput();
145
+		add_action(
146
+			'shutdown',
147
+			function () use ($formatted) {
148
+				Benchmark::displayResults(true, $formatted);
149
+			},
150
+			999999
151
+		);
152
+	}
153
+
154
+
155
+	/**
156
+	 * will display the benchmarking results at shutdown
157
+	 *
158
+	 * @param string $filepath
159
+	 * @param bool   $formatted
160
+	 * @param bool   $append
161
+	 * @return void
162
+	 */
163
+	public static function writeResultsAtShutdown($filepath = '', $formatted = true, $append = true)
164
+	{
165
+		Benchmark::resetOutput();
166
+		add_action(
167
+			'shutdown',
168
+			function () use ($filepath, $formatted, $append) {
169
+				Benchmark::writeResultsToFile($filepath, $formatted, $append);
170
+			},
171
+			999999
172
+		);
173
+	}
174
+
175
+
176
+	/**
177
+	 * @param bool $formatted
178
+	 * @return string
179
+	 */
180
+	private static function generateResults($formatted = true)
181
+	{
182
+		if (Benchmark::doNotRun()) {
183
+			return '';
184
+		}
185
+		if (! empty(Benchmark::$times)) {
186
+			$total = 0;
187
+			Benchmark::$output .= $formatted
188
+				? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
189
+				: '';
190
+			foreach (Benchmark::$times as $timer_name => $total_time) {
191
+				Benchmark::$output .= Benchmark::formatTime($timer_name, $total_time, $formatted);
192
+				Benchmark::$output .= $formatted ? '<br />' : "\n";
193
+				$total += $total_time;
194
+			}
195
+			if ($formatted) {
196
+				Benchmark::$output .= '<br />';
197
+				Benchmark::$output .= '<h4>TOTAL TIME</h4>';
198
+				Benchmark::$output .= Benchmark::formatTime('', $total, $formatted);
199
+				Benchmark::$output .= '<span style="color:#999999; font-size:.8em;"> milliseconds</span><br />';
200
+				Benchmark::$output .= '<br />';
201
+				Benchmark::$output .= '<h5>Performance scale (from best to worse)</h5>';
202
+				Benchmark::$output .= '<span style="color:mediumpurple">Like wow! How about a Scooby snack?</span><br />';
203
+				Benchmark::$output .= '<span style="color:deepskyblue">Like...no way man!</span><br />';
204
+				Benchmark::$output .= '<span style="color:limegreen">Like...groovy!</span><br />';
205
+				Benchmark::$output .= '<span style="color:gold">Ruh Oh</span><br />';
206
+				Benchmark::$output .= '<span style="color:darkorange">Zoinks!</span><br />';
207
+				Benchmark::$output .= '<span style="color:red">Like...HEEELLLP</span><br />';
208
+			}
209
+		}
210
+		if (! empty(Benchmark::$memory_usage)) {
211
+			Benchmark::$output .= $formatted
212
+				? '<h5>Memory</h5>'
213
+				: "\nMemory";
214
+			foreach (Benchmark::$memory_usage as $label => $memory_usage) {
215
+				Benchmark::$output .= $formatted
216
+					? "<br />{$memory_usage} : {$label}"
217
+					: "\n{$memory_usage} : {$label}";
218
+			}
219
+		}
220
+		if (empty(Benchmark::$output)) {
221
+			return '';
222
+		}
223
+		Benchmark::$output = $formatted
224
+			? '<div style="border:1px solid #dddddd; background-color:#ffffff;'
225
+			  . (is_admin()
226
+				? ' margin:2em 2em 2em 180px;'
227
+				: ' margin:2em;')
228
+			  . ' padding:2em;">'
229
+			  . '<h4>BENCHMARKING</h4>'
230
+			  . Benchmark::$output
231
+			  . '</div>'
232
+			: Benchmark::$output;
233
+		return Benchmark::$output;
234
+	}
235
+
236
+
237
+	/**
238
+	 * @param bool $echo
239
+	 * @param bool $formatted
240
+	 * @return string
241
+	 */
242
+	public static function displayResults($echo = true, $formatted = true)
243
+	{
244
+		$results = Benchmark::generateResults($formatted);
245
+		if ($echo) {
246
+			echo $results;
247
+			$results = '';
248
+		}
249
+		return $results;
250
+	}
251
+
252
+
253
+	/**
254
+	 * @param string $filepath
255
+	 * @param bool   $formatted
256
+	 * @param bool   $append
257
+	 * @throws EE_Error
258
+	 */
259
+	public static function writeResultsToFile($filepath = '', $formatted = true, $append = true)
260
+	{
261
+		$filepath = ! empty($filepath) && is_readable(dirname($filepath))
262
+			? $filepath
263
+			: '';
264
+		if (empty($filepath)) {
265
+			$filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
266
+		}
267
+		EEH_File::ensure_file_exists_and_is_writable($filepath);
268
+		file_put_contents(
269
+			$filepath,
270
+			"\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
271
+			$append ? FILE_APPEND | LOCK_EX : LOCK_EX
272
+		);
273
+	}
274
+
275
+
276
+	/**
277
+	 * Converts a measure of memory bytes into the most logical units (eg kb, mb, etc)
278
+	 *
279
+	 * @param int $size
280
+	 * @return string
281
+	 */
282
+	public static function convert($size)
283
+	{
284
+		$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
285
+		return round(
286
+			$size / pow(1024, $i = floor(log($size, 1024))),
287
+			2
288
+		) . ' ' . $unit[ absint($i) ];
289
+	}
290
+
291
+
292
+	/**
293
+	 * @param string $timer_name
294
+	 * @param float  $total_time
295
+	 * @param bool   $formatted
296
+	 * @return string
297
+	 */
298
+	public static function formatTime($timer_name, $total_time, $formatted = true)
299
+	{
300
+		$total_time *= 1000;
301
+		switch ($total_time) {
302
+			case $total_time > 12500:
303
+				$color = 'red';
304
+				$bold = 'bold';
305
+				break;
306
+			case $total_time > 2500:
307
+				$color = 'darkorange';
308
+				$bold = 'bold';
309
+				break;
310
+			case $total_time > 500:
311
+				$color = 'gold';
312
+				$bold = 'bold';
313
+				break;
314
+			case $total_time > 100:
315
+				$color = 'limegreen';
316
+				$bold = 'normal';
317
+				break;
318
+			case $total_time > 20:
319
+				$color = 'deepskyblue';
320
+				$bold = 'normal';
321
+				break;
322
+			default:
323
+				$color = 'mediumpurple';
324
+				$bold = 'normal';
325
+				break;
326
+		}
327
+		return $formatted
328
+			? '<span style="min-width: 10px; margin:0 1em; color:'
329
+			  . $color
330
+			  . '; font-weight:'
331
+			  . $bold
332
+			  . '; font-size:1.2em;">'
333
+			  . str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT)
334
+			  . '</span> '
335
+			  . $timer_name
336
+			: str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT);
337
+	}
338 338
 }
Please login to merge, or discard this patch.
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -85,7 +85,7 @@  discard block
 block discarded – undo
85 85
             return;
86 86
         }
87 87
         $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
88
-        Benchmark::$start_times[ $timer_name ] = microtime(true);
88
+        Benchmark::$start_times[$timer_name] = microtime(true);
89 89
     }
90 90
 
91 91
 
@@ -100,13 +100,13 @@  discard block
 block discarded – undo
100 100
             return;
101 101
         }
102 102
         $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
103
-        if (isset(Benchmark::$start_times[ $timer_name ])) {
104
-            $start_time = Benchmark::$start_times[ $timer_name ];
105
-            unset(Benchmark::$start_times[ $timer_name ]);
103
+        if (isset(Benchmark::$start_times[$timer_name])) {
104
+            $start_time = Benchmark::$start_times[$timer_name];
105
+            unset(Benchmark::$start_times[$timer_name]);
106 106
         } else {
107 107
             $start_time = array_pop(Benchmark::$start_times);
108 108
         }
109
-        Benchmark::$times[ $timer_name ] = number_format(microtime(true) - $start_time, 8);
109
+        Benchmark::$times[$timer_name] = number_format(microtime(true) - $start_time, 8);
110 110
     }
111 111
 
112 112
 
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
             return;
125 125
         }
126 126
         $memory_used = Benchmark::convert(memory_get_usage(true));
127
-        Benchmark::$memory_usage[ $label ] = $memory_used;
127
+        Benchmark::$memory_usage[$label] = $memory_used;
128 128
         if ($output_now) {
129 129
             echo $formatted
130 130
                 ? "<br>{$label} : {$memory_used}"
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
         Benchmark::resetOutput();
145 145
         add_action(
146 146
             'shutdown',
147
-            function () use ($formatted) {
147
+            function() use ($formatted) {
148 148
                 Benchmark::displayResults(true, $formatted);
149 149
             },
150 150
             999999
@@ -165,7 +165,7 @@  discard block
 block discarded – undo
165 165
         Benchmark::resetOutput();
166 166
         add_action(
167 167
             'shutdown',
168
-            function () use ($filepath, $formatted, $append) {
168
+            function() use ($filepath, $formatted, $append) {
169 169
                 Benchmark::writeResultsToFile($filepath, $formatted, $append);
170 170
             },
171 171
             999999
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
         if (Benchmark::doNotRun()) {
183 183
             return '';
184 184
         }
185
-        if (! empty(Benchmark::$times)) {
185
+        if ( ! empty(Benchmark::$times)) {
186 186
             $total = 0;
187 187
             Benchmark::$output .= $formatted
188 188
                 ? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
@@ -207,7 +207,7 @@  discard block
 block discarded – undo
207 207
                 Benchmark::$output .= '<span style="color:red">Like...HEEELLLP</span><br />';
208 208
             }
209 209
         }
210
-        if (! empty(Benchmark::$memory_usage)) {
210
+        if ( ! empty(Benchmark::$memory_usage)) {
211 211
             Benchmark::$output .= $formatted
212 212
                 ? '<h5>Memory</h5>'
213 213
                 : "\nMemory";
@@ -262,12 +262,12 @@  discard block
 block discarded – undo
262 262
             ? $filepath
263 263
             : '';
264 264
         if (empty($filepath)) {
265
-            $filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
265
+            $filepath = EVENT_ESPRESSO_UPLOAD_DIR.'logs/benchmarking-'.date('Y-m-d').'.html';
266 266
         }
267 267
         EEH_File::ensure_file_exists_and_is_writable($filepath);
268 268
         file_put_contents(
269 269
             $filepath,
270
-            "\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
270
+            "\n".date('Y-m-d H:i:s').Benchmark::generateResults($formatted),
271 271
             $append ? FILE_APPEND | LOCK_EX : LOCK_EX
272 272
         );
273 273
     }
@@ -285,7 +285,7 @@  discard block
 block discarded – undo
285 285
         return round(
286 286
             $size / pow(1024, $i = floor(log($size, 1024))),
287 287
             2
288
-        ) . ' ' . $unit[ absint($i) ];
288
+        ).' '.$unit[absint($i)];
289 289
     }
290 290
 
291 291
 
Please login to merge, or discard this patch.