@@ -248,7 +248,7 @@ discard block |
||
248 | 248 | * @access protected |
249 | 249 | * @param \EE_Ticket $ticket |
250 | 250 | * @param int $quantity |
251 | - * @return bool |
|
251 | + * @return integer |
|
252 | 252 | * @throws EE_Error |
253 | 253 | */ |
254 | 254 | protected function _reserve_ticket(EE_Ticket $ticket, $quantity = 1) |
@@ -268,7 +268,7 @@ discard block |
||
268 | 268 | * @access protected |
269 | 269 | * @param EE_Ticket $ticket |
270 | 270 | * @param int $quantity |
271 | - * @return bool |
|
271 | + * @return integer |
|
272 | 272 | * @throws EE_Error |
273 | 273 | */ |
274 | 274 | protected function _release_reserved_ticket(EE_Ticket $ticket, $quantity = 1) |
@@ -2,7 +2,7 @@ discard block |
||
2 | 2 | use EventEspresso\core\exceptions\UnexpectedEntityException; |
3 | 3 | |
4 | 4 | if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
5 | - exit('No direct script access allowed'); |
|
5 | + exit('No direct script access allowed'); |
|
6 | 6 | } |
7 | 7 | |
8 | 8 | |
@@ -21,952 +21,952 @@ discard block |
||
21 | 21 | class EED_Ticket_Sales_Monitor extends EED_Module |
22 | 22 | { |
23 | 23 | |
24 | - const debug = false; // true false |
|
25 | - |
|
26 | - /** |
|
27 | - * an array of raw ticket data from EED_Ticket_Selector |
|
28 | - * |
|
29 | - * @var array $ticket_selections |
|
30 | - */ |
|
31 | - protected $ticket_selections = array(); |
|
32 | - |
|
33 | - /** |
|
34 | - * the raw ticket data from EED_Ticket_Selector is organized in rows |
|
35 | - * according to how they are displayed in the actual Ticket_Selector |
|
36 | - * this tracks the current row being processed |
|
37 | - * |
|
38 | - * @var int $current_row |
|
39 | - */ |
|
40 | - protected $current_row = 0; |
|
41 | - |
|
42 | - /** |
|
43 | - * an array for tracking names of tickets that have sold out |
|
44 | - * |
|
45 | - * @var array $sold_out_tickets |
|
46 | - */ |
|
47 | - protected $sold_out_tickets = array(); |
|
48 | - |
|
49 | - /** |
|
50 | - * an array for tracking names of tickets that have had their quantities reduced |
|
51 | - * |
|
52 | - * @var array $decremented_tickets |
|
53 | - */ |
|
54 | - protected $decremented_tickets = array(); |
|
55 | - |
|
56 | - |
|
57 | - |
|
58 | - /** |
|
59 | - * set_hooks - for hooking into EE Core, other modules, etc |
|
60 | - * |
|
61 | - * @access public |
|
62 | - * @return void |
|
63 | - */ |
|
64 | - public static function set_hooks() |
|
65 | - { |
|
66 | - // release tickets for expired carts |
|
67 | - add_action('EED_Ticket_Selector__process_ticket_selections__before', |
|
68 | - array('EED_Ticket_Sales_Monitor', 'release_tickets_for_expired_carts'), |
|
69 | - 1 |
|
70 | - ); |
|
71 | - // check ticket reserves AFTER MER does it's check (hence priority 20) |
|
72 | - add_filter('FHEE__EE_Ticket_Selector___add_ticket_to_cart__ticket_qty', |
|
73 | - array('EED_Ticket_Sales_Monitor', 'validate_ticket_sale'), |
|
74 | - 20, 3 |
|
75 | - ); |
|
76 | - // add notices for sold out tickets |
|
77 | - add_action('AHEE__EE_Ticket_Selector__process_ticket_selections__after_tickets_added_to_cart', |
|
78 | - array('EED_Ticket_Sales_Monitor', 'post_notices'), |
|
79 | - 10 |
|
80 | - ); |
|
81 | - // handle ticket quantities adjusted in cart |
|
82 | - //add_action( |
|
83 | - // 'FHEE__EED_Multi_Event_Registration__adjust_line_item_quantity__line_item_quantity_updated', |
|
84 | - // array( 'EED_Ticket_Sales_Monitor', 'ticket_quantity_updated' ), |
|
85 | - // 10, 2 |
|
86 | - //); |
|
87 | - // handle tickets deleted from cart |
|
88 | - add_action( |
|
89 | - 'FHEE__EED_Multi_Event_Registration__delete_ticket__ticket_removed_from_cart', |
|
90 | - array('EED_Ticket_Sales_Monitor', 'ticket_removed_from_cart'), |
|
91 | - 10, 2 |
|
92 | - ); |
|
93 | - // handle emptied carts |
|
94 | - add_action( |
|
95 | - 'AHEE__EE_Session__reset_cart__before_reset', |
|
96 | - array('EED_Ticket_Sales_Monitor', 'session_cart_reset'), |
|
97 | - 10, 1 |
|
98 | - ); |
|
99 | - add_action( |
|
100 | - 'AHEE__EED_Multi_Event_Registration__empty_event_cart__before_delete_cart', |
|
101 | - array('EED_Ticket_Sales_Monitor', 'session_cart_reset'), |
|
102 | - 10, 1 |
|
103 | - ); |
|
104 | - // handle cancelled registrations |
|
105 | - add_action( |
|
106 | - 'AHEE__EE_Session__reset_checkout__before_reset', |
|
107 | - array('EED_Ticket_Sales_Monitor', 'session_checkout_reset'), |
|
108 | - 10, 1 |
|
109 | - ); |
|
110 | - // cron tasks |
|
111 | - add_action( |
|
112 | - 'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions__abandoned_transaction', |
|
113 | - array('EED_Ticket_Sales_Monitor', 'process_abandoned_transactions'), |
|
114 | - 10, 1 |
|
115 | - ); |
|
116 | - add_action( |
|
117 | - 'AHEE__EE_Cron_Tasks__process_expired_transactions__incomplete_transaction', |
|
118 | - array('EED_Ticket_Sales_Monitor', 'process_abandoned_transactions'), |
|
119 | - 10, 1 |
|
120 | - ); |
|
121 | - add_action( |
|
122 | - 'AHEE__EE_Cron_Tasks__process_expired_transactions__failed_transaction', |
|
123 | - array('EED_Ticket_Sales_Monitor', 'process_failed_transactions'), |
|
124 | - 10, 1 |
|
125 | - ); |
|
126 | - } |
|
127 | - |
|
128 | - |
|
129 | - |
|
130 | - /** |
|
131 | - * set_hooks_admin - for hooking into EE Admin Core, other modules, etc |
|
132 | - * |
|
133 | - * @access public |
|
134 | - * @return void |
|
135 | - */ |
|
136 | - public static function set_hooks_admin() |
|
137 | - { |
|
138 | - EED_Ticket_Sales_Monitor::set_hooks(); |
|
139 | - } |
|
140 | - |
|
141 | - |
|
142 | - |
|
143 | - /** |
|
144 | - * @return EED_Ticket_Sales_Monitor|EED_Module |
|
145 | - */ |
|
146 | - public static function instance() |
|
147 | - { |
|
148 | - return parent::get_instance(__CLASS__); |
|
149 | - } |
|
150 | - |
|
151 | - |
|
152 | - |
|
153 | - /** |
|
154 | - * run |
|
155 | - * |
|
156 | - * @access public |
|
157 | - * @param WP_Query $WP_Query |
|
158 | - * @return void |
|
159 | - */ |
|
160 | - public function run($WP_Query) |
|
161 | - { |
|
162 | - } |
|
163 | - |
|
164 | - |
|
165 | - |
|
166 | - /********************************** PRE_TICKET_SALES **********************************/ |
|
167 | - |
|
168 | - |
|
169 | - |
|
170 | - /** |
|
171 | - * Retrieves grand totals from the line items that have no TXN ID |
|
172 | - * and timestamps less than the current time minus the session lifespan. |
|
173 | - * These are carts that have been abandoned before the "registrant" even attempted to checkout. |
|
174 | - * We're going to release the tickets for these line items before attempting to add more to the cart. |
|
175 | - * |
|
176 | - * @return void |
|
177 | - * @throws \EE_Error |
|
178 | - */ |
|
179 | - public static function release_tickets_for_expired_carts() |
|
180 | - { |
|
181 | - $expired_ticket_IDs = array(); |
|
182 | - $valid_ticket_line_items = array(); |
|
183 | - $total_line_items = EEM_Line_Item::instance()->get_total_line_items_with_no_transaction(); |
|
184 | - if(empty($total_line_items)){ |
|
185 | - return; |
|
186 | - } |
|
187 | - $expired = current_time('timestamp') - EE_Registry::instance()->SSN->lifespan(); |
|
188 | - foreach ($total_line_items as $total_line_item) { |
|
189 | - /** @var EE_Line_Item $total_line_item */ |
|
190 | - $ticket_line_items = EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total($total_line_item); |
|
191 | - foreach ($ticket_line_items as $ticket_line_item) { |
|
192 | - if(! $ticket_line_item instanceof EE_Line_Item) { |
|
193 | - continue; |
|
194 | - } |
|
195 | - if ($total_line_item->timestamp(true) <= $expired ) { |
|
196 | - $expired_ticket_IDs[$ticket_line_item->OBJ_ID()] = $ticket_line_item->OBJ_ID(); |
|
197 | - } else { |
|
198 | - $valid_ticket_line_items[$ticket_line_item->OBJ_ID()] = $ticket_line_item; |
|
199 | - } |
|
200 | - } |
|
201 | - } |
|
202 | - if (! empty($expired_ticket_IDs)) { |
|
203 | - EED_Ticket_Sales_Monitor::release_reservations_for_tickets( |
|
204 | - \EEM_Ticket::instance()->get_tickets_with_IDs($expired_ticket_IDs), |
|
205 | - $valid_ticket_line_items |
|
206 | - ); |
|
207 | - // let's get rid of expired line items so that they can't interfere with tracking |
|
208 | - add_action( |
|
209 | - 'shutdown', |
|
210 | - array('EED_Ticket_Sales_Monitor', 'clear_expired_line_items_with_no_transaction'), |
|
211 | - 999 |
|
212 | - ); |
|
213 | - } |
|
214 | - } |
|
215 | - |
|
216 | - |
|
217 | - |
|
218 | - /********************************** VALIDATE_TICKET_SALE **********************************/ |
|
219 | - |
|
220 | - |
|
221 | - |
|
222 | - /** |
|
223 | - * validate_ticket_sales |
|
224 | - * callback for 'FHEE__EED_Ticket_Selector__process_ticket_selections__valid_post_data' |
|
225 | - * |
|
226 | - * @access public |
|
227 | - * @param int $qty |
|
228 | - * @param \EE_Ticket $ticket |
|
229 | - * @return bool |
|
230 | - * @throws UnexpectedEntityException |
|
231 | - * @throws EE_Error |
|
232 | - */ |
|
233 | - public static function validate_ticket_sale($qty = 1, EE_Ticket $ticket) |
|
234 | - { |
|
235 | - $qty = absint($qty); |
|
236 | - if ($qty > 0) { |
|
237 | - $qty = EED_Ticket_Sales_Monitor::instance()->_validate_ticket_sale($ticket, $qty); |
|
238 | - } |
|
239 | - if (self::debug) { |
|
240 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '()'; |
|
241 | - echo '<br /><br /><b> RETURNED QTY: ' . $qty . '</b>'; |
|
242 | - } |
|
243 | - return $qty; |
|
244 | - } |
|
245 | - |
|
246 | - |
|
247 | - |
|
248 | - /** |
|
249 | - * _validate_ticket_sale |
|
250 | - * checks whether an individual ticket is available for purchase based on datetime, and ticket details |
|
251 | - * |
|
252 | - * @access protected |
|
253 | - * @param \EE_Ticket $ticket |
|
254 | - * @param int $qty |
|
255 | - * @return int |
|
256 | - * @throws UnexpectedEntityException |
|
257 | - * @throws EE_Error |
|
258 | - */ |
|
259 | - protected function _validate_ticket_sale(EE_Ticket $ticket, $qty = 1) |
|
260 | - { |
|
261 | - if (self::debug) { |
|
262 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
263 | - } |
|
264 | - if ( ! $ticket instanceof EE_Ticket) { |
|
265 | - return 0; |
|
266 | - } |
|
267 | - if (self::debug) { |
|
268 | - echo '<br /><b> . ticket->ID: ' . $ticket->ID() . '</b>'; |
|
269 | - echo '<br /> . original ticket->reserved: ' . $ticket->reserved(); |
|
270 | - } |
|
271 | - $ticket->refresh_from_db(); |
|
272 | - // first let's determine the ticket availability based on sales |
|
273 | - $available = $ticket->qty('saleable'); |
|
274 | - if (self::debug) { |
|
275 | - echo '<br /> . . . ticket->qty: ' . $ticket->qty(); |
|
276 | - echo '<br /> . . . ticket->sold: ' . $ticket->sold(); |
|
277 | - echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
278 | - echo '<br /> . . . ticket->qty(saleable): ' . $ticket->qty('saleable'); |
|
279 | - echo '<br /> . . . available: ' . $available; |
|
280 | - } |
|
281 | - if ($available < 1) { |
|
282 | - $this->_ticket_sold_out($ticket); |
|
283 | - return 0; |
|
284 | - } |
|
285 | - if (self::debug) { |
|
286 | - echo '<br /> . . . qty: ' . $qty; |
|
287 | - } |
|
288 | - if ($available < $qty) { |
|
289 | - $qty = $available; |
|
290 | - if (self::debug) { |
|
291 | - echo '<br /> . . . QTY ADJUSTED: ' . $qty; |
|
292 | - } |
|
293 | - $this->_ticket_quantity_decremented($ticket); |
|
294 | - } |
|
295 | - $this->_reserve_ticket($ticket, $qty); |
|
296 | - return $qty; |
|
297 | - } |
|
298 | - |
|
299 | - |
|
300 | - |
|
301 | - /** |
|
302 | - * _reserve_ticket |
|
303 | - * increments ticket reserved based on quantity passed |
|
304 | - * |
|
305 | - * @access protected |
|
306 | - * @param \EE_Ticket $ticket |
|
307 | - * @param int $quantity |
|
308 | - * @return bool |
|
309 | - * @throws EE_Error |
|
310 | - */ |
|
311 | - protected function _reserve_ticket(EE_Ticket $ticket, $quantity = 1) |
|
312 | - { |
|
313 | - if (self::debug) { |
|
314 | - echo '<br /><br /> . . . INCREASE RESERVED: ' . $quantity; |
|
315 | - } |
|
316 | - $ticket->increase_reserved($quantity); |
|
317 | - return $ticket->save(); |
|
318 | - } |
|
319 | - |
|
320 | - |
|
321 | - |
|
322 | - /** |
|
323 | - * _release_reserved_ticket |
|
324 | - * |
|
325 | - * @access protected |
|
326 | - * @param EE_Ticket $ticket |
|
327 | - * @param int $quantity |
|
328 | - * @return bool |
|
329 | - * @throws EE_Error |
|
330 | - */ |
|
331 | - protected function _release_reserved_ticket(EE_Ticket $ticket, $quantity = 1) |
|
332 | - { |
|
333 | - if (self::debug) { |
|
334 | - echo '<br /> . . . ticket->ID: ' . $ticket->ID(); |
|
335 | - echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
336 | - } |
|
337 | - $ticket->decrease_reserved($quantity); |
|
338 | - if (self::debug) { |
|
339 | - echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
340 | - } |
|
341 | - return $ticket->save() ? 1 : 0; |
|
342 | - } |
|
343 | - |
|
344 | - |
|
345 | - |
|
346 | - /** |
|
347 | - * _ticket_sold_out |
|
348 | - * removes quantities within the ticket selector based on zero ticket availability |
|
349 | - * |
|
350 | - * @access protected |
|
351 | - * @param \EE_Ticket $ticket |
|
352 | - * @return void |
|
353 | - * @throws UnexpectedEntityException |
|
354 | - * @throws EE_Error |
|
355 | - */ |
|
356 | - protected function _ticket_sold_out(EE_Ticket $ticket) |
|
357 | - { |
|
358 | - if (self::debug) { |
|
359 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
360 | - echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket); |
|
361 | - } |
|
362 | - $this->sold_out_tickets[] = $this->_get_ticket_and_event_name($ticket); |
|
363 | - } |
|
364 | - |
|
365 | - |
|
366 | - |
|
367 | - /** |
|
368 | - * _ticket_quantity_decremented |
|
369 | - * adjusts quantities within the ticket selector based on decreased ticket availability |
|
370 | - * |
|
371 | - * @access protected |
|
372 | - * @param \EE_Ticket $ticket |
|
373 | - * @return void |
|
374 | - * @throws UnexpectedEntityException |
|
375 | - * @throws EE_Error |
|
376 | - */ |
|
377 | - protected function _ticket_quantity_decremented(EE_Ticket $ticket) |
|
378 | - { |
|
379 | - if (self::debug) { |
|
380 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
381 | - echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket); |
|
382 | - } |
|
383 | - $this->decremented_tickets[] = $this->_get_ticket_and_event_name($ticket); |
|
384 | - } |
|
385 | - |
|
386 | - |
|
387 | - |
|
388 | - /** |
|
389 | - * _get_ticket_and_event_name |
|
390 | - * builds string out of ticket and event name |
|
391 | - * |
|
392 | - * @access protected |
|
393 | - * @param \EE_Ticket $ticket |
|
394 | - * @return string |
|
395 | - * @throws UnexpectedEntityException |
|
396 | - * @throws EE_Error |
|
397 | - */ |
|
398 | - protected function _get_ticket_and_event_name(EE_Ticket $ticket) |
|
399 | - { |
|
400 | - $event = $ticket->get_related_event(); |
|
401 | - if ($event instanceof EE_Event) { |
|
402 | - $ticket_name = sprintf( |
|
403 | - _x('%1$s for %2$s', 'ticket name for event name', 'event_espresso'), |
|
404 | - $ticket->name(), |
|
405 | - $event->name() |
|
406 | - ); |
|
407 | - } else { |
|
408 | - $ticket_name = $ticket->name(); |
|
409 | - } |
|
410 | - return $ticket_name; |
|
411 | - } |
|
412 | - |
|
413 | - |
|
414 | - |
|
415 | - /********************************** EVENT CART **********************************/ |
|
416 | - |
|
417 | - |
|
418 | - |
|
419 | - /** |
|
420 | - * ticket_quantity_updated |
|
421 | - * releases or reserves ticket(s) based on quantity passed |
|
422 | - * |
|
423 | - * @access public |
|
424 | - * @param EE_Line_Item $line_item |
|
425 | - * @param int $quantity |
|
426 | - * @return void |
|
427 | - * @throws EE_Error |
|
428 | - */ |
|
429 | - public static function ticket_quantity_updated(EE_Line_Item $line_item, $quantity = 1) |
|
430 | - { |
|
431 | - $ticket = EEM_Ticket::instance()->get_one_by_ID(absint($line_item->OBJ_ID())); |
|
432 | - if ($ticket instanceof EE_Ticket) { |
|
433 | - if ($quantity > 0) { |
|
434 | - EED_Ticket_Sales_Monitor::instance()->_reserve_ticket($ticket, $quantity); |
|
435 | - } else { |
|
436 | - EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity); |
|
437 | - } |
|
438 | - } |
|
439 | - } |
|
440 | - |
|
441 | - |
|
442 | - |
|
443 | - /** |
|
444 | - * ticket_removed_from_cart |
|
445 | - * releases reserved ticket(s) based on quantity passed |
|
446 | - * |
|
447 | - * @access public |
|
448 | - * @param EE_Ticket $ticket |
|
449 | - * @param int $quantity |
|
450 | - * @return void |
|
451 | - * @throws EE_Error |
|
452 | - */ |
|
453 | - public static function ticket_removed_from_cart(EE_Ticket $ticket, $quantity = 1) |
|
454 | - { |
|
455 | - EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity); |
|
456 | - } |
|
457 | - |
|
458 | - |
|
459 | - |
|
460 | - /********************************** POST_NOTICES **********************************/ |
|
461 | - |
|
462 | - |
|
463 | - |
|
464 | - /** |
|
465 | - * post_notices |
|
466 | - * |
|
467 | - * @access public |
|
468 | - * @return void |
|
469 | - * @throws EE_Error |
|
470 | - */ |
|
471 | - public static function post_notices() |
|
472 | - { |
|
473 | - EED_Ticket_Sales_Monitor::instance()->_post_notices(); |
|
474 | - } |
|
475 | - |
|
476 | - |
|
477 | - |
|
478 | - /** |
|
479 | - * _post_notices |
|
480 | - * |
|
481 | - * @access protected |
|
482 | - * @return void |
|
483 | - * @throws EE_Error |
|
484 | - */ |
|
485 | - protected function _post_notices() |
|
486 | - { |
|
487 | - if (self::debug) { |
|
488 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
489 | - } |
|
490 | - $refresh_msg = ''; |
|
491 | - $none_added_msg = ''; |
|
492 | - if (defined('DOING_AJAX') && DOING_AJAX) { |
|
493 | - $refresh_msg = __('Please refresh the page to view updated ticket quantities.', |
|
494 | - 'event_espresso'); |
|
495 | - $none_added_msg = __('No tickets were added for the event.', 'event_espresso'); |
|
496 | - } |
|
497 | - if ( ! empty($this->sold_out_tickets)) { |
|
498 | - EE_Error::add_attention( |
|
499 | - sprintf( |
|
500 | - apply_filters( |
|
501 | - 'FHEE__EED_Ticket_Sales_Monitor___post_notices__sold_out_tickets_notice', |
|
502 | - __('We\'re sorry...%1$sThe following items have sold out since you first viewed this page, and can no longer be registered for:%1$s%1$s%2$s%1$s%1$sPlease note that availability can change at any time due to cancellations, so please check back again later if registration for this event(s) is important to you.%1$s%1$s%3$s%1$s%4$s%1$s', |
|
503 | - 'event_espresso') |
|
504 | - ), |
|
505 | - '<br />', |
|
506 | - implode('<br />', $this->sold_out_tickets), |
|
507 | - $none_added_msg, |
|
508 | - $refresh_msg |
|
509 | - ) |
|
510 | - ); |
|
511 | - // alter code flow in the Ticket Selector for better UX |
|
512 | - add_filter('FHEE__EED_Ticket_Selector__process_ticket_selections__tckts_slctd', '__return_true'); |
|
513 | - add_filter('FHEE__EED_Ticket_Selector__process_ticket_selections__success', '__return_false'); |
|
514 | - $this->sold_out_tickets = array(); |
|
515 | - // and reset the cart |
|
516 | - EED_Ticket_Sales_Monitor::session_cart_reset(EE_Registry::instance()->SSN); |
|
517 | - } |
|
518 | - if ( ! empty($this->decremented_tickets)) { |
|
519 | - EE_Error::add_attention( |
|
520 | - sprintf( |
|
521 | - apply_filters( |
|
522 | - 'FHEE__EED_Ticket_Sales_Monitor___ticket_quantity_decremented__notice', |
|
523 | - __('We\'re sorry...%1$sDue to sales that have occurred since you first viewed the last page, the following items have had their quantities adjusted to match the current available amount:%1$s%1$s%2$s%1$s%1$sPlease note that availability can change at any time due to cancellations, so please check back again later if registration for this event(s) is important to you.%1$s%1$s%3$s%1$s%4$s%1$s', |
|
524 | - 'event_espresso') |
|
525 | - ), |
|
526 | - '<br />', |
|
527 | - implode('<br />', $this->decremented_tickets), |
|
528 | - $none_added_msg, |
|
529 | - $refresh_msg |
|
530 | - ) |
|
531 | - ); |
|
532 | - $this->decremented_tickets = array(); |
|
533 | - } |
|
534 | - } |
|
535 | - |
|
536 | - |
|
537 | - |
|
538 | - /********************************** RELEASE_ALL_RESERVED_TICKETS_FOR_TRANSACTION **********************************/ |
|
539 | - |
|
540 | - |
|
541 | - |
|
542 | - /** |
|
543 | - * _release_all_reserved_tickets_for_transaction |
|
544 | - * releases reserved tickets for all registrations of an EE_Transaction |
|
545 | - * by default, will NOT release tickets for finalized transactions |
|
546 | - * |
|
547 | - * @access protected |
|
548 | - * @param EE_Transaction $transaction |
|
549 | - * @return int |
|
550 | - * @throws EE_Error |
|
551 | - */ |
|
552 | - protected function _release_all_reserved_tickets_for_transaction(EE_Transaction $transaction) |
|
553 | - { |
|
554 | - if (self::debug) { |
|
555 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
556 | - echo '<br /> . transaction->ID: ' . $transaction->ID(); |
|
557 | - } |
|
558 | - // check if 'finalize_registration' step has been completed... |
|
559 | - $finalized = $transaction->reg_step_completed('finalize_registration'); |
|
560 | - if (self::debug) { |
|
561 | - // DEBUG LOG |
|
562 | - EEH_Debug_Tools::log( |
|
563 | - __CLASS__, __FUNCTION__, __LINE__, |
|
564 | - array('finalized' => $finalized), |
|
565 | - false, 'EE_Transaction: ' . $transaction->ID() |
|
566 | - ); |
|
567 | - } |
|
568 | - // how many tickets were released |
|
569 | - $count = 0; |
|
570 | - if (self::debug) { |
|
571 | - echo '<br /> . . . finalized: ' . $finalized; |
|
572 | - } |
|
573 | - $release_tickets_with_TXN_status = array( |
|
574 | - EEM_Transaction::failed_status_code, |
|
575 | - EEM_Transaction::abandoned_status_code, |
|
576 | - EEM_Transaction::incomplete_status_code, |
|
577 | - ); |
|
578 | - // if the session is getting cleared BEFORE the TXN has been finalized |
|
579 | - if ( ! $finalized || in_array($transaction->status_ID(), $release_tickets_with_TXN_status, true)) { |
|
580 | - // let's cancel any reserved tickets |
|
581 | - $registrations = $transaction->registrations(); |
|
582 | - if ( ! empty($registrations)) { |
|
583 | - foreach ($registrations as $registration) { |
|
584 | - if ($registration instanceof EE_Registration) { |
|
585 | - $count += $this->_release_reserved_ticket_for_registration($registration, $transaction); |
|
586 | - } |
|
587 | - } |
|
588 | - } |
|
589 | - } |
|
590 | - return $count; |
|
591 | - } |
|
592 | - |
|
593 | - |
|
594 | - |
|
595 | - /** |
|
596 | - * _release_reserved_ticket_for_registration |
|
597 | - * releases reserved tickets for an EE_Registration |
|
598 | - * by default, will NOT release tickets for APPROVED registrations |
|
599 | - * |
|
600 | - * @access protected |
|
601 | - * @param EE_Registration $registration |
|
602 | - * @param EE_Transaction $transaction |
|
603 | - * @return int |
|
604 | - * @throws EE_Error |
|
605 | - */ |
|
606 | - protected function _release_reserved_ticket_for_registration( |
|
607 | - EE_Registration $registration, |
|
608 | - EE_Transaction $transaction |
|
609 | - ) { |
|
610 | - $STS_ID = $transaction->status_ID(); |
|
611 | - if (self::debug) { |
|
612 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
613 | - echo '<br /> . . registration->ID: ' . $registration->ID(); |
|
614 | - echo '<br /> . . registration->status_ID: ' . $registration->status_ID(); |
|
615 | - echo '<br /> . . transaction->status_ID(): ' . $STS_ID; |
|
616 | - } |
|
617 | - if ( |
|
618 | - // release Tickets for Failed Transactions and Abandoned Transactions |
|
619 | - $STS_ID === EEM_Transaction::failed_status_code |
|
620 | - || $STS_ID === EEM_Transaction::abandoned_status_code |
|
621 | - || ( |
|
622 | - // also release Tickets for Incomplete Transactions, but ONLY if the Registrations are NOT Approved |
|
623 | - $STS_ID === EEM_Transaction::incomplete_status_code |
|
624 | - && $registration->status_ID() !== EEM_Registration::status_id_approved |
|
625 | - ) |
|
626 | - ) { |
|
627 | - $ticket = $registration->ticket(); |
|
628 | - if ($ticket instanceof EE_Ticket) { |
|
629 | - return $this->_release_reserved_ticket($ticket); |
|
630 | - } |
|
631 | - } |
|
632 | - return 0; |
|
633 | - } |
|
634 | - |
|
635 | - |
|
636 | - |
|
637 | - /********************************** SESSION_CART_RESET **********************************/ |
|
638 | - |
|
639 | - |
|
640 | - |
|
641 | - /** |
|
642 | - * session_cart_reset |
|
643 | - * callback hooked into 'AHEE__EE_Session__reset_cart__before_reset' |
|
644 | - * |
|
645 | - * @access public |
|
646 | - * @param EE_Session $session |
|
647 | - * @return void |
|
648 | - * @throws EE_Error |
|
649 | - */ |
|
650 | - public static function session_cart_reset(EE_Session $session) |
|
651 | - { |
|
652 | - if (self::debug) { |
|
653 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
654 | - } |
|
655 | - $cart = $session->cart(); |
|
656 | - if ($cart instanceof EE_Cart) { |
|
657 | - if (self::debug) { |
|
658 | - echo '<br /><br /> cart instance of EE_Cart: '; |
|
659 | - } |
|
660 | - EED_Ticket_Sales_Monitor::instance()->_session_cart_reset($cart); |
|
661 | - } else { |
|
662 | - if (self::debug) { |
|
663 | - echo '<br /><br /> invalid EE_Cart: '; |
|
664 | - var_dump($cart); |
|
665 | - } |
|
666 | - } |
|
667 | - } |
|
668 | - |
|
669 | - |
|
670 | - |
|
671 | - /** |
|
672 | - * _session_cart_reset |
|
673 | - * releases reserved tickets in the EE_Cart |
|
674 | - * |
|
675 | - * @access protected |
|
676 | - * @param EE_Cart $cart |
|
677 | - * @return void |
|
678 | - * @throws EE_Error |
|
679 | - */ |
|
680 | - protected function _session_cart_reset(EE_Cart $cart) |
|
681 | - { |
|
682 | - if (self::debug) { |
|
683 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
684 | - } |
|
685 | - EE_Registry::instance()->load_helper('Line_Item'); |
|
686 | - $ticket_line_items = $cart->get_tickets(); |
|
687 | - if (empty($ticket_line_items)) { |
|
688 | - return; |
|
689 | - } |
|
690 | - foreach ($ticket_line_items as $ticket_line_item) { |
|
691 | - if (self::debug) { |
|
692 | - echo '<br /> . ticket_line_item->ID(): ' . $ticket_line_item->ID(); |
|
693 | - } |
|
694 | - if ($ticket_line_item instanceof EE_Line_Item && $ticket_line_item->OBJ_type() === 'Ticket') { |
|
695 | - if (self::debug) { |
|
696 | - echo '<br /> . . ticket_line_item->OBJ_ID(): ' . $ticket_line_item->OBJ_ID(); |
|
697 | - } |
|
698 | - $ticket = EEM_Ticket::instance()->get_one_by_ID($ticket_line_item->OBJ_ID()); |
|
699 | - if ($ticket instanceof EE_Ticket) { |
|
700 | - if (self::debug) { |
|
701 | - echo '<br /> . . ticket->ID(): ' . $ticket->ID(); |
|
702 | - echo '<br /> . . ticket_line_item->quantity(): ' . $ticket_line_item->quantity(); |
|
703 | - } |
|
704 | - $this->_release_reserved_ticket($ticket, $ticket_line_item->quantity()); |
|
705 | - } |
|
706 | - } |
|
707 | - } |
|
708 | - if (self::debug) { |
|
709 | - echo '<br /><br /> RESET COMPLETED '; |
|
710 | - } |
|
711 | - } |
|
712 | - |
|
713 | - |
|
714 | - |
|
715 | - /********************************** SESSION_CHECKOUT_RESET **********************************/ |
|
716 | - |
|
717 | - |
|
718 | - |
|
719 | - /** |
|
720 | - * session_checkout_reset |
|
721 | - * callback hooked into 'AHEE__EE_Session__reset_checkout__before_reset' |
|
722 | - * |
|
723 | - * @access public |
|
724 | - * @param EE_Session $session |
|
725 | - * @return void |
|
726 | - * @throws EE_Error |
|
727 | - */ |
|
728 | - public static function session_checkout_reset(EE_Session $session) |
|
729 | - { |
|
730 | - $checkout = $session->checkout(); |
|
731 | - if ($checkout instanceof EE_Checkout) { |
|
732 | - EED_Ticket_Sales_Monitor::instance()->_session_checkout_reset($checkout); |
|
733 | - } |
|
734 | - } |
|
735 | - |
|
736 | - |
|
737 | - |
|
738 | - /** |
|
739 | - * _session_checkout_reset |
|
740 | - * releases reserved tickets for the EE_Checkout->transaction |
|
741 | - * |
|
742 | - * @access protected |
|
743 | - * @param EE_Checkout $checkout |
|
744 | - * @return void |
|
745 | - * @throws EE_Error |
|
746 | - */ |
|
747 | - protected function _session_checkout_reset(EE_Checkout $checkout) |
|
748 | - { |
|
749 | - if (self::debug) { |
|
750 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
751 | - } |
|
752 | - // we want to release the each registration's reserved tickets if the session was cleared, but not if this is a revisit |
|
753 | - if ($checkout->revisit || ! $checkout->transaction instanceof EE_Transaction) { |
|
754 | - return; |
|
755 | - } |
|
756 | - $this->_release_all_reserved_tickets_for_transaction($checkout->transaction); |
|
757 | - } |
|
758 | - |
|
759 | - |
|
760 | - |
|
761 | - /********************************** SESSION_EXPIRED_RESET **********************************/ |
|
762 | - |
|
763 | - |
|
764 | - |
|
765 | - /** |
|
766 | - * session_expired_reset |
|
767 | - * |
|
768 | - * @access public |
|
769 | - * @param EE_Session $session |
|
770 | - * @return void |
|
771 | - */ |
|
772 | - public static function session_expired_reset(EE_Session $session) |
|
773 | - { |
|
774 | - } |
|
775 | - |
|
776 | - |
|
777 | - |
|
778 | - /********************************** PROCESS_ABANDONED_TRANSACTIONS **********************************/ |
|
779 | - |
|
780 | - |
|
781 | - |
|
782 | - /** |
|
783 | - * process_abandoned_transactions |
|
784 | - * releases reserved tickets for all registrations of an ABANDONED EE_Transaction |
|
785 | - * by default, will NOT release tickets for free transactions, or any that have received a payment |
|
786 | - * |
|
787 | - * @access public |
|
788 | - * @param EE_Transaction $transaction |
|
789 | - * @return void |
|
790 | - * @throws EE_Error |
|
791 | - */ |
|
792 | - public static function process_abandoned_transactions(EE_Transaction $transaction) |
|
793 | - { |
|
794 | - // is this TXN free or has any money been paid towards this TXN? If so, then leave it alone |
|
795 | - if ($transaction->is_free() || $transaction->paid() > 0) { |
|
796 | - if (self::debug) { |
|
797 | - // DEBUG LOG |
|
798 | - EEH_Debug_Tools::log( |
|
799 | - __CLASS__, __FUNCTION__, __LINE__, |
|
800 | - array($transaction), |
|
801 | - false, 'EE_Transaction: ' . $transaction->ID() |
|
802 | - ); |
|
803 | - } |
|
804 | - return; |
|
805 | - } |
|
806 | - // have their been any successful payments made ? |
|
807 | - $payments = $transaction->payments(); |
|
808 | - foreach ($payments as $payment) { |
|
809 | - if ($payment instanceof EE_Payment && $payment->status() === EEM_Payment::status_id_approved) { |
|
810 | - if (self::debug) { |
|
811 | - // DEBUG LOG |
|
812 | - EEH_Debug_Tools::log( |
|
813 | - __CLASS__, __FUNCTION__, __LINE__, |
|
814 | - array($payment), |
|
815 | - false, 'EE_Transaction: ' . $transaction->ID() |
|
816 | - ); |
|
817 | - } |
|
818 | - return; |
|
819 | - } |
|
820 | - } |
|
821 | - // since you haven't even attempted to pay for your ticket... |
|
822 | - EED_Ticket_Sales_Monitor::instance()->_release_all_reserved_tickets_for_transaction($transaction); |
|
823 | - } |
|
824 | - |
|
825 | - |
|
826 | - |
|
827 | - /********************************** PROCESS_FAILED_TRANSACTIONS **********************************/ |
|
828 | - |
|
829 | - |
|
830 | - |
|
831 | - /** |
|
832 | - * process_abandoned_transactions |
|
833 | - * releases reserved tickets for absolutely ALL registrations of a FAILED EE_Transaction |
|
834 | - * |
|
835 | - * @access public |
|
836 | - * @param EE_Transaction $transaction |
|
837 | - * @return void |
|
838 | - * @throws EE_Error |
|
839 | - */ |
|
840 | - public static function process_failed_transactions(EE_Transaction $transaction) |
|
841 | - { |
|
842 | - // since you haven't even attempted to pay for your ticket... |
|
843 | - EED_Ticket_Sales_Monitor::instance()->_release_all_reserved_tickets_for_transaction($transaction); |
|
844 | - } |
|
845 | - |
|
846 | - |
|
847 | - |
|
848 | - /********************************** RESET RESERVATION COUNTS *********************************/ |
|
849 | - |
|
850 | - |
|
851 | - |
|
852 | - /** |
|
853 | - * Resets all ticket and datetime reserved counts to zero |
|
854 | - * Tickets that are currently associated with a Transaction that is in progress |
|
855 | - * |
|
856 | - * @throws \EE_Error |
|
857 | - * @throws \DomainException |
|
858 | - */ |
|
859 | - public static function reset_reservation_counts() |
|
860 | - { |
|
861 | - /** @var EE_Line_Item[] $valid_reserved_tickets */ |
|
862 | - $valid_reserved_tickets = array(); |
|
863 | - $transactions_in_progress = EEM_Transaction::instance()->get_transactions_in_progress(); |
|
864 | - foreach ($transactions_in_progress as $transaction_in_progress) { |
|
865 | - // if this TXN has been fully completed, then skip it |
|
866 | - if ($transaction_in_progress->reg_step_completed('finalize_registration')) { |
|
867 | - continue; |
|
868 | - } |
|
869 | - /** @var EE_Transaction $transaction_in_progress */ |
|
870 | - $total_line_item = $transaction_in_progress->total_line_item(); |
|
871 | - // $transaction_in_progress->line |
|
872 | - if (! $total_line_item instanceof EE_Line_Item) { |
|
873 | - throw new DomainException( |
|
874 | - esc_html__('Transaction does not have a valid Total Line Item associated with it.', 'event_espresso') |
|
875 | - ); |
|
876 | - } |
|
877 | - $valid_reserved_tickets += EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total( |
|
878 | - $total_line_item |
|
879 | - ); |
|
880 | - } |
|
881 | - $total_line_items = EEM_Line_Item::instance()->get_total_line_items_for_active_carts(); |
|
882 | - foreach ($total_line_items as $total_line_item) { |
|
883 | - $valid_reserved_tickets += EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total( |
|
884 | - $total_line_item |
|
885 | - ); |
|
886 | - } |
|
887 | - return EED_Ticket_Sales_Monitor::release_reservations_for_tickets( |
|
888 | - EEM_Ticket::instance()->get_tickets_with_reservations(), |
|
889 | - $valid_reserved_tickets |
|
890 | - ); |
|
891 | - } |
|
892 | - |
|
893 | - |
|
894 | - |
|
895 | - /** |
|
896 | - * @param EE_Line_Item $total_line_item |
|
897 | - * @return EE_Line_Item[] |
|
898 | - */ |
|
899 | - private static function get_ticket_line_items_for_grand_total(EE_Line_Item $total_line_item) |
|
900 | - { |
|
901 | - /** @var EE_Line_Item[] $valid_reserved_tickets */ |
|
902 | - $valid_reserved_tickets = array(); |
|
903 | - $ticket_line_items = EEH_Line_Item::get_ticket_line_items($total_line_item); |
|
904 | - foreach ($ticket_line_items as $ticket_line_item) { |
|
905 | - if ($ticket_line_item instanceof EE_Line_Item) { |
|
906 | - $valid_reserved_tickets[] = $ticket_line_item; |
|
907 | - } |
|
908 | - } |
|
909 | - return $valid_reserved_tickets; |
|
910 | - } |
|
911 | - |
|
912 | - |
|
913 | - |
|
914 | - /** |
|
915 | - * @param EE_Ticket[] $tickets_with_reservations |
|
916 | - * @param EE_Line_Item[] $valid_reserved_ticket_line_items |
|
917 | - * @return int |
|
918 | - * @throws \EE_Error |
|
919 | - */ |
|
920 | - private static function release_reservations_for_tickets( |
|
921 | - array $tickets_with_reservations, |
|
922 | - $valid_reserved_ticket_line_items = array() |
|
923 | - ) { |
|
924 | - $total_tickets_released = 0; |
|
925 | - foreach ($tickets_with_reservations as $ticket_with_reservations) { |
|
926 | - if (! $ticket_with_reservations instanceof EE_Ticket) { |
|
927 | - continue; |
|
928 | - } |
|
929 | - $reserved_qty = $ticket_with_reservations->reserved(); |
|
930 | - foreach ($valid_reserved_ticket_line_items as $valid_reserved_ticket_line_item) { |
|
931 | - if ( |
|
932 | - $valid_reserved_ticket_line_item instanceof EE_Line_Item |
|
933 | - && $valid_reserved_ticket_line_item->OBJ_ID() === $ticket_with_reservations->ID() |
|
934 | - ) { |
|
935 | - $reserved_qty -= $valid_reserved_ticket_line_item->quantity(); |
|
936 | - } |
|
937 | - } |
|
938 | - if ($reserved_qty > 0) { |
|
939 | - $ticket_with_reservations->decrease_reserved($reserved_qty); |
|
940 | - $ticket_with_reservations->save(); |
|
941 | - $total_tickets_released += $reserved_qty; |
|
942 | - } |
|
943 | - } |
|
944 | - return $total_tickets_released; |
|
945 | - } |
|
946 | - |
|
947 | - |
|
948 | - |
|
949 | - /********************************** SHUTDOWN **********************************/ |
|
950 | - |
|
951 | - |
|
952 | - |
|
953 | - /** |
|
954 | - * @return false|int |
|
955 | - * @throws \EE_Error |
|
956 | - */ |
|
957 | - public static function clear_expired_line_items_with_no_transaction() |
|
958 | - { |
|
959 | - /** @type WPDB $wpdb */ |
|
960 | - global $wpdb; |
|
961 | - return $wpdb->query( |
|
962 | - $wpdb->prepare( |
|
963 | - 'DELETE FROM ' . EEM_Line_Item::instance()->table() . ' |
|
24 | + const debug = false; // true false |
|
25 | + |
|
26 | + /** |
|
27 | + * an array of raw ticket data from EED_Ticket_Selector |
|
28 | + * |
|
29 | + * @var array $ticket_selections |
|
30 | + */ |
|
31 | + protected $ticket_selections = array(); |
|
32 | + |
|
33 | + /** |
|
34 | + * the raw ticket data from EED_Ticket_Selector is organized in rows |
|
35 | + * according to how they are displayed in the actual Ticket_Selector |
|
36 | + * this tracks the current row being processed |
|
37 | + * |
|
38 | + * @var int $current_row |
|
39 | + */ |
|
40 | + protected $current_row = 0; |
|
41 | + |
|
42 | + /** |
|
43 | + * an array for tracking names of tickets that have sold out |
|
44 | + * |
|
45 | + * @var array $sold_out_tickets |
|
46 | + */ |
|
47 | + protected $sold_out_tickets = array(); |
|
48 | + |
|
49 | + /** |
|
50 | + * an array for tracking names of tickets that have had their quantities reduced |
|
51 | + * |
|
52 | + * @var array $decremented_tickets |
|
53 | + */ |
|
54 | + protected $decremented_tickets = array(); |
|
55 | + |
|
56 | + |
|
57 | + |
|
58 | + /** |
|
59 | + * set_hooks - for hooking into EE Core, other modules, etc |
|
60 | + * |
|
61 | + * @access public |
|
62 | + * @return void |
|
63 | + */ |
|
64 | + public static function set_hooks() |
|
65 | + { |
|
66 | + // release tickets for expired carts |
|
67 | + add_action('EED_Ticket_Selector__process_ticket_selections__before', |
|
68 | + array('EED_Ticket_Sales_Monitor', 'release_tickets_for_expired_carts'), |
|
69 | + 1 |
|
70 | + ); |
|
71 | + // check ticket reserves AFTER MER does it's check (hence priority 20) |
|
72 | + add_filter('FHEE__EE_Ticket_Selector___add_ticket_to_cart__ticket_qty', |
|
73 | + array('EED_Ticket_Sales_Monitor', 'validate_ticket_sale'), |
|
74 | + 20, 3 |
|
75 | + ); |
|
76 | + // add notices for sold out tickets |
|
77 | + add_action('AHEE__EE_Ticket_Selector__process_ticket_selections__after_tickets_added_to_cart', |
|
78 | + array('EED_Ticket_Sales_Monitor', 'post_notices'), |
|
79 | + 10 |
|
80 | + ); |
|
81 | + // handle ticket quantities adjusted in cart |
|
82 | + //add_action( |
|
83 | + // 'FHEE__EED_Multi_Event_Registration__adjust_line_item_quantity__line_item_quantity_updated', |
|
84 | + // array( 'EED_Ticket_Sales_Monitor', 'ticket_quantity_updated' ), |
|
85 | + // 10, 2 |
|
86 | + //); |
|
87 | + // handle tickets deleted from cart |
|
88 | + add_action( |
|
89 | + 'FHEE__EED_Multi_Event_Registration__delete_ticket__ticket_removed_from_cart', |
|
90 | + array('EED_Ticket_Sales_Monitor', 'ticket_removed_from_cart'), |
|
91 | + 10, 2 |
|
92 | + ); |
|
93 | + // handle emptied carts |
|
94 | + add_action( |
|
95 | + 'AHEE__EE_Session__reset_cart__before_reset', |
|
96 | + array('EED_Ticket_Sales_Monitor', 'session_cart_reset'), |
|
97 | + 10, 1 |
|
98 | + ); |
|
99 | + add_action( |
|
100 | + 'AHEE__EED_Multi_Event_Registration__empty_event_cart__before_delete_cart', |
|
101 | + array('EED_Ticket_Sales_Monitor', 'session_cart_reset'), |
|
102 | + 10, 1 |
|
103 | + ); |
|
104 | + // handle cancelled registrations |
|
105 | + add_action( |
|
106 | + 'AHEE__EE_Session__reset_checkout__before_reset', |
|
107 | + array('EED_Ticket_Sales_Monitor', 'session_checkout_reset'), |
|
108 | + 10, 1 |
|
109 | + ); |
|
110 | + // cron tasks |
|
111 | + add_action( |
|
112 | + 'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions__abandoned_transaction', |
|
113 | + array('EED_Ticket_Sales_Monitor', 'process_abandoned_transactions'), |
|
114 | + 10, 1 |
|
115 | + ); |
|
116 | + add_action( |
|
117 | + 'AHEE__EE_Cron_Tasks__process_expired_transactions__incomplete_transaction', |
|
118 | + array('EED_Ticket_Sales_Monitor', 'process_abandoned_transactions'), |
|
119 | + 10, 1 |
|
120 | + ); |
|
121 | + add_action( |
|
122 | + 'AHEE__EE_Cron_Tasks__process_expired_transactions__failed_transaction', |
|
123 | + array('EED_Ticket_Sales_Monitor', 'process_failed_transactions'), |
|
124 | + 10, 1 |
|
125 | + ); |
|
126 | + } |
|
127 | + |
|
128 | + |
|
129 | + |
|
130 | + /** |
|
131 | + * set_hooks_admin - for hooking into EE Admin Core, other modules, etc |
|
132 | + * |
|
133 | + * @access public |
|
134 | + * @return void |
|
135 | + */ |
|
136 | + public static function set_hooks_admin() |
|
137 | + { |
|
138 | + EED_Ticket_Sales_Monitor::set_hooks(); |
|
139 | + } |
|
140 | + |
|
141 | + |
|
142 | + |
|
143 | + /** |
|
144 | + * @return EED_Ticket_Sales_Monitor|EED_Module |
|
145 | + */ |
|
146 | + public static function instance() |
|
147 | + { |
|
148 | + return parent::get_instance(__CLASS__); |
|
149 | + } |
|
150 | + |
|
151 | + |
|
152 | + |
|
153 | + /** |
|
154 | + * run |
|
155 | + * |
|
156 | + * @access public |
|
157 | + * @param WP_Query $WP_Query |
|
158 | + * @return void |
|
159 | + */ |
|
160 | + public function run($WP_Query) |
|
161 | + { |
|
162 | + } |
|
163 | + |
|
164 | + |
|
165 | + |
|
166 | + /********************************** PRE_TICKET_SALES **********************************/ |
|
167 | + |
|
168 | + |
|
169 | + |
|
170 | + /** |
|
171 | + * Retrieves grand totals from the line items that have no TXN ID |
|
172 | + * and timestamps less than the current time minus the session lifespan. |
|
173 | + * These are carts that have been abandoned before the "registrant" even attempted to checkout. |
|
174 | + * We're going to release the tickets for these line items before attempting to add more to the cart. |
|
175 | + * |
|
176 | + * @return void |
|
177 | + * @throws \EE_Error |
|
178 | + */ |
|
179 | + public static function release_tickets_for_expired_carts() |
|
180 | + { |
|
181 | + $expired_ticket_IDs = array(); |
|
182 | + $valid_ticket_line_items = array(); |
|
183 | + $total_line_items = EEM_Line_Item::instance()->get_total_line_items_with_no_transaction(); |
|
184 | + if(empty($total_line_items)){ |
|
185 | + return; |
|
186 | + } |
|
187 | + $expired = current_time('timestamp') - EE_Registry::instance()->SSN->lifespan(); |
|
188 | + foreach ($total_line_items as $total_line_item) { |
|
189 | + /** @var EE_Line_Item $total_line_item */ |
|
190 | + $ticket_line_items = EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total($total_line_item); |
|
191 | + foreach ($ticket_line_items as $ticket_line_item) { |
|
192 | + if(! $ticket_line_item instanceof EE_Line_Item) { |
|
193 | + continue; |
|
194 | + } |
|
195 | + if ($total_line_item->timestamp(true) <= $expired ) { |
|
196 | + $expired_ticket_IDs[$ticket_line_item->OBJ_ID()] = $ticket_line_item->OBJ_ID(); |
|
197 | + } else { |
|
198 | + $valid_ticket_line_items[$ticket_line_item->OBJ_ID()] = $ticket_line_item; |
|
199 | + } |
|
200 | + } |
|
201 | + } |
|
202 | + if (! empty($expired_ticket_IDs)) { |
|
203 | + EED_Ticket_Sales_Monitor::release_reservations_for_tickets( |
|
204 | + \EEM_Ticket::instance()->get_tickets_with_IDs($expired_ticket_IDs), |
|
205 | + $valid_ticket_line_items |
|
206 | + ); |
|
207 | + // let's get rid of expired line items so that they can't interfere with tracking |
|
208 | + add_action( |
|
209 | + 'shutdown', |
|
210 | + array('EED_Ticket_Sales_Monitor', 'clear_expired_line_items_with_no_transaction'), |
|
211 | + 999 |
|
212 | + ); |
|
213 | + } |
|
214 | + } |
|
215 | + |
|
216 | + |
|
217 | + |
|
218 | + /********************************** VALIDATE_TICKET_SALE **********************************/ |
|
219 | + |
|
220 | + |
|
221 | + |
|
222 | + /** |
|
223 | + * validate_ticket_sales |
|
224 | + * callback for 'FHEE__EED_Ticket_Selector__process_ticket_selections__valid_post_data' |
|
225 | + * |
|
226 | + * @access public |
|
227 | + * @param int $qty |
|
228 | + * @param \EE_Ticket $ticket |
|
229 | + * @return bool |
|
230 | + * @throws UnexpectedEntityException |
|
231 | + * @throws EE_Error |
|
232 | + */ |
|
233 | + public static function validate_ticket_sale($qty = 1, EE_Ticket $ticket) |
|
234 | + { |
|
235 | + $qty = absint($qty); |
|
236 | + if ($qty > 0) { |
|
237 | + $qty = EED_Ticket_Sales_Monitor::instance()->_validate_ticket_sale($ticket, $qty); |
|
238 | + } |
|
239 | + if (self::debug) { |
|
240 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '()'; |
|
241 | + echo '<br /><br /><b> RETURNED QTY: ' . $qty . '</b>'; |
|
242 | + } |
|
243 | + return $qty; |
|
244 | + } |
|
245 | + |
|
246 | + |
|
247 | + |
|
248 | + /** |
|
249 | + * _validate_ticket_sale |
|
250 | + * checks whether an individual ticket is available for purchase based on datetime, and ticket details |
|
251 | + * |
|
252 | + * @access protected |
|
253 | + * @param \EE_Ticket $ticket |
|
254 | + * @param int $qty |
|
255 | + * @return int |
|
256 | + * @throws UnexpectedEntityException |
|
257 | + * @throws EE_Error |
|
258 | + */ |
|
259 | + protected function _validate_ticket_sale(EE_Ticket $ticket, $qty = 1) |
|
260 | + { |
|
261 | + if (self::debug) { |
|
262 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
263 | + } |
|
264 | + if ( ! $ticket instanceof EE_Ticket) { |
|
265 | + return 0; |
|
266 | + } |
|
267 | + if (self::debug) { |
|
268 | + echo '<br /><b> . ticket->ID: ' . $ticket->ID() . '</b>'; |
|
269 | + echo '<br /> . original ticket->reserved: ' . $ticket->reserved(); |
|
270 | + } |
|
271 | + $ticket->refresh_from_db(); |
|
272 | + // first let's determine the ticket availability based on sales |
|
273 | + $available = $ticket->qty('saleable'); |
|
274 | + if (self::debug) { |
|
275 | + echo '<br /> . . . ticket->qty: ' . $ticket->qty(); |
|
276 | + echo '<br /> . . . ticket->sold: ' . $ticket->sold(); |
|
277 | + echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
278 | + echo '<br /> . . . ticket->qty(saleable): ' . $ticket->qty('saleable'); |
|
279 | + echo '<br /> . . . available: ' . $available; |
|
280 | + } |
|
281 | + if ($available < 1) { |
|
282 | + $this->_ticket_sold_out($ticket); |
|
283 | + return 0; |
|
284 | + } |
|
285 | + if (self::debug) { |
|
286 | + echo '<br /> . . . qty: ' . $qty; |
|
287 | + } |
|
288 | + if ($available < $qty) { |
|
289 | + $qty = $available; |
|
290 | + if (self::debug) { |
|
291 | + echo '<br /> . . . QTY ADJUSTED: ' . $qty; |
|
292 | + } |
|
293 | + $this->_ticket_quantity_decremented($ticket); |
|
294 | + } |
|
295 | + $this->_reserve_ticket($ticket, $qty); |
|
296 | + return $qty; |
|
297 | + } |
|
298 | + |
|
299 | + |
|
300 | + |
|
301 | + /** |
|
302 | + * _reserve_ticket |
|
303 | + * increments ticket reserved based on quantity passed |
|
304 | + * |
|
305 | + * @access protected |
|
306 | + * @param \EE_Ticket $ticket |
|
307 | + * @param int $quantity |
|
308 | + * @return bool |
|
309 | + * @throws EE_Error |
|
310 | + */ |
|
311 | + protected function _reserve_ticket(EE_Ticket $ticket, $quantity = 1) |
|
312 | + { |
|
313 | + if (self::debug) { |
|
314 | + echo '<br /><br /> . . . INCREASE RESERVED: ' . $quantity; |
|
315 | + } |
|
316 | + $ticket->increase_reserved($quantity); |
|
317 | + return $ticket->save(); |
|
318 | + } |
|
319 | + |
|
320 | + |
|
321 | + |
|
322 | + /** |
|
323 | + * _release_reserved_ticket |
|
324 | + * |
|
325 | + * @access protected |
|
326 | + * @param EE_Ticket $ticket |
|
327 | + * @param int $quantity |
|
328 | + * @return bool |
|
329 | + * @throws EE_Error |
|
330 | + */ |
|
331 | + protected function _release_reserved_ticket(EE_Ticket $ticket, $quantity = 1) |
|
332 | + { |
|
333 | + if (self::debug) { |
|
334 | + echo '<br /> . . . ticket->ID: ' . $ticket->ID(); |
|
335 | + echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
336 | + } |
|
337 | + $ticket->decrease_reserved($quantity); |
|
338 | + if (self::debug) { |
|
339 | + echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
340 | + } |
|
341 | + return $ticket->save() ? 1 : 0; |
|
342 | + } |
|
343 | + |
|
344 | + |
|
345 | + |
|
346 | + /** |
|
347 | + * _ticket_sold_out |
|
348 | + * removes quantities within the ticket selector based on zero ticket availability |
|
349 | + * |
|
350 | + * @access protected |
|
351 | + * @param \EE_Ticket $ticket |
|
352 | + * @return void |
|
353 | + * @throws UnexpectedEntityException |
|
354 | + * @throws EE_Error |
|
355 | + */ |
|
356 | + protected function _ticket_sold_out(EE_Ticket $ticket) |
|
357 | + { |
|
358 | + if (self::debug) { |
|
359 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
360 | + echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket); |
|
361 | + } |
|
362 | + $this->sold_out_tickets[] = $this->_get_ticket_and_event_name($ticket); |
|
363 | + } |
|
364 | + |
|
365 | + |
|
366 | + |
|
367 | + /** |
|
368 | + * _ticket_quantity_decremented |
|
369 | + * adjusts quantities within the ticket selector based on decreased ticket availability |
|
370 | + * |
|
371 | + * @access protected |
|
372 | + * @param \EE_Ticket $ticket |
|
373 | + * @return void |
|
374 | + * @throws UnexpectedEntityException |
|
375 | + * @throws EE_Error |
|
376 | + */ |
|
377 | + protected function _ticket_quantity_decremented(EE_Ticket $ticket) |
|
378 | + { |
|
379 | + if (self::debug) { |
|
380 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
381 | + echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket); |
|
382 | + } |
|
383 | + $this->decremented_tickets[] = $this->_get_ticket_and_event_name($ticket); |
|
384 | + } |
|
385 | + |
|
386 | + |
|
387 | + |
|
388 | + /** |
|
389 | + * _get_ticket_and_event_name |
|
390 | + * builds string out of ticket and event name |
|
391 | + * |
|
392 | + * @access protected |
|
393 | + * @param \EE_Ticket $ticket |
|
394 | + * @return string |
|
395 | + * @throws UnexpectedEntityException |
|
396 | + * @throws EE_Error |
|
397 | + */ |
|
398 | + protected function _get_ticket_and_event_name(EE_Ticket $ticket) |
|
399 | + { |
|
400 | + $event = $ticket->get_related_event(); |
|
401 | + if ($event instanceof EE_Event) { |
|
402 | + $ticket_name = sprintf( |
|
403 | + _x('%1$s for %2$s', 'ticket name for event name', 'event_espresso'), |
|
404 | + $ticket->name(), |
|
405 | + $event->name() |
|
406 | + ); |
|
407 | + } else { |
|
408 | + $ticket_name = $ticket->name(); |
|
409 | + } |
|
410 | + return $ticket_name; |
|
411 | + } |
|
412 | + |
|
413 | + |
|
414 | + |
|
415 | + /********************************** EVENT CART **********************************/ |
|
416 | + |
|
417 | + |
|
418 | + |
|
419 | + /** |
|
420 | + * ticket_quantity_updated |
|
421 | + * releases or reserves ticket(s) based on quantity passed |
|
422 | + * |
|
423 | + * @access public |
|
424 | + * @param EE_Line_Item $line_item |
|
425 | + * @param int $quantity |
|
426 | + * @return void |
|
427 | + * @throws EE_Error |
|
428 | + */ |
|
429 | + public static function ticket_quantity_updated(EE_Line_Item $line_item, $quantity = 1) |
|
430 | + { |
|
431 | + $ticket = EEM_Ticket::instance()->get_one_by_ID(absint($line_item->OBJ_ID())); |
|
432 | + if ($ticket instanceof EE_Ticket) { |
|
433 | + if ($quantity > 0) { |
|
434 | + EED_Ticket_Sales_Monitor::instance()->_reserve_ticket($ticket, $quantity); |
|
435 | + } else { |
|
436 | + EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity); |
|
437 | + } |
|
438 | + } |
|
439 | + } |
|
440 | + |
|
441 | + |
|
442 | + |
|
443 | + /** |
|
444 | + * ticket_removed_from_cart |
|
445 | + * releases reserved ticket(s) based on quantity passed |
|
446 | + * |
|
447 | + * @access public |
|
448 | + * @param EE_Ticket $ticket |
|
449 | + * @param int $quantity |
|
450 | + * @return void |
|
451 | + * @throws EE_Error |
|
452 | + */ |
|
453 | + public static function ticket_removed_from_cart(EE_Ticket $ticket, $quantity = 1) |
|
454 | + { |
|
455 | + EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity); |
|
456 | + } |
|
457 | + |
|
458 | + |
|
459 | + |
|
460 | + /********************************** POST_NOTICES **********************************/ |
|
461 | + |
|
462 | + |
|
463 | + |
|
464 | + /** |
|
465 | + * post_notices |
|
466 | + * |
|
467 | + * @access public |
|
468 | + * @return void |
|
469 | + * @throws EE_Error |
|
470 | + */ |
|
471 | + public static function post_notices() |
|
472 | + { |
|
473 | + EED_Ticket_Sales_Monitor::instance()->_post_notices(); |
|
474 | + } |
|
475 | + |
|
476 | + |
|
477 | + |
|
478 | + /** |
|
479 | + * _post_notices |
|
480 | + * |
|
481 | + * @access protected |
|
482 | + * @return void |
|
483 | + * @throws EE_Error |
|
484 | + */ |
|
485 | + protected function _post_notices() |
|
486 | + { |
|
487 | + if (self::debug) { |
|
488 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
489 | + } |
|
490 | + $refresh_msg = ''; |
|
491 | + $none_added_msg = ''; |
|
492 | + if (defined('DOING_AJAX') && DOING_AJAX) { |
|
493 | + $refresh_msg = __('Please refresh the page to view updated ticket quantities.', |
|
494 | + 'event_espresso'); |
|
495 | + $none_added_msg = __('No tickets were added for the event.', 'event_espresso'); |
|
496 | + } |
|
497 | + if ( ! empty($this->sold_out_tickets)) { |
|
498 | + EE_Error::add_attention( |
|
499 | + sprintf( |
|
500 | + apply_filters( |
|
501 | + 'FHEE__EED_Ticket_Sales_Monitor___post_notices__sold_out_tickets_notice', |
|
502 | + __('We\'re sorry...%1$sThe following items have sold out since you first viewed this page, and can no longer be registered for:%1$s%1$s%2$s%1$s%1$sPlease note that availability can change at any time due to cancellations, so please check back again later if registration for this event(s) is important to you.%1$s%1$s%3$s%1$s%4$s%1$s', |
|
503 | + 'event_espresso') |
|
504 | + ), |
|
505 | + '<br />', |
|
506 | + implode('<br />', $this->sold_out_tickets), |
|
507 | + $none_added_msg, |
|
508 | + $refresh_msg |
|
509 | + ) |
|
510 | + ); |
|
511 | + // alter code flow in the Ticket Selector for better UX |
|
512 | + add_filter('FHEE__EED_Ticket_Selector__process_ticket_selections__tckts_slctd', '__return_true'); |
|
513 | + add_filter('FHEE__EED_Ticket_Selector__process_ticket_selections__success', '__return_false'); |
|
514 | + $this->sold_out_tickets = array(); |
|
515 | + // and reset the cart |
|
516 | + EED_Ticket_Sales_Monitor::session_cart_reset(EE_Registry::instance()->SSN); |
|
517 | + } |
|
518 | + if ( ! empty($this->decremented_tickets)) { |
|
519 | + EE_Error::add_attention( |
|
520 | + sprintf( |
|
521 | + apply_filters( |
|
522 | + 'FHEE__EED_Ticket_Sales_Monitor___ticket_quantity_decremented__notice', |
|
523 | + __('We\'re sorry...%1$sDue to sales that have occurred since you first viewed the last page, the following items have had their quantities adjusted to match the current available amount:%1$s%1$s%2$s%1$s%1$sPlease note that availability can change at any time due to cancellations, so please check back again later if registration for this event(s) is important to you.%1$s%1$s%3$s%1$s%4$s%1$s', |
|
524 | + 'event_espresso') |
|
525 | + ), |
|
526 | + '<br />', |
|
527 | + implode('<br />', $this->decremented_tickets), |
|
528 | + $none_added_msg, |
|
529 | + $refresh_msg |
|
530 | + ) |
|
531 | + ); |
|
532 | + $this->decremented_tickets = array(); |
|
533 | + } |
|
534 | + } |
|
535 | + |
|
536 | + |
|
537 | + |
|
538 | + /********************************** RELEASE_ALL_RESERVED_TICKETS_FOR_TRANSACTION **********************************/ |
|
539 | + |
|
540 | + |
|
541 | + |
|
542 | + /** |
|
543 | + * _release_all_reserved_tickets_for_transaction |
|
544 | + * releases reserved tickets for all registrations of an EE_Transaction |
|
545 | + * by default, will NOT release tickets for finalized transactions |
|
546 | + * |
|
547 | + * @access protected |
|
548 | + * @param EE_Transaction $transaction |
|
549 | + * @return int |
|
550 | + * @throws EE_Error |
|
551 | + */ |
|
552 | + protected function _release_all_reserved_tickets_for_transaction(EE_Transaction $transaction) |
|
553 | + { |
|
554 | + if (self::debug) { |
|
555 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
556 | + echo '<br /> . transaction->ID: ' . $transaction->ID(); |
|
557 | + } |
|
558 | + // check if 'finalize_registration' step has been completed... |
|
559 | + $finalized = $transaction->reg_step_completed('finalize_registration'); |
|
560 | + if (self::debug) { |
|
561 | + // DEBUG LOG |
|
562 | + EEH_Debug_Tools::log( |
|
563 | + __CLASS__, __FUNCTION__, __LINE__, |
|
564 | + array('finalized' => $finalized), |
|
565 | + false, 'EE_Transaction: ' . $transaction->ID() |
|
566 | + ); |
|
567 | + } |
|
568 | + // how many tickets were released |
|
569 | + $count = 0; |
|
570 | + if (self::debug) { |
|
571 | + echo '<br /> . . . finalized: ' . $finalized; |
|
572 | + } |
|
573 | + $release_tickets_with_TXN_status = array( |
|
574 | + EEM_Transaction::failed_status_code, |
|
575 | + EEM_Transaction::abandoned_status_code, |
|
576 | + EEM_Transaction::incomplete_status_code, |
|
577 | + ); |
|
578 | + // if the session is getting cleared BEFORE the TXN has been finalized |
|
579 | + if ( ! $finalized || in_array($transaction->status_ID(), $release_tickets_with_TXN_status, true)) { |
|
580 | + // let's cancel any reserved tickets |
|
581 | + $registrations = $transaction->registrations(); |
|
582 | + if ( ! empty($registrations)) { |
|
583 | + foreach ($registrations as $registration) { |
|
584 | + if ($registration instanceof EE_Registration) { |
|
585 | + $count += $this->_release_reserved_ticket_for_registration($registration, $transaction); |
|
586 | + } |
|
587 | + } |
|
588 | + } |
|
589 | + } |
|
590 | + return $count; |
|
591 | + } |
|
592 | + |
|
593 | + |
|
594 | + |
|
595 | + /** |
|
596 | + * _release_reserved_ticket_for_registration |
|
597 | + * releases reserved tickets for an EE_Registration |
|
598 | + * by default, will NOT release tickets for APPROVED registrations |
|
599 | + * |
|
600 | + * @access protected |
|
601 | + * @param EE_Registration $registration |
|
602 | + * @param EE_Transaction $transaction |
|
603 | + * @return int |
|
604 | + * @throws EE_Error |
|
605 | + */ |
|
606 | + protected function _release_reserved_ticket_for_registration( |
|
607 | + EE_Registration $registration, |
|
608 | + EE_Transaction $transaction |
|
609 | + ) { |
|
610 | + $STS_ID = $transaction->status_ID(); |
|
611 | + if (self::debug) { |
|
612 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
613 | + echo '<br /> . . registration->ID: ' . $registration->ID(); |
|
614 | + echo '<br /> . . registration->status_ID: ' . $registration->status_ID(); |
|
615 | + echo '<br /> . . transaction->status_ID(): ' . $STS_ID; |
|
616 | + } |
|
617 | + if ( |
|
618 | + // release Tickets for Failed Transactions and Abandoned Transactions |
|
619 | + $STS_ID === EEM_Transaction::failed_status_code |
|
620 | + || $STS_ID === EEM_Transaction::abandoned_status_code |
|
621 | + || ( |
|
622 | + // also release Tickets for Incomplete Transactions, but ONLY if the Registrations are NOT Approved |
|
623 | + $STS_ID === EEM_Transaction::incomplete_status_code |
|
624 | + && $registration->status_ID() !== EEM_Registration::status_id_approved |
|
625 | + ) |
|
626 | + ) { |
|
627 | + $ticket = $registration->ticket(); |
|
628 | + if ($ticket instanceof EE_Ticket) { |
|
629 | + return $this->_release_reserved_ticket($ticket); |
|
630 | + } |
|
631 | + } |
|
632 | + return 0; |
|
633 | + } |
|
634 | + |
|
635 | + |
|
636 | + |
|
637 | + /********************************** SESSION_CART_RESET **********************************/ |
|
638 | + |
|
639 | + |
|
640 | + |
|
641 | + /** |
|
642 | + * session_cart_reset |
|
643 | + * callback hooked into 'AHEE__EE_Session__reset_cart__before_reset' |
|
644 | + * |
|
645 | + * @access public |
|
646 | + * @param EE_Session $session |
|
647 | + * @return void |
|
648 | + * @throws EE_Error |
|
649 | + */ |
|
650 | + public static function session_cart_reset(EE_Session $session) |
|
651 | + { |
|
652 | + if (self::debug) { |
|
653 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
654 | + } |
|
655 | + $cart = $session->cart(); |
|
656 | + if ($cart instanceof EE_Cart) { |
|
657 | + if (self::debug) { |
|
658 | + echo '<br /><br /> cart instance of EE_Cart: '; |
|
659 | + } |
|
660 | + EED_Ticket_Sales_Monitor::instance()->_session_cart_reset($cart); |
|
661 | + } else { |
|
662 | + if (self::debug) { |
|
663 | + echo '<br /><br /> invalid EE_Cart: '; |
|
664 | + var_dump($cart); |
|
665 | + } |
|
666 | + } |
|
667 | + } |
|
668 | + |
|
669 | + |
|
670 | + |
|
671 | + /** |
|
672 | + * _session_cart_reset |
|
673 | + * releases reserved tickets in the EE_Cart |
|
674 | + * |
|
675 | + * @access protected |
|
676 | + * @param EE_Cart $cart |
|
677 | + * @return void |
|
678 | + * @throws EE_Error |
|
679 | + */ |
|
680 | + protected function _session_cart_reset(EE_Cart $cart) |
|
681 | + { |
|
682 | + if (self::debug) { |
|
683 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
684 | + } |
|
685 | + EE_Registry::instance()->load_helper('Line_Item'); |
|
686 | + $ticket_line_items = $cart->get_tickets(); |
|
687 | + if (empty($ticket_line_items)) { |
|
688 | + return; |
|
689 | + } |
|
690 | + foreach ($ticket_line_items as $ticket_line_item) { |
|
691 | + if (self::debug) { |
|
692 | + echo '<br /> . ticket_line_item->ID(): ' . $ticket_line_item->ID(); |
|
693 | + } |
|
694 | + if ($ticket_line_item instanceof EE_Line_Item && $ticket_line_item->OBJ_type() === 'Ticket') { |
|
695 | + if (self::debug) { |
|
696 | + echo '<br /> . . ticket_line_item->OBJ_ID(): ' . $ticket_line_item->OBJ_ID(); |
|
697 | + } |
|
698 | + $ticket = EEM_Ticket::instance()->get_one_by_ID($ticket_line_item->OBJ_ID()); |
|
699 | + if ($ticket instanceof EE_Ticket) { |
|
700 | + if (self::debug) { |
|
701 | + echo '<br /> . . ticket->ID(): ' . $ticket->ID(); |
|
702 | + echo '<br /> . . ticket_line_item->quantity(): ' . $ticket_line_item->quantity(); |
|
703 | + } |
|
704 | + $this->_release_reserved_ticket($ticket, $ticket_line_item->quantity()); |
|
705 | + } |
|
706 | + } |
|
707 | + } |
|
708 | + if (self::debug) { |
|
709 | + echo '<br /><br /> RESET COMPLETED '; |
|
710 | + } |
|
711 | + } |
|
712 | + |
|
713 | + |
|
714 | + |
|
715 | + /********************************** SESSION_CHECKOUT_RESET **********************************/ |
|
716 | + |
|
717 | + |
|
718 | + |
|
719 | + /** |
|
720 | + * session_checkout_reset |
|
721 | + * callback hooked into 'AHEE__EE_Session__reset_checkout__before_reset' |
|
722 | + * |
|
723 | + * @access public |
|
724 | + * @param EE_Session $session |
|
725 | + * @return void |
|
726 | + * @throws EE_Error |
|
727 | + */ |
|
728 | + public static function session_checkout_reset(EE_Session $session) |
|
729 | + { |
|
730 | + $checkout = $session->checkout(); |
|
731 | + if ($checkout instanceof EE_Checkout) { |
|
732 | + EED_Ticket_Sales_Monitor::instance()->_session_checkout_reset($checkout); |
|
733 | + } |
|
734 | + } |
|
735 | + |
|
736 | + |
|
737 | + |
|
738 | + /** |
|
739 | + * _session_checkout_reset |
|
740 | + * releases reserved tickets for the EE_Checkout->transaction |
|
741 | + * |
|
742 | + * @access protected |
|
743 | + * @param EE_Checkout $checkout |
|
744 | + * @return void |
|
745 | + * @throws EE_Error |
|
746 | + */ |
|
747 | + protected function _session_checkout_reset(EE_Checkout $checkout) |
|
748 | + { |
|
749 | + if (self::debug) { |
|
750 | + echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
751 | + } |
|
752 | + // we want to release the each registration's reserved tickets if the session was cleared, but not if this is a revisit |
|
753 | + if ($checkout->revisit || ! $checkout->transaction instanceof EE_Transaction) { |
|
754 | + return; |
|
755 | + } |
|
756 | + $this->_release_all_reserved_tickets_for_transaction($checkout->transaction); |
|
757 | + } |
|
758 | + |
|
759 | + |
|
760 | + |
|
761 | + /********************************** SESSION_EXPIRED_RESET **********************************/ |
|
762 | + |
|
763 | + |
|
764 | + |
|
765 | + /** |
|
766 | + * session_expired_reset |
|
767 | + * |
|
768 | + * @access public |
|
769 | + * @param EE_Session $session |
|
770 | + * @return void |
|
771 | + */ |
|
772 | + public static function session_expired_reset(EE_Session $session) |
|
773 | + { |
|
774 | + } |
|
775 | + |
|
776 | + |
|
777 | + |
|
778 | + /********************************** PROCESS_ABANDONED_TRANSACTIONS **********************************/ |
|
779 | + |
|
780 | + |
|
781 | + |
|
782 | + /** |
|
783 | + * process_abandoned_transactions |
|
784 | + * releases reserved tickets for all registrations of an ABANDONED EE_Transaction |
|
785 | + * by default, will NOT release tickets for free transactions, or any that have received a payment |
|
786 | + * |
|
787 | + * @access public |
|
788 | + * @param EE_Transaction $transaction |
|
789 | + * @return void |
|
790 | + * @throws EE_Error |
|
791 | + */ |
|
792 | + public static function process_abandoned_transactions(EE_Transaction $transaction) |
|
793 | + { |
|
794 | + // is this TXN free or has any money been paid towards this TXN? If so, then leave it alone |
|
795 | + if ($transaction->is_free() || $transaction->paid() > 0) { |
|
796 | + if (self::debug) { |
|
797 | + // DEBUG LOG |
|
798 | + EEH_Debug_Tools::log( |
|
799 | + __CLASS__, __FUNCTION__, __LINE__, |
|
800 | + array($transaction), |
|
801 | + false, 'EE_Transaction: ' . $transaction->ID() |
|
802 | + ); |
|
803 | + } |
|
804 | + return; |
|
805 | + } |
|
806 | + // have their been any successful payments made ? |
|
807 | + $payments = $transaction->payments(); |
|
808 | + foreach ($payments as $payment) { |
|
809 | + if ($payment instanceof EE_Payment && $payment->status() === EEM_Payment::status_id_approved) { |
|
810 | + if (self::debug) { |
|
811 | + // DEBUG LOG |
|
812 | + EEH_Debug_Tools::log( |
|
813 | + __CLASS__, __FUNCTION__, __LINE__, |
|
814 | + array($payment), |
|
815 | + false, 'EE_Transaction: ' . $transaction->ID() |
|
816 | + ); |
|
817 | + } |
|
818 | + return; |
|
819 | + } |
|
820 | + } |
|
821 | + // since you haven't even attempted to pay for your ticket... |
|
822 | + EED_Ticket_Sales_Monitor::instance()->_release_all_reserved_tickets_for_transaction($transaction); |
|
823 | + } |
|
824 | + |
|
825 | + |
|
826 | + |
|
827 | + /********************************** PROCESS_FAILED_TRANSACTIONS **********************************/ |
|
828 | + |
|
829 | + |
|
830 | + |
|
831 | + /** |
|
832 | + * process_abandoned_transactions |
|
833 | + * releases reserved tickets for absolutely ALL registrations of a FAILED EE_Transaction |
|
834 | + * |
|
835 | + * @access public |
|
836 | + * @param EE_Transaction $transaction |
|
837 | + * @return void |
|
838 | + * @throws EE_Error |
|
839 | + */ |
|
840 | + public static function process_failed_transactions(EE_Transaction $transaction) |
|
841 | + { |
|
842 | + // since you haven't even attempted to pay for your ticket... |
|
843 | + EED_Ticket_Sales_Monitor::instance()->_release_all_reserved_tickets_for_transaction($transaction); |
|
844 | + } |
|
845 | + |
|
846 | + |
|
847 | + |
|
848 | + /********************************** RESET RESERVATION COUNTS *********************************/ |
|
849 | + |
|
850 | + |
|
851 | + |
|
852 | + /** |
|
853 | + * Resets all ticket and datetime reserved counts to zero |
|
854 | + * Tickets that are currently associated with a Transaction that is in progress |
|
855 | + * |
|
856 | + * @throws \EE_Error |
|
857 | + * @throws \DomainException |
|
858 | + */ |
|
859 | + public static function reset_reservation_counts() |
|
860 | + { |
|
861 | + /** @var EE_Line_Item[] $valid_reserved_tickets */ |
|
862 | + $valid_reserved_tickets = array(); |
|
863 | + $transactions_in_progress = EEM_Transaction::instance()->get_transactions_in_progress(); |
|
864 | + foreach ($transactions_in_progress as $transaction_in_progress) { |
|
865 | + // if this TXN has been fully completed, then skip it |
|
866 | + if ($transaction_in_progress->reg_step_completed('finalize_registration')) { |
|
867 | + continue; |
|
868 | + } |
|
869 | + /** @var EE_Transaction $transaction_in_progress */ |
|
870 | + $total_line_item = $transaction_in_progress->total_line_item(); |
|
871 | + // $transaction_in_progress->line |
|
872 | + if (! $total_line_item instanceof EE_Line_Item) { |
|
873 | + throw new DomainException( |
|
874 | + esc_html__('Transaction does not have a valid Total Line Item associated with it.', 'event_espresso') |
|
875 | + ); |
|
876 | + } |
|
877 | + $valid_reserved_tickets += EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total( |
|
878 | + $total_line_item |
|
879 | + ); |
|
880 | + } |
|
881 | + $total_line_items = EEM_Line_Item::instance()->get_total_line_items_for_active_carts(); |
|
882 | + foreach ($total_line_items as $total_line_item) { |
|
883 | + $valid_reserved_tickets += EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total( |
|
884 | + $total_line_item |
|
885 | + ); |
|
886 | + } |
|
887 | + return EED_Ticket_Sales_Monitor::release_reservations_for_tickets( |
|
888 | + EEM_Ticket::instance()->get_tickets_with_reservations(), |
|
889 | + $valid_reserved_tickets |
|
890 | + ); |
|
891 | + } |
|
892 | + |
|
893 | + |
|
894 | + |
|
895 | + /** |
|
896 | + * @param EE_Line_Item $total_line_item |
|
897 | + * @return EE_Line_Item[] |
|
898 | + */ |
|
899 | + private static function get_ticket_line_items_for_grand_total(EE_Line_Item $total_line_item) |
|
900 | + { |
|
901 | + /** @var EE_Line_Item[] $valid_reserved_tickets */ |
|
902 | + $valid_reserved_tickets = array(); |
|
903 | + $ticket_line_items = EEH_Line_Item::get_ticket_line_items($total_line_item); |
|
904 | + foreach ($ticket_line_items as $ticket_line_item) { |
|
905 | + if ($ticket_line_item instanceof EE_Line_Item) { |
|
906 | + $valid_reserved_tickets[] = $ticket_line_item; |
|
907 | + } |
|
908 | + } |
|
909 | + return $valid_reserved_tickets; |
|
910 | + } |
|
911 | + |
|
912 | + |
|
913 | + |
|
914 | + /** |
|
915 | + * @param EE_Ticket[] $tickets_with_reservations |
|
916 | + * @param EE_Line_Item[] $valid_reserved_ticket_line_items |
|
917 | + * @return int |
|
918 | + * @throws \EE_Error |
|
919 | + */ |
|
920 | + private static function release_reservations_for_tickets( |
|
921 | + array $tickets_with_reservations, |
|
922 | + $valid_reserved_ticket_line_items = array() |
|
923 | + ) { |
|
924 | + $total_tickets_released = 0; |
|
925 | + foreach ($tickets_with_reservations as $ticket_with_reservations) { |
|
926 | + if (! $ticket_with_reservations instanceof EE_Ticket) { |
|
927 | + continue; |
|
928 | + } |
|
929 | + $reserved_qty = $ticket_with_reservations->reserved(); |
|
930 | + foreach ($valid_reserved_ticket_line_items as $valid_reserved_ticket_line_item) { |
|
931 | + if ( |
|
932 | + $valid_reserved_ticket_line_item instanceof EE_Line_Item |
|
933 | + && $valid_reserved_ticket_line_item->OBJ_ID() === $ticket_with_reservations->ID() |
|
934 | + ) { |
|
935 | + $reserved_qty -= $valid_reserved_ticket_line_item->quantity(); |
|
936 | + } |
|
937 | + } |
|
938 | + if ($reserved_qty > 0) { |
|
939 | + $ticket_with_reservations->decrease_reserved($reserved_qty); |
|
940 | + $ticket_with_reservations->save(); |
|
941 | + $total_tickets_released += $reserved_qty; |
|
942 | + } |
|
943 | + } |
|
944 | + return $total_tickets_released; |
|
945 | + } |
|
946 | + |
|
947 | + |
|
948 | + |
|
949 | + /********************************** SHUTDOWN **********************************/ |
|
950 | + |
|
951 | + |
|
952 | + |
|
953 | + /** |
|
954 | + * @return false|int |
|
955 | + * @throws \EE_Error |
|
956 | + */ |
|
957 | + public static function clear_expired_line_items_with_no_transaction() |
|
958 | + { |
|
959 | + /** @type WPDB $wpdb */ |
|
960 | + global $wpdb; |
|
961 | + return $wpdb->query( |
|
962 | + $wpdb->prepare( |
|
963 | + 'DELETE FROM ' . EEM_Line_Item::instance()->table() . ' |
|
964 | 964 | WHERE TXN_ID = 0 AND LIN_timestamp <= %s', |
965 | - // use GMT time because that's what LIN_timestamps are in |
|
966 | - date('Y-m-d H:i:s', time() - EE_Registry::instance()->SSN->lifespan()) |
|
967 | - ) |
|
968 | - ); |
|
969 | - } |
|
965 | + // use GMT time because that's what LIN_timestamps are in |
|
966 | + date('Y-m-d H:i:s', time() - EE_Registry::instance()->SSN->lifespan()) |
|
967 | + ) |
|
968 | + ); |
|
969 | + } |
|
970 | 970 | |
971 | 971 | } |
972 | 972 | // End of file EED_Ticket_Sales_Monitor.module.php |
@@ -21,7 +21,7 @@ discard block |
||
21 | 21 | class EED_Ticket_Sales_Monitor extends EED_Module |
22 | 22 | { |
23 | 23 | |
24 | - const debug = false; // true false |
|
24 | + const debug = false; // true false |
|
25 | 25 | |
26 | 26 | /** |
27 | 27 | * an array of raw ticket data from EED_Ticket_Selector |
@@ -181,7 +181,7 @@ discard block |
||
181 | 181 | $expired_ticket_IDs = array(); |
182 | 182 | $valid_ticket_line_items = array(); |
183 | 183 | $total_line_items = EEM_Line_Item::instance()->get_total_line_items_with_no_transaction(); |
184 | - if(empty($total_line_items)){ |
|
184 | + if (empty($total_line_items)) { |
|
185 | 185 | return; |
186 | 186 | } |
187 | 187 | $expired = current_time('timestamp') - EE_Registry::instance()->SSN->lifespan(); |
@@ -189,17 +189,17 @@ discard block |
||
189 | 189 | /** @var EE_Line_Item $total_line_item */ |
190 | 190 | $ticket_line_items = EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total($total_line_item); |
191 | 191 | foreach ($ticket_line_items as $ticket_line_item) { |
192 | - if(! $ticket_line_item instanceof EE_Line_Item) { |
|
192 | + if ( ! $ticket_line_item instanceof EE_Line_Item) { |
|
193 | 193 | continue; |
194 | 194 | } |
195 | - if ($total_line_item->timestamp(true) <= $expired ) { |
|
195 | + if ($total_line_item->timestamp(true) <= $expired) { |
|
196 | 196 | $expired_ticket_IDs[$ticket_line_item->OBJ_ID()] = $ticket_line_item->OBJ_ID(); |
197 | 197 | } else { |
198 | 198 | $valid_ticket_line_items[$ticket_line_item->OBJ_ID()] = $ticket_line_item; |
199 | 199 | } |
200 | 200 | } |
201 | 201 | } |
202 | - if (! empty($expired_ticket_IDs)) { |
|
202 | + if ( ! empty($expired_ticket_IDs)) { |
|
203 | 203 | EED_Ticket_Sales_Monitor::release_reservations_for_tickets( |
204 | 204 | \EEM_Ticket::instance()->get_tickets_with_IDs($expired_ticket_IDs), |
205 | 205 | $valid_ticket_line_items |
@@ -237,8 +237,8 @@ discard block |
||
237 | 237 | $qty = EED_Ticket_Sales_Monitor::instance()->_validate_ticket_sale($ticket, $qty); |
238 | 238 | } |
239 | 239 | if (self::debug) { |
240 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '()'; |
|
241 | - echo '<br /><br /><b> RETURNED QTY: ' . $qty . '</b>'; |
|
240 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'()'; |
|
241 | + echo '<br /><br /><b> RETURNED QTY: '.$qty.'</b>'; |
|
242 | 242 | } |
243 | 243 | return $qty; |
244 | 244 | } |
@@ -259,36 +259,36 @@ discard block |
||
259 | 259 | protected function _validate_ticket_sale(EE_Ticket $ticket, $qty = 1) |
260 | 260 | { |
261 | 261 | if (self::debug) { |
262 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
262 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
263 | 263 | } |
264 | 264 | if ( ! $ticket instanceof EE_Ticket) { |
265 | 265 | return 0; |
266 | 266 | } |
267 | 267 | if (self::debug) { |
268 | - echo '<br /><b> . ticket->ID: ' . $ticket->ID() . '</b>'; |
|
269 | - echo '<br /> . original ticket->reserved: ' . $ticket->reserved(); |
|
268 | + echo '<br /><b> . ticket->ID: '.$ticket->ID().'</b>'; |
|
269 | + echo '<br /> . original ticket->reserved: '.$ticket->reserved(); |
|
270 | 270 | } |
271 | 271 | $ticket->refresh_from_db(); |
272 | 272 | // first let's determine the ticket availability based on sales |
273 | 273 | $available = $ticket->qty('saleable'); |
274 | 274 | if (self::debug) { |
275 | - echo '<br /> . . . ticket->qty: ' . $ticket->qty(); |
|
276 | - echo '<br /> . . . ticket->sold: ' . $ticket->sold(); |
|
277 | - echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
278 | - echo '<br /> . . . ticket->qty(saleable): ' . $ticket->qty('saleable'); |
|
279 | - echo '<br /> . . . available: ' . $available; |
|
275 | + echo '<br /> . . . ticket->qty: '.$ticket->qty(); |
|
276 | + echo '<br /> . . . ticket->sold: '.$ticket->sold(); |
|
277 | + echo '<br /> . . . ticket->reserved: '.$ticket->reserved(); |
|
278 | + echo '<br /> . . . ticket->qty(saleable): '.$ticket->qty('saleable'); |
|
279 | + echo '<br /> . . . available: '.$available; |
|
280 | 280 | } |
281 | 281 | if ($available < 1) { |
282 | 282 | $this->_ticket_sold_out($ticket); |
283 | 283 | return 0; |
284 | 284 | } |
285 | 285 | if (self::debug) { |
286 | - echo '<br /> . . . qty: ' . $qty; |
|
286 | + echo '<br /> . . . qty: '.$qty; |
|
287 | 287 | } |
288 | 288 | if ($available < $qty) { |
289 | 289 | $qty = $available; |
290 | 290 | if (self::debug) { |
291 | - echo '<br /> . . . QTY ADJUSTED: ' . $qty; |
|
291 | + echo '<br /> . . . QTY ADJUSTED: '.$qty; |
|
292 | 292 | } |
293 | 293 | $this->_ticket_quantity_decremented($ticket); |
294 | 294 | } |
@@ -311,7 +311,7 @@ discard block |
||
311 | 311 | protected function _reserve_ticket(EE_Ticket $ticket, $quantity = 1) |
312 | 312 | { |
313 | 313 | if (self::debug) { |
314 | - echo '<br /><br /> . . . INCREASE RESERVED: ' . $quantity; |
|
314 | + echo '<br /><br /> . . . INCREASE RESERVED: '.$quantity; |
|
315 | 315 | } |
316 | 316 | $ticket->increase_reserved($quantity); |
317 | 317 | return $ticket->save(); |
@@ -331,12 +331,12 @@ discard block |
||
331 | 331 | protected function _release_reserved_ticket(EE_Ticket $ticket, $quantity = 1) |
332 | 332 | { |
333 | 333 | if (self::debug) { |
334 | - echo '<br /> . . . ticket->ID: ' . $ticket->ID(); |
|
335 | - echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
334 | + echo '<br /> . . . ticket->ID: '.$ticket->ID(); |
|
335 | + echo '<br /> . . . ticket->reserved: '.$ticket->reserved(); |
|
336 | 336 | } |
337 | 337 | $ticket->decrease_reserved($quantity); |
338 | 338 | if (self::debug) { |
339 | - echo '<br /> . . . ticket->reserved: ' . $ticket->reserved(); |
|
339 | + echo '<br /> . . . ticket->reserved: '.$ticket->reserved(); |
|
340 | 340 | } |
341 | 341 | return $ticket->save() ? 1 : 0; |
342 | 342 | } |
@@ -356,8 +356,8 @@ discard block |
||
356 | 356 | protected function _ticket_sold_out(EE_Ticket $ticket) |
357 | 357 | { |
358 | 358 | if (self::debug) { |
359 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
360 | - echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket); |
|
359 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
360 | + echo '<br /> . . ticket->name: '.$this->_get_ticket_and_event_name($ticket); |
|
361 | 361 | } |
362 | 362 | $this->sold_out_tickets[] = $this->_get_ticket_and_event_name($ticket); |
363 | 363 | } |
@@ -377,8 +377,8 @@ discard block |
||
377 | 377 | protected function _ticket_quantity_decremented(EE_Ticket $ticket) |
378 | 378 | { |
379 | 379 | if (self::debug) { |
380 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
381 | - echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket); |
|
380 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
381 | + echo '<br /> . . ticket->name: '.$this->_get_ticket_and_event_name($ticket); |
|
382 | 382 | } |
383 | 383 | $this->decremented_tickets[] = $this->_get_ticket_and_event_name($ticket); |
384 | 384 | } |
@@ -485,7 +485,7 @@ discard block |
||
485 | 485 | protected function _post_notices() |
486 | 486 | { |
487 | 487 | if (self::debug) { |
488 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
488 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
489 | 489 | } |
490 | 490 | $refresh_msg = ''; |
491 | 491 | $none_added_msg = ''; |
@@ -552,8 +552,8 @@ discard block |
||
552 | 552 | protected function _release_all_reserved_tickets_for_transaction(EE_Transaction $transaction) |
553 | 553 | { |
554 | 554 | if (self::debug) { |
555 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
556 | - echo '<br /> . transaction->ID: ' . $transaction->ID(); |
|
555 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
556 | + echo '<br /> . transaction->ID: '.$transaction->ID(); |
|
557 | 557 | } |
558 | 558 | // check if 'finalize_registration' step has been completed... |
559 | 559 | $finalized = $transaction->reg_step_completed('finalize_registration'); |
@@ -562,13 +562,13 @@ discard block |
||
562 | 562 | EEH_Debug_Tools::log( |
563 | 563 | __CLASS__, __FUNCTION__, __LINE__, |
564 | 564 | array('finalized' => $finalized), |
565 | - false, 'EE_Transaction: ' . $transaction->ID() |
|
565 | + false, 'EE_Transaction: '.$transaction->ID() |
|
566 | 566 | ); |
567 | 567 | } |
568 | 568 | // how many tickets were released |
569 | 569 | $count = 0; |
570 | 570 | if (self::debug) { |
571 | - echo '<br /> . . . finalized: ' . $finalized; |
|
571 | + echo '<br /> . . . finalized: '.$finalized; |
|
572 | 572 | } |
573 | 573 | $release_tickets_with_TXN_status = array( |
574 | 574 | EEM_Transaction::failed_status_code, |
@@ -609,10 +609,10 @@ discard block |
||
609 | 609 | ) { |
610 | 610 | $STS_ID = $transaction->status_ID(); |
611 | 611 | if (self::debug) { |
612 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
613 | - echo '<br /> . . registration->ID: ' . $registration->ID(); |
|
614 | - echo '<br /> . . registration->status_ID: ' . $registration->status_ID(); |
|
615 | - echo '<br /> . . transaction->status_ID(): ' . $STS_ID; |
|
612 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
613 | + echo '<br /> . . registration->ID: '.$registration->ID(); |
|
614 | + echo '<br /> . . registration->status_ID: '.$registration->status_ID(); |
|
615 | + echo '<br /> . . transaction->status_ID(): '.$STS_ID; |
|
616 | 616 | } |
617 | 617 | if ( |
618 | 618 | // release Tickets for Failed Transactions and Abandoned Transactions |
@@ -650,7 +650,7 @@ discard block |
||
650 | 650 | public static function session_cart_reset(EE_Session $session) |
651 | 651 | { |
652 | 652 | if (self::debug) { |
653 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
653 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
654 | 654 | } |
655 | 655 | $cart = $session->cart(); |
656 | 656 | if ($cart instanceof EE_Cart) { |
@@ -680,7 +680,7 @@ discard block |
||
680 | 680 | protected function _session_cart_reset(EE_Cart $cart) |
681 | 681 | { |
682 | 682 | if (self::debug) { |
683 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
683 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
684 | 684 | } |
685 | 685 | EE_Registry::instance()->load_helper('Line_Item'); |
686 | 686 | $ticket_line_items = $cart->get_tickets(); |
@@ -689,17 +689,17 @@ discard block |
||
689 | 689 | } |
690 | 690 | foreach ($ticket_line_items as $ticket_line_item) { |
691 | 691 | if (self::debug) { |
692 | - echo '<br /> . ticket_line_item->ID(): ' . $ticket_line_item->ID(); |
|
692 | + echo '<br /> . ticket_line_item->ID(): '.$ticket_line_item->ID(); |
|
693 | 693 | } |
694 | 694 | if ($ticket_line_item instanceof EE_Line_Item && $ticket_line_item->OBJ_type() === 'Ticket') { |
695 | 695 | if (self::debug) { |
696 | - echo '<br /> . . ticket_line_item->OBJ_ID(): ' . $ticket_line_item->OBJ_ID(); |
|
696 | + echo '<br /> . . ticket_line_item->OBJ_ID(): '.$ticket_line_item->OBJ_ID(); |
|
697 | 697 | } |
698 | 698 | $ticket = EEM_Ticket::instance()->get_one_by_ID($ticket_line_item->OBJ_ID()); |
699 | 699 | if ($ticket instanceof EE_Ticket) { |
700 | 700 | if (self::debug) { |
701 | - echo '<br /> . . ticket->ID(): ' . $ticket->ID(); |
|
702 | - echo '<br /> . . ticket_line_item->quantity(): ' . $ticket_line_item->quantity(); |
|
701 | + echo '<br /> . . ticket->ID(): '.$ticket->ID(); |
|
702 | + echo '<br /> . . ticket_line_item->quantity(): '.$ticket_line_item->quantity(); |
|
703 | 703 | } |
704 | 704 | $this->_release_reserved_ticket($ticket, $ticket_line_item->quantity()); |
705 | 705 | } |
@@ -747,7 +747,7 @@ discard block |
||
747 | 747 | protected function _session_checkout_reset(EE_Checkout $checkout) |
748 | 748 | { |
749 | 749 | if (self::debug) { |
750 | - echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() '; |
|
750 | + echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() '; |
|
751 | 751 | } |
752 | 752 | // we want to release the each registration's reserved tickets if the session was cleared, but not if this is a revisit |
753 | 753 | if ($checkout->revisit || ! $checkout->transaction instanceof EE_Transaction) { |
@@ -798,7 +798,7 @@ discard block |
||
798 | 798 | EEH_Debug_Tools::log( |
799 | 799 | __CLASS__, __FUNCTION__, __LINE__, |
800 | 800 | array($transaction), |
801 | - false, 'EE_Transaction: ' . $transaction->ID() |
|
801 | + false, 'EE_Transaction: '.$transaction->ID() |
|
802 | 802 | ); |
803 | 803 | } |
804 | 804 | return; |
@@ -812,7 +812,7 @@ discard block |
||
812 | 812 | EEH_Debug_Tools::log( |
813 | 813 | __CLASS__, __FUNCTION__, __LINE__, |
814 | 814 | array($payment), |
815 | - false, 'EE_Transaction: ' . $transaction->ID() |
|
815 | + false, 'EE_Transaction: '.$transaction->ID() |
|
816 | 816 | ); |
817 | 817 | } |
818 | 818 | return; |
@@ -869,7 +869,7 @@ discard block |
||
869 | 869 | /** @var EE_Transaction $transaction_in_progress */ |
870 | 870 | $total_line_item = $transaction_in_progress->total_line_item(); |
871 | 871 | // $transaction_in_progress->line |
872 | - if (! $total_line_item instanceof EE_Line_Item) { |
|
872 | + if ( ! $total_line_item instanceof EE_Line_Item) { |
|
873 | 873 | throw new DomainException( |
874 | 874 | esc_html__('Transaction does not have a valid Total Line Item associated with it.', 'event_espresso') |
875 | 875 | ); |
@@ -923,7 +923,7 @@ discard block |
||
923 | 923 | ) { |
924 | 924 | $total_tickets_released = 0; |
925 | 925 | foreach ($tickets_with_reservations as $ticket_with_reservations) { |
926 | - if (! $ticket_with_reservations instanceof EE_Ticket) { |
|
926 | + if ( ! $ticket_with_reservations instanceof EE_Ticket) { |
|
927 | 927 | continue; |
928 | 928 | } |
929 | 929 | $reserved_qty = $ticket_with_reservations->reserved(); |
@@ -960,7 +960,7 @@ discard block |
||
960 | 960 | global $wpdb; |
961 | 961 | return $wpdb->query( |
962 | 962 | $wpdb->prepare( |
963 | - 'DELETE FROM ' . EEM_Line_Item::instance()->table() . ' |
|
963 | + 'DELETE FROM '.EEM_Line_Item::instance()->table().' |
|
964 | 964 | WHERE TXN_ID = 0 AND LIN_timestamp <= %s', |
965 | 965 | // use GMT time because that's what LIN_timestamps are in |
966 | 966 | date('Y-m-d H:i:s', time() - EE_Registry::instance()->SSN->lifespan()) |
@@ -7,13 +7,13 @@ discard block |
||
7 | 7 | /** @var string $delete_db_url */ |
8 | 8 | ?> |
9 | 9 | <h2> |
10 | - <?php esc_html_e( 'Reset/Delete Data for Event Espresso', 'event_espresso' );?> |
|
10 | + <?php esc_html_e('Reset/Delete Data for Event Espresso', 'event_espresso'); ?> |
|
11 | 11 | </h2> |
12 | 12 | <br /> |
13 | 13 | |
14 | 14 | <div class="padding"> |
15 | - <h4 class="espresso-header"><span class="dashicons dashicons-update ee-icon-size-22"></span><?php esc_html_e('Reset Ticket and Datetime Reserved Counts', 'event_espresso');?></h4> |
|
16 | - <p><?php esc_html_e('Use this to reset the counts for ticket and datetime reservations.', 'event_espresso');?></p> |
|
15 | + <h4 class="espresso-header"><span class="dashicons dashicons-update ee-icon-size-22"></span><?php esc_html_e('Reset Ticket and Datetime Reserved Counts', 'event_espresso'); ?></h4> |
|
16 | + <p><?php esc_html_e('Use this to reset the counts for ticket and datetime reservations.', 'event_espresso'); ?></p> |
|
17 | 17 | <div class="float-right"><?php echo $reset_reservations_button; ?></div> |
18 | 18 | <div class="clear"></div> |
19 | 19 | </div> |
@@ -22,8 +22,8 @@ discard block |
||
22 | 22 | |
23 | 23 | <!-- reset DB url is here. Just need to make it look pretty and unhide it--> |
24 | 24 | <div class="padding"> |
25 | - <h4 class="espresso-header"><span class="dashicons dashicons-update ee-icon-size-22"></span><?php esc_html_e('Reset Event Espresso Capabilities', 'event_espresso');?></h4> |
|
26 | - <p><?php esc_html_e('Use this to reset the capabilities on WP roles to the defaults as defined via EE_Capabilities. Note this reset does not REMOVE any existing capabilities, it just ensures that all the defaults are ADDED to the roles.', 'event_espresso');?></p> |
|
25 | + <h4 class="espresso-header"><span class="dashicons dashicons-update ee-icon-size-22"></span><?php esc_html_e('Reset Event Espresso Capabilities', 'event_espresso'); ?></h4> |
|
26 | + <p><?php esc_html_e('Use this to reset the capabilities on WP roles to the defaults as defined via EE_Capabilities. Note this reset does not REMOVE any existing capabilities, it just ensures that all the defaults are ADDED to the roles.', 'event_espresso'); ?></p> |
|
27 | 27 | <div class="float-right"><?php echo $reset_capabilities_button; ?></div> |
28 | 28 | <div class="clear"></div> |
29 | 29 | </div> |
@@ -31,24 +31,24 @@ discard block |
||
31 | 31 | <br /> |
32 | 32 | |
33 | 33 | <div class="padding"> |
34 | - <h4 class="espresso-header"><span class="dashicons dashicons-update ee-icon-size-22"></span><?php esc_html_e('Reset Event Espresso Tables', 'event_espresso');?></h4> |
|
35 | - <p><?php esc_html_e('Use this to reset Event Espresso Data and return your site to how it was just after first activating Event Espresso.', 'event_espresso');?></p> |
|
36 | - <div class="float-right"><a class="button button-primary" href="<?php echo $reset_db_url;?>"><?php esc_html_e('Reset Event Espresso Tables', 'event_espresso');?></a></div> |
|
34 | + <h4 class="espresso-header"><span class="dashicons dashicons-update ee-icon-size-22"></span><?php esc_html_e('Reset Event Espresso Tables', 'event_espresso'); ?></h4> |
|
35 | + <p><?php esc_html_e('Use this to reset Event Espresso Data and return your site to how it was just after first activating Event Espresso.', 'event_espresso'); ?></p> |
|
36 | + <div class="float-right"><a class="button button-primary" href="<?php echo $reset_db_url; ?>"><?php esc_html_e('Reset Event Espresso Tables', 'event_espresso'); ?></a></div> |
|
37 | 37 | <div class="clear"></div> |
38 | 38 | </div> |
39 | 39 | <br /> |
40 | 40 | <br /> |
41 | 41 | |
42 | 42 | <div class="padding"> |
43 | - <h4 class="espresso-header"><span class="dashicons dashicons-post-trash ee-icon-size-22"></span><?php esc_html_e('Permanently Delete ALL Event Espresso Tables and Data', 'event_espresso');?></h4> |
|
44 | - <p><?php esc_html_e('If you know for certain that you will no longer be using Event Espresso and you wish to remove ALL traces of the plugin from your system, then perform the following steps.', 'event_espresso');?></p> |
|
45 | - <p class="important-notice"><?php printf( esc_html__('Please note: %sThis is permanent and can NOT be undone.%s', 'event_espresso'), '<strong>', '</strong>' ); ?><br/></p> |
|
43 | + <h4 class="espresso-header"><span class="dashicons dashicons-post-trash ee-icon-size-22"></span><?php esc_html_e('Permanently Delete ALL Event Espresso Tables and Data', 'event_espresso'); ?></h4> |
|
44 | + <p><?php esc_html_e('If you know for certain that you will no longer be using Event Espresso and you wish to remove ALL traces of the plugin from your system, then perform the following steps.', 'event_espresso'); ?></p> |
|
45 | + <p class="important-notice"><?php printf(esc_html__('Please note: %sThis is permanent and can NOT be undone.%s', 'event_espresso'), '<strong>', '</strong>'); ?><br/></p> |
|
46 | 46 | <ol> |
47 | - <li><?php printf( esc_html__('First, click the button below to permanently delete all Event Espresso tables, records, and options from your WordPress database . If you receive a "500 Internal Server Error" or a blank white screen, it means the server has timed out due to the large number of records being updated. This is not a cause for concern. Simply %1$srefresh the page%2$s and the Database Update will continue where it left off.', 'event_espresso'), '<strong>', '</strong>' );?></li> |
|
48 | - <li><?php printf( esc_html__('Then, locate Event Espresso on the WordPress Plugins page, and click on %sDelete%s', 'event_espresso'), '<strong>', '</strong>' ); ?></li> |
|
49 | - <li><?php printf( esc_html__('Once you are on the Delete Plugin page, click on %sYes, Delete these files and data%s', 'event_espresso'), '<strong>', '</strong>' ); ?></li> |
|
47 | + <li><?php printf(esc_html__('First, click the button below to permanently delete all Event Espresso tables, records, and options from your WordPress database . If you receive a "500 Internal Server Error" or a blank white screen, it means the server has timed out due to the large number of records being updated. This is not a cause for concern. Simply %1$srefresh the page%2$s and the Database Update will continue where it left off.', 'event_espresso'), '<strong>', '</strong>'); ?></li> |
|
48 | + <li><?php printf(esc_html__('Then, locate Event Espresso on the WordPress Plugins page, and click on %sDelete%s', 'event_espresso'), '<strong>', '</strong>'); ?></li> |
|
49 | + <li><?php printf(esc_html__('Once you are on the Delete Plugin page, click on %sYes, Delete these files and data%s', 'event_espresso'), '<strong>', '</strong>'); ?></li> |
|
50 | 50 | </ol> |
51 | - <div class="float-right"><a href="<?php echo $delete_db_url; ?>" id="delete-all-data-btn" class="button-primary"><?php esc_html_e('Permanently Delete All Event Espresso Data', 'event_espresso');?></a></div> |
|
51 | + <div class="float-right"><a href="<?php echo $delete_db_url; ?>" id="delete-all-data-btn" class="button-primary"><?php esc_html_e('Permanently Delete All Event Espresso Data', 'event_espresso'); ?></a></div> |
|
52 | 52 | <div class="clear"></div> |
53 | 53 | </div> |
54 | 54 | <br/> |
@@ -1,5 +1,5 @@ discard block |
||
1 | 1 | <?php if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
2 | - exit('No direct script access allowed'); |
|
2 | + exit('No direct script access allowed'); |
|
3 | 3 | } |
4 | 4 | /** |
5 | 5 | * Class Datetime Model |
@@ -11,595 +11,595 @@ discard block |
||
11 | 11 | class EEM_Datetime extends EEM_Soft_Delete_Base |
12 | 12 | { |
13 | 13 | |
14 | - /** |
|
15 | - * @var EEM_Datetime $_instance |
|
16 | - */ |
|
17 | - protected static $_instance; |
|
18 | - |
|
19 | - |
|
20 | - |
|
21 | - /** |
|
22 | - * private constructor to prevent direct creation |
|
23 | - * |
|
24 | - * @Constructor |
|
25 | - * @access private |
|
26 | - * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any |
|
27 | - * incoming timezone data that gets saved). Note this just sends the timezone info to the |
|
28 | - * date time model field objects. Default is NULL (and will be assumed using the set |
|
29 | - * timezone in the 'timezone_string' wp option) |
|
30 | - * @throws \EE_Error |
|
31 | - */ |
|
32 | - protected function __construct($timezone) |
|
33 | - { |
|
34 | - $this->singular_item = __('Datetime', 'event_espresso'); |
|
35 | - $this->plural_item = __('Datetimes', 'event_espresso'); |
|
36 | - $this->_tables = array( |
|
37 | - 'Datetime' => new EE_Primary_Table('esp_datetime', 'DTT_ID'), |
|
38 | - ); |
|
39 | - $this->_fields = array( |
|
40 | - 'Datetime' => array( |
|
41 | - 'DTT_ID' => new EE_Primary_Key_Int_Field('DTT_ID', __('Datetime ID', 'event_espresso')), |
|
42 | - 'EVT_ID' => new EE_Foreign_Key_Int_Field( |
|
43 | - 'EVT_ID', __('Event ID', 'event_espresso'), false, 0, 'Event' |
|
44 | - ), |
|
45 | - 'DTT_name' => new EE_Plain_Text_Field( |
|
46 | - 'DTT_name', __('Datetime Name', 'event_espresso'), false, '' |
|
47 | - ), |
|
48 | - 'DTT_description' => new EE_Post_Content_Field( |
|
49 | - 'DTT_description', __('Description for Datetime', 'event_espresso'), false, '' |
|
50 | - ), |
|
51 | - 'DTT_EVT_start' => new EE_Datetime_Field( |
|
52 | - 'DTT_EVT_start', __('Start time/date of Event', 'event_espresso'), false, EE_Datetime_Field::now, |
|
53 | - $timezone |
|
54 | - ), |
|
55 | - 'DTT_EVT_end' => new EE_Datetime_Field( |
|
56 | - 'DTT_EVT_end', __('End time/date of Event', 'event_espresso'), false, EE_Datetime_Field::now, |
|
57 | - $timezone |
|
58 | - ), |
|
59 | - 'DTT_reg_limit' => new EE_Infinite_Integer_Field( |
|
60 | - 'DTT_reg_limit', __('Registration Limit for this time', 'event_espresso'), true, EE_INF), |
|
61 | - 'DTT_sold' => new EE_Integer_Field( |
|
62 | - 'DTT_sold', __('How many sales for this Datetime that have occurred', 'event_espresso'), true, 0 |
|
63 | - ), |
|
64 | - 'DTT_reserved' => new EE_Integer_Field('DTT_reserved', |
|
65 | - __('Quantity of tickets reserved, but not yet fully purchased', 'event_espresso'), false, 0 |
|
66 | - ), |
|
67 | - 'DTT_is_primary' => new EE_Boolean_Field( |
|
68 | - 'DTT_is_primary', __('Flag indicating datetime is primary one for event', 'event_espresso'), |
|
69 | - false, false |
|
70 | - ), |
|
71 | - 'DTT_order' => new EE_Integer_Field( |
|
72 | - 'DTT_order', __('The order in which the Datetime is displayed', 'event_espresso'), false, 0 |
|
73 | - ), |
|
74 | - 'DTT_parent' => new EE_Integer_Field( |
|
75 | - 'DTT_parent', __('Indicates what DTT_ID is the parent of this DTT_ID'), true, 0 |
|
76 | - ), |
|
77 | - 'DTT_deleted' => new EE_Trashed_Flag_Field( |
|
78 | - 'DTT_deleted', __('Flag indicating datetime is archived', 'event_espresso'), false, false |
|
79 | - ), |
|
80 | - ), |
|
81 | - ); |
|
82 | - $this->_model_relations = array( |
|
83 | - 'Ticket' => new EE_HABTM_Relation('Datetime_Ticket'), |
|
84 | - 'Event' => new EE_Belongs_To_Relation(), |
|
85 | - 'Checkin' => new EE_Has_Many_Relation(), |
|
86 | - ); |
|
87 | - $this->_model_chain_to_wp_user = 'Event'; |
|
88 | - //this model is generally available for reading |
|
89 | - $this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Event_Related_Public('Event'); |
|
90 | - $this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Event_Related_Protected('Event'); |
|
91 | - $this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Event_Related_Protected('Event'); |
|
92 | - $this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Event_Related_Protected('Event', |
|
93 | - EEM_Base::caps_edit); |
|
94 | - parent::__construct($timezone); |
|
95 | - } |
|
96 | - |
|
97 | - |
|
98 | - |
|
99 | - /** |
|
100 | - * create new blank datetime |
|
101 | - * |
|
102 | - * @access public |
|
103 | - * @return EE_Datetime[] array on success, FALSE on fail |
|
104 | - * @throws \EE_Error |
|
105 | - */ |
|
106 | - public function create_new_blank_datetime() |
|
107 | - { |
|
108 | - //makes sure timezone is always set. |
|
109 | - $timezone_string = $this->get_timezone(); |
|
110 | - $blank_datetime = EE_Datetime::new_instance( |
|
111 | - array( |
|
112 | - 'DTT_EVT_start' => $this->current_time_for_query('DTT_EVT_start', true) + MONTH_IN_SECONDS, |
|
113 | - 'DTT_EVT_end' => $this->current_time_for_query('DTT_EVT_end', true) + MONTH_IN_SECONDS, |
|
114 | - 'DTT_order' => 1, |
|
115 | - 'DTT_reg_limit' => EE_INF, |
|
116 | - ), |
|
117 | - $timezone_string |
|
118 | - ); |
|
119 | - $blank_datetime->set_start_time($this->convert_datetime_for_query('DTT_EVT_start', '8am', 'ga', |
|
120 | - $timezone_string)); |
|
121 | - $blank_datetime->set_end_time($this->convert_datetime_for_query('DTT_EVT_end', '5pm', 'ga', $timezone_string)); |
|
122 | - return array($blank_datetime); |
|
123 | - } |
|
124 | - |
|
125 | - |
|
126 | - |
|
127 | - /** |
|
128 | - * get event start date from db |
|
129 | - * |
|
130 | - * @access public |
|
131 | - * @param int $EVT_ID |
|
132 | - * @return EE_Datetime[] array on success, FALSE on fail |
|
133 | - * @throws \EE_Error |
|
134 | - */ |
|
135 | - public function get_all_event_dates($EVT_ID = 0) |
|
136 | - { |
|
137 | - if ( ! $EVT_ID) { // on add_new_event event_id gets set to 0 |
|
138 | - return $this->create_new_blank_datetime(); |
|
139 | - } |
|
140 | - $results = $this->get_datetimes_for_event_ordered_by_DTT_order($EVT_ID); |
|
141 | - if (empty($results)) { |
|
142 | - return $this->create_new_blank_datetime(); |
|
143 | - } |
|
144 | - return $results; |
|
145 | - } |
|
146 | - |
|
147 | - |
|
148 | - |
|
149 | - /** |
|
150 | - * get all datetimes attached to an event ordered by the DTT_order field |
|
151 | - * |
|
152 | - * @public |
|
153 | - * @param int $EVT_ID event id |
|
154 | - * @param boolean $include_expired |
|
155 | - * @param boolean $include_deleted |
|
156 | - * @param int $limit If included then limit the count of results by |
|
157 | - * the given number |
|
158 | - * @return EE_Datetime[] |
|
159 | - * @throws \EE_Error |
|
160 | - */ |
|
161 | - public function get_datetimes_for_event_ordered_by_DTT_order( |
|
162 | - $EVT_ID, |
|
163 | - $include_expired = true, |
|
164 | - $include_deleted = true, |
|
165 | - $limit = null |
|
166 | - ) { |
|
167 | - //sanitize EVT_ID |
|
168 | - $EVT_ID = absint($EVT_ID); |
|
169 | - $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
170 | - $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
171 | - $where_params = array('Event.EVT_ID' => $EVT_ID); |
|
172 | - $query_params = ! empty($limit) |
|
173 | - ? array( |
|
174 | - $where_params, |
|
175 | - 'limit' => $limit, |
|
176 | - 'order_by' => array('DTT_order' => 'ASC'), |
|
177 | - 'default_where_conditions' => 'none', |
|
178 | - ) |
|
179 | - : array( |
|
180 | - $where_params, |
|
181 | - 'order_by' => array('DTT_order' => 'ASC'), |
|
182 | - 'default_where_conditions' => 'none', |
|
183 | - ); |
|
184 | - if ( ! $include_expired) { |
|
185 | - $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
186 | - } |
|
187 | - if ($include_deleted) { |
|
188 | - $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
189 | - } |
|
190 | - /** @var EE_Datetime[] $result */ |
|
191 | - $result = $this->get_all($query_params); |
|
192 | - $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
193 | - return $result; |
|
194 | - } |
|
195 | - |
|
196 | - |
|
197 | - |
|
198 | - /** |
|
199 | - * Gets the datetimes for the event (with the given limit), and orders them by "importance". By importance, we mean |
|
200 | - * that the primary datetimes are most important (DEPRECATED FOR NOW), and then the earlier datetimes are the most |
|
201 | - * important. Maybe we'll want this to take into account datetimes that haven't already passed, but we don't yet. |
|
202 | - * |
|
203 | - * @param int $EVT_ID |
|
204 | - * @param int $limit |
|
205 | - * @return EE_Datetime[]|EE_Base_Class[] |
|
206 | - * @throws \EE_Error |
|
207 | - */ |
|
208 | - public function get_datetimes_for_event_ordered_by_importance($EVT_ID = 0, $limit = null) |
|
209 | - { |
|
210 | - return $this->get_all( |
|
211 | - array( |
|
212 | - array('Event.EVT_ID' => $EVT_ID), |
|
213 | - 'limit' => $limit, |
|
214 | - 'order_by' => array('DTT_EVT_start' => 'ASC'), |
|
215 | - 'default_where_conditions' => 'none', |
|
216 | - ) |
|
217 | - ); |
|
218 | - } |
|
219 | - |
|
220 | - |
|
221 | - |
|
222 | - /** |
|
223 | - * @param int $EVT_ID |
|
224 | - * @param boolean $include_expired |
|
225 | - * @param boolean $include_deleted |
|
226 | - * @return EE_Datetime |
|
227 | - * @throws \EE_Error |
|
228 | - */ |
|
229 | - public function get_oldest_datetime_for_event($EVT_ID, $include_expired = false, $include_deleted = false) |
|
230 | - { |
|
231 | - $results = $this->get_datetimes_for_event_ordered_by_start_time($EVT_ID, $include_expired, $include_deleted, 1); |
|
232 | - if ($results) { |
|
233 | - return array_shift($results); |
|
234 | - } else { |
|
235 | - return null; |
|
236 | - } |
|
237 | - } |
|
238 | - |
|
239 | - |
|
240 | - |
|
241 | - /** |
|
242 | - * Gets the 'primary' datetime for an event. |
|
243 | - * |
|
244 | - * @param int $EVT_ID |
|
245 | - * @param bool $try_to_exclude_expired |
|
246 | - * @param bool $try_to_exclude_deleted |
|
247 | - * @return \EE_Datetime |
|
248 | - * @throws \EE_Error |
|
249 | - */ |
|
250 | - public function get_primary_datetime_for_event( |
|
251 | - $EVT_ID, |
|
252 | - $try_to_exclude_expired = true, |
|
253 | - $try_to_exclude_deleted = true |
|
254 | - ) { |
|
255 | - if ($try_to_exclude_expired) { |
|
256 | - $non_expired = $this->get_oldest_datetime_for_event($EVT_ID, false, false); |
|
257 | - if ($non_expired) { |
|
258 | - return $non_expired; |
|
259 | - } |
|
260 | - } |
|
261 | - if ($try_to_exclude_deleted) { |
|
262 | - $expired_even = $this->get_oldest_datetime_for_event($EVT_ID, true); |
|
263 | - if ($expired_even) { |
|
264 | - return $expired_even; |
|
265 | - } |
|
266 | - } |
|
267 | - return $this->get_oldest_datetime_for_event($EVT_ID, true, true); |
|
268 | - } |
|
269 | - |
|
270 | - |
|
271 | - |
|
272 | - /** |
|
273 | - * Gets ALL the datetimes for an event (including trashed ones, for now), ordered |
|
274 | - * only by start date |
|
275 | - * |
|
276 | - * @param int $EVT_ID |
|
277 | - * @param boolean $include_expired |
|
278 | - * @param boolean $include_deleted |
|
279 | - * @param int $limit |
|
280 | - * @return EE_Datetime[] |
|
281 | - * @throws \EE_Error |
|
282 | - */ |
|
283 | - public function get_datetimes_for_event_ordered_by_start_time( |
|
284 | - $EVT_ID, |
|
285 | - $include_expired = true, |
|
286 | - $include_deleted = true, |
|
287 | - $limit = null |
|
288 | - ) { |
|
289 | - //sanitize EVT_ID |
|
290 | - $EVT_ID = absint($EVT_ID); |
|
291 | - $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
292 | - $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
293 | - $query_params = array(array('Event.EVT_ID' => $EVT_ID), 'order_by' => array('DTT_EVT_start' => 'asc')); |
|
294 | - if ( ! $include_expired) { |
|
295 | - $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
296 | - } |
|
297 | - if ($include_deleted) { |
|
298 | - $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
299 | - } |
|
300 | - if ($limit) { |
|
301 | - $query_params['limit'] = $limit; |
|
302 | - } |
|
303 | - /** @var EE_Datetime[] $result */ |
|
304 | - $result = $this->get_all($query_params); |
|
305 | - $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
306 | - return $result; |
|
307 | - } |
|
308 | - |
|
309 | - |
|
310 | - |
|
311 | - /** |
|
312 | - * Gets ALL the datetimes for an ticket (including trashed ones, for now), ordered |
|
313 | - * only by start date |
|
314 | - * |
|
315 | - * @param int $TKT_ID |
|
316 | - * @param boolean $include_expired |
|
317 | - * @param boolean $include_deleted |
|
318 | - * @param int $limit |
|
319 | - * @return EE_Datetime[] |
|
320 | - * @throws \EE_Error |
|
321 | - */ |
|
322 | - public function get_datetimes_for_ticket_ordered_by_start_time( |
|
323 | - $TKT_ID, |
|
324 | - $include_expired = true, |
|
325 | - $include_deleted = true, |
|
326 | - $limit = null |
|
327 | - ) { |
|
328 | - //sanitize TKT_ID |
|
329 | - $TKT_ID = absint($TKT_ID); |
|
330 | - $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
331 | - $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
332 | - $query_params = array(array('Ticket.TKT_ID' => $TKT_ID), 'order_by' => array('DTT_EVT_start' => 'asc')); |
|
333 | - if ( ! $include_expired) { |
|
334 | - $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
335 | - } |
|
336 | - if ($include_deleted) { |
|
337 | - $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
338 | - } |
|
339 | - if ($limit) { |
|
340 | - $query_params['limit'] = $limit; |
|
341 | - } |
|
342 | - /** @var EE_Datetime[] $result */ |
|
343 | - $result = $this->get_all($query_params); |
|
344 | - $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
345 | - return $result; |
|
346 | - } |
|
347 | - |
|
348 | - |
|
349 | - |
|
350 | - /** |
|
351 | - * Gets all the datetimes for a ticket (including trashed ones, for now), ordered by the DTT_order for the |
|
352 | - * datetimes. |
|
353 | - * |
|
354 | - * @param int $TKT_ID ID of ticket to retrieve the datetimes for |
|
355 | - * @param boolean $include_expired whether to include expired datetimes or not |
|
356 | - * @param boolean $include_deleted whether to include trashed datetimes or not. |
|
357 | - * @param int|null $limit if null, no limit, if int then limit results by |
|
358 | - * that number |
|
359 | - * @return EE_Datetime[] |
|
360 | - * @throws \EE_Error |
|
361 | - */ |
|
362 | - public function get_datetimes_for_ticket_ordered_by_DTT_order( |
|
363 | - $TKT_ID, |
|
364 | - $include_expired = true, |
|
365 | - $include_deleted = true, |
|
366 | - $limit = null |
|
367 | - ) { |
|
368 | - //sanitize id. |
|
369 | - $TKT_ID = absint($TKT_ID); |
|
370 | - $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
371 | - $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
372 | - $where_params = array('Ticket.TKT_ID' => $TKT_ID); |
|
373 | - $query_params = array($where_params, 'order_by' => array('DTT_order' => 'ASC')); |
|
374 | - if ( ! $include_expired) { |
|
375 | - $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
376 | - } |
|
377 | - if ($include_deleted) { |
|
378 | - $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
379 | - } |
|
380 | - if ($limit) { |
|
381 | - $query_params['limit'] = $limit; |
|
382 | - } |
|
383 | - /** @var EE_Datetime[] $result */ |
|
384 | - $result = $this->get_all($query_params); |
|
385 | - $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
386 | - return $result; |
|
387 | - } |
|
388 | - |
|
389 | - |
|
390 | - |
|
391 | - /** |
|
392 | - * Gets the most important datetime for a particular event (ie, the primary event usually. But if for some WACK |
|
393 | - * reason it doesn't exist, we consider the earliest event the most important) |
|
394 | - * |
|
395 | - * @param int $EVT_ID |
|
396 | - * @return EE_Datetime |
|
397 | - * @throws \EE_Error |
|
398 | - */ |
|
399 | - public function get_most_important_datetime_for_event($EVT_ID) |
|
400 | - { |
|
401 | - $results = $this->get_datetimes_for_event_ordered_by_importance($EVT_ID, 1); |
|
402 | - if ($results) { |
|
403 | - return array_shift($results); |
|
404 | - } else { |
|
405 | - return null; |
|
406 | - } |
|
407 | - } |
|
408 | - |
|
409 | - |
|
410 | - |
|
411 | - /** |
|
412 | - * This returns a wpdb->results Array of all DTT month and years matching the incoming query params and |
|
413 | - * grouped by month and year. |
|
414 | - * |
|
415 | - * @param array $where_params Array of query_params as described in the comments for EEM_Base::get_all() |
|
416 | - * @param string $evt_active_status A string representing the evt active status to filter the months by. |
|
417 | - * Can be: |
|
418 | - * - '' = no filter |
|
419 | - * - upcoming = Published events with at least one upcoming datetime. |
|
420 | - * - expired = Events with all datetimes expired. |
|
421 | - * - active = Events that are published and have at least one datetime that |
|
422 | - * starts before now and ends after now. |
|
423 | - * - inactive = Events that are either not published. |
|
424 | - * @return EE_Base_Class[] |
|
425 | - * @throws \EE_Error |
|
426 | - */ |
|
427 | - public function get_dtt_months_and_years($where_params, $evt_active_status = '') |
|
428 | - { |
|
429 | - $current_time_for_DTT_EVT_start = $this->current_time_for_query('DTT_EVT_start'); |
|
430 | - $current_time_for_DTT_EVT_end = $this->current_time_for_query('DTT_EVT_end'); |
|
431 | - switch ($evt_active_status) { |
|
432 | - case 'upcoming' : |
|
433 | - $where_params['Event.status'] = 'publish'; |
|
434 | - //if there are already query_params matching DTT_EVT_start then we need to modify that to add them. |
|
435 | - if (isset($where_params['DTT_EVT_start'])) { |
|
436 | - $where_params['DTT_EVT_start*****'] = $where_params['DTT_EVT_start']; |
|
437 | - } |
|
438 | - $where_params['DTT_EVT_start'] = array('>', $current_time_for_DTT_EVT_start); |
|
439 | - break; |
|
440 | - case 'expired' : |
|
441 | - if (isset($where_params['Event.status'])) { |
|
442 | - unset($where_params['Event.status']); |
|
443 | - } |
|
444 | - //get events to exclude |
|
445 | - $exclude_query[0] = array_merge($where_params, |
|
446 | - array('DTT_EVT_end' => array('>', $current_time_for_DTT_EVT_end))); |
|
447 | - //first get all events that have datetimes where its not expired. |
|
448 | - $event_ids = $this->_get_all_wpdb_results($exclude_query, OBJECT_K, 'Datetime.EVT_ID'); |
|
449 | - $event_ids = array_keys($event_ids); |
|
450 | - if (isset($where_params['DTT_EVT_end'])) { |
|
451 | - $where_params['DTT_EVT_end****'] = $where_params['DTT_EVT_end']; |
|
452 | - } |
|
453 | - $where_params['DTT_EVT_end'] = array('<', $current_time_for_DTT_EVT_end); |
|
454 | - $where_params['Event.EVT_ID'] = array('NOT IN', $event_ids); |
|
455 | - break; |
|
456 | - case 'active' : |
|
457 | - $where_params['Event.status'] = 'publish'; |
|
458 | - if (isset($where_params['DTT_EVT_start'])) { |
|
459 | - $where_params['Datetime.DTT_EVT_start******'] = $where_params['DTT_EVT_start']; |
|
460 | - } |
|
461 | - if (isset($where_params['Datetime.DTT_EVT_end'])) { |
|
462 | - $where_params['Datetime.DTT_EVT_end*****'] = $where_params['DTT_EVT_end']; |
|
463 | - } |
|
464 | - $where_params['DTT_EVT_start'] = array('<', $current_time_for_DTT_EVT_start); |
|
465 | - $where_params['DTT_EVT_end'] = array('>', $current_time_for_DTT_EVT_end); |
|
466 | - break; |
|
467 | - case 'inactive' : |
|
468 | - if (isset($where_params['Event.status'])) { |
|
469 | - unset($where_params['Event.status']); |
|
470 | - } |
|
471 | - if (isset($where_params['OR'])) { |
|
472 | - $where_params['AND']['OR'] = $where_params['OR']; |
|
473 | - } |
|
474 | - if (isset($where_params['DTT_EVT_end'])) { |
|
475 | - $where_params['AND']['DTT_EVT_end****'] = $where_params['DTT_EVT_end']; |
|
476 | - unset($where_params['DTT_EVT_end']); |
|
477 | - } |
|
478 | - if (isset($where_params['DTT_EVT_start'])) { |
|
479 | - $where_params['AND']['DTT_EVT_start'] = $where_params['DTT_EVT_start']; |
|
480 | - unset($where_params['DTT_EVT_start']); |
|
481 | - } |
|
482 | - $where_params['AND']['Event.status'] = array('!=', 'publish'); |
|
483 | - break; |
|
484 | - } |
|
485 | - $query_params[0] = $where_params; |
|
486 | - $query_params['group_by'] = array('dtt_year', 'dtt_month'); |
|
487 | - $query_params['order_by'] = array('DTT_EVT_start' => 'DESC'); |
|
488 | - $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'DTT_EVT_start'); |
|
489 | - $columns_to_select = array( |
|
490 | - 'dtt_year' => array('YEAR(' . $query_interval . ')', '%s'), |
|
491 | - 'dtt_month' => array('MONTHNAME(' . $query_interval . ')', '%s'), |
|
492 | - 'dtt_month_num' => array('MONTH(' . $query_interval . ')', '%s'), |
|
493 | - ); |
|
494 | - return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select); |
|
495 | - } |
|
496 | - |
|
497 | - |
|
498 | - |
|
499 | - /** |
|
500 | - * Updates the DTT_sold attribute on each datetime (based on the registrations |
|
501 | - * for the tickets for each datetime) |
|
502 | - * |
|
503 | - * @param EE_Base_Class[]|EE_Datetime[] $datetimes |
|
504 | - * @throws \EE_Error |
|
505 | - */ |
|
506 | - public function update_sold($datetimes) |
|
507 | - { |
|
508 | - EE_Error::doing_it_wrong( |
|
509 | - __FUNCTION__, |
|
510 | - esc_html__( |
|
511 | - 'Please use \EEM_Ticket::update_tickets_sold() instead which will in turn correctly update both the Ticket AND Datetime counts.', |
|
512 | - 'event_espresso' |
|
513 | - ), |
|
514 | - '4.9.32.rc.005' |
|
515 | - ); |
|
516 | - foreach ($datetimes as $datetime) { |
|
517 | - $datetime->update_sold(); |
|
518 | - } |
|
519 | - } |
|
520 | - |
|
521 | - |
|
522 | - |
|
523 | - /** |
|
524 | - * Gets the total number of tickets available at a particular datetime |
|
525 | - * (does NOT take into account the datetime's spaces available) |
|
526 | - * |
|
527 | - * @param int $DTT_ID |
|
528 | - * @param array $query_params |
|
529 | - * @return int of tickets available. If sold out, return less than 1. If infinite, returns EE_INF, IF there are NO |
|
530 | - * tickets attached to datetime then FALSE is returned. |
|
531 | - */ |
|
532 | - public function sum_tickets_currently_available_at_datetime($DTT_ID, array $query_params = array()) |
|
533 | - { |
|
534 | - $datetime = $this->get_one_by_ID($DTT_ID); |
|
535 | - if ($datetime instanceof EE_Datetime) { |
|
536 | - return $datetime->tickets_remaining($query_params); |
|
537 | - } |
|
538 | - return 0; |
|
539 | - } |
|
540 | - |
|
541 | - |
|
542 | - |
|
543 | - /** |
|
544 | - * This returns an array of counts of datetimes in the database for each Datetime status that can be queried. |
|
545 | - * |
|
546 | - * @param array $stati_to_include If included you can restrict the statuses we return counts for by including the |
|
547 | - * stati you want counts for as values in the array. An empty array returns counts |
|
548 | - * for all valid stati. |
|
549 | - * @param array $query_params If included can be used to refine the conditions for returning the count (i.e. |
|
550 | - * only for Datetimes connected to a specific event, or specific ticket. |
|
551 | - * @return array The value returned is an array indexed by Datetime Status and the values are the counts. The |
|
552 | - * @throws \EE_Error |
|
553 | - * stati used as index keys are: EE_Datetime::active EE_Datetime::upcoming EE_Datetime::expired |
|
554 | - */ |
|
555 | - public function get_datetime_counts_by_status(array $stati_to_include = array(), array $query_params = array()) |
|
556 | - { |
|
557 | - //only accept where conditions for this query. |
|
558 | - $_where = isset($query_params[0]) ? $query_params[0] : array(); |
|
559 | - $status_query_args = array( |
|
560 | - EE_Datetime::active => array_merge( |
|
561 | - $_where, |
|
562 | - array('DTT_EVT_start' => array('<', time()), 'DTT_EVT_end' => array('>', time())) |
|
563 | - ), |
|
564 | - EE_Datetime::upcoming => array_merge( |
|
565 | - $_where, |
|
566 | - array('DTT_EVT_start' => array('>', time())) |
|
567 | - ), |
|
568 | - EE_Datetime::expired => array_merge( |
|
569 | - $_where, |
|
570 | - array('DTT_EVT_end' => array('<', time())) |
|
571 | - ), |
|
572 | - ); |
|
573 | - if ( ! empty($stati_to_include)) { |
|
574 | - foreach (array_keys($status_query_args) as $status) { |
|
575 | - if ( ! in_array($status, $stati_to_include, true)) { |
|
576 | - unset($status_query_args[$status]); |
|
577 | - } |
|
578 | - } |
|
579 | - } |
|
580 | - //loop through and query counts for each stati. |
|
581 | - $status_query_results = array(); |
|
582 | - foreach ($status_query_args as $status => $status_where_conditions) { |
|
583 | - $status_query_results[$status] = EEM_Datetime::count(array($status_where_conditions), 'DTT_ID', true); |
|
584 | - } |
|
585 | - return $status_query_results; |
|
586 | - } |
|
587 | - |
|
588 | - |
|
589 | - |
|
590 | - /** |
|
591 | - * Returns the specific count for a given Datetime status matching any given query_params. |
|
592 | - * |
|
593 | - * @param string $status Valid string representation for Datetime status requested. (Defaults to Active). |
|
594 | - * @param array $query_params |
|
595 | - * @return int |
|
596 | - * @throws \EE_Error |
|
597 | - */ |
|
598 | - public function get_datetime_count_for_status($status = EE_Datetime::active, array $query_params = array()) |
|
599 | - { |
|
600 | - $count = $this->get_datetime_counts_by_status(array($status), $query_params); |
|
601 | - return ! empty($count[$status]) ? $count[$status] : 0; |
|
602 | - } |
|
14 | + /** |
|
15 | + * @var EEM_Datetime $_instance |
|
16 | + */ |
|
17 | + protected static $_instance; |
|
18 | + |
|
19 | + |
|
20 | + |
|
21 | + /** |
|
22 | + * private constructor to prevent direct creation |
|
23 | + * |
|
24 | + * @Constructor |
|
25 | + * @access private |
|
26 | + * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any |
|
27 | + * incoming timezone data that gets saved). Note this just sends the timezone info to the |
|
28 | + * date time model field objects. Default is NULL (and will be assumed using the set |
|
29 | + * timezone in the 'timezone_string' wp option) |
|
30 | + * @throws \EE_Error |
|
31 | + */ |
|
32 | + protected function __construct($timezone) |
|
33 | + { |
|
34 | + $this->singular_item = __('Datetime', 'event_espresso'); |
|
35 | + $this->plural_item = __('Datetimes', 'event_espresso'); |
|
36 | + $this->_tables = array( |
|
37 | + 'Datetime' => new EE_Primary_Table('esp_datetime', 'DTT_ID'), |
|
38 | + ); |
|
39 | + $this->_fields = array( |
|
40 | + 'Datetime' => array( |
|
41 | + 'DTT_ID' => new EE_Primary_Key_Int_Field('DTT_ID', __('Datetime ID', 'event_espresso')), |
|
42 | + 'EVT_ID' => new EE_Foreign_Key_Int_Field( |
|
43 | + 'EVT_ID', __('Event ID', 'event_espresso'), false, 0, 'Event' |
|
44 | + ), |
|
45 | + 'DTT_name' => new EE_Plain_Text_Field( |
|
46 | + 'DTT_name', __('Datetime Name', 'event_espresso'), false, '' |
|
47 | + ), |
|
48 | + 'DTT_description' => new EE_Post_Content_Field( |
|
49 | + 'DTT_description', __('Description for Datetime', 'event_espresso'), false, '' |
|
50 | + ), |
|
51 | + 'DTT_EVT_start' => new EE_Datetime_Field( |
|
52 | + 'DTT_EVT_start', __('Start time/date of Event', 'event_espresso'), false, EE_Datetime_Field::now, |
|
53 | + $timezone |
|
54 | + ), |
|
55 | + 'DTT_EVT_end' => new EE_Datetime_Field( |
|
56 | + 'DTT_EVT_end', __('End time/date of Event', 'event_espresso'), false, EE_Datetime_Field::now, |
|
57 | + $timezone |
|
58 | + ), |
|
59 | + 'DTT_reg_limit' => new EE_Infinite_Integer_Field( |
|
60 | + 'DTT_reg_limit', __('Registration Limit for this time', 'event_espresso'), true, EE_INF), |
|
61 | + 'DTT_sold' => new EE_Integer_Field( |
|
62 | + 'DTT_sold', __('How many sales for this Datetime that have occurred', 'event_espresso'), true, 0 |
|
63 | + ), |
|
64 | + 'DTT_reserved' => new EE_Integer_Field('DTT_reserved', |
|
65 | + __('Quantity of tickets reserved, but not yet fully purchased', 'event_espresso'), false, 0 |
|
66 | + ), |
|
67 | + 'DTT_is_primary' => new EE_Boolean_Field( |
|
68 | + 'DTT_is_primary', __('Flag indicating datetime is primary one for event', 'event_espresso'), |
|
69 | + false, false |
|
70 | + ), |
|
71 | + 'DTT_order' => new EE_Integer_Field( |
|
72 | + 'DTT_order', __('The order in which the Datetime is displayed', 'event_espresso'), false, 0 |
|
73 | + ), |
|
74 | + 'DTT_parent' => new EE_Integer_Field( |
|
75 | + 'DTT_parent', __('Indicates what DTT_ID is the parent of this DTT_ID'), true, 0 |
|
76 | + ), |
|
77 | + 'DTT_deleted' => new EE_Trashed_Flag_Field( |
|
78 | + 'DTT_deleted', __('Flag indicating datetime is archived', 'event_espresso'), false, false |
|
79 | + ), |
|
80 | + ), |
|
81 | + ); |
|
82 | + $this->_model_relations = array( |
|
83 | + 'Ticket' => new EE_HABTM_Relation('Datetime_Ticket'), |
|
84 | + 'Event' => new EE_Belongs_To_Relation(), |
|
85 | + 'Checkin' => new EE_Has_Many_Relation(), |
|
86 | + ); |
|
87 | + $this->_model_chain_to_wp_user = 'Event'; |
|
88 | + //this model is generally available for reading |
|
89 | + $this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Event_Related_Public('Event'); |
|
90 | + $this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Event_Related_Protected('Event'); |
|
91 | + $this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Event_Related_Protected('Event'); |
|
92 | + $this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Event_Related_Protected('Event', |
|
93 | + EEM_Base::caps_edit); |
|
94 | + parent::__construct($timezone); |
|
95 | + } |
|
96 | + |
|
97 | + |
|
98 | + |
|
99 | + /** |
|
100 | + * create new blank datetime |
|
101 | + * |
|
102 | + * @access public |
|
103 | + * @return EE_Datetime[] array on success, FALSE on fail |
|
104 | + * @throws \EE_Error |
|
105 | + */ |
|
106 | + public function create_new_blank_datetime() |
|
107 | + { |
|
108 | + //makes sure timezone is always set. |
|
109 | + $timezone_string = $this->get_timezone(); |
|
110 | + $blank_datetime = EE_Datetime::new_instance( |
|
111 | + array( |
|
112 | + 'DTT_EVT_start' => $this->current_time_for_query('DTT_EVT_start', true) + MONTH_IN_SECONDS, |
|
113 | + 'DTT_EVT_end' => $this->current_time_for_query('DTT_EVT_end', true) + MONTH_IN_SECONDS, |
|
114 | + 'DTT_order' => 1, |
|
115 | + 'DTT_reg_limit' => EE_INF, |
|
116 | + ), |
|
117 | + $timezone_string |
|
118 | + ); |
|
119 | + $blank_datetime->set_start_time($this->convert_datetime_for_query('DTT_EVT_start', '8am', 'ga', |
|
120 | + $timezone_string)); |
|
121 | + $blank_datetime->set_end_time($this->convert_datetime_for_query('DTT_EVT_end', '5pm', 'ga', $timezone_string)); |
|
122 | + return array($blank_datetime); |
|
123 | + } |
|
124 | + |
|
125 | + |
|
126 | + |
|
127 | + /** |
|
128 | + * get event start date from db |
|
129 | + * |
|
130 | + * @access public |
|
131 | + * @param int $EVT_ID |
|
132 | + * @return EE_Datetime[] array on success, FALSE on fail |
|
133 | + * @throws \EE_Error |
|
134 | + */ |
|
135 | + public function get_all_event_dates($EVT_ID = 0) |
|
136 | + { |
|
137 | + if ( ! $EVT_ID) { // on add_new_event event_id gets set to 0 |
|
138 | + return $this->create_new_blank_datetime(); |
|
139 | + } |
|
140 | + $results = $this->get_datetimes_for_event_ordered_by_DTT_order($EVT_ID); |
|
141 | + if (empty($results)) { |
|
142 | + return $this->create_new_blank_datetime(); |
|
143 | + } |
|
144 | + return $results; |
|
145 | + } |
|
146 | + |
|
147 | + |
|
148 | + |
|
149 | + /** |
|
150 | + * get all datetimes attached to an event ordered by the DTT_order field |
|
151 | + * |
|
152 | + * @public |
|
153 | + * @param int $EVT_ID event id |
|
154 | + * @param boolean $include_expired |
|
155 | + * @param boolean $include_deleted |
|
156 | + * @param int $limit If included then limit the count of results by |
|
157 | + * the given number |
|
158 | + * @return EE_Datetime[] |
|
159 | + * @throws \EE_Error |
|
160 | + */ |
|
161 | + public function get_datetimes_for_event_ordered_by_DTT_order( |
|
162 | + $EVT_ID, |
|
163 | + $include_expired = true, |
|
164 | + $include_deleted = true, |
|
165 | + $limit = null |
|
166 | + ) { |
|
167 | + //sanitize EVT_ID |
|
168 | + $EVT_ID = absint($EVT_ID); |
|
169 | + $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
170 | + $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
171 | + $where_params = array('Event.EVT_ID' => $EVT_ID); |
|
172 | + $query_params = ! empty($limit) |
|
173 | + ? array( |
|
174 | + $where_params, |
|
175 | + 'limit' => $limit, |
|
176 | + 'order_by' => array('DTT_order' => 'ASC'), |
|
177 | + 'default_where_conditions' => 'none', |
|
178 | + ) |
|
179 | + : array( |
|
180 | + $where_params, |
|
181 | + 'order_by' => array('DTT_order' => 'ASC'), |
|
182 | + 'default_where_conditions' => 'none', |
|
183 | + ); |
|
184 | + if ( ! $include_expired) { |
|
185 | + $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
186 | + } |
|
187 | + if ($include_deleted) { |
|
188 | + $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
189 | + } |
|
190 | + /** @var EE_Datetime[] $result */ |
|
191 | + $result = $this->get_all($query_params); |
|
192 | + $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
193 | + return $result; |
|
194 | + } |
|
195 | + |
|
196 | + |
|
197 | + |
|
198 | + /** |
|
199 | + * Gets the datetimes for the event (with the given limit), and orders them by "importance". By importance, we mean |
|
200 | + * that the primary datetimes are most important (DEPRECATED FOR NOW), and then the earlier datetimes are the most |
|
201 | + * important. Maybe we'll want this to take into account datetimes that haven't already passed, but we don't yet. |
|
202 | + * |
|
203 | + * @param int $EVT_ID |
|
204 | + * @param int $limit |
|
205 | + * @return EE_Datetime[]|EE_Base_Class[] |
|
206 | + * @throws \EE_Error |
|
207 | + */ |
|
208 | + public function get_datetimes_for_event_ordered_by_importance($EVT_ID = 0, $limit = null) |
|
209 | + { |
|
210 | + return $this->get_all( |
|
211 | + array( |
|
212 | + array('Event.EVT_ID' => $EVT_ID), |
|
213 | + 'limit' => $limit, |
|
214 | + 'order_by' => array('DTT_EVT_start' => 'ASC'), |
|
215 | + 'default_where_conditions' => 'none', |
|
216 | + ) |
|
217 | + ); |
|
218 | + } |
|
219 | + |
|
220 | + |
|
221 | + |
|
222 | + /** |
|
223 | + * @param int $EVT_ID |
|
224 | + * @param boolean $include_expired |
|
225 | + * @param boolean $include_deleted |
|
226 | + * @return EE_Datetime |
|
227 | + * @throws \EE_Error |
|
228 | + */ |
|
229 | + public function get_oldest_datetime_for_event($EVT_ID, $include_expired = false, $include_deleted = false) |
|
230 | + { |
|
231 | + $results = $this->get_datetimes_for_event_ordered_by_start_time($EVT_ID, $include_expired, $include_deleted, 1); |
|
232 | + if ($results) { |
|
233 | + return array_shift($results); |
|
234 | + } else { |
|
235 | + return null; |
|
236 | + } |
|
237 | + } |
|
238 | + |
|
239 | + |
|
240 | + |
|
241 | + /** |
|
242 | + * Gets the 'primary' datetime for an event. |
|
243 | + * |
|
244 | + * @param int $EVT_ID |
|
245 | + * @param bool $try_to_exclude_expired |
|
246 | + * @param bool $try_to_exclude_deleted |
|
247 | + * @return \EE_Datetime |
|
248 | + * @throws \EE_Error |
|
249 | + */ |
|
250 | + public function get_primary_datetime_for_event( |
|
251 | + $EVT_ID, |
|
252 | + $try_to_exclude_expired = true, |
|
253 | + $try_to_exclude_deleted = true |
|
254 | + ) { |
|
255 | + if ($try_to_exclude_expired) { |
|
256 | + $non_expired = $this->get_oldest_datetime_for_event($EVT_ID, false, false); |
|
257 | + if ($non_expired) { |
|
258 | + return $non_expired; |
|
259 | + } |
|
260 | + } |
|
261 | + if ($try_to_exclude_deleted) { |
|
262 | + $expired_even = $this->get_oldest_datetime_for_event($EVT_ID, true); |
|
263 | + if ($expired_even) { |
|
264 | + return $expired_even; |
|
265 | + } |
|
266 | + } |
|
267 | + return $this->get_oldest_datetime_for_event($EVT_ID, true, true); |
|
268 | + } |
|
269 | + |
|
270 | + |
|
271 | + |
|
272 | + /** |
|
273 | + * Gets ALL the datetimes for an event (including trashed ones, for now), ordered |
|
274 | + * only by start date |
|
275 | + * |
|
276 | + * @param int $EVT_ID |
|
277 | + * @param boolean $include_expired |
|
278 | + * @param boolean $include_deleted |
|
279 | + * @param int $limit |
|
280 | + * @return EE_Datetime[] |
|
281 | + * @throws \EE_Error |
|
282 | + */ |
|
283 | + public function get_datetimes_for_event_ordered_by_start_time( |
|
284 | + $EVT_ID, |
|
285 | + $include_expired = true, |
|
286 | + $include_deleted = true, |
|
287 | + $limit = null |
|
288 | + ) { |
|
289 | + //sanitize EVT_ID |
|
290 | + $EVT_ID = absint($EVT_ID); |
|
291 | + $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
292 | + $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
293 | + $query_params = array(array('Event.EVT_ID' => $EVT_ID), 'order_by' => array('DTT_EVT_start' => 'asc')); |
|
294 | + if ( ! $include_expired) { |
|
295 | + $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
296 | + } |
|
297 | + if ($include_deleted) { |
|
298 | + $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
299 | + } |
|
300 | + if ($limit) { |
|
301 | + $query_params['limit'] = $limit; |
|
302 | + } |
|
303 | + /** @var EE_Datetime[] $result */ |
|
304 | + $result = $this->get_all($query_params); |
|
305 | + $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
306 | + return $result; |
|
307 | + } |
|
308 | + |
|
309 | + |
|
310 | + |
|
311 | + /** |
|
312 | + * Gets ALL the datetimes for an ticket (including trashed ones, for now), ordered |
|
313 | + * only by start date |
|
314 | + * |
|
315 | + * @param int $TKT_ID |
|
316 | + * @param boolean $include_expired |
|
317 | + * @param boolean $include_deleted |
|
318 | + * @param int $limit |
|
319 | + * @return EE_Datetime[] |
|
320 | + * @throws \EE_Error |
|
321 | + */ |
|
322 | + public function get_datetimes_for_ticket_ordered_by_start_time( |
|
323 | + $TKT_ID, |
|
324 | + $include_expired = true, |
|
325 | + $include_deleted = true, |
|
326 | + $limit = null |
|
327 | + ) { |
|
328 | + //sanitize TKT_ID |
|
329 | + $TKT_ID = absint($TKT_ID); |
|
330 | + $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
331 | + $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
332 | + $query_params = array(array('Ticket.TKT_ID' => $TKT_ID), 'order_by' => array('DTT_EVT_start' => 'asc')); |
|
333 | + if ( ! $include_expired) { |
|
334 | + $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
335 | + } |
|
336 | + if ($include_deleted) { |
|
337 | + $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
338 | + } |
|
339 | + if ($limit) { |
|
340 | + $query_params['limit'] = $limit; |
|
341 | + } |
|
342 | + /** @var EE_Datetime[] $result */ |
|
343 | + $result = $this->get_all($query_params); |
|
344 | + $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
345 | + return $result; |
|
346 | + } |
|
347 | + |
|
348 | + |
|
349 | + |
|
350 | + /** |
|
351 | + * Gets all the datetimes for a ticket (including trashed ones, for now), ordered by the DTT_order for the |
|
352 | + * datetimes. |
|
353 | + * |
|
354 | + * @param int $TKT_ID ID of ticket to retrieve the datetimes for |
|
355 | + * @param boolean $include_expired whether to include expired datetimes or not |
|
356 | + * @param boolean $include_deleted whether to include trashed datetimes or not. |
|
357 | + * @param int|null $limit if null, no limit, if int then limit results by |
|
358 | + * that number |
|
359 | + * @return EE_Datetime[] |
|
360 | + * @throws \EE_Error |
|
361 | + */ |
|
362 | + public function get_datetimes_for_ticket_ordered_by_DTT_order( |
|
363 | + $TKT_ID, |
|
364 | + $include_expired = true, |
|
365 | + $include_deleted = true, |
|
366 | + $limit = null |
|
367 | + ) { |
|
368 | + //sanitize id. |
|
369 | + $TKT_ID = absint($TKT_ID); |
|
370 | + $old_assumption = $this->get_assumption_concerning_values_already_prepared_by_model_object(); |
|
371 | + $this->assume_values_already_prepared_by_model_object(EEM_Base::prepared_for_use_in_db); |
|
372 | + $where_params = array('Ticket.TKT_ID' => $TKT_ID); |
|
373 | + $query_params = array($where_params, 'order_by' => array('DTT_order' => 'ASC')); |
|
374 | + if ( ! $include_expired) { |
|
375 | + $query_params[0]['DTT_EVT_end'] = array('>=', current_time('mysql', true)); |
|
376 | + } |
|
377 | + if ($include_deleted) { |
|
378 | + $query_params[0]['DTT_deleted'] = array('IN', array(true, false)); |
|
379 | + } |
|
380 | + if ($limit) { |
|
381 | + $query_params['limit'] = $limit; |
|
382 | + } |
|
383 | + /** @var EE_Datetime[] $result */ |
|
384 | + $result = $this->get_all($query_params); |
|
385 | + $this->assume_values_already_prepared_by_model_object($old_assumption); |
|
386 | + return $result; |
|
387 | + } |
|
388 | + |
|
389 | + |
|
390 | + |
|
391 | + /** |
|
392 | + * Gets the most important datetime for a particular event (ie, the primary event usually. But if for some WACK |
|
393 | + * reason it doesn't exist, we consider the earliest event the most important) |
|
394 | + * |
|
395 | + * @param int $EVT_ID |
|
396 | + * @return EE_Datetime |
|
397 | + * @throws \EE_Error |
|
398 | + */ |
|
399 | + public function get_most_important_datetime_for_event($EVT_ID) |
|
400 | + { |
|
401 | + $results = $this->get_datetimes_for_event_ordered_by_importance($EVT_ID, 1); |
|
402 | + if ($results) { |
|
403 | + return array_shift($results); |
|
404 | + } else { |
|
405 | + return null; |
|
406 | + } |
|
407 | + } |
|
408 | + |
|
409 | + |
|
410 | + |
|
411 | + /** |
|
412 | + * This returns a wpdb->results Array of all DTT month and years matching the incoming query params and |
|
413 | + * grouped by month and year. |
|
414 | + * |
|
415 | + * @param array $where_params Array of query_params as described in the comments for EEM_Base::get_all() |
|
416 | + * @param string $evt_active_status A string representing the evt active status to filter the months by. |
|
417 | + * Can be: |
|
418 | + * - '' = no filter |
|
419 | + * - upcoming = Published events with at least one upcoming datetime. |
|
420 | + * - expired = Events with all datetimes expired. |
|
421 | + * - active = Events that are published and have at least one datetime that |
|
422 | + * starts before now and ends after now. |
|
423 | + * - inactive = Events that are either not published. |
|
424 | + * @return EE_Base_Class[] |
|
425 | + * @throws \EE_Error |
|
426 | + */ |
|
427 | + public function get_dtt_months_and_years($where_params, $evt_active_status = '') |
|
428 | + { |
|
429 | + $current_time_for_DTT_EVT_start = $this->current_time_for_query('DTT_EVT_start'); |
|
430 | + $current_time_for_DTT_EVT_end = $this->current_time_for_query('DTT_EVT_end'); |
|
431 | + switch ($evt_active_status) { |
|
432 | + case 'upcoming' : |
|
433 | + $where_params['Event.status'] = 'publish'; |
|
434 | + //if there are already query_params matching DTT_EVT_start then we need to modify that to add them. |
|
435 | + if (isset($where_params['DTT_EVT_start'])) { |
|
436 | + $where_params['DTT_EVT_start*****'] = $where_params['DTT_EVT_start']; |
|
437 | + } |
|
438 | + $where_params['DTT_EVT_start'] = array('>', $current_time_for_DTT_EVT_start); |
|
439 | + break; |
|
440 | + case 'expired' : |
|
441 | + if (isset($where_params['Event.status'])) { |
|
442 | + unset($where_params['Event.status']); |
|
443 | + } |
|
444 | + //get events to exclude |
|
445 | + $exclude_query[0] = array_merge($where_params, |
|
446 | + array('DTT_EVT_end' => array('>', $current_time_for_DTT_EVT_end))); |
|
447 | + //first get all events that have datetimes where its not expired. |
|
448 | + $event_ids = $this->_get_all_wpdb_results($exclude_query, OBJECT_K, 'Datetime.EVT_ID'); |
|
449 | + $event_ids = array_keys($event_ids); |
|
450 | + if (isset($where_params['DTT_EVT_end'])) { |
|
451 | + $where_params['DTT_EVT_end****'] = $where_params['DTT_EVT_end']; |
|
452 | + } |
|
453 | + $where_params['DTT_EVT_end'] = array('<', $current_time_for_DTT_EVT_end); |
|
454 | + $where_params['Event.EVT_ID'] = array('NOT IN', $event_ids); |
|
455 | + break; |
|
456 | + case 'active' : |
|
457 | + $where_params['Event.status'] = 'publish'; |
|
458 | + if (isset($where_params['DTT_EVT_start'])) { |
|
459 | + $where_params['Datetime.DTT_EVT_start******'] = $where_params['DTT_EVT_start']; |
|
460 | + } |
|
461 | + if (isset($where_params['Datetime.DTT_EVT_end'])) { |
|
462 | + $where_params['Datetime.DTT_EVT_end*****'] = $where_params['DTT_EVT_end']; |
|
463 | + } |
|
464 | + $where_params['DTT_EVT_start'] = array('<', $current_time_for_DTT_EVT_start); |
|
465 | + $where_params['DTT_EVT_end'] = array('>', $current_time_for_DTT_EVT_end); |
|
466 | + break; |
|
467 | + case 'inactive' : |
|
468 | + if (isset($where_params['Event.status'])) { |
|
469 | + unset($where_params['Event.status']); |
|
470 | + } |
|
471 | + if (isset($where_params['OR'])) { |
|
472 | + $where_params['AND']['OR'] = $where_params['OR']; |
|
473 | + } |
|
474 | + if (isset($where_params['DTT_EVT_end'])) { |
|
475 | + $where_params['AND']['DTT_EVT_end****'] = $where_params['DTT_EVT_end']; |
|
476 | + unset($where_params['DTT_EVT_end']); |
|
477 | + } |
|
478 | + if (isset($where_params['DTT_EVT_start'])) { |
|
479 | + $where_params['AND']['DTT_EVT_start'] = $where_params['DTT_EVT_start']; |
|
480 | + unset($where_params['DTT_EVT_start']); |
|
481 | + } |
|
482 | + $where_params['AND']['Event.status'] = array('!=', 'publish'); |
|
483 | + break; |
|
484 | + } |
|
485 | + $query_params[0] = $where_params; |
|
486 | + $query_params['group_by'] = array('dtt_year', 'dtt_month'); |
|
487 | + $query_params['order_by'] = array('DTT_EVT_start' => 'DESC'); |
|
488 | + $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'DTT_EVT_start'); |
|
489 | + $columns_to_select = array( |
|
490 | + 'dtt_year' => array('YEAR(' . $query_interval . ')', '%s'), |
|
491 | + 'dtt_month' => array('MONTHNAME(' . $query_interval . ')', '%s'), |
|
492 | + 'dtt_month_num' => array('MONTH(' . $query_interval . ')', '%s'), |
|
493 | + ); |
|
494 | + return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select); |
|
495 | + } |
|
496 | + |
|
497 | + |
|
498 | + |
|
499 | + /** |
|
500 | + * Updates the DTT_sold attribute on each datetime (based on the registrations |
|
501 | + * for the tickets for each datetime) |
|
502 | + * |
|
503 | + * @param EE_Base_Class[]|EE_Datetime[] $datetimes |
|
504 | + * @throws \EE_Error |
|
505 | + */ |
|
506 | + public function update_sold($datetimes) |
|
507 | + { |
|
508 | + EE_Error::doing_it_wrong( |
|
509 | + __FUNCTION__, |
|
510 | + esc_html__( |
|
511 | + 'Please use \EEM_Ticket::update_tickets_sold() instead which will in turn correctly update both the Ticket AND Datetime counts.', |
|
512 | + 'event_espresso' |
|
513 | + ), |
|
514 | + '4.9.32.rc.005' |
|
515 | + ); |
|
516 | + foreach ($datetimes as $datetime) { |
|
517 | + $datetime->update_sold(); |
|
518 | + } |
|
519 | + } |
|
520 | + |
|
521 | + |
|
522 | + |
|
523 | + /** |
|
524 | + * Gets the total number of tickets available at a particular datetime |
|
525 | + * (does NOT take into account the datetime's spaces available) |
|
526 | + * |
|
527 | + * @param int $DTT_ID |
|
528 | + * @param array $query_params |
|
529 | + * @return int of tickets available. If sold out, return less than 1. If infinite, returns EE_INF, IF there are NO |
|
530 | + * tickets attached to datetime then FALSE is returned. |
|
531 | + */ |
|
532 | + public function sum_tickets_currently_available_at_datetime($DTT_ID, array $query_params = array()) |
|
533 | + { |
|
534 | + $datetime = $this->get_one_by_ID($DTT_ID); |
|
535 | + if ($datetime instanceof EE_Datetime) { |
|
536 | + return $datetime->tickets_remaining($query_params); |
|
537 | + } |
|
538 | + return 0; |
|
539 | + } |
|
540 | + |
|
541 | + |
|
542 | + |
|
543 | + /** |
|
544 | + * This returns an array of counts of datetimes in the database for each Datetime status that can be queried. |
|
545 | + * |
|
546 | + * @param array $stati_to_include If included you can restrict the statuses we return counts for by including the |
|
547 | + * stati you want counts for as values in the array. An empty array returns counts |
|
548 | + * for all valid stati. |
|
549 | + * @param array $query_params If included can be used to refine the conditions for returning the count (i.e. |
|
550 | + * only for Datetimes connected to a specific event, or specific ticket. |
|
551 | + * @return array The value returned is an array indexed by Datetime Status and the values are the counts. The |
|
552 | + * @throws \EE_Error |
|
553 | + * stati used as index keys are: EE_Datetime::active EE_Datetime::upcoming EE_Datetime::expired |
|
554 | + */ |
|
555 | + public function get_datetime_counts_by_status(array $stati_to_include = array(), array $query_params = array()) |
|
556 | + { |
|
557 | + //only accept where conditions for this query. |
|
558 | + $_where = isset($query_params[0]) ? $query_params[0] : array(); |
|
559 | + $status_query_args = array( |
|
560 | + EE_Datetime::active => array_merge( |
|
561 | + $_where, |
|
562 | + array('DTT_EVT_start' => array('<', time()), 'DTT_EVT_end' => array('>', time())) |
|
563 | + ), |
|
564 | + EE_Datetime::upcoming => array_merge( |
|
565 | + $_where, |
|
566 | + array('DTT_EVT_start' => array('>', time())) |
|
567 | + ), |
|
568 | + EE_Datetime::expired => array_merge( |
|
569 | + $_where, |
|
570 | + array('DTT_EVT_end' => array('<', time())) |
|
571 | + ), |
|
572 | + ); |
|
573 | + if ( ! empty($stati_to_include)) { |
|
574 | + foreach (array_keys($status_query_args) as $status) { |
|
575 | + if ( ! in_array($status, $stati_to_include, true)) { |
|
576 | + unset($status_query_args[$status]); |
|
577 | + } |
|
578 | + } |
|
579 | + } |
|
580 | + //loop through and query counts for each stati. |
|
581 | + $status_query_results = array(); |
|
582 | + foreach ($status_query_args as $status => $status_where_conditions) { |
|
583 | + $status_query_results[$status] = EEM_Datetime::count(array($status_where_conditions), 'DTT_ID', true); |
|
584 | + } |
|
585 | + return $status_query_results; |
|
586 | + } |
|
587 | + |
|
588 | + |
|
589 | + |
|
590 | + /** |
|
591 | + * Returns the specific count for a given Datetime status matching any given query_params. |
|
592 | + * |
|
593 | + * @param string $status Valid string representation for Datetime status requested. (Defaults to Active). |
|
594 | + * @param array $query_params |
|
595 | + * @return int |
|
596 | + * @throws \EE_Error |
|
597 | + */ |
|
598 | + public function get_datetime_count_for_status($status = EE_Datetime::active, array $query_params = array()) |
|
599 | + { |
|
600 | + $count = $this->get_datetime_counts_by_status(array($status), $query_params); |
|
601 | + return ! empty($count[$status]) ? $count[$status] : 0; |
|
602 | + } |
|
603 | 603 | |
604 | 604 | |
605 | 605 |
@@ -61,15 +61,15 @@ discard block |
||
61 | 61 | |
62 | 62 | |
63 | 63 | |
64 | - /** |
|
65 | - * @param array $props_n_values incoming values |
|
66 | - * @param string $timezone incoming timezone (if not set the timezone set for the website will be |
|
67 | - * used.) |
|
68 | - * @param array $date_formats incoming date_formats in an array where the first value is the |
|
69 | - * date_format and the second value is the time format |
|
70 | - * @return EE_Ticket |
|
71 | - * @throws \EE_Error |
|
72 | - */ |
|
64 | + /** |
|
65 | + * @param array $props_n_values incoming values |
|
66 | + * @param string $timezone incoming timezone (if not set the timezone set for the website will be |
|
67 | + * used.) |
|
68 | + * @param array $date_formats incoming date_formats in an array where the first value is the |
|
69 | + * date_format and the second value is the time format |
|
70 | + * @return EE_Ticket |
|
71 | + * @throws \EE_Error |
|
72 | + */ |
|
73 | 73 | public static function new_instance( $props_n_values = array(), $timezone = null, $date_formats = array() ) { |
74 | 74 | $has_object = parent::_check_for_object( $props_n_values, __CLASS__, $timezone, $date_formats ); |
75 | 75 | return $has_object ? $has_object : new self( $props_n_values, false, $timezone, $date_formats ); |
@@ -77,36 +77,36 @@ discard block |
||
77 | 77 | |
78 | 78 | |
79 | 79 | |
80 | - /** |
|
81 | - * @param array $props_n_values incoming values from the database |
|
82 | - * @param string $timezone incoming timezone as set by the model. If not set the timezone for |
|
83 | - * the website will be used. |
|
84 | - * @return EE_Ticket |
|
85 | - * @throws \EE_Error |
|
86 | - */ |
|
80 | + /** |
|
81 | + * @param array $props_n_values incoming values from the database |
|
82 | + * @param string $timezone incoming timezone as set by the model. If not set the timezone for |
|
83 | + * the website will be used. |
|
84 | + * @return EE_Ticket |
|
85 | + * @throws \EE_Error |
|
86 | + */ |
|
87 | 87 | public static function new_instance_from_db( $props_n_values = array(), $timezone = null ) { |
88 | 88 | return new self( $props_n_values, TRUE, $timezone ); |
89 | 89 | } |
90 | 90 | |
91 | 91 | |
92 | 92 | |
93 | - /** |
|
94 | - * @return bool |
|
95 | - * @throws \EE_Error |
|
96 | - */ |
|
93 | + /** |
|
94 | + * @return bool |
|
95 | + * @throws \EE_Error |
|
96 | + */ |
|
97 | 97 | public function parent() { |
98 | 98 | return $this->get( 'TKT_parent' ); |
99 | 99 | } |
100 | 100 | |
101 | 101 | |
102 | 102 | |
103 | - /** |
|
104 | - * return if a ticket has quantities available for purchase |
|
105 | - * |
|
106 | - * @param int $DTT_ID the primary key for a particular datetime |
|
107 | - * @return boolean |
|
108 | - * @throws \EE_Error |
|
109 | - */ |
|
103 | + /** |
|
104 | + * return if a ticket has quantities available for purchase |
|
105 | + * |
|
106 | + * @param int $DTT_ID the primary key for a particular datetime |
|
107 | + * @return boolean |
|
108 | + * @throws \EE_Error |
|
109 | + */ |
|
110 | 110 | public function available( $DTT_ID = 0 ) { |
111 | 111 | // are we checking availability for a particular datetime ? |
112 | 112 | if ( $DTT_ID ) { |
@@ -123,14 +123,14 @@ discard block |
||
123 | 123 | |
124 | 124 | |
125 | 125 | |
126 | - /** |
|
127 | - * Using the start date and end date this method calculates whether the ticket is On Sale, Pending, or Expired |
|
128 | - * |
|
129 | - * @param bool $display true = we'll return a localized string, otherwise we just return the value of the relevant status const |
|
130 | - * @param bool | null $remaining if it is already known that tickets are available, then simply pass a bool to save further processing |
|
131 | - * @return mixed status int if the display string isn't requested |
|
132 | - * @throws \EE_Error |
|
133 | - */ |
|
126 | + /** |
|
127 | + * Using the start date and end date this method calculates whether the ticket is On Sale, Pending, or Expired |
|
128 | + * |
|
129 | + * @param bool $display true = we'll return a localized string, otherwise we just return the value of the relevant status const |
|
130 | + * @param bool | null $remaining if it is already known that tickets are available, then simply pass a bool to save further processing |
|
131 | + * @return mixed status int if the display string isn't requested |
|
132 | + * @throws \EE_Error |
|
133 | + */ |
|
134 | 134 | public function ticket_status( $display = FALSE, $remaining = null ) { |
135 | 135 | $remaining = is_bool( $remaining ) ? $remaining : $this->is_remaining(); |
136 | 136 | if ( ! $remaining ) { |
@@ -153,14 +153,14 @@ discard block |
||
153 | 153 | |
154 | 154 | |
155 | 155 | |
156 | - /** |
|
157 | - * The purpose of this method is to simply return a boolean for whether there are any tickets remaining for sale considering ALL the factors used for figuring that out. |
|
158 | - * |
|
159 | - * @access public |
|
160 | - * @param int $DTT_ID if an int above 0 is included here then we get a specific dtt. |
|
161 | - * @return boolean true = tickets remaining, false not. |
|
162 | - * @throws \EE_Error |
|
163 | - */ |
|
156 | + /** |
|
157 | + * The purpose of this method is to simply return a boolean for whether there are any tickets remaining for sale considering ALL the factors used for figuring that out. |
|
158 | + * |
|
159 | + * @access public |
|
160 | + * @param int $DTT_ID if an int above 0 is included here then we get a specific dtt. |
|
161 | + * @return boolean true = tickets remaining, false not. |
|
162 | + * @throws \EE_Error |
|
163 | + */ |
|
164 | 164 | public function is_remaining( $DTT_ID = 0 ) { |
165 | 165 | $num_remaining = $this->remaining( $DTT_ID ); |
166 | 166 | if ( $num_remaining === 0 ) { |
@@ -174,76 +174,76 @@ discard block |
||
174 | 174 | |
175 | 175 | |
176 | 176 | |
177 | - /** |
|
178 | - * return the total number of tickets available for purchase |
|
179 | - * |
|
180 | - * @param int $DTT_ID the primary key for a particular datetime. |
|
181 | - * set to 0 for all related datetimes |
|
182 | - * @return int |
|
183 | - * @throws \EE_Error |
|
184 | - */ |
|
177 | + /** |
|
178 | + * return the total number of tickets available for purchase |
|
179 | + * |
|
180 | + * @param int $DTT_ID the primary key for a particular datetime. |
|
181 | + * set to 0 for all related datetimes |
|
182 | + * @return int |
|
183 | + * @throws \EE_Error |
|
184 | + */ |
|
185 | 185 | public function remaining( $DTT_ID = 0 ) { |
186 | 186 | return $this->real_quantity_on_ticket('saleable', $DTT_ID ); |
187 | 187 | } |
188 | 188 | |
189 | 189 | |
190 | 190 | |
191 | - /** |
|
192 | - * Gets min |
|
193 | - * |
|
194 | - * @return int |
|
195 | - * @throws \EE_Error |
|
196 | - */ |
|
191 | + /** |
|
192 | + * Gets min |
|
193 | + * |
|
194 | + * @return int |
|
195 | + * @throws \EE_Error |
|
196 | + */ |
|
197 | 197 | public function min() { |
198 | 198 | return $this->get( 'TKT_min' ); |
199 | 199 | } |
200 | 200 | |
201 | 201 | |
202 | 202 | |
203 | - /** |
|
204 | - * return if a ticket is no longer available cause its available dates have expired. |
|
205 | - * |
|
206 | - * @return boolean |
|
207 | - * @throws \EE_Error |
|
208 | - */ |
|
203 | + /** |
|
204 | + * return if a ticket is no longer available cause its available dates have expired. |
|
205 | + * |
|
206 | + * @return boolean |
|
207 | + * @throws \EE_Error |
|
208 | + */ |
|
209 | 209 | public function is_expired() { |
210 | 210 | return ( $this->get_raw( 'TKT_end_date' ) < time() ); |
211 | 211 | } |
212 | 212 | |
213 | 213 | |
214 | 214 | |
215 | - /** |
|
216 | - * Return if a ticket is yet to go on sale or not |
|
217 | - * |
|
218 | - * @return boolean |
|
219 | - * @throws \EE_Error |
|
220 | - */ |
|
215 | + /** |
|
216 | + * Return if a ticket is yet to go on sale or not |
|
217 | + * |
|
218 | + * @return boolean |
|
219 | + * @throws \EE_Error |
|
220 | + */ |
|
221 | 221 | public function is_pending() { |
222 | 222 | return ( $this->get_raw( 'TKT_start_date' ) > time() ); |
223 | 223 | } |
224 | 224 | |
225 | 225 | |
226 | 226 | |
227 | - /** |
|
228 | - * Return if a ticket is on sale or not |
|
229 | - * |
|
230 | - * @return boolean |
|
231 | - * @throws \EE_Error |
|
232 | - */ |
|
227 | + /** |
|
228 | + * Return if a ticket is on sale or not |
|
229 | + * |
|
230 | + * @return boolean |
|
231 | + * @throws \EE_Error |
|
232 | + */ |
|
233 | 233 | public function is_on_sale() { |
234 | 234 | return ( $this->get_raw( 'TKT_start_date' ) < time() && $this->get_raw( 'TKT_end_date' ) > time() ); |
235 | 235 | } |
236 | 236 | |
237 | 237 | |
238 | 238 | |
239 | - /** |
|
240 | - * This returns the chronologically last datetime that this ticket is associated with |
|
241 | - * |
|
242 | - * @param string $dt_frmt |
|
243 | - * @param string $conjunction - conjunction junction what's your function ? this string joins the start date with the end date ie: Jan 01 "to" Dec 31 |
|
244 | - * @return string |
|
245 | - * @throws \EE_Error |
|
246 | - */ |
|
239 | + /** |
|
240 | + * This returns the chronologically last datetime that this ticket is associated with |
|
241 | + * |
|
242 | + * @param string $dt_frmt |
|
243 | + * @param string $conjunction - conjunction junction what's your function ? this string joins the start date with the end date ie: Jan 01 "to" Dec 31 |
|
244 | + * @return string |
|
245 | + * @throws \EE_Error |
|
246 | + */ |
|
247 | 247 | public function date_range( $dt_frmt = '', $conjunction = ' - ' ) { |
248 | 248 | $first_date = $this->first_datetime() instanceof EE_Datetime ? $this->first_datetime()->start_date( $dt_frmt ) : ''; |
249 | 249 | $last_date = $this->last_datetime() instanceof EE_Datetime ? $this->last_datetime()->end_date( $dt_frmt ) : ''; |
@@ -253,12 +253,12 @@ discard block |
||
253 | 253 | |
254 | 254 | |
255 | 255 | |
256 | - /** |
|
257 | - * This returns the chronologically first datetime that this ticket is associated with |
|
258 | - * |
|
259 | - * @return EE_Datetime |
|
260 | - * @throws \EE_Error |
|
261 | - */ |
|
256 | + /** |
|
257 | + * This returns the chronologically first datetime that this ticket is associated with |
|
258 | + * |
|
259 | + * @return EE_Datetime |
|
260 | + * @throws \EE_Error |
|
261 | + */ |
|
262 | 262 | public function first_datetime() { |
263 | 263 | $datetimes = $this->datetimes( array( 'limit' => 1 ) ); |
264 | 264 | return reset( $datetimes ); |
@@ -266,14 +266,14 @@ discard block |
||
266 | 266 | |
267 | 267 | |
268 | 268 | |
269 | - /** |
|
270 | - * Gets all the datetimes this ticket can be used for attending. |
|
271 | - * Unless otherwise specified, orders datetimes by start date. |
|
272 | - * |
|
273 | - * @param array $query_params see EEM_Base::get_all() |
|
274 | - * @return EE_Datetime[]|EE_Base_Class[] |
|
275 | - * @throws \EE_Error |
|
276 | - */ |
|
269 | + /** |
|
270 | + * Gets all the datetimes this ticket can be used for attending. |
|
271 | + * Unless otherwise specified, orders datetimes by start date. |
|
272 | + * |
|
273 | + * @param array $query_params see EEM_Base::get_all() |
|
274 | + * @return EE_Datetime[]|EE_Base_Class[] |
|
275 | + * @throws \EE_Error |
|
276 | + */ |
|
277 | 277 | public function datetimes( $query_params = array() ) { |
278 | 278 | if ( ! isset( $query_params[ 'order_by' ] ) ) { |
279 | 279 | $query_params[ 'order_by' ][ 'DTT_order' ] = 'ASC'; |
@@ -283,12 +283,12 @@ discard block |
||
283 | 283 | |
284 | 284 | |
285 | 285 | |
286 | - /** |
|
287 | - * This returns the chronologically last datetime that this ticket is associated with |
|
288 | - * |
|
289 | - * @return EE_Datetime |
|
290 | - * @throws \EE_Error |
|
291 | - */ |
|
286 | + /** |
|
287 | + * This returns the chronologically last datetime that this ticket is associated with |
|
288 | + * |
|
289 | + * @return EE_Datetime |
|
290 | + * @throws \EE_Error |
|
291 | + */ |
|
292 | 292 | public function last_datetime() { |
293 | 293 | $datetimes = $this->datetimes( array( 'limit' => 1, 'order_by' => array( 'DTT_EVT_start' => 'DESC' ) ) ); |
294 | 294 | return end( $datetimes ); |
@@ -296,19 +296,19 @@ discard block |
||
296 | 296 | |
297 | 297 | |
298 | 298 | |
299 | - /** |
|
300 | - * This returns the total tickets sold depending on the given parameters. |
|
301 | - * |
|
302 | - * @param string $what Can be one of two options: 'ticket', 'datetime'. |
|
303 | - * 'ticket' = total ticket sales for all datetimes this ticket is related to |
|
304 | - * 'datetime' = total ticket sales for a specified datetime (required $dtt_id) |
|
305 | - * 'datetime' = total ticket sales in the datetime_ticket table. |
|
306 | - * If $dtt_id is not given then we return an array of sales indexed by datetime. |
|
307 | - * If $dtt_id IS given then we return the tickets sold for that given datetime. |
|
308 | - * @param int $dtt_id [optional] include the dtt_id with $what = 'datetime'. |
|
309 | - * @return mixed (array|int) how many tickets have sold |
|
310 | - * @throws \EE_Error |
|
311 | - */ |
|
299 | + /** |
|
300 | + * This returns the total tickets sold depending on the given parameters. |
|
301 | + * |
|
302 | + * @param string $what Can be one of two options: 'ticket', 'datetime'. |
|
303 | + * 'ticket' = total ticket sales for all datetimes this ticket is related to |
|
304 | + * 'datetime' = total ticket sales for a specified datetime (required $dtt_id) |
|
305 | + * 'datetime' = total ticket sales in the datetime_ticket table. |
|
306 | + * If $dtt_id is not given then we return an array of sales indexed by datetime. |
|
307 | + * If $dtt_id IS given then we return the tickets sold for that given datetime. |
|
308 | + * @param int $dtt_id [optional] include the dtt_id with $what = 'datetime'. |
|
309 | + * @return mixed (array|int) how many tickets have sold |
|
310 | + * @throws \EE_Error |
|
311 | + */ |
|
312 | 312 | public function tickets_sold( $what = 'ticket', $dtt_id = NULL ) { |
313 | 313 | $total = 0; |
314 | 314 | $tickets_sold = $this->_all_tickets_sold(); |
@@ -333,12 +333,12 @@ discard block |
||
333 | 333 | |
334 | 334 | |
335 | 335 | |
336 | - /** |
|
337 | - * This returns an array indexed by datetime_id for tickets sold with this ticket. |
|
338 | - * |
|
339 | - * @return EE_Ticket[] |
|
340 | - * @throws \EE_Error |
|
341 | - */ |
|
336 | + /** |
|
337 | + * This returns an array indexed by datetime_id for tickets sold with this ticket. |
|
338 | + * |
|
339 | + * @return EE_Ticket[] |
|
340 | + * @throws \EE_Error |
|
341 | + */ |
|
342 | 342 | protected function _all_tickets_sold() { |
343 | 343 | $datetimes = $this->get_many_related( 'Datetime' ); |
344 | 344 | $tickets_sold = array(); |
@@ -354,29 +354,29 @@ discard block |
||
354 | 354 | |
355 | 355 | |
356 | 356 | |
357 | - /** |
|
358 | - * This returns the base price object for the ticket. |
|
359 | - * |
|
360 | - * @param bool $return_array whether to return as an array indexed by price id or just the object. |
|
361 | - * @return EE_Price|EE_Base_Class|EE_Price[]|EE_Base_Class[] |
|
362 | - * @throws \EE_Error |
|
363 | - */ |
|
357 | + /** |
|
358 | + * This returns the base price object for the ticket. |
|
359 | + * |
|
360 | + * @param bool $return_array whether to return as an array indexed by price id or just the object. |
|
361 | + * @return EE_Price|EE_Base_Class|EE_Price[]|EE_Base_Class[] |
|
362 | + * @throws \EE_Error |
|
363 | + */ |
|
364 | 364 | public function base_price( $return_array = FALSE ) { |
365 | 365 | $_where = array( 'Price_Type.PBT_ID' => EEM_Price_Type::base_type_base_price ); |
366 | 366 | return $return_array |
367 | - ? $this->get_many_related( 'Price', array( $_where ) ) |
|
368 | - : $this->get_first_related( 'Price', array( $_where ) ); |
|
367 | + ? $this->get_many_related( 'Price', array( $_where ) ) |
|
368 | + : $this->get_first_related( 'Price', array( $_where ) ); |
|
369 | 369 | } |
370 | 370 | |
371 | 371 | |
372 | 372 | |
373 | - /** |
|
374 | - * This returns ONLY the price modifiers for the ticket (i.e. no taxes or base price) |
|
375 | - * |
|
376 | - * @access public |
|
377 | - * @return EE_Price[] |
|
378 | - * @throws \EE_Error |
|
379 | - */ |
|
373 | + /** |
|
374 | + * This returns ONLY the price modifiers for the ticket (i.e. no taxes or base price) |
|
375 | + * |
|
376 | + * @access public |
|
377 | + * @return EE_Price[] |
|
378 | + * @throws \EE_Error |
|
379 | + */ |
|
380 | 380 | public function price_modifiers() { |
381 | 381 | $query_params = array( 0 => array( 'Price_Type.PBT_ID' => array( 'NOT IN', array( EEM_Price_Type::base_type_base_price, EEM_Price_Type::base_type_tax ) ) ) ); |
382 | 382 | return $this->prices( $query_params ); |
@@ -384,132 +384,132 @@ discard block |
||
384 | 384 | |
385 | 385 | |
386 | 386 | |
387 | - /** |
|
388 | - * Gets all the prices that combine to form the final price of this ticket |
|
389 | - * |
|
390 | - * @param array $query_params like EEM_Base::get_all |
|
391 | - * @return EE_Price[]|EE_Base_Class[] |
|
392 | - * @throws \EE_Error |
|
393 | - */ |
|
387 | + /** |
|
388 | + * Gets all the prices that combine to form the final price of this ticket |
|
389 | + * |
|
390 | + * @param array $query_params like EEM_Base::get_all |
|
391 | + * @return EE_Price[]|EE_Base_Class[] |
|
392 | + * @throws \EE_Error |
|
393 | + */ |
|
394 | 394 | public function prices( $query_params = array() ) { |
395 | 395 | return $this->get_many_related( 'Price', $query_params ); |
396 | 396 | } |
397 | 397 | |
398 | 398 | |
399 | 399 | |
400 | - /** |
|
401 | - * Gets all the ticket applicabilities (ie, relations between datetimes and tickets) |
|
402 | - * |
|
403 | - * @param array $query_params see EEM_Base::get_all() |
|
404 | - * @return EE_Datetime_Ticket|EE_Base_Class[] |
|
405 | - * @throws \EE_Error |
|
406 | - */ |
|
400 | + /** |
|
401 | + * Gets all the ticket applicabilities (ie, relations between datetimes and tickets) |
|
402 | + * |
|
403 | + * @param array $query_params see EEM_Base::get_all() |
|
404 | + * @return EE_Datetime_Ticket|EE_Base_Class[] |
|
405 | + * @throws \EE_Error |
|
406 | + */ |
|
407 | 407 | public function datetime_tickets( $query_params = array() ) { |
408 | 408 | return $this->get_many_related( 'Datetime_Ticket', $query_params ); |
409 | 409 | } |
410 | 410 | |
411 | 411 | |
412 | 412 | |
413 | - /** |
|
414 | - * Gets all the datetimes from the db ordered by DTT_order |
|
415 | - * |
|
416 | - * @param boolean $show_expired |
|
417 | - * @param boolean $show_deleted |
|
418 | - * @return EE_Datetime[] |
|
419 | - * @throws \EE_Error |
|
420 | - */ |
|
413 | + /** |
|
414 | + * Gets all the datetimes from the db ordered by DTT_order |
|
415 | + * |
|
416 | + * @param boolean $show_expired |
|
417 | + * @param boolean $show_deleted |
|
418 | + * @return EE_Datetime[] |
|
419 | + * @throws \EE_Error |
|
420 | + */ |
|
421 | 421 | public function datetimes_ordered( $show_expired = TRUE, $show_deleted = FALSE ) { |
422 | 422 | return EEM_Datetime::instance( $this->_timezone )->get_datetimes_for_ticket_ordered_by_DTT_order( $this->ID(), $show_expired, $show_deleted ); |
423 | 423 | } |
424 | 424 | |
425 | 425 | |
426 | 426 | |
427 | - /** |
|
428 | - * Gets ID |
|
429 | - * |
|
430 | - * @return string |
|
431 | - * @throws \EE_Error |
|
432 | - */ |
|
427 | + /** |
|
428 | + * Gets ID |
|
429 | + * |
|
430 | + * @return string |
|
431 | + * @throws \EE_Error |
|
432 | + */ |
|
433 | 433 | public function ID() { |
434 | 434 | return $this->get( 'TKT_ID' ); |
435 | 435 | } |
436 | 436 | |
437 | 437 | |
438 | 438 | |
439 | - /** |
|
440 | - * get the author of the ticket. |
|
441 | - * |
|
442 | - * @since 4.5.0 |
|
443 | - * @return int |
|
444 | - * @throws \EE_Error |
|
445 | - */ |
|
439 | + /** |
|
440 | + * get the author of the ticket. |
|
441 | + * |
|
442 | + * @since 4.5.0 |
|
443 | + * @return int |
|
444 | + * @throws \EE_Error |
|
445 | + */ |
|
446 | 446 | public function wp_user() { |
447 | 447 | return $this->get('TKT_wp_user'); |
448 | 448 | } |
449 | 449 | |
450 | 450 | |
451 | 451 | |
452 | - /** |
|
453 | - * Gets the template for the ticket |
|
454 | - * |
|
455 | - * @return EE_Ticket_Template|EE_Base_Class |
|
456 | - * @throws \EE_Error |
|
457 | - */ |
|
452 | + /** |
|
453 | + * Gets the template for the ticket |
|
454 | + * |
|
455 | + * @return EE_Ticket_Template|EE_Base_Class |
|
456 | + * @throws \EE_Error |
|
457 | + */ |
|
458 | 458 | public function template() { |
459 | 459 | return $this->get_first_related( 'Ticket_Template' ); |
460 | 460 | } |
461 | 461 | |
462 | 462 | |
463 | 463 | |
464 | - /** |
|
465 | - * Simply returns an array of EE_Price objects that are taxes. |
|
466 | - * |
|
467 | - * @return EE_Price[] |
|
468 | - * @throws \EE_Error |
|
469 | - */ |
|
464 | + /** |
|
465 | + * Simply returns an array of EE_Price objects that are taxes. |
|
466 | + * |
|
467 | + * @return EE_Price[] |
|
468 | + * @throws \EE_Error |
|
469 | + */ |
|
470 | 470 | public function get_ticket_taxes_for_admin() { |
471 | 471 | return EE_Taxes::get_taxes_for_admin(); |
472 | 472 | } |
473 | 473 | |
474 | 474 | |
475 | 475 | |
476 | - /** |
|
477 | - * @return float |
|
478 | - * @throws \EE_Error |
|
479 | - */ |
|
476 | + /** |
|
477 | + * @return float |
|
478 | + * @throws \EE_Error |
|
479 | + */ |
|
480 | 480 | public function ticket_price() { |
481 | 481 | return $this->get( 'TKT_price' ); |
482 | 482 | } |
483 | 483 | |
484 | 484 | |
485 | 485 | |
486 | - /** |
|
487 | - * @return mixed |
|
488 | - * @throws \EE_Error |
|
489 | - */ |
|
486 | + /** |
|
487 | + * @return mixed |
|
488 | + * @throws \EE_Error |
|
489 | + */ |
|
490 | 490 | public function pretty_price() { |
491 | 491 | return $this->get_pretty( 'TKT_price' ); |
492 | 492 | } |
493 | 493 | |
494 | 494 | |
495 | 495 | |
496 | - /** |
|
497 | - * @return bool |
|
498 | - * @throws \EE_Error |
|
499 | - */ |
|
496 | + /** |
|
497 | + * @return bool |
|
498 | + * @throws \EE_Error |
|
499 | + */ |
|
500 | 500 | public function is_free() { |
501 | 501 | return $this->get_ticket_total_with_taxes() === (float) 0; |
502 | 502 | } |
503 | 503 | |
504 | 504 | |
505 | 505 | |
506 | - /** |
|
507 | - * get_ticket_total_with_taxes |
|
508 | - * |
|
509 | - * @param bool $no_cache |
|
510 | - * @return float |
|
511 | - * @throws \EE_Error |
|
512 | - */ |
|
506 | + /** |
|
507 | + * get_ticket_total_with_taxes |
|
508 | + * |
|
509 | + * @param bool $no_cache |
|
510 | + * @return float |
|
511 | + * @throws \EE_Error |
|
512 | + */ |
|
513 | 513 | public function get_ticket_total_with_taxes( $no_cache = FALSE ) { |
514 | 514 | if ($this->_ticket_total_with_taxes === null || $no_cache ) { |
515 | 515 | $this->_ticket_total_with_taxes = $this->get_ticket_subtotal() + $this->get_ticket_taxes_total_for_admin(); |
@@ -526,201 +526,201 @@ discard block |
||
526 | 526 | |
527 | 527 | |
528 | 528 | |
529 | - /** |
|
530 | - * @return float |
|
531 | - * @throws \EE_Error |
|
532 | - */ |
|
529 | + /** |
|
530 | + * @return float |
|
531 | + * @throws \EE_Error |
|
532 | + */ |
|
533 | 533 | public function get_ticket_subtotal() { |
534 | 534 | return EE_Taxes::get_subtotal_for_admin( $this ); |
535 | 535 | } |
536 | 536 | |
537 | 537 | |
538 | 538 | |
539 | - /** |
|
540 | - * Returns the total taxes applied to this ticket |
|
541 | - * |
|
542 | - * @return float |
|
543 | - * @throws \EE_Error |
|
544 | - */ |
|
539 | + /** |
|
540 | + * Returns the total taxes applied to this ticket |
|
541 | + * |
|
542 | + * @return float |
|
543 | + * @throws \EE_Error |
|
544 | + */ |
|
545 | 545 | public function get_ticket_taxes_total_for_admin() { |
546 | 546 | return EE_Taxes::get_total_taxes_for_admin( $this ); |
547 | 547 | } |
548 | 548 | |
549 | 549 | |
550 | 550 | |
551 | - /** |
|
552 | - * Sets name |
|
553 | - * |
|
554 | - * @param string $name |
|
555 | - * @throws \EE_Error |
|
556 | - */ |
|
551 | + /** |
|
552 | + * Sets name |
|
553 | + * |
|
554 | + * @param string $name |
|
555 | + * @throws \EE_Error |
|
556 | + */ |
|
557 | 557 | public function set_name( $name ) { |
558 | 558 | $this->set( 'TKT_name', $name ); |
559 | 559 | } |
560 | 560 | |
561 | 561 | |
562 | 562 | |
563 | - /** |
|
564 | - * Gets description |
|
565 | - * |
|
566 | - * @return string |
|
567 | - * @throws \EE_Error |
|
568 | - */ |
|
563 | + /** |
|
564 | + * Gets description |
|
565 | + * |
|
566 | + * @return string |
|
567 | + * @throws \EE_Error |
|
568 | + */ |
|
569 | 569 | public function description() { |
570 | 570 | return $this->get( 'TKT_description' ); |
571 | 571 | } |
572 | 572 | |
573 | 573 | |
574 | 574 | |
575 | - /** |
|
576 | - * Sets description |
|
577 | - * |
|
578 | - * @param string $description |
|
579 | - * @throws \EE_Error |
|
580 | - */ |
|
575 | + /** |
|
576 | + * Sets description |
|
577 | + * |
|
578 | + * @param string $description |
|
579 | + * @throws \EE_Error |
|
580 | + */ |
|
581 | 581 | public function set_description( $description ) { |
582 | 582 | $this->set( 'TKT_description', $description ); |
583 | 583 | } |
584 | 584 | |
585 | 585 | |
586 | 586 | |
587 | - /** |
|
588 | - * Gets start_date |
|
589 | - * |
|
590 | - * @param string $dt_frmt |
|
591 | - * @param string $tm_frmt |
|
592 | - * @return string |
|
593 | - * @throws \EE_Error |
|
594 | - */ |
|
587 | + /** |
|
588 | + * Gets start_date |
|
589 | + * |
|
590 | + * @param string $dt_frmt |
|
591 | + * @param string $tm_frmt |
|
592 | + * @return string |
|
593 | + * @throws \EE_Error |
|
594 | + */ |
|
595 | 595 | public function start_date( $dt_frmt = '', $tm_frmt = '' ) { |
596 | 596 | return $this->_get_datetime( 'TKT_start_date', $dt_frmt, $tm_frmt ); |
597 | 597 | } |
598 | 598 | |
599 | 599 | |
600 | 600 | |
601 | - /** |
|
602 | - * Sets start_date |
|
603 | - * |
|
604 | - * @param string $start_date |
|
605 | - * @return void |
|
606 | - * @throws \EE_Error |
|
607 | - */ |
|
601 | + /** |
|
602 | + * Sets start_date |
|
603 | + * |
|
604 | + * @param string $start_date |
|
605 | + * @return void |
|
606 | + * @throws \EE_Error |
|
607 | + */ |
|
608 | 608 | public function set_start_date( $start_date ) { |
609 | 609 | $this->_set_date_time( 'B', $start_date, 'TKT_start_date' ); |
610 | 610 | } |
611 | 611 | |
612 | 612 | |
613 | 613 | |
614 | - /** |
|
615 | - * Gets end_date |
|
616 | - * |
|
617 | - * @param string $dt_frmt |
|
618 | - * @param string $tm_frmt |
|
619 | - * @return string |
|
620 | - * @throws \EE_Error |
|
621 | - */ |
|
614 | + /** |
|
615 | + * Gets end_date |
|
616 | + * |
|
617 | + * @param string $dt_frmt |
|
618 | + * @param string $tm_frmt |
|
619 | + * @return string |
|
620 | + * @throws \EE_Error |
|
621 | + */ |
|
622 | 622 | public function end_date( $dt_frmt = '', $tm_frmt = '' ) { |
623 | 623 | return $this->_get_datetime( 'TKT_end_date', $dt_frmt, $tm_frmt ); |
624 | 624 | } |
625 | 625 | |
626 | 626 | |
627 | 627 | |
628 | - /** |
|
629 | - * Sets end_date |
|
630 | - * |
|
631 | - * @param string $end_date |
|
632 | - * @return void |
|
633 | - * @throws \EE_Error |
|
634 | - */ |
|
628 | + /** |
|
629 | + * Sets end_date |
|
630 | + * |
|
631 | + * @param string $end_date |
|
632 | + * @return void |
|
633 | + * @throws \EE_Error |
|
634 | + */ |
|
635 | 635 | public function set_end_date( $end_date ) { |
636 | 636 | $this->_set_date_time( 'B', $end_date, 'TKT_end_date' ); |
637 | 637 | } |
638 | 638 | |
639 | 639 | |
640 | 640 | |
641 | - /** |
|
642 | - * Sets sell until time |
|
643 | - * |
|
644 | - * @since 4.5.0 |
|
645 | - * @param string $time a string representation of the sell until time (ex 9am or 7:30pm) |
|
646 | - * @throws \EE_Error |
|
647 | - */ |
|
641 | + /** |
|
642 | + * Sets sell until time |
|
643 | + * |
|
644 | + * @since 4.5.0 |
|
645 | + * @param string $time a string representation of the sell until time (ex 9am or 7:30pm) |
|
646 | + * @throws \EE_Error |
|
647 | + */ |
|
648 | 648 | public function set_end_time( $time ) { |
649 | 649 | $this->_set_time_for( $time, 'TKT_end_date' ); |
650 | 650 | } |
651 | 651 | |
652 | 652 | |
653 | 653 | |
654 | - /** |
|
655 | - * Sets min |
|
656 | - * |
|
657 | - * @param int $min |
|
658 | - * @return void |
|
659 | - * @throws \EE_Error |
|
660 | - */ |
|
654 | + /** |
|
655 | + * Sets min |
|
656 | + * |
|
657 | + * @param int $min |
|
658 | + * @return void |
|
659 | + * @throws \EE_Error |
|
660 | + */ |
|
661 | 661 | public function set_min( $min ) { |
662 | 662 | $this->set( 'TKT_min', $min ); |
663 | 663 | } |
664 | 664 | |
665 | 665 | |
666 | 666 | |
667 | - /** |
|
668 | - * Gets max |
|
669 | - * |
|
670 | - * @return int |
|
671 | - * @throws \EE_Error |
|
672 | - */ |
|
667 | + /** |
|
668 | + * Gets max |
|
669 | + * |
|
670 | + * @return int |
|
671 | + * @throws \EE_Error |
|
672 | + */ |
|
673 | 673 | public function max() { |
674 | 674 | return $this->get( 'TKT_max' ); |
675 | 675 | } |
676 | 676 | |
677 | 677 | |
678 | 678 | |
679 | - /** |
|
680 | - * Sets max |
|
681 | - * |
|
682 | - * @param int $max |
|
683 | - * @return void |
|
684 | - * @throws \EE_Error |
|
685 | - */ |
|
679 | + /** |
|
680 | + * Sets max |
|
681 | + * |
|
682 | + * @param int $max |
|
683 | + * @return void |
|
684 | + * @throws \EE_Error |
|
685 | + */ |
|
686 | 686 | public function set_max( $max ) { |
687 | 687 | $this->set( 'TKT_max', $max ); |
688 | 688 | } |
689 | 689 | |
690 | 690 | |
691 | 691 | |
692 | - /** |
|
693 | - * Sets price |
|
694 | - * |
|
695 | - * @param float $price |
|
696 | - * @return void |
|
697 | - * @throws \EE_Error |
|
698 | - */ |
|
692 | + /** |
|
693 | + * Sets price |
|
694 | + * |
|
695 | + * @param float $price |
|
696 | + * @return void |
|
697 | + * @throws \EE_Error |
|
698 | + */ |
|
699 | 699 | public function set_price( $price ) { |
700 | 700 | $this->set( 'TKT_price', $price ); |
701 | 701 | } |
702 | 702 | |
703 | 703 | |
704 | 704 | |
705 | - /** |
|
706 | - * Gets sold |
|
707 | - * |
|
708 | - * @return int |
|
709 | - * @throws \EE_Error |
|
710 | - */ |
|
705 | + /** |
|
706 | + * Gets sold |
|
707 | + * |
|
708 | + * @return int |
|
709 | + * @throws \EE_Error |
|
710 | + */ |
|
711 | 711 | public function sold() { |
712 | 712 | return $this->get_raw( 'TKT_sold' ); |
713 | 713 | } |
714 | 714 | |
715 | 715 | |
716 | 716 | |
717 | - /** |
|
718 | - * Sets sold |
|
719 | - * |
|
720 | - * @param int $sold |
|
721 | - * @return void |
|
722 | - * @throws \EE_Error |
|
723 | - */ |
|
717 | + /** |
|
718 | + * Sets sold |
|
719 | + * |
|
720 | + * @param int $sold |
|
721 | + * @return void |
|
722 | + * @throws \EE_Error |
|
723 | + */ |
|
724 | 724 | public function set_sold( $sold ) { |
725 | 725 | // sold can not go below zero |
726 | 726 | $sold = max( 0, $sold ); |
@@ -729,13 +729,13 @@ discard block |
||
729 | 729 | |
730 | 730 | |
731 | 731 | |
732 | - /** |
|
733 | - * increments sold by amount passed by $qty |
|
734 | - * |
|
735 | - * @param int $qty |
|
736 | - * @return void |
|
737 | - * @throws \EE_Error |
|
738 | - */ |
|
732 | + /** |
|
733 | + * increments sold by amount passed by $qty |
|
734 | + * |
|
735 | + * @param int $qty |
|
736 | + * @return void |
|
737 | + * @throws \EE_Error |
|
738 | + */ |
|
739 | 739 | public function increase_sold( $qty = 1 ) { |
740 | 740 | $sold = $this->sold() + $qty; |
741 | 741 | // remove ticket reservation, but don't adjust datetime reservations, because that will happen |
@@ -747,13 +747,13 @@ discard block |
||
747 | 747 | |
748 | 748 | |
749 | 749 | |
750 | - /** |
|
751 | - * Increases sold on related datetimes |
|
752 | - * |
|
753 | - * @param int $qty |
|
754 | - * @return void |
|
755 | - * @throws \EE_Error |
|
756 | - */ |
|
750 | + /** |
|
751 | + * Increases sold on related datetimes |
|
752 | + * |
|
753 | + * @param int $qty |
|
754 | + * @return void |
|
755 | + * @throws \EE_Error |
|
756 | + */ |
|
757 | 757 | protected function _increase_sold_for_datetimes( $qty = 1 ) { |
758 | 758 | $datetimes = $this->datetimes(); |
759 | 759 | if ( is_array( $datetimes ) ) { |
@@ -768,13 +768,13 @@ discard block |
||
768 | 768 | |
769 | 769 | |
770 | 770 | |
771 | - /** |
|
772 | - * decrements (subtracts) sold by amount passed by $qty |
|
773 | - * |
|
774 | - * @param int $qty |
|
775 | - * @return void |
|
776 | - * @throws \EE_Error |
|
777 | - */ |
|
771 | + /** |
|
772 | + * decrements (subtracts) sold by amount passed by $qty |
|
773 | + * |
|
774 | + * @param int $qty |
|
775 | + * @return void |
|
776 | + * @throws \EE_Error |
|
777 | + */ |
|
778 | 778 | public function decrease_sold( $qty = 1 ) { |
779 | 779 | $sold = $this->sold() - $qty; |
780 | 780 | $this->_decrease_sold_for_datetimes( $qty ); |
@@ -783,13 +783,13 @@ discard block |
||
783 | 783 | |
784 | 784 | |
785 | 785 | |
786 | - /** |
|
787 | - * Decreases sold on related datetimes |
|
788 | - * |
|
789 | - * @param int $qty |
|
790 | - * @return void |
|
791 | - * @throws \EE_Error |
|
792 | - */ |
|
786 | + /** |
|
787 | + * Decreases sold on related datetimes |
|
788 | + * |
|
789 | + * @param int $qty |
|
790 | + * @return void |
|
791 | + * @throws \EE_Error |
|
792 | + */ |
|
793 | 793 | protected function _decrease_sold_for_datetimes( $qty = 1 ) { |
794 | 794 | $datetimes = $this->datetimes(); |
795 | 795 | if ( is_array( $datetimes ) ) { |
@@ -804,25 +804,25 @@ discard block |
||
804 | 804 | |
805 | 805 | |
806 | 806 | |
807 | - /** |
|
808 | - * Gets qty of reserved tickets |
|
809 | - * |
|
810 | - * @return int |
|
811 | - * @throws \EE_Error |
|
812 | - */ |
|
807 | + /** |
|
808 | + * Gets qty of reserved tickets |
|
809 | + * |
|
810 | + * @return int |
|
811 | + * @throws \EE_Error |
|
812 | + */ |
|
813 | 813 | public function reserved() { |
814 | 814 | return $this->get_raw( 'TKT_reserved' ); |
815 | 815 | } |
816 | 816 | |
817 | 817 | |
818 | 818 | |
819 | - /** |
|
820 | - * Sets reserved |
|
821 | - * |
|
822 | - * @param int $reserved |
|
823 | - * @return void |
|
824 | - * @throws \EE_Error |
|
825 | - */ |
|
819 | + /** |
|
820 | + * Sets reserved |
|
821 | + * |
|
822 | + * @param int $reserved |
|
823 | + * @return void |
|
824 | + * @throws \EE_Error |
|
825 | + */ |
|
826 | 826 | public function set_reserved( $reserved ) { |
827 | 827 | // reserved can not go below zero |
828 | 828 | $reserved = max( 0, (int) $reserved ); |
@@ -831,13 +831,13 @@ discard block |
||
831 | 831 | |
832 | 832 | |
833 | 833 | |
834 | - /** |
|
835 | - * increments reserved by amount passed by $qty |
|
836 | - * |
|
837 | - * @param int $qty |
|
838 | - * @return void |
|
839 | - * @throws \EE_Error |
|
840 | - */ |
|
834 | + /** |
|
835 | + * increments reserved by amount passed by $qty |
|
836 | + * |
|
837 | + * @param int $qty |
|
838 | + * @return void |
|
839 | + * @throws \EE_Error |
|
840 | + */ |
|
841 | 841 | public function increase_reserved( $qty = 1 ) { |
842 | 842 | $qty = absint( $qty ); |
843 | 843 | $reserved = $this->reserved() + $qty; |
@@ -847,13 +847,13 @@ discard block |
||
847 | 847 | |
848 | 848 | |
849 | 849 | |
850 | - /** |
|
851 | - * Increases sold on related datetimes |
|
852 | - * |
|
853 | - * @param int $qty |
|
854 | - * @return void |
|
855 | - * @throws \EE_Error |
|
856 | - */ |
|
850 | + /** |
|
851 | + * Increases sold on related datetimes |
|
852 | + * |
|
853 | + * @param int $qty |
|
854 | + * @return void |
|
855 | + * @throws \EE_Error |
|
856 | + */ |
|
857 | 857 | protected function _increase_reserved_for_datetimes( $qty = 1 ) { |
858 | 858 | $datetimes = $this->datetimes(); |
859 | 859 | if ( is_array( $datetimes ) ) { |
@@ -868,14 +868,14 @@ discard block |
||
868 | 868 | |
869 | 869 | |
870 | 870 | |
871 | - /** |
|
872 | - * decrements (subtracts) reserved by amount passed by $qty |
|
873 | - * |
|
874 | - * @param int $qty |
|
875 | - * @param bool $adjust_datetimes |
|
876 | - * @return void |
|
877 | - * @throws \EE_Error |
|
878 | - */ |
|
871 | + /** |
|
872 | + * decrements (subtracts) reserved by amount passed by $qty |
|
873 | + * |
|
874 | + * @param int $qty |
|
875 | + * @param bool $adjust_datetimes |
|
876 | + * @return void |
|
877 | + * @throws \EE_Error |
|
878 | + */ |
|
879 | 879 | public function decrease_reserved( $qty = 1, $adjust_datetimes = true ) { |
880 | 880 | $reserved = $this->reserved() - absint( $qty ); |
881 | 881 | if ( $adjust_datetimes ) { |
@@ -886,13 +886,13 @@ discard block |
||
886 | 886 | |
887 | 887 | |
888 | 888 | |
889 | - /** |
|
890 | - * Increases sold on related datetimes |
|
891 | - * |
|
892 | - * @param int $qty |
|
893 | - * @return void |
|
894 | - * @throws \EE_Error |
|
895 | - */ |
|
889 | + /** |
|
890 | + * Increases sold on related datetimes |
|
891 | + * |
|
892 | + * @param int $qty |
|
893 | + * @return void |
|
894 | + * @throws \EE_Error |
|
895 | + */ |
|
896 | 896 | protected function _decrease_reserved_for_datetimes( $qty = 1 ) { |
897 | 897 | $datetimes = $this->datetimes(); |
898 | 898 | if ( is_array( $datetimes ) ) { |
@@ -907,18 +907,18 @@ discard block |
||
907 | 907 | |
908 | 908 | |
909 | 909 | |
910 | - /** |
|
911 | - * Gets ticket quantity |
|
912 | - * |
|
913 | - * @param string $context ticket quantity is somewhat subjective depending on the exact information sought |
|
914 | - * therefore $context can be one of three values: '', 'reg_limit', or 'saleable' |
|
915 | - * '' (default) quantity is the actual db value for TKT_qty, unaffected by other objects |
|
916 | - * REG LIMIT: caps qty based on DTT_reg_limit for ALL related datetimes |
|
917 | - * SALEABLE: also considers datetime sold and returns zero if ANY DTT is sold out, and |
|
918 | - * is therefore the truest measure of tickets that can be purchased at the moment |
|
919 | - * @return int |
|
920 | - * @throws \EE_Error |
|
921 | - */ |
|
910 | + /** |
|
911 | + * Gets ticket quantity |
|
912 | + * |
|
913 | + * @param string $context ticket quantity is somewhat subjective depending on the exact information sought |
|
914 | + * therefore $context can be one of three values: '', 'reg_limit', or 'saleable' |
|
915 | + * '' (default) quantity is the actual db value for TKT_qty, unaffected by other objects |
|
916 | + * REG LIMIT: caps qty based on DTT_reg_limit for ALL related datetimes |
|
917 | + * SALEABLE: also considers datetime sold and returns zero if ANY DTT is sold out, and |
|
918 | + * is therefore the truest measure of tickets that can be purchased at the moment |
|
919 | + * @return int |
|
920 | + * @throws \EE_Error |
|
921 | + */ |
|
922 | 922 | public function qty( $context = '' ) { |
923 | 923 | switch ( $context ) { |
924 | 924 | case 'reg_limit' : |
@@ -932,19 +932,19 @@ discard block |
||
932 | 932 | |
933 | 933 | |
934 | 934 | |
935 | - /** |
|
936 | - * Gets ticket quantity |
|
937 | - * |
|
938 | - * @param string $context ticket quantity is somewhat subjective depending on the exact information sought |
|
939 | - * therefore $context can be one of two values: 'reg_limit', or 'saleable' |
|
940 | - * REG LIMIT: caps qty based on DTT_reg_limit for ALL related datetimes |
|
941 | - * SALEABLE: also considers datetime sold and returns zero if ANY DTT is sold out, and |
|
942 | - * is therefore the truest measure of tickets that can be purchased at the moment |
|
943 | - * @param int $DTT_ID the primary key for a particular datetime. |
|
944 | - * set to 0 for all related datetimes |
|
945 | - * @return int |
|
946 | - * @throws \EE_Error |
|
947 | - */ |
|
935 | + /** |
|
936 | + * Gets ticket quantity |
|
937 | + * |
|
938 | + * @param string $context ticket quantity is somewhat subjective depending on the exact information sought |
|
939 | + * therefore $context can be one of two values: 'reg_limit', or 'saleable' |
|
940 | + * REG LIMIT: caps qty based on DTT_reg_limit for ALL related datetimes |
|
941 | + * SALEABLE: also considers datetime sold and returns zero if ANY DTT is sold out, and |
|
942 | + * is therefore the truest measure of tickets that can be purchased at the moment |
|
943 | + * @param int $DTT_ID the primary key for a particular datetime. |
|
944 | + * set to 0 for all related datetimes |
|
945 | + * @return int |
|
946 | + * @throws \EE_Error |
|
947 | + */ |
|
948 | 948 | public function real_quantity_on_ticket( $context = 'reg_limit', $DTT_ID = 0 ) { |
949 | 949 | $raw = $this->get_raw( 'TKT_qty' ); |
950 | 950 | // return immediately if it's zero |
@@ -1027,212 +1027,212 @@ discard block |
||
1027 | 1027 | |
1028 | 1028 | |
1029 | 1029 | |
1030 | - /** |
|
1031 | - * Gets uses |
|
1032 | - * |
|
1033 | - * @return int |
|
1034 | - * @throws \EE_Error |
|
1035 | - */ |
|
1030 | + /** |
|
1031 | + * Gets uses |
|
1032 | + * |
|
1033 | + * @return int |
|
1034 | + * @throws \EE_Error |
|
1035 | + */ |
|
1036 | 1036 | public function uses() { |
1037 | 1037 | return $this->get( 'TKT_uses' ); |
1038 | 1038 | } |
1039 | 1039 | |
1040 | 1040 | |
1041 | 1041 | |
1042 | - /** |
|
1043 | - * Sets uses |
|
1044 | - * |
|
1045 | - * @param int $uses |
|
1046 | - * @return void |
|
1047 | - * @throws \EE_Error |
|
1048 | - */ |
|
1042 | + /** |
|
1043 | + * Sets uses |
|
1044 | + * |
|
1045 | + * @param int $uses |
|
1046 | + * @return void |
|
1047 | + * @throws \EE_Error |
|
1048 | + */ |
|
1049 | 1049 | public function set_uses( $uses ) { |
1050 | 1050 | $this->set( 'TKT_uses', $uses ); |
1051 | 1051 | } |
1052 | 1052 | |
1053 | 1053 | |
1054 | 1054 | |
1055 | - /** |
|
1056 | - * returns whether ticket is required or not. |
|
1057 | - * |
|
1058 | - * @return boolean |
|
1059 | - * @throws \EE_Error |
|
1060 | - */ |
|
1055 | + /** |
|
1056 | + * returns whether ticket is required or not. |
|
1057 | + * |
|
1058 | + * @return boolean |
|
1059 | + * @throws \EE_Error |
|
1060 | + */ |
|
1061 | 1061 | public function required() { |
1062 | 1062 | return $this->get( 'TKT_required' ); |
1063 | 1063 | } |
1064 | 1064 | |
1065 | 1065 | |
1066 | 1066 | |
1067 | - /** |
|
1068 | - * sets the TKT_required property |
|
1069 | - * |
|
1070 | - * @param boolean $required |
|
1071 | - * @return void |
|
1072 | - * @throws \EE_Error |
|
1073 | - */ |
|
1067 | + /** |
|
1068 | + * sets the TKT_required property |
|
1069 | + * |
|
1070 | + * @param boolean $required |
|
1071 | + * @return void |
|
1072 | + * @throws \EE_Error |
|
1073 | + */ |
|
1074 | 1074 | public function set_required( $required ) { |
1075 | 1075 | $this->set( 'TKT_required', $required ); |
1076 | 1076 | } |
1077 | 1077 | |
1078 | 1078 | |
1079 | 1079 | |
1080 | - /** |
|
1081 | - * Gets taxable |
|
1082 | - * |
|
1083 | - * @return boolean |
|
1084 | - * @throws \EE_Error |
|
1085 | - */ |
|
1080 | + /** |
|
1081 | + * Gets taxable |
|
1082 | + * |
|
1083 | + * @return boolean |
|
1084 | + * @throws \EE_Error |
|
1085 | + */ |
|
1086 | 1086 | public function taxable() { |
1087 | 1087 | return $this->get( 'TKT_taxable' ); |
1088 | 1088 | } |
1089 | 1089 | |
1090 | 1090 | |
1091 | 1091 | |
1092 | - /** |
|
1093 | - * Sets taxable |
|
1094 | - * |
|
1095 | - * @param boolean $taxable |
|
1096 | - * @return void |
|
1097 | - * @throws \EE_Error |
|
1098 | - */ |
|
1092 | + /** |
|
1093 | + * Sets taxable |
|
1094 | + * |
|
1095 | + * @param boolean $taxable |
|
1096 | + * @return void |
|
1097 | + * @throws \EE_Error |
|
1098 | + */ |
|
1099 | 1099 | public function set_taxable( $taxable ) { |
1100 | 1100 | $this->set( 'TKT_taxable', $taxable ); |
1101 | 1101 | } |
1102 | 1102 | |
1103 | 1103 | |
1104 | 1104 | |
1105 | - /** |
|
1106 | - * Gets is_default |
|
1107 | - * |
|
1108 | - * @return boolean |
|
1109 | - * @throws \EE_Error |
|
1110 | - */ |
|
1105 | + /** |
|
1106 | + * Gets is_default |
|
1107 | + * |
|
1108 | + * @return boolean |
|
1109 | + * @throws \EE_Error |
|
1110 | + */ |
|
1111 | 1111 | public function is_default() { |
1112 | 1112 | return $this->get( 'TKT_is_default' ); |
1113 | 1113 | } |
1114 | 1114 | |
1115 | 1115 | |
1116 | 1116 | |
1117 | - /** |
|
1118 | - * Sets is_default |
|
1119 | - * |
|
1120 | - * @param boolean $is_default |
|
1121 | - * @return void |
|
1122 | - * @throws \EE_Error |
|
1123 | - */ |
|
1117 | + /** |
|
1118 | + * Sets is_default |
|
1119 | + * |
|
1120 | + * @param boolean $is_default |
|
1121 | + * @return void |
|
1122 | + * @throws \EE_Error |
|
1123 | + */ |
|
1124 | 1124 | public function set_is_default( $is_default ) { |
1125 | 1125 | $this->set( 'TKT_is_default', $is_default ); |
1126 | 1126 | } |
1127 | 1127 | |
1128 | 1128 | |
1129 | 1129 | |
1130 | - /** |
|
1131 | - * Gets order |
|
1132 | - * |
|
1133 | - * @return int |
|
1134 | - * @throws \EE_Error |
|
1135 | - */ |
|
1130 | + /** |
|
1131 | + * Gets order |
|
1132 | + * |
|
1133 | + * @return int |
|
1134 | + * @throws \EE_Error |
|
1135 | + */ |
|
1136 | 1136 | public function order() { |
1137 | 1137 | return $this->get( 'TKT_order' ); |
1138 | 1138 | } |
1139 | 1139 | |
1140 | 1140 | |
1141 | 1141 | |
1142 | - /** |
|
1143 | - * Sets order |
|
1144 | - * |
|
1145 | - * @param int $order |
|
1146 | - * @return void |
|
1147 | - * @throws \EE_Error |
|
1148 | - */ |
|
1142 | + /** |
|
1143 | + * Sets order |
|
1144 | + * |
|
1145 | + * @param int $order |
|
1146 | + * @return void |
|
1147 | + * @throws \EE_Error |
|
1148 | + */ |
|
1149 | 1149 | public function set_order( $order ) { |
1150 | 1150 | $this->set( 'TKT_order', $order ); |
1151 | 1151 | } |
1152 | 1152 | |
1153 | 1153 | |
1154 | 1154 | |
1155 | - /** |
|
1156 | - * Gets row |
|
1157 | - * |
|
1158 | - * @return int |
|
1159 | - * @throws \EE_Error |
|
1160 | - */ |
|
1155 | + /** |
|
1156 | + * Gets row |
|
1157 | + * |
|
1158 | + * @return int |
|
1159 | + * @throws \EE_Error |
|
1160 | + */ |
|
1161 | 1161 | public function row() { |
1162 | 1162 | return $this->get( 'TKT_row' ); |
1163 | 1163 | } |
1164 | 1164 | |
1165 | 1165 | |
1166 | 1166 | |
1167 | - /** |
|
1168 | - * Sets row |
|
1169 | - * |
|
1170 | - * @param int $row |
|
1171 | - * @return void |
|
1172 | - * @throws \EE_Error |
|
1173 | - */ |
|
1167 | + /** |
|
1168 | + * Sets row |
|
1169 | + * |
|
1170 | + * @param int $row |
|
1171 | + * @return void |
|
1172 | + * @throws \EE_Error |
|
1173 | + */ |
|
1174 | 1174 | public function set_row( $row ) { |
1175 | 1175 | $this->set( 'TKT_row', $row ); |
1176 | 1176 | } |
1177 | 1177 | |
1178 | 1178 | |
1179 | 1179 | |
1180 | - /** |
|
1181 | - * Gets deleted |
|
1182 | - * |
|
1183 | - * @return boolean |
|
1184 | - * @throws \EE_Error |
|
1185 | - */ |
|
1180 | + /** |
|
1181 | + * Gets deleted |
|
1182 | + * |
|
1183 | + * @return boolean |
|
1184 | + * @throws \EE_Error |
|
1185 | + */ |
|
1186 | 1186 | public function deleted() { |
1187 | 1187 | return $this->get( 'TKT_deleted' ); |
1188 | 1188 | } |
1189 | 1189 | |
1190 | 1190 | |
1191 | 1191 | |
1192 | - /** |
|
1193 | - * Sets deleted |
|
1194 | - * |
|
1195 | - * @param boolean $deleted |
|
1196 | - * @return void |
|
1197 | - * @throws \EE_Error |
|
1198 | - */ |
|
1192 | + /** |
|
1193 | + * Sets deleted |
|
1194 | + * |
|
1195 | + * @param boolean $deleted |
|
1196 | + * @return void |
|
1197 | + * @throws \EE_Error |
|
1198 | + */ |
|
1199 | 1199 | public function set_deleted( $deleted ) { |
1200 | 1200 | $this->set( 'TKT_deleted', $deleted ); |
1201 | 1201 | } |
1202 | 1202 | |
1203 | 1203 | |
1204 | 1204 | |
1205 | - /** |
|
1206 | - * Gets parent |
|
1207 | - * |
|
1208 | - * @return int |
|
1209 | - * @throws \EE_Error |
|
1210 | - */ |
|
1205 | + /** |
|
1206 | + * Gets parent |
|
1207 | + * |
|
1208 | + * @return int |
|
1209 | + * @throws \EE_Error |
|
1210 | + */ |
|
1211 | 1211 | public function parent_ID() { |
1212 | 1212 | return $this->get( 'TKT_parent' ); |
1213 | 1213 | } |
1214 | 1214 | |
1215 | 1215 | |
1216 | 1216 | |
1217 | - /** |
|
1218 | - * Sets parent |
|
1219 | - * |
|
1220 | - * @param int $parent |
|
1221 | - * @return void |
|
1222 | - * @throws \EE_Error |
|
1223 | - */ |
|
1217 | + /** |
|
1218 | + * Sets parent |
|
1219 | + * |
|
1220 | + * @param int $parent |
|
1221 | + * @return void |
|
1222 | + * @throws \EE_Error |
|
1223 | + */ |
|
1224 | 1224 | public function set_parent_ID( $parent ) { |
1225 | 1225 | $this->set( 'TKT_parent', $parent ); |
1226 | 1226 | } |
1227 | 1227 | |
1228 | 1228 | |
1229 | 1229 | |
1230 | - /** |
|
1231 | - * Gets a string which is handy for showing in gateways etc that describes the ticket. |
|
1232 | - * |
|
1233 | - * @return string |
|
1234 | - * @throws \EE_Error |
|
1235 | - */ |
|
1230 | + /** |
|
1231 | + * Gets a string which is handy for showing in gateways etc that describes the ticket. |
|
1232 | + * |
|
1233 | + * @return string |
|
1234 | + * @throws \EE_Error |
|
1235 | + */ |
|
1236 | 1236 | public function name_and_info() { |
1237 | 1237 | $times = array(); |
1238 | 1238 | foreach ( $this->datetimes() as $datetime ) { |
@@ -1243,67 +1243,67 @@ discard block |
||
1243 | 1243 | |
1244 | 1244 | |
1245 | 1245 | |
1246 | - /** |
|
1247 | - * Gets name |
|
1248 | - * |
|
1249 | - * @return string |
|
1250 | - * @throws \EE_Error |
|
1251 | - */ |
|
1246 | + /** |
|
1247 | + * Gets name |
|
1248 | + * |
|
1249 | + * @return string |
|
1250 | + * @throws \EE_Error |
|
1251 | + */ |
|
1252 | 1252 | public function name() { |
1253 | 1253 | return $this->get( 'TKT_name' ); |
1254 | 1254 | } |
1255 | 1255 | |
1256 | 1256 | |
1257 | 1257 | |
1258 | - /** |
|
1259 | - * Gets price |
|
1260 | - * |
|
1261 | - * @return float |
|
1262 | - * @throws \EE_Error |
|
1263 | - */ |
|
1258 | + /** |
|
1259 | + * Gets price |
|
1260 | + * |
|
1261 | + * @return float |
|
1262 | + * @throws \EE_Error |
|
1263 | + */ |
|
1264 | 1264 | public function price() { |
1265 | 1265 | return $this->get( 'TKT_price' ); |
1266 | 1266 | } |
1267 | 1267 | |
1268 | 1268 | |
1269 | 1269 | |
1270 | - /** |
|
1271 | - * Gets all the registrations for this ticket |
|
1272 | - * |
|
1273 | - * @param array $query_params like EEM_Base::get_all's |
|
1274 | - * @return EE_Registration[]|EE_Base_Class[] |
|
1275 | - * @throws \EE_Error |
|
1276 | - */ |
|
1270 | + /** |
|
1271 | + * Gets all the registrations for this ticket |
|
1272 | + * |
|
1273 | + * @param array $query_params like EEM_Base::get_all's |
|
1274 | + * @return EE_Registration[]|EE_Base_Class[] |
|
1275 | + * @throws \EE_Error |
|
1276 | + */ |
|
1277 | 1277 | public function registrations( $query_params = array() ) { |
1278 | 1278 | return $this->get_many_related( 'Registration', $query_params ); |
1279 | 1279 | } |
1280 | 1280 | |
1281 | 1281 | |
1282 | 1282 | |
1283 | - /** |
|
1284 | - * Updates the TKT_sold attribute (and saves) based on the number of APPROVED registrations for this ticket. |
|
1285 | - * into account |
|
1286 | - * |
|
1287 | - * @return int |
|
1288 | - * @throws \EE_Error |
|
1289 | - */ |
|
1283 | + /** |
|
1284 | + * Updates the TKT_sold attribute (and saves) based on the number of APPROVED registrations for this ticket. |
|
1285 | + * into account |
|
1286 | + * |
|
1287 | + * @return int |
|
1288 | + * @throws \EE_Error |
|
1289 | + */ |
|
1290 | 1290 | public function update_tickets_sold() { |
1291 | - $count_regs_for_this_ticket = $this->count_registrations( |
|
1292 | - array( |
|
1293 | - array( |
|
1294 | - 'STS_ID' => EEM_Registration::status_id_approved, |
|
1295 | - 'REG_deleted' => 0, |
|
1296 | - ), |
|
1297 | - ) |
|
1298 | - ); |
|
1299 | - $sold = $this->sold(); |
|
1300 | - if ($count_regs_for_this_ticket > $sold) { |
|
1301 | - $this->increase_sold($count_regs_for_this_ticket - $sold); |
|
1302 | - $this->save(); |
|
1303 | - } else if ($count_regs_for_this_ticket < $sold) { |
|
1304 | - $this->decrease_sold($count_regs_for_this_ticket - $sold); |
|
1305 | - $this->save(); |
|
1306 | - } |
|
1291 | + $count_regs_for_this_ticket = $this->count_registrations( |
|
1292 | + array( |
|
1293 | + array( |
|
1294 | + 'STS_ID' => EEM_Registration::status_id_approved, |
|
1295 | + 'REG_deleted' => 0, |
|
1296 | + ), |
|
1297 | + ) |
|
1298 | + ); |
|
1299 | + $sold = $this->sold(); |
|
1300 | + if ($count_regs_for_this_ticket > $sold) { |
|
1301 | + $this->increase_sold($count_regs_for_this_ticket - $sold); |
|
1302 | + $this->save(); |
|
1303 | + } else if ($count_regs_for_this_ticket < $sold) { |
|
1304 | + $this->decrease_sold($count_regs_for_this_ticket - $sold); |
|
1305 | + $this->save(); |
|
1306 | + } |
|
1307 | 1307 | return $count_regs_for_this_ticket; |
1308 | 1308 | } |
1309 | 1309 | |
@@ -1331,21 +1331,21 @@ discard block |
||
1331 | 1331 | |
1332 | 1332 | |
1333 | 1333 | |
1334 | - /** |
|
1335 | - * Implementation of the EEI_Event_Relation interface method |
|
1336 | - * |
|
1337 | - * @see EEI_Event_Relation for comments |
|
1338 | - * @return EE_Event |
|
1339 | - * @throws \EE_Error |
|
1340 | - * @throws UnexpectedEntityException |
|
1341 | - */ |
|
1334 | + /** |
|
1335 | + * Implementation of the EEI_Event_Relation interface method |
|
1336 | + * |
|
1337 | + * @see EEI_Event_Relation for comments |
|
1338 | + * @return EE_Event |
|
1339 | + * @throws \EE_Error |
|
1340 | + * @throws UnexpectedEntityException |
|
1341 | + */ |
|
1342 | 1342 | public function get_related_event() { |
1343 | 1343 | //get one datetime to use for getting the event |
1344 | 1344 | $datetime = $this->first_datetime(); |
1345 | 1345 | if ( ! $datetime instanceof \EE_Datetime ) { |
1346 | 1346 | throw new UnexpectedEntityException( |
1347 | 1347 | $datetime, |
1348 | - 'EE_Datetime', |
|
1348 | + 'EE_Datetime', |
|
1349 | 1349 | sprintf( |
1350 | 1350 | __( 'The ticket (%s) is not associated with any valid datetimes.', 'event_espresso'), |
1351 | 1351 | $this->name() |
@@ -1356,7 +1356,7 @@ discard block |
||
1356 | 1356 | if ( ! $event instanceof \EE_Event ) { |
1357 | 1357 | throw new UnexpectedEntityException( |
1358 | 1358 | $event, |
1359 | - 'EE_Event', |
|
1359 | + 'EE_Event', |
|
1360 | 1360 | sprintf( |
1361 | 1361 | __( 'The ticket (%s) is not associated with a valid event.', 'event_espresso'), |
1362 | 1362 | $this->name() |
@@ -1368,14 +1368,14 @@ discard block |
||
1368 | 1368 | |
1369 | 1369 | |
1370 | 1370 | |
1371 | - /** |
|
1372 | - * Implementation of the EEI_Event_Relation interface method |
|
1373 | - * |
|
1374 | - * @see EEI_Event_Relation for comments |
|
1375 | - * @return string |
|
1376 | - * @throws UnexpectedEntityException |
|
1377 | - * @throws \EE_Error |
|
1378 | - */ |
|
1371 | + /** |
|
1372 | + * Implementation of the EEI_Event_Relation interface method |
|
1373 | + * |
|
1374 | + * @see EEI_Event_Relation for comments |
|
1375 | + * @return string |
|
1376 | + * @throws UnexpectedEntityException |
|
1377 | + * @throws \EE_Error |
|
1378 | + */ |
|
1379 | 1379 | public function get_event_name() { |
1380 | 1380 | $event = $this->get_related_event(); |
1381 | 1381 | return $event instanceof EE_Event ? $event->name() : ''; |
@@ -1383,14 +1383,14 @@ discard block |
||
1383 | 1383 | |
1384 | 1384 | |
1385 | 1385 | |
1386 | - /** |
|
1387 | - * Implementation of the EEI_Event_Relation interface method |
|
1388 | - * |
|
1389 | - * @see EEI_Event_Relation for comments |
|
1390 | - * @return int |
|
1391 | - * @throws UnexpectedEntityException |
|
1392 | - * @throws \EE_Error |
|
1393 | - */ |
|
1386 | + /** |
|
1387 | + * Implementation of the EEI_Event_Relation interface method |
|
1388 | + * |
|
1389 | + * @see EEI_Event_Relation for comments |
|
1390 | + * @return int |
|
1391 | + * @throws UnexpectedEntityException |
|
1392 | + * @throws \EE_Error |
|
1393 | + */ |
|
1394 | 1394 | public function get_event_ID() { |
1395 | 1395 | $event = $this->get_related_event(); |
1396 | 1396 | return $event instanceof EE_Event ? $event->ID() : 0; |
@@ -1,7 +1,7 @@ discard block |
||
1 | 1 | <?php use EventEspresso\core\exceptions\UnexpectedEntityException; |
2 | 2 | |
3 | -if ( !defined( 'EVENT_ESPRESSO_VERSION' ) ) { |
|
4 | - exit( 'No direct script access allowed' ); |
|
3 | +if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
|
4 | + exit('No direct script access allowed'); |
|
5 | 5 | } |
6 | 6 | /** |
7 | 7 | * Event Espresso |
@@ -70,9 +70,9 @@ discard block |
||
70 | 70 | * @return EE_Ticket |
71 | 71 | * @throws \EE_Error |
72 | 72 | */ |
73 | - public static function new_instance( $props_n_values = array(), $timezone = null, $date_formats = array() ) { |
|
74 | - $has_object = parent::_check_for_object( $props_n_values, __CLASS__, $timezone, $date_formats ); |
|
75 | - return $has_object ? $has_object : new self( $props_n_values, false, $timezone, $date_formats ); |
|
73 | + public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array()) { |
|
74 | + $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats); |
|
75 | + return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats); |
|
76 | 76 | } |
77 | 77 | |
78 | 78 | |
@@ -84,8 +84,8 @@ discard block |
||
84 | 84 | * @return EE_Ticket |
85 | 85 | * @throws \EE_Error |
86 | 86 | */ |
87 | - public static function new_instance_from_db( $props_n_values = array(), $timezone = null ) { |
|
88 | - return new self( $props_n_values, TRUE, $timezone ); |
|
87 | + public static function new_instance_from_db($props_n_values = array(), $timezone = null) { |
|
88 | + return new self($props_n_values, TRUE, $timezone); |
|
89 | 89 | } |
90 | 90 | |
91 | 91 | |
@@ -95,7 +95,7 @@ discard block |
||
95 | 95 | * @throws \EE_Error |
96 | 96 | */ |
97 | 97 | public function parent() { |
98 | - return $this->get( 'TKT_parent' ); |
|
98 | + return $this->get('TKT_parent'); |
|
99 | 99 | } |
100 | 100 | |
101 | 101 | |
@@ -107,13 +107,13 @@ discard block |
||
107 | 107 | * @return boolean |
108 | 108 | * @throws \EE_Error |
109 | 109 | */ |
110 | - public function available( $DTT_ID = 0 ) { |
|
110 | + public function available($DTT_ID = 0) { |
|
111 | 111 | // are we checking availability for a particular datetime ? |
112 | - if ( $DTT_ID ) { |
|
112 | + if ($DTT_ID) { |
|
113 | 113 | // get that datetime object |
114 | - $datetime = $this->get_first_related( 'Datetime', array( array( 'DTT_ID' => $DTT_ID ) ) ); |
|
114 | + $datetime = $this->get_first_related('Datetime', array(array('DTT_ID' => $DTT_ID))); |
|
115 | 115 | // if ticket sales for this datetime have exceeded the reg limit... |
116 | - if ( $datetime instanceof EE_Datetime && $datetime->sold_out() ) { |
|
116 | + if ($datetime instanceof EE_Datetime && $datetime->sold_out()) { |
|
117 | 117 | return FALSE; |
118 | 118 | } |
119 | 119 | } |
@@ -131,22 +131,22 @@ discard block |
||
131 | 131 | * @return mixed status int if the display string isn't requested |
132 | 132 | * @throws \EE_Error |
133 | 133 | */ |
134 | - public function ticket_status( $display = FALSE, $remaining = null ) { |
|
135 | - $remaining = is_bool( $remaining ) ? $remaining : $this->is_remaining(); |
|
136 | - if ( ! $remaining ) { |
|
137 | - return $display ? EEH_Template::pretty_status( EE_Ticket::sold_out, FALSE, 'sentence' ) : EE_Ticket::sold_out; |
|
134 | + public function ticket_status($display = FALSE, $remaining = null) { |
|
135 | + $remaining = is_bool($remaining) ? $remaining : $this->is_remaining(); |
|
136 | + if ( ! $remaining) { |
|
137 | + return $display ? EEH_Template::pretty_status(EE_Ticket::sold_out, FALSE, 'sentence') : EE_Ticket::sold_out; |
|
138 | 138 | } |
139 | - if ( $this->get( 'TKT_deleted' ) ) { |
|
140 | - return $display ? EEH_Template::pretty_status( EE_Ticket::archived, FALSE, 'sentence' ) : EE_Ticket::archived; |
|
139 | + if ($this->get('TKT_deleted')) { |
|
140 | + return $display ? EEH_Template::pretty_status(EE_Ticket::archived, FALSE, 'sentence') : EE_Ticket::archived; |
|
141 | 141 | } |
142 | - if ( $this->is_expired() ) { |
|
143 | - return $display ? EEH_Template::pretty_status( EE_Ticket::expired, FALSE, 'sentence' ) : EE_Ticket::expired; |
|
142 | + if ($this->is_expired()) { |
|
143 | + return $display ? EEH_Template::pretty_status(EE_Ticket::expired, FALSE, 'sentence') : EE_Ticket::expired; |
|
144 | 144 | } |
145 | - if ( $this->is_pending() ) { |
|
146 | - return $display ? EEH_Template::pretty_status( EE_Ticket::pending, FALSE, 'sentence' ) : EE_Ticket::pending; |
|
145 | + if ($this->is_pending()) { |
|
146 | + return $display ? EEH_Template::pretty_status(EE_Ticket::pending, FALSE, 'sentence') : EE_Ticket::pending; |
|
147 | 147 | } |
148 | - if ( $this->is_on_sale() ) { |
|
149 | - return $display ? EEH_Template::pretty_status( EE_Ticket::onsale, FALSE, 'sentence' ) : EE_Ticket::onsale; |
|
148 | + if ($this->is_on_sale()) { |
|
149 | + return $display ? EEH_Template::pretty_status(EE_Ticket::onsale, FALSE, 'sentence') : EE_Ticket::onsale; |
|
150 | 150 | } |
151 | 151 | return ''; |
152 | 152 | } |
@@ -161,12 +161,12 @@ discard block |
||
161 | 161 | * @return boolean true = tickets remaining, false not. |
162 | 162 | * @throws \EE_Error |
163 | 163 | */ |
164 | - public function is_remaining( $DTT_ID = 0 ) { |
|
165 | - $num_remaining = $this->remaining( $DTT_ID ); |
|
166 | - if ( $num_remaining === 0 ) { |
|
164 | + public function is_remaining($DTT_ID = 0) { |
|
165 | + $num_remaining = $this->remaining($DTT_ID); |
|
166 | + if ($num_remaining === 0) { |
|
167 | 167 | return FALSE; |
168 | 168 | } |
169 | - if ( $num_remaining > 0 && $num_remaining < $this->min() ) { |
|
169 | + if ($num_remaining > 0 && $num_remaining < $this->min()) { |
|
170 | 170 | return FALSE; |
171 | 171 | } |
172 | 172 | return TRUE; |
@@ -182,8 +182,8 @@ discard block |
||
182 | 182 | * @return int |
183 | 183 | * @throws \EE_Error |
184 | 184 | */ |
185 | - public function remaining( $DTT_ID = 0 ) { |
|
186 | - return $this->real_quantity_on_ticket('saleable', $DTT_ID ); |
|
185 | + public function remaining($DTT_ID = 0) { |
|
186 | + return $this->real_quantity_on_ticket('saleable', $DTT_ID); |
|
187 | 187 | } |
188 | 188 | |
189 | 189 | |
@@ -195,7 +195,7 @@ discard block |
||
195 | 195 | * @throws \EE_Error |
196 | 196 | */ |
197 | 197 | public function min() { |
198 | - return $this->get( 'TKT_min' ); |
|
198 | + return $this->get('TKT_min'); |
|
199 | 199 | } |
200 | 200 | |
201 | 201 | |
@@ -207,7 +207,7 @@ discard block |
||
207 | 207 | * @throws \EE_Error |
208 | 208 | */ |
209 | 209 | public function is_expired() { |
210 | - return ( $this->get_raw( 'TKT_end_date' ) < time() ); |
|
210 | + return ($this->get_raw('TKT_end_date') < time()); |
|
211 | 211 | } |
212 | 212 | |
213 | 213 | |
@@ -219,7 +219,7 @@ discard block |
||
219 | 219 | * @throws \EE_Error |
220 | 220 | */ |
221 | 221 | public function is_pending() { |
222 | - return ( $this->get_raw( 'TKT_start_date' ) > time() ); |
|
222 | + return ($this->get_raw('TKT_start_date') > time()); |
|
223 | 223 | } |
224 | 224 | |
225 | 225 | |
@@ -231,7 +231,7 @@ discard block |
||
231 | 231 | * @throws \EE_Error |
232 | 232 | */ |
233 | 233 | public function is_on_sale() { |
234 | - return ( $this->get_raw( 'TKT_start_date' ) < time() && $this->get_raw( 'TKT_end_date' ) > time() ); |
|
234 | + return ($this->get_raw('TKT_start_date') < time() && $this->get_raw('TKT_end_date') > time()); |
|
235 | 235 | } |
236 | 236 | |
237 | 237 | |
@@ -244,11 +244,11 @@ discard block |
||
244 | 244 | * @return string |
245 | 245 | * @throws \EE_Error |
246 | 246 | */ |
247 | - public function date_range( $dt_frmt = '', $conjunction = ' - ' ) { |
|
248 | - $first_date = $this->first_datetime() instanceof EE_Datetime ? $this->first_datetime()->start_date( $dt_frmt ) : ''; |
|
249 | - $last_date = $this->last_datetime() instanceof EE_Datetime ? $this->last_datetime()->end_date( $dt_frmt ) : ''; |
|
247 | + public function date_range($dt_frmt = '', $conjunction = ' - ') { |
|
248 | + $first_date = $this->first_datetime() instanceof EE_Datetime ? $this->first_datetime()->start_date($dt_frmt) : ''; |
|
249 | + $last_date = $this->last_datetime() instanceof EE_Datetime ? $this->last_datetime()->end_date($dt_frmt) : ''; |
|
250 | 250 | |
251 | - return $first_date && $last_date ? $first_date . $conjunction . $last_date : ''; |
|
251 | + return $first_date && $last_date ? $first_date.$conjunction.$last_date : ''; |
|
252 | 252 | } |
253 | 253 | |
254 | 254 | |
@@ -260,8 +260,8 @@ discard block |
||
260 | 260 | * @throws \EE_Error |
261 | 261 | */ |
262 | 262 | public function first_datetime() { |
263 | - $datetimes = $this->datetimes( array( 'limit' => 1 ) ); |
|
264 | - return reset( $datetimes ); |
|
263 | + $datetimes = $this->datetimes(array('limit' => 1)); |
|
264 | + return reset($datetimes); |
|
265 | 265 | } |
266 | 266 | |
267 | 267 | |
@@ -274,11 +274,11 @@ discard block |
||
274 | 274 | * @return EE_Datetime[]|EE_Base_Class[] |
275 | 275 | * @throws \EE_Error |
276 | 276 | */ |
277 | - public function datetimes( $query_params = array() ) { |
|
278 | - if ( ! isset( $query_params[ 'order_by' ] ) ) { |
|
279 | - $query_params[ 'order_by' ][ 'DTT_order' ] = 'ASC'; |
|
277 | + public function datetimes($query_params = array()) { |
|
278 | + if ( ! isset($query_params['order_by'])) { |
|
279 | + $query_params['order_by']['DTT_order'] = 'ASC'; |
|
280 | 280 | } |
281 | - return $this->get_many_related( 'Datetime', $query_params ); |
|
281 | + return $this->get_many_related('Datetime', $query_params); |
|
282 | 282 | } |
283 | 283 | |
284 | 284 | |
@@ -290,8 +290,8 @@ discard block |
||
290 | 290 | * @throws \EE_Error |
291 | 291 | */ |
292 | 292 | public function last_datetime() { |
293 | - $datetimes = $this->datetimes( array( 'limit' => 1, 'order_by' => array( 'DTT_EVT_start' => 'DESC' ) ) ); |
|
294 | - return end( $datetimes ); |
|
293 | + $datetimes = $this->datetimes(array('limit' => 1, 'order_by' => array('DTT_EVT_start' => 'DESC'))); |
|
294 | + return end($datetimes); |
|
295 | 295 | } |
296 | 296 | |
297 | 297 | |
@@ -309,22 +309,22 @@ discard block |
||
309 | 309 | * @return mixed (array|int) how many tickets have sold |
310 | 310 | * @throws \EE_Error |
311 | 311 | */ |
312 | - public function tickets_sold( $what = 'ticket', $dtt_id = NULL ) { |
|
312 | + public function tickets_sold($what = 'ticket', $dtt_id = NULL) { |
|
313 | 313 | $total = 0; |
314 | 314 | $tickets_sold = $this->_all_tickets_sold(); |
315 | - switch ( $what ) { |
|
315 | + switch ($what) { |
|
316 | 316 | case 'ticket' : |
317 | - return $tickets_sold[ 'ticket' ]; |
|
317 | + return $tickets_sold['ticket']; |
|
318 | 318 | break; |
319 | 319 | case 'datetime' : |
320 | - if ( empty( $tickets_sold[ 'datetime' ] ) ) { |
|
320 | + if (empty($tickets_sold['datetime'])) { |
|
321 | 321 | return $total; |
322 | 322 | } |
323 | - if ( ! empty( $dtt_id ) && ! isset( $tickets_sold[ 'datetime' ][ $dtt_id ] ) ) { |
|
324 | - EE_Error::add_error( __( 'You\'ve requested the amount of tickets sold for a given ticket and datetime, however there are no records for the datetime id you included. Are you SURE that is a datetime related to this ticket?', 'event_espresso' ), __FILE__, __FUNCTION__, __LINE__ ); |
|
323 | + if ( ! empty($dtt_id) && ! isset($tickets_sold['datetime'][$dtt_id])) { |
|
324 | + EE_Error::add_error(__('You\'ve requested the amount of tickets sold for a given ticket and datetime, however there are no records for the datetime id you included. Are you SURE that is a datetime related to this ticket?', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__); |
|
325 | 325 | return $total; |
326 | 326 | } |
327 | - return empty( $dtt_id ) ? $tickets_sold[ 'datetime' ] : $tickets_sold[ 'datetime' ][ $dtt_id ]; |
|
327 | + return empty($dtt_id) ? $tickets_sold['datetime'] : $tickets_sold['datetime'][$dtt_id]; |
|
328 | 328 | break; |
329 | 329 | default: |
330 | 330 | return $total; |
@@ -340,15 +340,15 @@ discard block |
||
340 | 340 | * @throws \EE_Error |
341 | 341 | */ |
342 | 342 | protected function _all_tickets_sold() { |
343 | - $datetimes = $this->get_many_related( 'Datetime' ); |
|
343 | + $datetimes = $this->get_many_related('Datetime'); |
|
344 | 344 | $tickets_sold = array(); |
345 | - if ( ! empty( $datetimes ) ) { |
|
346 | - foreach ( $datetimes as $datetime ) { |
|
347 | - $tickets_sold[ 'datetime' ][ $datetime->ID() ] = $datetime->get( 'DTT_sold' ); |
|
345 | + if ( ! empty($datetimes)) { |
|
346 | + foreach ($datetimes as $datetime) { |
|
347 | + $tickets_sold['datetime'][$datetime->ID()] = $datetime->get('DTT_sold'); |
|
348 | 348 | } |
349 | 349 | } |
350 | 350 | //Tickets sold |
351 | - $tickets_sold[ 'ticket' ] = $this->sold(); |
|
351 | + $tickets_sold['ticket'] = $this->sold(); |
|
352 | 352 | return $tickets_sold; |
353 | 353 | } |
354 | 354 | |
@@ -361,11 +361,11 @@ discard block |
||
361 | 361 | * @return EE_Price|EE_Base_Class|EE_Price[]|EE_Base_Class[] |
362 | 362 | * @throws \EE_Error |
363 | 363 | */ |
364 | - public function base_price( $return_array = FALSE ) { |
|
365 | - $_where = array( 'Price_Type.PBT_ID' => EEM_Price_Type::base_type_base_price ); |
|
364 | + public function base_price($return_array = FALSE) { |
|
365 | + $_where = array('Price_Type.PBT_ID' => EEM_Price_Type::base_type_base_price); |
|
366 | 366 | return $return_array |
367 | - ? $this->get_many_related( 'Price', array( $_where ) ) |
|
368 | - : $this->get_first_related( 'Price', array( $_where ) ); |
|
367 | + ? $this->get_many_related('Price', array($_where)) |
|
368 | + : $this->get_first_related('Price', array($_where)); |
|
369 | 369 | } |
370 | 370 | |
371 | 371 | |
@@ -378,8 +378,8 @@ discard block |
||
378 | 378 | * @throws \EE_Error |
379 | 379 | */ |
380 | 380 | public function price_modifiers() { |
381 | - $query_params = array( 0 => array( 'Price_Type.PBT_ID' => array( 'NOT IN', array( EEM_Price_Type::base_type_base_price, EEM_Price_Type::base_type_tax ) ) ) ); |
|
382 | - return $this->prices( $query_params ); |
|
381 | + $query_params = array(0 => array('Price_Type.PBT_ID' => array('NOT IN', array(EEM_Price_Type::base_type_base_price, EEM_Price_Type::base_type_tax)))); |
|
382 | + return $this->prices($query_params); |
|
383 | 383 | } |
384 | 384 | |
385 | 385 | |
@@ -391,8 +391,8 @@ discard block |
||
391 | 391 | * @return EE_Price[]|EE_Base_Class[] |
392 | 392 | * @throws \EE_Error |
393 | 393 | */ |
394 | - public function prices( $query_params = array() ) { |
|
395 | - return $this->get_many_related( 'Price', $query_params ); |
|
394 | + public function prices($query_params = array()) { |
|
395 | + return $this->get_many_related('Price', $query_params); |
|
396 | 396 | } |
397 | 397 | |
398 | 398 | |
@@ -404,8 +404,8 @@ discard block |
||
404 | 404 | * @return EE_Datetime_Ticket|EE_Base_Class[] |
405 | 405 | * @throws \EE_Error |
406 | 406 | */ |
407 | - public function datetime_tickets( $query_params = array() ) { |
|
408 | - return $this->get_many_related( 'Datetime_Ticket', $query_params ); |
|
407 | + public function datetime_tickets($query_params = array()) { |
|
408 | + return $this->get_many_related('Datetime_Ticket', $query_params); |
|
409 | 409 | } |
410 | 410 | |
411 | 411 | |
@@ -418,8 +418,8 @@ discard block |
||
418 | 418 | * @return EE_Datetime[] |
419 | 419 | * @throws \EE_Error |
420 | 420 | */ |
421 | - public function datetimes_ordered( $show_expired = TRUE, $show_deleted = FALSE ) { |
|
422 | - return EEM_Datetime::instance( $this->_timezone )->get_datetimes_for_ticket_ordered_by_DTT_order( $this->ID(), $show_expired, $show_deleted ); |
|
421 | + public function datetimes_ordered($show_expired = TRUE, $show_deleted = FALSE) { |
|
422 | + return EEM_Datetime::instance($this->_timezone)->get_datetimes_for_ticket_ordered_by_DTT_order($this->ID(), $show_expired, $show_deleted); |
|
423 | 423 | } |
424 | 424 | |
425 | 425 | |
@@ -431,7 +431,7 @@ discard block |
||
431 | 431 | * @throws \EE_Error |
432 | 432 | */ |
433 | 433 | public function ID() { |
434 | - return $this->get( 'TKT_ID' ); |
|
434 | + return $this->get('TKT_ID'); |
|
435 | 435 | } |
436 | 436 | |
437 | 437 | |
@@ -456,7 +456,7 @@ discard block |
||
456 | 456 | * @throws \EE_Error |
457 | 457 | */ |
458 | 458 | public function template() { |
459 | - return $this->get_first_related( 'Ticket_Template' ); |
|
459 | + return $this->get_first_related('Ticket_Template'); |
|
460 | 460 | } |
461 | 461 | |
462 | 462 | |
@@ -478,7 +478,7 @@ discard block |
||
478 | 478 | * @throws \EE_Error |
479 | 479 | */ |
480 | 480 | public function ticket_price() { |
481 | - return $this->get( 'TKT_price' ); |
|
481 | + return $this->get('TKT_price'); |
|
482 | 482 | } |
483 | 483 | |
484 | 484 | |
@@ -488,7 +488,7 @@ discard block |
||
488 | 488 | * @throws \EE_Error |
489 | 489 | */ |
490 | 490 | public function pretty_price() { |
491 | - return $this->get_pretty( 'TKT_price' ); |
|
491 | + return $this->get_pretty('TKT_price'); |
|
492 | 492 | } |
493 | 493 | |
494 | 494 | |
@@ -510,8 +510,8 @@ discard block |
||
510 | 510 | * @return float |
511 | 511 | * @throws \EE_Error |
512 | 512 | */ |
513 | - public function get_ticket_total_with_taxes( $no_cache = FALSE ) { |
|
514 | - if ($this->_ticket_total_with_taxes === null || $no_cache ) { |
|
513 | + public function get_ticket_total_with_taxes($no_cache = FALSE) { |
|
514 | + if ($this->_ticket_total_with_taxes === null || $no_cache) { |
|
515 | 515 | $this->_ticket_total_with_taxes = $this->get_ticket_subtotal() + $this->get_ticket_taxes_total_for_admin(); |
516 | 516 | } |
517 | 517 | return (float) $this->_ticket_total_with_taxes; |
@@ -520,7 +520,7 @@ discard block |
||
520 | 520 | |
521 | 521 | |
522 | 522 | public function ensure_TKT_Price_correct() { |
523 | - $this->set( 'TKT_price', EE_Taxes::get_subtotal_for_admin( $this ) ); |
|
523 | + $this->set('TKT_price', EE_Taxes::get_subtotal_for_admin($this)); |
|
524 | 524 | $this->save(); |
525 | 525 | } |
526 | 526 | |
@@ -531,7 +531,7 @@ discard block |
||
531 | 531 | * @throws \EE_Error |
532 | 532 | */ |
533 | 533 | public function get_ticket_subtotal() { |
534 | - return EE_Taxes::get_subtotal_for_admin( $this ); |
|
534 | + return EE_Taxes::get_subtotal_for_admin($this); |
|
535 | 535 | } |
536 | 536 | |
537 | 537 | |
@@ -543,7 +543,7 @@ discard block |
||
543 | 543 | * @throws \EE_Error |
544 | 544 | */ |
545 | 545 | public function get_ticket_taxes_total_for_admin() { |
546 | - return EE_Taxes::get_total_taxes_for_admin( $this ); |
|
546 | + return EE_Taxes::get_total_taxes_for_admin($this); |
|
547 | 547 | } |
548 | 548 | |
549 | 549 | |
@@ -554,8 +554,8 @@ discard block |
||
554 | 554 | * @param string $name |
555 | 555 | * @throws \EE_Error |
556 | 556 | */ |
557 | - public function set_name( $name ) { |
|
558 | - $this->set( 'TKT_name', $name ); |
|
557 | + public function set_name($name) { |
|
558 | + $this->set('TKT_name', $name); |
|
559 | 559 | } |
560 | 560 | |
561 | 561 | |
@@ -567,7 +567,7 @@ discard block |
||
567 | 567 | * @throws \EE_Error |
568 | 568 | */ |
569 | 569 | public function description() { |
570 | - return $this->get( 'TKT_description' ); |
|
570 | + return $this->get('TKT_description'); |
|
571 | 571 | } |
572 | 572 | |
573 | 573 | |
@@ -578,8 +578,8 @@ discard block |
||
578 | 578 | * @param string $description |
579 | 579 | * @throws \EE_Error |
580 | 580 | */ |
581 | - public function set_description( $description ) { |
|
582 | - $this->set( 'TKT_description', $description ); |
|
581 | + public function set_description($description) { |
|
582 | + $this->set('TKT_description', $description); |
|
583 | 583 | } |
584 | 584 | |
585 | 585 | |
@@ -592,8 +592,8 @@ discard block |
||
592 | 592 | * @return string |
593 | 593 | * @throws \EE_Error |
594 | 594 | */ |
595 | - public function start_date( $dt_frmt = '', $tm_frmt = '' ) { |
|
596 | - return $this->_get_datetime( 'TKT_start_date', $dt_frmt, $tm_frmt ); |
|
595 | + public function start_date($dt_frmt = '', $tm_frmt = '') { |
|
596 | + return $this->_get_datetime('TKT_start_date', $dt_frmt, $tm_frmt); |
|
597 | 597 | } |
598 | 598 | |
599 | 599 | |
@@ -605,8 +605,8 @@ discard block |
||
605 | 605 | * @return void |
606 | 606 | * @throws \EE_Error |
607 | 607 | */ |
608 | - public function set_start_date( $start_date ) { |
|
609 | - $this->_set_date_time( 'B', $start_date, 'TKT_start_date' ); |
|
608 | + public function set_start_date($start_date) { |
|
609 | + $this->_set_date_time('B', $start_date, 'TKT_start_date'); |
|
610 | 610 | } |
611 | 611 | |
612 | 612 | |
@@ -619,8 +619,8 @@ discard block |
||
619 | 619 | * @return string |
620 | 620 | * @throws \EE_Error |
621 | 621 | */ |
622 | - public function end_date( $dt_frmt = '', $tm_frmt = '' ) { |
|
623 | - return $this->_get_datetime( 'TKT_end_date', $dt_frmt, $tm_frmt ); |
|
622 | + public function end_date($dt_frmt = '', $tm_frmt = '') { |
|
623 | + return $this->_get_datetime('TKT_end_date', $dt_frmt, $tm_frmt); |
|
624 | 624 | } |
625 | 625 | |
626 | 626 | |
@@ -632,8 +632,8 @@ discard block |
||
632 | 632 | * @return void |
633 | 633 | * @throws \EE_Error |
634 | 634 | */ |
635 | - public function set_end_date( $end_date ) { |
|
636 | - $this->_set_date_time( 'B', $end_date, 'TKT_end_date' ); |
|
635 | + public function set_end_date($end_date) { |
|
636 | + $this->_set_date_time('B', $end_date, 'TKT_end_date'); |
|
637 | 637 | } |
638 | 638 | |
639 | 639 | |
@@ -645,8 +645,8 @@ discard block |
||
645 | 645 | * @param string $time a string representation of the sell until time (ex 9am or 7:30pm) |
646 | 646 | * @throws \EE_Error |
647 | 647 | */ |
648 | - public function set_end_time( $time ) { |
|
649 | - $this->_set_time_for( $time, 'TKT_end_date' ); |
|
648 | + public function set_end_time($time) { |
|
649 | + $this->_set_time_for($time, 'TKT_end_date'); |
|
650 | 650 | } |
651 | 651 | |
652 | 652 | |
@@ -658,8 +658,8 @@ discard block |
||
658 | 658 | * @return void |
659 | 659 | * @throws \EE_Error |
660 | 660 | */ |
661 | - public function set_min( $min ) { |
|
662 | - $this->set( 'TKT_min', $min ); |
|
661 | + public function set_min($min) { |
|
662 | + $this->set('TKT_min', $min); |
|
663 | 663 | } |
664 | 664 | |
665 | 665 | |
@@ -671,7 +671,7 @@ discard block |
||
671 | 671 | * @throws \EE_Error |
672 | 672 | */ |
673 | 673 | public function max() { |
674 | - return $this->get( 'TKT_max' ); |
|
674 | + return $this->get('TKT_max'); |
|
675 | 675 | } |
676 | 676 | |
677 | 677 | |
@@ -683,8 +683,8 @@ discard block |
||
683 | 683 | * @return void |
684 | 684 | * @throws \EE_Error |
685 | 685 | */ |
686 | - public function set_max( $max ) { |
|
687 | - $this->set( 'TKT_max', $max ); |
|
686 | + public function set_max($max) { |
|
687 | + $this->set('TKT_max', $max); |
|
688 | 688 | } |
689 | 689 | |
690 | 690 | |
@@ -696,8 +696,8 @@ discard block |
||
696 | 696 | * @return void |
697 | 697 | * @throws \EE_Error |
698 | 698 | */ |
699 | - public function set_price( $price ) { |
|
700 | - $this->set( 'TKT_price', $price ); |
|
699 | + public function set_price($price) { |
|
700 | + $this->set('TKT_price', $price); |
|
701 | 701 | } |
702 | 702 | |
703 | 703 | |
@@ -709,7 +709,7 @@ discard block |
||
709 | 709 | * @throws \EE_Error |
710 | 710 | */ |
711 | 711 | public function sold() { |
712 | - return $this->get_raw( 'TKT_sold' ); |
|
712 | + return $this->get_raw('TKT_sold'); |
|
713 | 713 | } |
714 | 714 | |
715 | 715 | |
@@ -721,10 +721,10 @@ discard block |
||
721 | 721 | * @return void |
722 | 722 | * @throws \EE_Error |
723 | 723 | */ |
724 | - public function set_sold( $sold ) { |
|
724 | + public function set_sold($sold) { |
|
725 | 725 | // sold can not go below zero |
726 | - $sold = max( 0, $sold ); |
|
727 | - $this->set( 'TKT_sold', $sold ); |
|
726 | + $sold = max(0, $sold); |
|
727 | + $this->set('TKT_sold', $sold); |
|
728 | 728 | } |
729 | 729 | |
730 | 730 | |
@@ -736,13 +736,13 @@ discard block |
||
736 | 736 | * @return void |
737 | 737 | * @throws \EE_Error |
738 | 738 | */ |
739 | - public function increase_sold( $qty = 1 ) { |
|
739 | + public function increase_sold($qty = 1) { |
|
740 | 740 | $sold = $this->sold() + $qty; |
741 | 741 | // remove ticket reservation, but don't adjust datetime reservations, because that will happen |
742 | 742 | // via \EE_Datetime::increase_sold() when \EE_Ticket::_increase_sold_for_datetimes() is called |
743 | - $this->decrease_reserved( $qty, false ); |
|
744 | - $this->_increase_sold_for_datetimes( $qty ); |
|
745 | - $this->set_sold( $sold ); |
|
743 | + $this->decrease_reserved($qty, false); |
|
744 | + $this->_increase_sold_for_datetimes($qty); |
|
745 | + $this->set_sold($sold); |
|
746 | 746 | } |
747 | 747 | |
748 | 748 | |
@@ -754,12 +754,12 @@ discard block |
||
754 | 754 | * @return void |
755 | 755 | * @throws \EE_Error |
756 | 756 | */ |
757 | - protected function _increase_sold_for_datetimes( $qty = 1 ) { |
|
757 | + protected function _increase_sold_for_datetimes($qty = 1) { |
|
758 | 758 | $datetimes = $this->datetimes(); |
759 | - if ( is_array( $datetimes ) ) { |
|
760 | - foreach ( $datetimes as $datetime ) { |
|
761 | - if ( $datetime instanceof EE_Datetime ) { |
|
762 | - $datetime->increase_sold( $qty ); |
|
759 | + if (is_array($datetimes)) { |
|
760 | + foreach ($datetimes as $datetime) { |
|
761 | + if ($datetime instanceof EE_Datetime) { |
|
762 | + $datetime->increase_sold($qty); |
|
763 | 763 | $datetime->save(); |
764 | 764 | } |
765 | 765 | } |
@@ -775,10 +775,10 @@ discard block |
||
775 | 775 | * @return void |
776 | 776 | * @throws \EE_Error |
777 | 777 | */ |
778 | - public function decrease_sold( $qty = 1 ) { |
|
778 | + public function decrease_sold($qty = 1) { |
|
779 | 779 | $sold = $this->sold() - $qty; |
780 | - $this->_decrease_sold_for_datetimes( $qty ); |
|
781 | - $this->set_sold( $sold ); |
|
780 | + $this->_decrease_sold_for_datetimes($qty); |
|
781 | + $this->set_sold($sold); |
|
782 | 782 | } |
783 | 783 | |
784 | 784 | |
@@ -790,12 +790,12 @@ discard block |
||
790 | 790 | * @return void |
791 | 791 | * @throws \EE_Error |
792 | 792 | */ |
793 | - protected function _decrease_sold_for_datetimes( $qty = 1 ) { |
|
793 | + protected function _decrease_sold_for_datetimes($qty = 1) { |
|
794 | 794 | $datetimes = $this->datetimes(); |
795 | - if ( is_array( $datetimes ) ) { |
|
796 | - foreach ( $datetimes as $datetime ) { |
|
797 | - if ( $datetime instanceof EE_Datetime ) { |
|
798 | - $datetime->decrease_sold( $qty ); |
|
795 | + if (is_array($datetimes)) { |
|
796 | + foreach ($datetimes as $datetime) { |
|
797 | + if ($datetime instanceof EE_Datetime) { |
|
798 | + $datetime->decrease_sold($qty); |
|
799 | 799 | $datetime->save(); |
800 | 800 | } |
801 | 801 | } |
@@ -811,7 +811,7 @@ discard block |
||
811 | 811 | * @throws \EE_Error |
812 | 812 | */ |
813 | 813 | public function reserved() { |
814 | - return $this->get_raw( 'TKT_reserved' ); |
|
814 | + return $this->get_raw('TKT_reserved'); |
|
815 | 815 | } |
816 | 816 | |
817 | 817 | |
@@ -823,10 +823,10 @@ discard block |
||
823 | 823 | * @return void |
824 | 824 | * @throws \EE_Error |
825 | 825 | */ |
826 | - public function set_reserved( $reserved ) { |
|
826 | + public function set_reserved($reserved) { |
|
827 | 827 | // reserved can not go below zero |
828 | - $reserved = max( 0, (int) $reserved ); |
|
829 | - $this->set( 'TKT_reserved', $reserved ); |
|
828 | + $reserved = max(0, (int) $reserved); |
|
829 | + $this->set('TKT_reserved', $reserved); |
|
830 | 830 | } |
831 | 831 | |
832 | 832 | |
@@ -838,11 +838,11 @@ discard block |
||
838 | 838 | * @return void |
839 | 839 | * @throws \EE_Error |
840 | 840 | */ |
841 | - public function increase_reserved( $qty = 1 ) { |
|
842 | - $qty = absint( $qty ); |
|
841 | + public function increase_reserved($qty = 1) { |
|
842 | + $qty = absint($qty); |
|
843 | 843 | $reserved = $this->reserved() + $qty; |
844 | - $this->_increase_reserved_for_datetimes( $qty ); |
|
845 | - $this->set_reserved( $reserved ); |
|
844 | + $this->_increase_reserved_for_datetimes($qty); |
|
845 | + $this->set_reserved($reserved); |
|
846 | 846 | } |
847 | 847 | |
848 | 848 | |
@@ -854,12 +854,12 @@ discard block |
||
854 | 854 | * @return void |
855 | 855 | * @throws \EE_Error |
856 | 856 | */ |
857 | - protected function _increase_reserved_for_datetimes( $qty = 1 ) { |
|
857 | + protected function _increase_reserved_for_datetimes($qty = 1) { |
|
858 | 858 | $datetimes = $this->datetimes(); |
859 | - if ( is_array( $datetimes ) ) { |
|
860 | - foreach ( $datetimes as $datetime ) { |
|
861 | - if ( $datetime instanceof EE_Datetime ) { |
|
862 | - $datetime->increase_reserved( $qty ); |
|
859 | + if (is_array($datetimes)) { |
|
860 | + foreach ($datetimes as $datetime) { |
|
861 | + if ($datetime instanceof EE_Datetime) { |
|
862 | + $datetime->increase_reserved($qty); |
|
863 | 863 | $datetime->save(); |
864 | 864 | } |
865 | 865 | } |
@@ -876,12 +876,12 @@ discard block |
||
876 | 876 | * @return void |
877 | 877 | * @throws \EE_Error |
878 | 878 | */ |
879 | - public function decrease_reserved( $qty = 1, $adjust_datetimes = true ) { |
|
880 | - $reserved = $this->reserved() - absint( $qty ); |
|
881 | - if ( $adjust_datetimes ) { |
|
882 | - $this->_decrease_reserved_for_datetimes( $qty ); |
|
879 | + public function decrease_reserved($qty = 1, $adjust_datetimes = true) { |
|
880 | + $reserved = $this->reserved() - absint($qty); |
|
881 | + if ($adjust_datetimes) { |
|
882 | + $this->_decrease_reserved_for_datetimes($qty); |
|
883 | 883 | } |
884 | - $this->set_reserved( $reserved ); |
|
884 | + $this->set_reserved($reserved); |
|
885 | 885 | } |
886 | 886 | |
887 | 887 | |
@@ -893,12 +893,12 @@ discard block |
||
893 | 893 | * @return void |
894 | 894 | * @throws \EE_Error |
895 | 895 | */ |
896 | - protected function _decrease_reserved_for_datetimes( $qty = 1 ) { |
|
896 | + protected function _decrease_reserved_for_datetimes($qty = 1) { |
|
897 | 897 | $datetimes = $this->datetimes(); |
898 | - if ( is_array( $datetimes ) ) { |
|
899 | - foreach ( $datetimes as $datetime ) { |
|
900 | - if ( $datetime instanceof EE_Datetime ) { |
|
901 | - $datetime->decrease_reserved( $qty ); |
|
898 | + if (is_array($datetimes)) { |
|
899 | + foreach ($datetimes as $datetime) { |
|
900 | + if ($datetime instanceof EE_Datetime) { |
|
901 | + $datetime->decrease_reserved($qty); |
|
902 | 902 | $datetime->save(); |
903 | 903 | } |
904 | 904 | } |
@@ -919,14 +919,14 @@ discard block |
||
919 | 919 | * @return int |
920 | 920 | * @throws \EE_Error |
921 | 921 | */ |
922 | - public function qty( $context = '' ) { |
|
923 | - switch ( $context ) { |
|
922 | + public function qty($context = '') { |
|
923 | + switch ($context) { |
|
924 | 924 | case 'reg_limit' : |
925 | 925 | return $this->real_quantity_on_ticket(); |
926 | 926 | case 'saleable' : |
927 | - return $this->real_quantity_on_ticket( 'saleable' ); |
|
927 | + return $this->real_quantity_on_ticket('saleable'); |
|
928 | 928 | default: |
929 | - return $this->get_raw( 'TKT_qty' ); |
|
929 | + return $this->get_raw('TKT_qty'); |
|
930 | 930 | } |
931 | 931 | } |
932 | 932 | |
@@ -945,15 +945,15 @@ discard block |
||
945 | 945 | * @return int |
946 | 946 | * @throws \EE_Error |
947 | 947 | */ |
948 | - public function real_quantity_on_ticket( $context = 'reg_limit', $DTT_ID = 0 ) { |
|
949 | - $raw = $this->get_raw( 'TKT_qty' ); |
|
948 | + public function real_quantity_on_ticket($context = 'reg_limit', $DTT_ID = 0) { |
|
949 | + $raw = $this->get_raw('TKT_qty'); |
|
950 | 950 | // return immediately if it's zero |
951 | - if ( $raw === 0 ) { |
|
951 | + if ($raw === 0) { |
|
952 | 952 | return $raw; |
953 | 953 | } |
954 | 954 | //echo "\n\n<br />Ticket: " . $this->name() . '<br />'; |
955 | 955 | // ensure qty doesn't exceed raw value for THIS ticket |
956 | - $qty = min( EE_INF, $raw ); |
|
956 | + $qty = min(EE_INF, $raw); |
|
957 | 957 | //echo "\n . qty: " . $qty . '<br />'; |
958 | 958 | // calculate this ticket's total sales and reservations |
959 | 959 | $sold_and_reserved_for_this_ticket = $this->sold() + $this->reserved(); |
@@ -962,23 +962,23 @@ discard block |
||
962 | 962 | //echo "\n . sold_and_reserved_for_this_ticket: " . $sold_and_reserved_for_this_ticket . '<br />'; |
963 | 963 | // first we need to calculate the maximum number of tickets available for the datetime |
964 | 964 | // do we want data for one datetime or all of them ? |
965 | - $query_params = $DTT_ID ? array( array( 'DTT_ID' => $DTT_ID ) ) : array(); |
|
966 | - $datetimes = $this->datetimes( $query_params ); |
|
967 | - if ( is_array( $datetimes ) && ! empty( $datetimes ) ) { |
|
968 | - foreach ( $datetimes as $datetime ) { |
|
969 | - if ( $datetime instanceof EE_Datetime ) { |
|
965 | + $query_params = $DTT_ID ? array(array('DTT_ID' => $DTT_ID)) : array(); |
|
966 | + $datetimes = $this->datetimes($query_params); |
|
967 | + if (is_array($datetimes) && ! empty($datetimes)) { |
|
968 | + foreach ($datetimes as $datetime) { |
|
969 | + if ($datetime instanceof EE_Datetime) { |
|
970 | 970 | $datetime->refresh_from_db(); |
971 | 971 | //echo "\n . . datetime name: " . $datetime->name() . '<br />'; |
972 | 972 | //echo "\n . . datetime ID: " . $datetime->ID() . '<br />'; |
973 | 973 | // initialize with no restrictions for each datetime |
974 | 974 | // but adjust datetime qty based on datetime reg limit |
975 | - $datetime_qty = min( EE_INF, $datetime->reg_limit() ); |
|
975 | + $datetime_qty = min(EE_INF, $datetime->reg_limit()); |
|
976 | 976 | //echo "\n . . . datetime reg_limit: " . $datetime->reg_limit() . '<br />'; |
977 | 977 | //echo "\n . . . datetime_qty: " . $datetime_qty . '<br />'; |
978 | 978 | // if we want the actual saleable amount, then we need to consider OTHER ticket sales |
979 | 979 | // and reservations for this datetime, that do NOT include sales and reservations |
980 | 980 | // for this ticket (so we add $this->sold() and $this->reserved() back in) |
981 | - if ( $context === 'saleable' ) { |
|
981 | + if ($context === 'saleable') { |
|
982 | 982 | $datetime_qty = max( |
983 | 983 | $datetime_qty - $datetime->sold_and_reserved() + $sold_and_reserved_for_this_ticket, |
984 | 984 | 0 |
@@ -990,16 +990,16 @@ discard block |
||
990 | 990 | $datetime_qty = ! $datetime->sold_out() ? $datetime_qty : 0; |
991 | 991 | //echo "\n . . . datetime_qty: " . $datetime_qty . '<br />'; |
992 | 992 | } |
993 | - $qty = min( $datetime_qty, $qty ); |
|
993 | + $qty = min($datetime_qty, $qty); |
|
994 | 994 | //echo "\n . . qty: " . $qty . '<br />'; |
995 | 995 | } |
996 | 996 | } |
997 | 997 | } |
998 | 998 | // NOW that we know the maximum number of tickets available for the datetime |
999 | 999 | // we can finally factor in the details for this specific ticket |
1000 | - if ( $qty > 0 && $context === 'saleable' ) { |
|
1000 | + if ($qty > 0 && $context === 'saleable') { |
|
1001 | 1001 | // and subtract the sales for THIS ticket |
1002 | - $qty = max( $qty - $sold_and_reserved_for_this_ticket, 0 ); |
|
1002 | + $qty = max($qty - $sold_and_reserved_for_this_ticket, 0); |
|
1003 | 1003 | //echo "\n . qty: " . $qty . '<br />'; |
1004 | 1004 | } |
1005 | 1005 | //echo "\nFINAL QTY: " . $qty . "<br /><br />"; |
@@ -1015,14 +1015,14 @@ discard block |
||
1015 | 1015 | * @return void |
1016 | 1016 | * @throws \EE_Error |
1017 | 1017 | */ |
1018 | - public function set_qty( $qty ) { |
|
1018 | + public function set_qty($qty) { |
|
1019 | 1019 | $datetimes = $this->datetimes(); |
1020 | - foreach ( $datetimes as $datetime ) { |
|
1021 | - if ( $datetime instanceof EE_Datetime ) { |
|
1022 | - $qty = min( $qty, $datetime->reg_limit() ); |
|
1020 | + foreach ($datetimes as $datetime) { |
|
1021 | + if ($datetime instanceof EE_Datetime) { |
|
1022 | + $qty = min($qty, $datetime->reg_limit()); |
|
1023 | 1023 | } |
1024 | 1024 | } |
1025 | - $this->set( 'TKT_qty', $qty ); |
|
1025 | + $this->set('TKT_qty', $qty); |
|
1026 | 1026 | } |
1027 | 1027 | |
1028 | 1028 | |
@@ -1034,7 +1034,7 @@ discard block |
||
1034 | 1034 | * @throws \EE_Error |
1035 | 1035 | */ |
1036 | 1036 | public function uses() { |
1037 | - return $this->get( 'TKT_uses' ); |
|
1037 | + return $this->get('TKT_uses'); |
|
1038 | 1038 | } |
1039 | 1039 | |
1040 | 1040 | |
@@ -1046,8 +1046,8 @@ discard block |
||
1046 | 1046 | * @return void |
1047 | 1047 | * @throws \EE_Error |
1048 | 1048 | */ |
1049 | - public function set_uses( $uses ) { |
|
1050 | - $this->set( 'TKT_uses', $uses ); |
|
1049 | + public function set_uses($uses) { |
|
1050 | + $this->set('TKT_uses', $uses); |
|
1051 | 1051 | } |
1052 | 1052 | |
1053 | 1053 | |
@@ -1059,7 +1059,7 @@ discard block |
||
1059 | 1059 | * @throws \EE_Error |
1060 | 1060 | */ |
1061 | 1061 | public function required() { |
1062 | - return $this->get( 'TKT_required' ); |
|
1062 | + return $this->get('TKT_required'); |
|
1063 | 1063 | } |
1064 | 1064 | |
1065 | 1065 | |
@@ -1071,8 +1071,8 @@ discard block |
||
1071 | 1071 | * @return void |
1072 | 1072 | * @throws \EE_Error |
1073 | 1073 | */ |
1074 | - public function set_required( $required ) { |
|
1075 | - $this->set( 'TKT_required', $required ); |
|
1074 | + public function set_required($required) { |
|
1075 | + $this->set('TKT_required', $required); |
|
1076 | 1076 | } |
1077 | 1077 | |
1078 | 1078 | |
@@ -1084,7 +1084,7 @@ discard block |
||
1084 | 1084 | * @throws \EE_Error |
1085 | 1085 | */ |
1086 | 1086 | public function taxable() { |
1087 | - return $this->get( 'TKT_taxable' ); |
|
1087 | + return $this->get('TKT_taxable'); |
|
1088 | 1088 | } |
1089 | 1089 | |
1090 | 1090 | |
@@ -1096,8 +1096,8 @@ discard block |
||
1096 | 1096 | * @return void |
1097 | 1097 | * @throws \EE_Error |
1098 | 1098 | */ |
1099 | - public function set_taxable( $taxable ) { |
|
1100 | - $this->set( 'TKT_taxable', $taxable ); |
|
1099 | + public function set_taxable($taxable) { |
|
1100 | + $this->set('TKT_taxable', $taxable); |
|
1101 | 1101 | } |
1102 | 1102 | |
1103 | 1103 | |
@@ -1109,7 +1109,7 @@ discard block |
||
1109 | 1109 | * @throws \EE_Error |
1110 | 1110 | */ |
1111 | 1111 | public function is_default() { |
1112 | - return $this->get( 'TKT_is_default' ); |
|
1112 | + return $this->get('TKT_is_default'); |
|
1113 | 1113 | } |
1114 | 1114 | |
1115 | 1115 | |
@@ -1121,8 +1121,8 @@ discard block |
||
1121 | 1121 | * @return void |
1122 | 1122 | * @throws \EE_Error |
1123 | 1123 | */ |
1124 | - public function set_is_default( $is_default ) { |
|
1125 | - $this->set( 'TKT_is_default', $is_default ); |
|
1124 | + public function set_is_default($is_default) { |
|
1125 | + $this->set('TKT_is_default', $is_default); |
|
1126 | 1126 | } |
1127 | 1127 | |
1128 | 1128 | |
@@ -1134,7 +1134,7 @@ discard block |
||
1134 | 1134 | * @throws \EE_Error |
1135 | 1135 | */ |
1136 | 1136 | public function order() { |
1137 | - return $this->get( 'TKT_order' ); |
|
1137 | + return $this->get('TKT_order'); |
|
1138 | 1138 | } |
1139 | 1139 | |
1140 | 1140 | |
@@ -1146,8 +1146,8 @@ discard block |
||
1146 | 1146 | * @return void |
1147 | 1147 | * @throws \EE_Error |
1148 | 1148 | */ |
1149 | - public function set_order( $order ) { |
|
1150 | - $this->set( 'TKT_order', $order ); |
|
1149 | + public function set_order($order) { |
|
1150 | + $this->set('TKT_order', $order); |
|
1151 | 1151 | } |
1152 | 1152 | |
1153 | 1153 | |
@@ -1159,7 +1159,7 @@ discard block |
||
1159 | 1159 | * @throws \EE_Error |
1160 | 1160 | */ |
1161 | 1161 | public function row() { |
1162 | - return $this->get( 'TKT_row' ); |
|
1162 | + return $this->get('TKT_row'); |
|
1163 | 1163 | } |
1164 | 1164 | |
1165 | 1165 | |
@@ -1171,8 +1171,8 @@ discard block |
||
1171 | 1171 | * @return void |
1172 | 1172 | * @throws \EE_Error |
1173 | 1173 | */ |
1174 | - public function set_row( $row ) { |
|
1175 | - $this->set( 'TKT_row', $row ); |
|
1174 | + public function set_row($row) { |
|
1175 | + $this->set('TKT_row', $row); |
|
1176 | 1176 | } |
1177 | 1177 | |
1178 | 1178 | |
@@ -1184,7 +1184,7 @@ discard block |
||
1184 | 1184 | * @throws \EE_Error |
1185 | 1185 | */ |
1186 | 1186 | public function deleted() { |
1187 | - return $this->get( 'TKT_deleted' ); |
|
1187 | + return $this->get('TKT_deleted'); |
|
1188 | 1188 | } |
1189 | 1189 | |
1190 | 1190 | |
@@ -1196,8 +1196,8 @@ discard block |
||
1196 | 1196 | * @return void |
1197 | 1197 | * @throws \EE_Error |
1198 | 1198 | */ |
1199 | - public function set_deleted( $deleted ) { |
|
1200 | - $this->set( 'TKT_deleted', $deleted ); |
|
1199 | + public function set_deleted($deleted) { |
|
1200 | + $this->set('TKT_deleted', $deleted); |
|
1201 | 1201 | } |
1202 | 1202 | |
1203 | 1203 | |
@@ -1209,7 +1209,7 @@ discard block |
||
1209 | 1209 | * @throws \EE_Error |
1210 | 1210 | */ |
1211 | 1211 | public function parent_ID() { |
1212 | - return $this->get( 'TKT_parent' ); |
|
1212 | + return $this->get('TKT_parent'); |
|
1213 | 1213 | } |
1214 | 1214 | |
1215 | 1215 | |
@@ -1221,8 +1221,8 @@ discard block |
||
1221 | 1221 | * @return void |
1222 | 1222 | * @throws \EE_Error |
1223 | 1223 | */ |
1224 | - public function set_parent_ID( $parent ) { |
|
1225 | - $this->set( 'TKT_parent', $parent ); |
|
1224 | + public function set_parent_ID($parent) { |
|
1225 | + $this->set('TKT_parent', $parent); |
|
1226 | 1226 | } |
1227 | 1227 | |
1228 | 1228 | |
@@ -1235,10 +1235,10 @@ discard block |
||
1235 | 1235 | */ |
1236 | 1236 | public function name_and_info() { |
1237 | 1237 | $times = array(); |
1238 | - foreach ( $this->datetimes() as $datetime ) { |
|
1238 | + foreach ($this->datetimes() as $datetime) { |
|
1239 | 1239 | $times[] = $datetime->start_date_and_time(); |
1240 | 1240 | } |
1241 | - return $this->name() . ' @ ' . implode( ', ', $times ) . ' for ' . $this->pretty_price(); |
|
1241 | + return $this->name().' @ '.implode(', ', $times).' for '.$this->pretty_price(); |
|
1242 | 1242 | } |
1243 | 1243 | |
1244 | 1244 | |
@@ -1250,7 +1250,7 @@ discard block |
||
1250 | 1250 | * @throws \EE_Error |
1251 | 1251 | */ |
1252 | 1252 | public function name() { |
1253 | - return $this->get( 'TKT_name' ); |
|
1253 | + return $this->get('TKT_name'); |
|
1254 | 1254 | } |
1255 | 1255 | |
1256 | 1256 | |
@@ -1262,7 +1262,7 @@ discard block |
||
1262 | 1262 | * @throws \EE_Error |
1263 | 1263 | */ |
1264 | 1264 | public function price() { |
1265 | - return $this->get( 'TKT_price' ); |
|
1265 | + return $this->get('TKT_price'); |
|
1266 | 1266 | } |
1267 | 1267 | |
1268 | 1268 | |
@@ -1274,8 +1274,8 @@ discard block |
||
1274 | 1274 | * @return EE_Registration[]|EE_Base_Class[] |
1275 | 1275 | * @throws \EE_Error |
1276 | 1276 | */ |
1277 | - public function registrations( $query_params = array() ) { |
|
1278 | - return $this->get_many_related( 'Registration', $query_params ); |
|
1277 | + public function registrations($query_params = array()) { |
|
1278 | + return $this->get_many_related('Registration', $query_params); |
|
1279 | 1279 | } |
1280 | 1280 | |
1281 | 1281 | |
@@ -1314,7 +1314,7 @@ discard block |
||
1314 | 1314 | * @param array $query_params like EEM_Base::get_all's |
1315 | 1315 | * @return int |
1316 | 1316 | */ |
1317 | - public function count_registrations( $query_params = array() ) { |
|
1317 | + public function count_registrations($query_params = array()) { |
|
1318 | 1318 | return $this->count_related('Registration', $query_params); |
1319 | 1319 | } |
1320 | 1320 | |
@@ -1342,23 +1342,23 @@ discard block |
||
1342 | 1342 | public function get_related_event() { |
1343 | 1343 | //get one datetime to use for getting the event |
1344 | 1344 | $datetime = $this->first_datetime(); |
1345 | - if ( ! $datetime instanceof \EE_Datetime ) { |
|
1345 | + if ( ! $datetime instanceof \EE_Datetime) { |
|
1346 | 1346 | throw new UnexpectedEntityException( |
1347 | 1347 | $datetime, |
1348 | 1348 | 'EE_Datetime', |
1349 | 1349 | sprintf( |
1350 | - __( 'The ticket (%s) is not associated with any valid datetimes.', 'event_espresso'), |
|
1350 | + __('The ticket (%s) is not associated with any valid datetimes.', 'event_espresso'), |
|
1351 | 1351 | $this->name() |
1352 | 1352 | ) |
1353 | 1353 | ); |
1354 | 1354 | } |
1355 | 1355 | $event = $datetime->event(); |
1356 | - if ( ! $event instanceof \EE_Event ) { |
|
1356 | + if ( ! $event instanceof \EE_Event) { |
|
1357 | 1357 | throw new UnexpectedEntityException( |
1358 | 1358 | $event, |
1359 | 1359 | 'EE_Event', |
1360 | 1360 | sprintf( |
1361 | - __( 'The ticket (%s) is not associated with a valid event.', 'event_espresso'), |
|
1361 | + __('The ticket (%s) is not associated with a valid event.', 'event_espresso'), |
|
1362 | 1362 | $this->name() |
1363 | 1363 | ) |
1364 | 1364 | ); |
@@ -358,13 +358,13 @@ discard block |
||
358 | 358 | |
359 | 359 | |
360 | 360 | |
361 | - /** |
|
362 | - * get event start date. Provide either the date format, or NULL to re-use the |
|
363 | - * last-used format, or '' to use the default date format |
|
364 | - * |
|
365 | - * @param string $dt_frmt - string representation of date format defaults to 'F j, Y' |
|
366 | - * @return mixed string on success, FALSE on fail |
|
367 | - */ |
|
361 | + /** |
|
362 | + * get event start date. Provide either the date format, or NULL to re-use the |
|
363 | + * last-used format, or '' to use the default date format |
|
364 | + * |
|
365 | + * @param string $dt_frmt - string representation of date format defaults to 'F j, Y' |
|
366 | + * @return mixed string on success, FALSE on fail |
|
367 | + */ |
|
368 | 368 | public function start_date( $dt_frmt = '' ) { |
369 | 369 | return $this->_show_datetime( 'D', 'start', $dt_frmt ); |
370 | 370 | } |
@@ -381,13 +381,13 @@ discard block |
||
381 | 381 | |
382 | 382 | |
383 | 383 | |
384 | - /** |
|
385 | - * get end date. Provide either the date format, or NULL to re-use the |
|
386 | - * last-used format, or '' to use the default date format |
|
387 | - * |
|
388 | - * @param string $dt_frmt - string representation of date format defaults to 'F j, Y' |
|
389 | - * @return mixed string on success, FALSE on fail |
|
390 | - */ |
|
384 | + /** |
|
385 | + * get end date. Provide either the date format, or NULL to re-use the |
|
386 | + * last-used format, or '' to use the default date format |
|
387 | + * |
|
388 | + * @param string $dt_frmt - string representation of date format defaults to 'F j, Y' |
|
389 | + * @return mixed string on success, FALSE on fail |
|
390 | + */ |
|
391 | 391 | public function end_date( $dt_frmt = '' ) { |
392 | 392 | return $this->_show_datetime( 'D', 'end', $dt_frmt ); |
393 | 393 | } |
@@ -509,23 +509,23 @@ discard block |
||
509 | 509 | /** |
510 | 510 | * This returns a range representation of the date and times. |
511 | 511 | * Output is dependent on the difference (or similarity) between DTT_EVT_start and DTT_EVT_end. |
512 | - * Also, the return value is localized. |
|
513 | - * |
|
514 | - * @param string $dt_format |
|
512 | + * Also, the return value is localized. |
|
513 | + * |
|
514 | + * @param string $dt_format |
|
515 | 515 | * @param string $tm_format |
516 | 516 | * @param string $conjunction used between two different dates or times. |
517 | - * ex: Dec 1{$conjunction}}Dec 6, or 2pm{$conjunction}3pm |
|
518 | - * @param string $separator used between the date and time formats. |
|
519 | - * ex: Dec 1, 2016{$separator}2pm |
|
517 | + * ex: Dec 1{$conjunction}}Dec 6, or 2pm{$conjunction}3pm |
|
518 | + * @param string $separator used between the date and time formats. |
|
519 | + * ex: Dec 1, 2016{$separator}2pm |
|
520 | 520 | * @return string |
521 | 521 | * @throws \EE_Error |
522 | 522 | */ |
523 | 523 | public function date_and_time_range( |
524 | - $dt_format = '', |
|
525 | - $tm_format = '', |
|
526 | - $conjunction = ' - ' , |
|
527 | - $separator = ' ' |
|
528 | - ) { |
|
524 | + $dt_format = '', |
|
525 | + $tm_format = '', |
|
526 | + $conjunction = ' - ' , |
|
527 | + $separator = ' ' |
|
528 | + ) { |
|
529 | 529 | $dt_format = ! empty( $dt_format ) ? $dt_format : $this->_dt_frmt; |
530 | 530 | $tm_format = ! empty( $tm_format ) ? $tm_format : $this->_tm_frmt; |
531 | 531 | $full_format = $dt_format . $separator . $tm_format; |
@@ -539,14 +539,14 @@ discard block |
||
539 | 539 | //start and end date are the same but times are different |
540 | 540 | case ( $this->start_date() === $this->end_date() ) : |
541 | 541 | $output = $this->get_i18n_datetime( 'DTT_EVT_start', $full_format ) |
542 | - . $conjunction |
|
543 | - . $this->get_i18n_datetime( 'DTT_EVT_end', $tm_format ); |
|
542 | + . $conjunction |
|
543 | + . $this->get_i18n_datetime( 'DTT_EVT_end', $tm_format ); |
|
544 | 544 | break; |
545 | 545 | //all other conditions |
546 | 546 | default : |
547 | 547 | $output = $this->get_i18n_datetime( 'DTT_EVT_start', $full_format ) |
548 | - . $conjunction |
|
549 | - . $this->get_i18n_datetime( 'DTT_EVT_end', $full_format ); |
|
548 | + . $conjunction |
|
549 | + . $this->get_i18n_datetime( 'DTT_EVT_end', $full_format ); |
|
550 | 550 | break; |
551 | 551 | } |
552 | 552 | return $output; |
@@ -630,13 +630,13 @@ discard block |
||
630 | 630 | |
631 | 631 | |
632 | 632 | /** |
633 | - * get end date and time |
|
634 | - * |
|
635 | - * @param string $dt_frmt - string representation of date format defaults to 'F j, Y' |
|
636 | - * @param string $tm_format - string representation of time format defaults to 'g:i a' |
|
637 | - * @return mixed string on success, FALSE on fail |
|
638 | - */ |
|
639 | - public function end_date_and_time($dt_frmt = '', $tm_format = '') { |
|
633 | + * get end date and time |
|
634 | + * |
|
635 | + * @param string $dt_frmt - string representation of date format defaults to 'F j, Y' |
|
636 | + * @param string $tm_format - string representation of time format defaults to 'g:i a' |
|
637 | + * @return mixed string on success, FALSE on fail |
|
638 | + */ |
|
639 | + public function end_date_and_time($dt_frmt = '', $tm_format = '') { |
|
640 | 640 | return $this->_show_datetime( '', 'end', $dt_frmt, $tm_format ); |
641 | 641 | } |
642 | 642 | |
@@ -905,13 +905,13 @@ discard block |
||
905 | 905 | |
906 | 906 | |
907 | 907 | |
908 | - /** |
|
909 | - * Updates the DTT_sold attribute (and saves) based on the number of registrations for this datetime (via the tickets). |
|
910 | - * into account |
|
911 | - * |
|
912 | - * @return int |
|
913 | - * @throws \EE_Error |
|
914 | - */ |
|
908 | + /** |
|
909 | + * Updates the DTT_sold attribute (and saves) based on the number of registrations for this datetime (via the tickets). |
|
910 | + * into account |
|
911 | + * |
|
912 | + * @return int |
|
913 | + * @throws \EE_Error |
|
914 | + */ |
|
915 | 915 | public function update_sold() { |
916 | 916 | $count_regs_for_this_datetime = EEM_Registration::instance()->count( |
917 | 917 | array( array( |
@@ -920,14 +920,14 @@ discard block |
||
920 | 920 | 'Ticket.Datetime.DTT_ID' => $this->ID(), |
921 | 921 | ) ) |
922 | 922 | ); |
923 | - $sold = $this->sold(); |
|
924 | - if ($count_regs_for_this_datetime > $sold) { |
|
925 | - $this->increase_sold($count_regs_for_this_datetime - $sold); |
|
926 | - $this->save(); |
|
927 | - } else if ($count_regs_for_this_datetime < $sold) { |
|
928 | - $this->decrease_sold($count_regs_for_this_datetime - $sold); |
|
929 | - $this->save(); |
|
930 | - } |
|
923 | + $sold = $this->sold(); |
|
924 | + if ($count_regs_for_this_datetime > $sold) { |
|
925 | + $this->increase_sold($count_regs_for_this_datetime - $sold); |
|
926 | + $this->save(); |
|
927 | + } else if ($count_regs_for_this_datetime < $sold) { |
|
928 | + $this->decrease_sold($count_regs_for_this_datetime - $sold); |
|
929 | + $this->save(); |
|
930 | + } |
|
931 | 931 | return $count_regs_for_this_datetime; |
932 | 932 | } |
933 | 933 | } |
@@ -1,5 +1,5 @@ discard block |
||
1 | -<?php if ( !defined( 'EVENT_ESPRESSO_VERSION' ) ) { |
|
2 | - exit( 'No direct script access allowed' ); |
|
1 | +<?php if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
|
2 | + exit('No direct script access allowed'); |
|
3 | 3 | } |
4 | 4 | /** |
5 | 5 | * Event Espresso |
@@ -74,9 +74,9 @@ discard block |
||
74 | 74 | * date_format and the second value is the time format |
75 | 75 | * @return EE_Datetime |
76 | 76 | */ |
77 | - public static function new_instance( $props_n_values = array(), $timezone = null, $date_formats = array() ) { |
|
78 | - $has_object = parent::_check_for_object( $props_n_values, __CLASS__, $timezone, $date_formats ); |
|
79 | - return $has_object ? $has_object : new self( $props_n_values, false, $timezone, $date_formats ); |
|
77 | + public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array()) { |
|
78 | + $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats); |
|
79 | + return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats); |
|
80 | 80 | } |
81 | 81 | |
82 | 82 | |
@@ -87,8 +87,8 @@ discard block |
||
87 | 87 | * the website will be used. |
88 | 88 | * @return EE_Datetime |
89 | 89 | */ |
90 | - public static function new_instance_from_db( $props_n_values = array(), $timezone = null ) { |
|
91 | - return new self( $props_n_values, TRUE, $timezone ); |
|
90 | + public static function new_instance_from_db($props_n_values = array(), $timezone = null) { |
|
91 | + return new self($props_n_values, TRUE, $timezone); |
|
92 | 92 | } |
93 | 93 | |
94 | 94 | |
@@ -96,8 +96,8 @@ discard block |
||
96 | 96 | /** |
97 | 97 | * @param $name |
98 | 98 | */ |
99 | - public function set_name( $name ) { |
|
100 | - $this->set( 'DTT_name', $name ); |
|
99 | + public function set_name($name) { |
|
100 | + $this->set('DTT_name', $name); |
|
101 | 101 | } |
102 | 102 | |
103 | 103 | |
@@ -105,8 +105,8 @@ discard block |
||
105 | 105 | /** |
106 | 106 | * @param $description |
107 | 107 | */ |
108 | - public function set_description( $description ) { |
|
109 | - $this->set( 'DTT_description', $description ); |
|
108 | + public function set_description($description) { |
|
109 | + $this->set('DTT_description', $description); |
|
110 | 110 | } |
111 | 111 | |
112 | 112 | |
@@ -118,8 +118,8 @@ discard block |
||
118 | 118 | * |
119 | 119 | * @param string $date a string representation of the event's date ex: Dec. 25, 2025 or 12-25-2025 |
120 | 120 | */ |
121 | - public function set_start_date( $date ) { |
|
122 | - $this->_set_date_for( $date, 'DTT_EVT_start' ); |
|
121 | + public function set_start_date($date) { |
|
122 | + $this->_set_date_for($date, 'DTT_EVT_start'); |
|
123 | 123 | } |
124 | 124 | |
125 | 125 | |
@@ -131,8 +131,8 @@ discard block |
||
131 | 131 | * |
132 | 132 | * @param string $time a string representation of the event time ex: 9am or 7:30 PM |
133 | 133 | */ |
134 | - public function set_start_time( $time ) { |
|
135 | - $this->_set_time_for( $time, 'DTT_EVT_start' ); |
|
134 | + public function set_start_time($time) { |
|
135 | + $this->_set_time_for($time, 'DTT_EVT_start'); |
|
136 | 136 | } |
137 | 137 | |
138 | 138 | |
@@ -144,8 +144,8 @@ discard block |
||
144 | 144 | * |
145 | 145 | * @param string $date a string representation of the event's date ex: Dec. 25, 2025 or 12-25-2025 |
146 | 146 | */ |
147 | - public function set_end_date( $date ) { |
|
148 | - $this->_set_date_for( $date, 'DTT_EVT_end' ); |
|
147 | + public function set_end_date($date) { |
|
148 | + $this->_set_date_for($date, 'DTT_EVT_end'); |
|
149 | 149 | } |
150 | 150 | |
151 | 151 | |
@@ -157,8 +157,8 @@ discard block |
||
157 | 157 | * |
158 | 158 | * @param string $time a string representation of the event time ex: 9am or 7:30 PM |
159 | 159 | */ |
160 | - public function set_end_time( $time ) { |
|
161 | - $this->_set_time_for( $time, 'DTT_EVT_end' ); |
|
160 | + public function set_end_time($time) { |
|
161 | + $this->_set_time_for($time, 'DTT_EVT_end'); |
|
162 | 162 | } |
163 | 163 | |
164 | 164 | |
@@ -170,8 +170,8 @@ discard block |
||
170 | 170 | * |
171 | 171 | * @param int $reg_limit |
172 | 172 | */ |
173 | - public function set_reg_limit( $reg_limit ) { |
|
174 | - $this->set( 'DTT_reg_limit', $reg_limit ); |
|
173 | + public function set_reg_limit($reg_limit) { |
|
174 | + $this->set('DTT_reg_limit', $reg_limit); |
|
175 | 175 | } |
176 | 176 | |
177 | 177 | |
@@ -183,7 +183,7 @@ discard block |
||
183 | 183 | * @return mixed int on success, FALSE on fail |
184 | 184 | */ |
185 | 185 | public function sold() { |
186 | - return $this->get_raw( 'DTT_sold' ); |
|
186 | + return $this->get_raw('DTT_sold'); |
|
187 | 187 | } |
188 | 188 | |
189 | 189 | |
@@ -193,10 +193,10 @@ discard block |
||
193 | 193 | * |
194 | 194 | * @param int $sold |
195 | 195 | */ |
196 | - public function set_sold( $sold ) { |
|
196 | + public function set_sold($sold) { |
|
197 | 197 | // sold can not go below zero |
198 | - $sold = max( 0, $sold ); |
|
199 | - $this->set( 'DTT_sold', $sold ); |
|
198 | + $sold = max(0, $sold); |
|
199 | + $this->set('DTT_sold', $sold); |
|
200 | 200 | } |
201 | 201 | |
202 | 202 | |
@@ -205,11 +205,11 @@ discard block |
||
205 | 205 | * increments sold by amount passed by $qty |
206 | 206 | * @param int $qty |
207 | 207 | */ |
208 | - public function increase_sold( $qty = 1 ) { |
|
208 | + public function increase_sold($qty = 1) { |
|
209 | 209 | $sold = $this->sold() + $qty; |
210 | 210 | // remove ticket reservation |
211 | - $this->decrease_reserved( $qty ); |
|
212 | - $this->set_sold( $sold ); |
|
211 | + $this->decrease_reserved($qty); |
|
212 | + $this->set_sold($sold); |
|
213 | 213 | } |
214 | 214 | |
215 | 215 | |
@@ -218,9 +218,9 @@ discard block |
||
218 | 218 | * decrements (subtracts) sold amount passed by $qty |
219 | 219 | * @param int $qty |
220 | 220 | */ |
221 | - public function decrease_sold( $qty = 1 ) { |
|
221 | + public function decrease_sold($qty = 1) { |
|
222 | 222 | $sold = $this->sold() - $qty; |
223 | - $this->set_sold( $sold ); |
|
223 | + $this->set_sold($sold); |
|
224 | 224 | } |
225 | 225 | |
226 | 226 | |
@@ -231,7 +231,7 @@ discard block |
||
231 | 231 | * @return int |
232 | 232 | */ |
233 | 233 | public function reserved() { |
234 | - return $this->get_raw( 'DTT_reserved' ); |
|
234 | + return $this->get_raw('DTT_reserved'); |
|
235 | 235 | } |
236 | 236 | |
237 | 237 | |
@@ -241,10 +241,10 @@ discard block |
||
241 | 241 | * |
242 | 242 | * @param int $reserved |
243 | 243 | */ |
244 | - public function set_reserved( $reserved ) { |
|
244 | + public function set_reserved($reserved) { |
|
245 | 245 | // reserved can not go below zero |
246 | - $reserved = max( 0, (int) $reserved ); |
|
247 | - $this->set( 'DTT_reserved', $reserved ); |
|
246 | + $reserved = max(0, (int) $reserved); |
|
247 | + $this->set('DTT_reserved', $reserved); |
|
248 | 248 | } |
249 | 249 | |
250 | 250 | |
@@ -255,9 +255,9 @@ discard block |
||
255 | 255 | * @param int $qty |
256 | 256 | * @return boolean |
257 | 257 | */ |
258 | - public function increase_reserved( $qty = 1 ) { |
|
259 | - $reserved = $this->reserved() + absint( $qty ); |
|
260 | - return $this->set_reserved( $reserved ); |
|
258 | + public function increase_reserved($qty = 1) { |
|
259 | + $reserved = $this->reserved() + absint($qty); |
|
260 | + return $this->set_reserved($reserved); |
|
261 | 261 | } |
262 | 262 | |
263 | 263 | |
@@ -268,9 +268,9 @@ discard block |
||
268 | 268 | * @param int $qty |
269 | 269 | * @return boolean |
270 | 270 | */ |
271 | - public function decrease_reserved( $qty = 1 ) { |
|
272 | - $reserved = $this->reserved() - absint( $qty ); |
|
273 | - return $this->set_reserved( $reserved ); |
|
271 | + public function decrease_reserved($qty = 1) { |
|
272 | + $reserved = $this->reserved() - absint($qty); |
|
273 | + return $this->set_reserved($reserved); |
|
274 | 274 | } |
275 | 275 | |
276 | 276 | |
@@ -291,7 +291,7 @@ discard block |
||
291 | 291 | * @return string |
292 | 292 | */ |
293 | 293 | public function name() { |
294 | - return $this->get( 'DTT_name' ); |
|
294 | + return $this->get('DTT_name'); |
|
295 | 295 | } |
296 | 296 | |
297 | 297 | |
@@ -301,7 +301,7 @@ discard block |
||
301 | 301 | * @return string |
302 | 302 | */ |
303 | 303 | public function description() { |
304 | - return $this->get( 'DTT_description' ); |
|
304 | + return $this->get('DTT_description'); |
|
305 | 305 | } |
306 | 306 | |
307 | 307 | |
@@ -311,7 +311,7 @@ discard block |
||
311 | 311 | * @return boolean TRUE if is primary, FALSE if not. |
312 | 312 | */ |
313 | 313 | public function is_primary() { |
314 | - return $this->get( 'DTT_is_primary' ); |
|
314 | + return $this->get('DTT_is_primary'); |
|
315 | 315 | } |
316 | 316 | |
317 | 317 | |
@@ -321,7 +321,7 @@ discard block |
||
321 | 321 | * @return int The order of the datetime for this event. |
322 | 322 | */ |
323 | 323 | public function order() { |
324 | - return $this->get( 'DTT_order' ); |
|
324 | + return $this->get('DTT_order'); |
|
325 | 325 | } |
326 | 326 | |
327 | 327 | |
@@ -331,7 +331,7 @@ discard block |
||
331 | 331 | * @return int |
332 | 332 | */ |
333 | 333 | public function parent() { |
334 | - return $this->get( 'DTT_parent' ); |
|
334 | + return $this->get('DTT_parent'); |
|
335 | 335 | } |
336 | 336 | |
337 | 337 | |
@@ -347,10 +347,10 @@ discard block |
||
347 | 347 | * @param bool $echo - whether we echo or return (note echoing uses "pretty" formats, otherwise we use the standard formats) |
348 | 348 | * @return string|bool string on success, FALSE on fail |
349 | 349 | */ |
350 | - private function _show_datetime( $date_or_time = NULL, $start_or_end = 'start', $dt_frmt = '', $tm_frmt = '', $echo = FALSE ) { |
|
350 | + private function _show_datetime($date_or_time = NULL, $start_or_end = 'start', $dt_frmt = '', $tm_frmt = '', $echo = FALSE) { |
|
351 | 351 | $field_name = "DTT_EVT_{$start_or_end}"; |
352 | - $dtt = $this->_get_datetime( $field_name, $dt_frmt, $tm_frmt, $date_or_time, $echo ); |
|
353 | - if ( ! $echo ) { |
|
352 | + $dtt = $this->_get_datetime($field_name, $dt_frmt, $tm_frmt, $date_or_time, $echo); |
|
353 | + if ( ! $echo) { |
|
354 | 354 | return $dtt; |
355 | 355 | } |
356 | 356 | return ''; |
@@ -365,8 +365,8 @@ discard block |
||
365 | 365 | * @param string $dt_frmt - string representation of date format defaults to 'F j, Y' |
366 | 366 | * @return mixed string on success, FALSE on fail |
367 | 367 | */ |
368 | - public function start_date( $dt_frmt = '' ) { |
|
369 | - return $this->_show_datetime( 'D', 'start', $dt_frmt ); |
|
368 | + public function start_date($dt_frmt = '') { |
|
369 | + return $this->_show_datetime('D', 'start', $dt_frmt); |
|
370 | 370 | } |
371 | 371 | |
372 | 372 | |
@@ -375,8 +375,8 @@ discard block |
||
375 | 375 | * Echoes start_date() |
376 | 376 | * @param string $dt_frmt |
377 | 377 | */ |
378 | - public function e_start_date( $dt_frmt = '' ) { |
|
379 | - $this->_show_datetime( 'D', 'start', $dt_frmt, NULL, TRUE ); |
|
378 | + public function e_start_date($dt_frmt = '') { |
|
379 | + $this->_show_datetime('D', 'start', $dt_frmt, NULL, TRUE); |
|
380 | 380 | } |
381 | 381 | |
382 | 382 | |
@@ -388,8 +388,8 @@ discard block |
||
388 | 388 | * @param string $dt_frmt - string representation of date format defaults to 'F j, Y' |
389 | 389 | * @return mixed string on success, FALSE on fail |
390 | 390 | */ |
391 | - public function end_date( $dt_frmt = '' ) { |
|
392 | - return $this->_show_datetime( 'D', 'end', $dt_frmt ); |
|
391 | + public function end_date($dt_frmt = '') { |
|
392 | + return $this->_show_datetime('D', 'end', $dt_frmt); |
|
393 | 393 | } |
394 | 394 | |
395 | 395 | |
@@ -398,8 +398,8 @@ discard block |
||
398 | 398 | * Echoes the end date. See end_date() |
399 | 399 | * @param string $dt_frmt |
400 | 400 | */ |
401 | - public function e_end_date( $dt_frmt = '' ) { |
|
402 | - $this->_show_datetime( 'D', 'end', $dt_frmt, NULL, TRUE ); |
|
401 | + public function e_end_date($dt_frmt = '') { |
|
402 | + $this->_show_datetime('D', 'end', $dt_frmt, NULL, TRUE); |
|
403 | 403 | } |
404 | 404 | |
405 | 405 | |
@@ -414,11 +414,11 @@ discard block |
||
414 | 414 | * @return mixed string on success, FALSE on fail |
415 | 415 | * @throws \EE_Error |
416 | 416 | */ |
417 | - public function date_range( $dt_frmt = '', $conjunction = ' - ' ) { |
|
418 | - $dt_frmt = ! empty( $dt_frmt ) ? $dt_frmt : $this->_dt_frmt; |
|
419 | - $start = str_replace( ' ', ' ', $this->get_i18n_datetime( 'DTT_EVT_start', $dt_frmt ) ); |
|
420 | - $end = str_replace( ' ', ' ', $this->get_i18n_datetime( 'DTT_EVT_end', $dt_frmt ) ); |
|
421 | - return $start !== $end ? $start . $conjunction . $end : $start; |
|
417 | + public function date_range($dt_frmt = '', $conjunction = ' - ') { |
|
418 | + $dt_frmt = ! empty($dt_frmt) ? $dt_frmt : $this->_dt_frmt; |
|
419 | + $start = str_replace(' ', ' ', $this->get_i18n_datetime('DTT_EVT_start', $dt_frmt)); |
|
420 | + $end = str_replace(' ', ' ', $this->get_i18n_datetime('DTT_EVT_end', $dt_frmt)); |
|
421 | + return $start !== $end ? $start.$conjunction.$end : $start; |
|
422 | 422 | } |
423 | 423 | |
424 | 424 | |
@@ -428,8 +428,8 @@ discard block |
||
428 | 428 | * @param string $conjunction |
429 | 429 | * @throws \EE_Error |
430 | 430 | */ |
431 | - public function e_date_range( $dt_frmt = '', $conjunction = ' - ' ) { |
|
432 | - echo $this->date_range( $dt_frmt, $conjunction ); |
|
431 | + public function e_date_range($dt_frmt = '', $conjunction = ' - ') { |
|
432 | + echo $this->date_range($dt_frmt, $conjunction); |
|
433 | 433 | } |
434 | 434 | |
435 | 435 | |
@@ -440,8 +440,8 @@ discard block |
||
440 | 440 | * @param string $tm_format - string representation of time format defaults to 'g:i a' |
441 | 441 | * @return mixed string on success, FALSE on fail |
442 | 442 | */ |
443 | - public function start_time( $tm_format = '' ) { |
|
444 | - return $this->_show_datetime( 'T', 'start', NULL, $tm_format ); |
|
443 | + public function start_time($tm_format = '') { |
|
444 | + return $this->_show_datetime('T', 'start', NULL, $tm_format); |
|
445 | 445 | } |
446 | 446 | |
447 | 447 | |
@@ -449,8 +449,8 @@ discard block |
||
449 | 449 | /** |
450 | 450 | * @param string $tm_format |
451 | 451 | */ |
452 | - public function e_start_time( $tm_format = '' ) { |
|
453 | - $this->_show_datetime( 'T', 'start', NULL, $tm_format, TRUE ); |
|
452 | + public function e_start_time($tm_format = '') { |
|
453 | + $this->_show_datetime('T', 'start', NULL, $tm_format, TRUE); |
|
454 | 454 | } |
455 | 455 | |
456 | 456 | |
@@ -461,8 +461,8 @@ discard block |
||
461 | 461 | * @param string $tm_format - string representation of time format defaults to 'g:i a' |
462 | 462 | * @return mixed string on success, FALSE on fail |
463 | 463 | */ |
464 | - public function end_time( $tm_format = '' ) { |
|
465 | - return $this->_show_datetime( 'T', 'end', NULL, $tm_format ); |
|
464 | + public function end_time($tm_format = '') { |
|
465 | + return $this->_show_datetime('T', 'end', NULL, $tm_format); |
|
466 | 466 | } |
467 | 467 | |
468 | 468 | |
@@ -470,8 +470,8 @@ discard block |
||
470 | 470 | /** |
471 | 471 | * @param string $tm_format |
472 | 472 | */ |
473 | - public function e_end_time( $tm_format = '' ) { |
|
474 | - $this->_show_datetime( 'T', 'end', NULL, $tm_format, TRUE ); |
|
473 | + public function e_end_time($tm_format = '') { |
|
474 | + $this->_show_datetime('T', 'end', NULL, $tm_format, TRUE); |
|
475 | 475 | } |
476 | 476 | |
477 | 477 | |
@@ -486,11 +486,11 @@ discard block |
||
486 | 486 | * @return mixed string on success, FALSE on fail |
487 | 487 | * @throws \EE_Error |
488 | 488 | */ |
489 | - public function time_range( $tm_format = '', $conjunction = ' - ' ) { |
|
490 | - $tm_format = ! empty( $tm_format ) ? $tm_format : $this->_tm_frmt; |
|
491 | - $start = str_replace( ' ', ' ', $this->get_i18n_datetime( 'DTT_EVT_start', $tm_format ) ); |
|
492 | - $end = str_replace( ' ', ' ', $this->get_i18n_datetime( 'DTT_EVT_end', $tm_format ) ); |
|
493 | - return $start !== $end ? $start . $conjunction . $end : $start; |
|
489 | + public function time_range($tm_format = '', $conjunction = ' - ') { |
|
490 | + $tm_format = ! empty($tm_format) ? $tm_format : $this->_tm_frmt; |
|
491 | + $start = str_replace(' ', ' ', $this->get_i18n_datetime('DTT_EVT_start', $tm_format)); |
|
492 | + $end = str_replace(' ', ' ', $this->get_i18n_datetime('DTT_EVT_end', $tm_format)); |
|
493 | + return $start !== $end ? $start.$conjunction.$end : $start; |
|
494 | 494 | } |
495 | 495 | |
496 | 496 | |
@@ -500,8 +500,8 @@ discard block |
||
500 | 500 | * @param string $conjunction |
501 | 501 | * @throws \EE_Error |
502 | 502 | */ |
503 | - public function e_time_range( $tm_format = '', $conjunction = ' - ' ) { |
|
504 | - echo $this->time_range( $tm_format, $conjunction ); |
|
503 | + public function e_time_range($tm_format = '', $conjunction = ' - ') { |
|
504 | + echo $this->time_range($tm_format, $conjunction); |
|
505 | 505 | } |
506 | 506 | |
507 | 507 | |
@@ -523,30 +523,30 @@ discard block |
||
523 | 523 | public function date_and_time_range( |
524 | 524 | $dt_format = '', |
525 | 525 | $tm_format = '', |
526 | - $conjunction = ' - ' , |
|
526 | + $conjunction = ' - ', |
|
527 | 527 | $separator = ' ' |
528 | 528 | ) { |
529 | - $dt_format = ! empty( $dt_format ) ? $dt_format : $this->_dt_frmt; |
|
530 | - $tm_format = ! empty( $tm_format ) ? $tm_format : $this->_tm_frmt; |
|
531 | - $full_format = $dt_format . $separator . $tm_format; |
|
529 | + $dt_format = ! empty($dt_format) ? $dt_format : $this->_dt_frmt; |
|
530 | + $tm_format = ! empty($tm_format) ? $tm_format : $this->_tm_frmt; |
|
531 | + $full_format = $dt_format.$separator.$tm_format; |
|
532 | 532 | |
533 | 533 | //the range output depends on various conditions |
534 | - switch ( true ) { |
|
534 | + switch (true) { |
|
535 | 535 | //start date timestamp and end date timestamp are the same. |
536 | - case ( $this->get_raw( 'DTT_EVT_start' ) === $this->get_raw( 'DTT_EVT_end' ) ) : |
|
537 | - $output = $this->get_i18n_datetime( 'DTT_EVT_start', $full_format ); |
|
536 | + case ($this->get_raw('DTT_EVT_start') === $this->get_raw('DTT_EVT_end')) : |
|
537 | + $output = $this->get_i18n_datetime('DTT_EVT_start', $full_format); |
|
538 | 538 | break; |
539 | 539 | //start and end date are the same but times are different |
540 | - case ( $this->start_date() === $this->end_date() ) : |
|
541 | - $output = $this->get_i18n_datetime( 'DTT_EVT_start', $full_format ) |
|
540 | + case ($this->start_date() === $this->end_date()) : |
|
541 | + $output = $this->get_i18n_datetime('DTT_EVT_start', $full_format) |
|
542 | 542 | . $conjunction |
543 | - . $this->get_i18n_datetime( 'DTT_EVT_end', $tm_format ); |
|
543 | + . $this->get_i18n_datetime('DTT_EVT_end', $tm_format); |
|
544 | 544 | break; |
545 | 545 | //all other conditions |
546 | 546 | default : |
547 | - $output = $this->get_i18n_datetime( 'DTT_EVT_start', $full_format ) |
|
547 | + $output = $this->get_i18n_datetime('DTT_EVT_start', $full_format) |
|
548 | 548 | . $conjunction |
549 | - . $this->get_i18n_datetime( 'DTT_EVT_end', $full_format ); |
|
549 | + . $this->get_i18n_datetime('DTT_EVT_end', $full_format); |
|
550 | 550 | break; |
551 | 551 | } |
552 | 552 | return $output; |
@@ -564,8 +564,8 @@ discard block |
||
564 | 564 | * @return void |
565 | 565 | * @throws \EE_Error |
566 | 566 | */ |
567 | - public function e_date_and_time_range( $dt_format = '', $tm_format = '', $conjunction = ' - ' ) { |
|
568 | - echo $this->date_and_time_range( $dt_format, $tm_format, $conjunction ); |
|
567 | + public function e_date_and_time_range($dt_format = '', $tm_format = '', $conjunction = ' - ') { |
|
568 | + echo $this->date_and_time_range($dt_format, $tm_format, $conjunction); |
|
569 | 569 | } |
570 | 570 | |
571 | 571 | |
@@ -577,8 +577,8 @@ discard block |
||
577 | 577 | * @param string $tm_format - string representation of time format defaults to 'g:i a' |
578 | 578 | * @return mixed string on success, FALSE on fail |
579 | 579 | */ |
580 | - public function start_date_and_time( $dt_format = '', $tm_format = '' ) { |
|
581 | - return $this->_show_datetime( '', 'start', $dt_format, $tm_format ); |
|
580 | + public function start_date_and_time($dt_format = '', $tm_format = '') { |
|
581 | + return $this->_show_datetime('', 'start', $dt_format, $tm_format); |
|
582 | 582 | } |
583 | 583 | |
584 | 584 | |
@@ -587,8 +587,8 @@ discard block |
||
587 | 587 | * @param string $dt_frmt |
588 | 588 | * @param string $tm_format |
589 | 589 | */ |
590 | - public function e_start_date_and_time( $dt_frmt = '', $tm_format = '' ) { |
|
591 | - $this->_show_datetime( '', 'start', $dt_frmt, $tm_format, TRUE ); |
|
590 | + public function e_start_date_and_time($dt_frmt = '', $tm_format = '') { |
|
591 | + $this->_show_datetime('', 'start', $dt_frmt, $tm_format, TRUE); |
|
592 | 592 | } |
593 | 593 | |
594 | 594 | |
@@ -602,11 +602,11 @@ discard block |
||
602 | 602 | * @param bool $round_up |
603 | 603 | * @return float|int|mixed |
604 | 604 | */ |
605 | - public function length( $units = 'seconds', $round_up = FALSE ) { |
|
606 | - $start = $this->get_raw( 'DTT_EVT_start' ); |
|
607 | - $end = $this->get_raw( 'DTT_EVT_end' ); |
|
605 | + public function length($units = 'seconds', $round_up = FALSE) { |
|
606 | + $start = $this->get_raw('DTT_EVT_start'); |
|
607 | + $end = $this->get_raw('DTT_EVT_end'); |
|
608 | 608 | $length_in_units = $end - $start; |
609 | - switch ( $units ) { |
|
609 | + switch ($units) { |
|
610 | 610 | //NOTE: We purposefully don't use "break;" in order to chain the divisions |
611 | 611 | /** @noinspection PhpMissingBreakStatementInspection */ |
612 | 612 | case 'days': |
@@ -619,10 +619,10 @@ discard block |
||
619 | 619 | $length_in_units /= 60; |
620 | 620 | case 'seconds': |
621 | 621 | default: |
622 | - $length_in_units = ceil( $length_in_units ); |
|
622 | + $length_in_units = ceil($length_in_units); |
|
623 | 623 | } |
624 | - if ( $round_up ) { |
|
625 | - $length_in_units = max( $length_in_units, 1 ); |
|
624 | + if ($round_up) { |
|
625 | + $length_in_units = max($length_in_units, 1); |
|
626 | 626 | } |
627 | 627 | return $length_in_units; |
628 | 628 | } |
@@ -637,7 +637,7 @@ discard block |
||
637 | 637 | * @return mixed string on success, FALSE on fail |
638 | 638 | */ |
639 | 639 | public function end_date_and_time($dt_frmt = '', $tm_format = '') { |
640 | - return $this->_show_datetime( '', 'end', $dt_frmt, $tm_format ); |
|
640 | + return $this->_show_datetime('', 'end', $dt_frmt, $tm_format); |
|
641 | 641 | } |
642 | 642 | |
643 | 643 | |
@@ -646,8 +646,8 @@ discard block |
||
646 | 646 | * @param string $dt_frmt |
647 | 647 | * @param string $tm_format |
648 | 648 | */ |
649 | - public function e_end_date_and_time( $dt_frmt = '', $tm_format = '' ) { |
|
650 | - $this->_show_datetime( '', 'end', $dt_frmt, $tm_format, TRUE ); |
|
649 | + public function e_end_date_and_time($dt_frmt = '', $tm_format = '') { |
|
650 | + $this->_show_datetime('', 'end', $dt_frmt, $tm_format, TRUE); |
|
651 | 651 | } |
652 | 652 | |
653 | 653 | |
@@ -658,7 +658,7 @@ discard block |
||
658 | 658 | * @return int |
659 | 659 | */ |
660 | 660 | public function start() { |
661 | - return $this->get_raw( 'DTT_EVT_start' ); |
|
661 | + return $this->get_raw('DTT_EVT_start'); |
|
662 | 662 | } |
663 | 663 | |
664 | 664 | |
@@ -669,7 +669,7 @@ discard block |
||
669 | 669 | * @return int |
670 | 670 | */ |
671 | 671 | public function end() { |
672 | - return $this->get_raw( 'DTT_EVT_end' ); |
|
672 | + return $this->get_raw('DTT_EVT_end'); |
|
673 | 673 | } |
674 | 674 | |
675 | 675 | |
@@ -680,7 +680,7 @@ discard block |
||
680 | 680 | * @return mixed int on success, FALSE on fail |
681 | 681 | */ |
682 | 682 | public function reg_limit() { |
683 | - return $this->get_raw( 'DTT_reg_limit' ); |
|
683 | + return $this->get_raw('DTT_reg_limit'); |
|
684 | 684 | } |
685 | 685 | |
686 | 686 | |
@@ -708,15 +708,15 @@ discard block |
||
708 | 708 | * the spaces remaining for this particular datetime, hence the flag. |
709 | 709 | * @return int |
710 | 710 | */ |
711 | - public function spaces_remaining( $consider_tickets = FALSE ) { |
|
711 | + public function spaces_remaining($consider_tickets = FALSE) { |
|
712 | 712 | // tickets remaining available for purchase |
713 | 713 | //no need for special checks for infinite, because if DTT_reg_limit == EE_INF, then EE_INF - x = EE_INF |
714 | 714 | $dtt_remaining = $this->reg_limit() - $this->sold_and_reserved(); |
715 | - if ( ! $consider_tickets ) { |
|
715 | + if ( ! $consider_tickets) { |
|
716 | 716 | return $dtt_remaining; |
717 | 717 | } |
718 | 718 | $tickets_remaining = $this->tickets_remaining(); |
719 | - return min( $dtt_remaining, $tickets_remaining ); |
|
719 | + return min($dtt_remaining, $tickets_remaining); |
|
720 | 720 | } |
721 | 721 | |
722 | 722 | |
@@ -727,19 +727,19 @@ discard block |
||
727 | 727 | * @param array $query_params like EEM_Base::get_all's |
728 | 728 | * @return int |
729 | 729 | */ |
730 | - public function tickets_remaining( $query_params = array() ) { |
|
730 | + public function tickets_remaining($query_params = array()) { |
|
731 | 731 | $sum = 0; |
732 | - $tickets = $this->tickets( $query_params ); |
|
733 | - if ( ! empty( $tickets ) ) { |
|
734 | - foreach ( $tickets as $ticket ) { |
|
735 | - if ( $ticket instanceof EE_Ticket ) { |
|
732 | + $tickets = $this->tickets($query_params); |
|
733 | + if ( ! empty($tickets)) { |
|
734 | + foreach ($tickets as $ticket) { |
|
735 | + if ($ticket instanceof EE_Ticket) { |
|
736 | 736 | // get the actual amount of tickets that can be sold |
737 | - $qty = $ticket->qty( 'saleable' ); |
|
738 | - if ( $qty === EE_INF ) { |
|
737 | + $qty = $ticket->qty('saleable'); |
|
738 | + if ($qty === EE_INF) { |
|
739 | 739 | return EE_INF; |
740 | 740 | } |
741 | 741 | // no negative ticket quantities plz |
742 | - if ( $qty > 0 ) { |
|
742 | + if ($qty > 0) { |
|
743 | 743 | $sum += $qty; |
744 | 744 | } |
745 | 745 | } |
@@ -756,8 +756,8 @@ discard block |
||
756 | 756 | * @param array $query_params like EEM_Base::get_all's |
757 | 757 | * @return int |
758 | 758 | */ |
759 | - public function sum_tickets_initially_available( $query_params = array() ) { |
|
760 | - return $this->sum_related( 'Ticket', $query_params, 'TKT_qty' ); |
|
759 | + public function sum_tickets_initially_available($query_params = array()) { |
|
760 | + return $this->sum_related('Ticket', $query_params, 'TKT_qty'); |
|
761 | 761 | } |
762 | 762 | |
763 | 763 | |
@@ -769,7 +769,7 @@ discard block |
||
769 | 769 | * @return int |
770 | 770 | */ |
771 | 771 | public function total_tickets_available_at_this_datetime() { |
772 | - return $this->spaces_remaining( true ); |
|
772 | + return $this->spaces_remaining(true); |
|
773 | 773 | } |
774 | 774 | |
775 | 775 | |
@@ -780,7 +780,7 @@ discard block |
||
780 | 780 | * @return boolean |
781 | 781 | */ |
782 | 782 | public function is_upcoming() { |
783 | - return ( $this->get_raw( 'DTT_EVT_start' ) > time() ); |
|
783 | + return ($this->get_raw('DTT_EVT_start') > time()); |
|
784 | 784 | } |
785 | 785 | |
786 | 786 | |
@@ -790,7 +790,7 @@ discard block |
||
790 | 790 | * @return boolean |
791 | 791 | */ |
792 | 792 | public function is_active() { |
793 | - return ( $this->get_raw( 'DTT_EVT_start' ) < time() && $this->get_raw( 'DTT_EVT_end' ) > time() ); |
|
793 | + return ($this->get_raw('DTT_EVT_start') < time() && $this->get_raw('DTT_EVT_end') > time()); |
|
794 | 794 | } |
795 | 795 | |
796 | 796 | |
@@ -800,7 +800,7 @@ discard block |
||
800 | 800 | * @return boolean |
801 | 801 | */ |
802 | 802 | public function is_expired() { |
803 | - return ( $this->get_raw( 'DTT_EVT_end' ) < time() ); |
|
803 | + return ($this->get_raw('DTT_EVT_end') < time()); |
|
804 | 804 | } |
805 | 805 | |
806 | 806 | |
@@ -811,16 +811,16 @@ discard block |
||
811 | 811 | */ |
812 | 812 | public function get_active_status() { |
813 | 813 | $total_tickets_for_this_dtt = $this->total_tickets_available_at_this_datetime(); |
814 | - if ( $total_tickets_for_this_dtt !== FALSE && $total_tickets_for_this_dtt < 1 ) { |
|
814 | + if ($total_tickets_for_this_dtt !== FALSE && $total_tickets_for_this_dtt < 1) { |
|
815 | 815 | return EE_Datetime::sold_out; |
816 | 816 | } |
817 | - if ( $this->is_expired() ) { |
|
817 | + if ($this->is_expired()) { |
|
818 | 818 | return EE_Datetime::expired; |
819 | 819 | } |
820 | - if ( $this->is_upcoming() ) { |
|
820 | + if ($this->is_upcoming()) { |
|
821 | 821 | return EE_Datetime::upcoming; |
822 | 822 | } |
823 | - if ( $this->is_active() ) { |
|
823 | + if ($this->is_active()) { |
|
824 | 824 | return EE_Datetime::active; |
825 | 825 | } |
826 | 826 | return NULL; |
@@ -834,24 +834,24 @@ discard block |
||
834 | 834 | * @param boolean $use_dtt_name if TRUE then we'll use DTT->name() if its not empty. |
835 | 835 | * @return string |
836 | 836 | */ |
837 | - public function get_dtt_display_name( $use_dtt_name = FALSE ) { |
|
838 | - if ( $use_dtt_name ) { |
|
837 | + public function get_dtt_display_name($use_dtt_name = FALSE) { |
|
838 | + if ($use_dtt_name) { |
|
839 | 839 | $dtt_name = $this->name(); |
840 | - if ( !empty( $dtt_name ) ) { |
|
840 | + if ( ! empty($dtt_name)) { |
|
841 | 841 | return $dtt_name; |
842 | 842 | } |
843 | 843 | } |
844 | 844 | //first condition is to see if the months are different |
845 | - if ( date( 'm', $this->get_raw( 'DTT_EVT_start' ) ) != date( 'm', $this->get_raw( 'DTT_EVT_end' ) ) ) { |
|
846 | - $display_date = $this->start_date( 'M j\, Y g:i a' ) . ' - ' . $this->end_date( 'M j\, Y g:i a' ); |
|
845 | + if (date('m', $this->get_raw('DTT_EVT_start')) != date('m', $this->get_raw('DTT_EVT_end'))) { |
|
846 | + $display_date = $this->start_date('M j\, Y g:i a').' - '.$this->end_date('M j\, Y g:i a'); |
|
847 | 847 | //next condition is if its the same month but different day |
848 | 848 | } |
849 | 849 | else { |
850 | - if ( date( 'm', $this->get_raw( 'DTT_EVT_start' ) ) == date( 'm', $this->get_raw( 'DTT_EVT_end' ) ) && date( 'd', $this->get_raw( 'DTT_EVT_start' ) ) != date( 'd', $this->get_raw( 'DTT_EVT_end' ) ) ) { |
|
851 | - $display_date = $this->start_date( 'M j\, g:i a' ) . ' - ' . $this->end_date( 'M j\, g:i a Y' ); |
|
850 | + if (date('m', $this->get_raw('DTT_EVT_start')) == date('m', $this->get_raw('DTT_EVT_end')) && date('d', $this->get_raw('DTT_EVT_start')) != date('d', $this->get_raw('DTT_EVT_end'))) { |
|
851 | + $display_date = $this->start_date('M j\, g:i a').' - '.$this->end_date('M j\, g:i a Y'); |
|
852 | 852 | } |
853 | 853 | else { |
854 | - $display_date = $this->start_date( 'F j\, Y' ) . ' @ ' . $this->start_date( 'g:i a' ) . ' - ' . $this->end_date( 'g:i a' ); |
|
854 | + $display_date = $this->start_date('F j\, Y').' @ '.$this->start_date('g:i a').' - '.$this->end_date('g:i a'); |
|
855 | 855 | } |
856 | 856 | } |
857 | 857 | return $display_date; |
@@ -865,8 +865,8 @@ discard block |
||
865 | 865 | *@param array $query_params see EEM_Base::get_all() |
866 | 866 | * @return EE_Ticket[] |
867 | 867 | */ |
868 | - public function tickets( $query_params = array() ) { |
|
869 | - return $this->get_many_related( 'Ticket', $query_params ); |
|
868 | + public function tickets($query_params = array()) { |
|
869 | + return $this->get_many_related('Ticket', $query_params); |
|
870 | 870 | } |
871 | 871 | |
872 | 872 | |
@@ -876,21 +876,21 @@ discard block |
||
876 | 876 | * @param array $query_params like EEM_Base::get_all's |
877 | 877 | * @return EE_Ticket[] |
878 | 878 | */ |
879 | - public function ticket_types_available_for_purchase( $query_params = array() ) { |
|
879 | + public function ticket_types_available_for_purchase($query_params = array()) { |
|
880 | 880 | // first check if datetime is valid |
881 | - if ( ! ( $this->is_upcoming() || $this->is_active() ) || $this->sold_out() ) { |
|
881 | + if ( ! ($this->is_upcoming() || $this->is_active()) || $this->sold_out()) { |
|
882 | 882 | return array(); |
883 | 883 | } |
884 | - if ( empty( $query_params ) ) { |
|
884 | + if (empty($query_params)) { |
|
885 | 885 | $query_params = array( |
886 | 886 | array( |
887 | - 'TKT_start_date' => array( '<=', EEM_Ticket::instance()->current_time_for_query( 'TKT_start_date' ) ), |
|
888 | - 'TKT_end_date' => array( '>=', EEM_Ticket::instance()->current_time_for_query( 'TKT_end_date' ) ), |
|
887 | + 'TKT_start_date' => array('<=', EEM_Ticket::instance()->current_time_for_query('TKT_start_date')), |
|
888 | + 'TKT_end_date' => array('>=', EEM_Ticket::instance()->current_time_for_query('TKT_end_date')), |
|
889 | 889 | 'TKT_deleted' => false |
890 | 890 | ) |
891 | 891 | ); |
892 | 892 | } |
893 | - return $this->tickets( $query_params ); |
|
893 | + return $this->tickets($query_params); |
|
894 | 894 | } |
895 | 895 | |
896 | 896 | |
@@ -900,7 +900,7 @@ discard block |
||
900 | 900 | * @return EE_Event |
901 | 901 | */ |
902 | 902 | public function event() { |
903 | - return $this->get_first_related( 'Event' ); |
|
903 | + return $this->get_first_related('Event'); |
|
904 | 904 | } |
905 | 905 | |
906 | 906 | |
@@ -914,11 +914,11 @@ discard block |
||
914 | 914 | */ |
915 | 915 | public function update_sold() { |
916 | 916 | $count_regs_for_this_datetime = EEM_Registration::instance()->count( |
917 | - array( array( |
|
917 | + array(array( |
|
918 | 918 | 'STS_ID' => EEM_Registration::status_id_approved, |
919 | 919 | 'REG_deleted' => 0, |
920 | 920 | 'Ticket.Datetime.DTT_ID' => $this->ID(), |
921 | - ) ) |
|
921 | + )) |
|
922 | 922 | ); |
923 | 923 | $sold = $this->sold(); |
924 | 924 | if ($count_regs_for_this_datetime > $sold) { |
@@ -1,5 +1,5 @@ discard block |
||
1 | 1 | <?php if ( ! defined('EVENT_ESPRESSO_VERSION')) { |
2 | - exit('No direct script access allowed'); |
|
2 | + exit('No direct script access allowed'); |
|
3 | 3 | } |
4 | 4 | |
5 | 5 | /** |
@@ -12,165 +12,165 @@ discard block |
||
12 | 12 | class EE_Cron_Tasks extends EE_Base |
13 | 13 | { |
14 | 14 | |
15 | - /** |
|
16 | - * WordPress doesn't allow duplicate crons within 10 minutes of the original, |
|
17 | - * so we'll set our retry time for just over 10 minutes to avoid that |
|
18 | - */ |
|
19 | - const reschedule_timeout = 605; |
|
20 | - |
|
21 | - |
|
22 | - /** |
|
23 | - * @var EE_Cron_Tasks |
|
24 | - */ |
|
25 | - private static $_instance; |
|
26 | - |
|
27 | - |
|
28 | - /** |
|
29 | - * @return EE_Cron_Tasks |
|
30 | - */ |
|
31 | - public static function instance() |
|
32 | - { |
|
33 | - if ( ! self::$_instance instanceof EE_Cron_Tasks) { |
|
34 | - self::$_instance = new self(); |
|
35 | - } |
|
36 | - return self::$_instance; |
|
37 | - } |
|
38 | - |
|
39 | - |
|
40 | - /** |
|
41 | - * @access private |
|
42 | - */ |
|
43 | - private function __construct() |
|
44 | - { |
|
45 | - do_action('AHEE_log', __CLASS__, __FUNCTION__); |
|
46 | - // verify that WP Cron is enabled |
|
47 | - if ( |
|
48 | - defined('DISABLE_WP_CRON') |
|
49 | - && DISABLE_WP_CRON |
|
50 | - && is_admin() |
|
51 | - && ! get_option('ee_disabled_wp_cron_check') |
|
52 | - ) { |
|
53 | - /** |
|
54 | - * This needs to be delayed until after the config is loaded because EE_Cron_Tasks is constructed before |
|
55 | - * config is loaded. |
|
56 | - * This is intentionally using a anonymous function so that its not easily de-registered. Client code |
|
57 | - * wanting to not have this functionality can just register its own action at a priority after this one to |
|
58 | - * reverse any changes. |
|
59 | - */ |
|
60 | - add_action('AHEE__EE_System__load_core_configuration__complete', function () { |
|
61 | - EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request = true; |
|
62 | - EE_Registry::instance()->NET_CFG->update_config(true, false); |
|
63 | - add_option('ee_disabled_wp_cron_check', 1, '', false); |
|
64 | - }); |
|
65 | - } |
|
66 | - // UPDATE TRANSACTION WITH PAYMENT |
|
67 | - add_action( |
|
68 | - 'AHEE__EE_Cron_Tasks__update_transaction_with_payment_2', |
|
69 | - array('EE_Cron_Tasks', 'setup_update_for_transaction_with_payment'), |
|
70 | - 10, 2 |
|
71 | - ); |
|
72 | - // FINALIZE ABANDONED TRANSACTIONS |
|
73 | - add_action( |
|
74 | - 'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions', |
|
75 | - array('EE_Cron_Tasks', 'check_for_abandoned_transactions'), |
|
76 | - 10, 1 |
|
77 | - ); |
|
15 | + /** |
|
16 | + * WordPress doesn't allow duplicate crons within 10 minutes of the original, |
|
17 | + * so we'll set our retry time for just over 10 minutes to avoid that |
|
18 | + */ |
|
19 | + const reschedule_timeout = 605; |
|
20 | + |
|
21 | + |
|
22 | + /** |
|
23 | + * @var EE_Cron_Tasks |
|
24 | + */ |
|
25 | + private static $_instance; |
|
26 | + |
|
27 | + |
|
28 | + /** |
|
29 | + * @return EE_Cron_Tasks |
|
30 | + */ |
|
31 | + public static function instance() |
|
32 | + { |
|
33 | + if ( ! self::$_instance instanceof EE_Cron_Tasks) { |
|
34 | + self::$_instance = new self(); |
|
35 | + } |
|
36 | + return self::$_instance; |
|
37 | + } |
|
38 | + |
|
39 | + |
|
40 | + /** |
|
41 | + * @access private |
|
42 | + */ |
|
43 | + private function __construct() |
|
44 | + { |
|
45 | + do_action('AHEE_log', __CLASS__, __FUNCTION__); |
|
46 | + // verify that WP Cron is enabled |
|
47 | + if ( |
|
48 | + defined('DISABLE_WP_CRON') |
|
49 | + && DISABLE_WP_CRON |
|
50 | + && is_admin() |
|
51 | + && ! get_option('ee_disabled_wp_cron_check') |
|
52 | + ) { |
|
53 | + /** |
|
54 | + * This needs to be delayed until after the config is loaded because EE_Cron_Tasks is constructed before |
|
55 | + * config is loaded. |
|
56 | + * This is intentionally using a anonymous function so that its not easily de-registered. Client code |
|
57 | + * wanting to not have this functionality can just register its own action at a priority after this one to |
|
58 | + * reverse any changes. |
|
59 | + */ |
|
60 | + add_action('AHEE__EE_System__load_core_configuration__complete', function () { |
|
61 | + EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request = true; |
|
62 | + EE_Registry::instance()->NET_CFG->update_config(true, false); |
|
63 | + add_option('ee_disabled_wp_cron_check', 1, '', false); |
|
64 | + }); |
|
65 | + } |
|
66 | + // UPDATE TRANSACTION WITH PAYMENT |
|
67 | + add_action( |
|
68 | + 'AHEE__EE_Cron_Tasks__update_transaction_with_payment_2', |
|
69 | + array('EE_Cron_Tasks', 'setup_update_for_transaction_with_payment'), |
|
70 | + 10, 2 |
|
71 | + ); |
|
72 | + // FINALIZE ABANDONED TRANSACTIONS |
|
73 | + add_action( |
|
74 | + 'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions', |
|
75 | + array('EE_Cron_Tasks', 'check_for_abandoned_transactions'), |
|
76 | + 10, 1 |
|
77 | + ); |
|
78 | 78 | // EXPIRED TRANSACTION CHECK |
79 | 79 | add_action( |
80 | 80 | 'AHEE__EE_Cron_Tasks__expired_transaction_check', |
81 | 81 | array( 'EE_Cron_Tasks', 'expired_transaction_check' ), |
82 | 82 | 10, 1 |
83 | 83 | ); |
84 | - // CLEAN OUT JUNK TRANSACTIONS AND RELATED DATA |
|
85 | - add_action( |
|
86 | - 'AHEE__EE_Cron_Tasks__clean_up_junk_transactions', |
|
87 | - array('EE_Cron_Tasks', 'clean_out_junk_transactions') |
|
88 | - ); |
|
89 | - // logging |
|
90 | - add_action( |
|
91 | - 'AHEE__EE_System__load_core_configuration__complete', |
|
92 | - array('EE_Cron_Tasks', 'log_scheduled_ee_crons') |
|
93 | - ); |
|
94 | - EE_Registry::instance()->load_lib('Messages_Scheduler'); |
|
95 | - //clean out old gateway logs |
|
96 | - add_action( |
|
97 | - 'AHEE_EE_Cron_Tasks__clean_out_old_gateway_logs', |
|
98 | - array('EE_Cron_Tasks', 'clean_out_old_gateway_logs') |
|
99 | - ); |
|
100 | - } |
|
101 | - |
|
102 | - |
|
103 | - /** |
|
104 | - * @access protected |
|
105 | - * @return void |
|
106 | - */ |
|
107 | - public static function log_scheduled_ee_crons() |
|
108 | - { |
|
109 | - $ee_crons = array( |
|
110 | - 'AHEE__EE_Cron_Tasks__update_transaction_with_payment', |
|
111 | - 'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions', |
|
112 | - 'AHEE__EE_Cron_Tasks__clean_up_junk_transactions', |
|
113 | - ); |
|
114 | - $crons = (array) get_option('cron'); |
|
115 | - if ( ! is_array($crons)) { |
|
116 | - return; |
|
117 | - } |
|
118 | - foreach ($crons as $timestamp => $cron) { |
|
119 | - foreach ($ee_crons as $ee_cron) { |
|
120 | - if (isset($cron[$ee_cron]) && is_array($cron[$ee_cron])) { |
|
121 | - do_action('AHEE_log', __CLASS__, __FUNCTION__, $ee_cron, 'scheduled EE cron'); |
|
122 | - foreach ($cron[$ee_cron] as $ee_cron_details) { |
|
123 | - if ( ! empty($ee_cron_details['args'])) { |
|
124 | - do_action( |
|
125 | - 'AHEE_log', |
|
126 | - __CLASS__, |
|
127 | - __FUNCTION__, |
|
128 | - print_r($ee_cron_details['args'], true), |
|
129 | - "{$ee_cron} args" |
|
130 | - ); |
|
131 | - } |
|
132 | - } |
|
133 | - } |
|
134 | - } |
|
135 | - } |
|
136 | - } |
|
137 | - |
|
138 | - |
|
139 | - |
|
140 | - /** |
|
141 | - * reschedule_cron_for_transactions_if_maintenance_mode |
|
142 | - * if Maintenance Mode is active, this will reschedule a cron to run again in 10 minutes |
|
143 | - * |
|
144 | - * @param string $cron_task |
|
145 | - * @param array $TXN_IDs |
|
146 | - * @return bool |
|
147 | - * @throws \DomainException |
|
148 | - */ |
|
84 | + // CLEAN OUT JUNK TRANSACTIONS AND RELATED DATA |
|
85 | + add_action( |
|
86 | + 'AHEE__EE_Cron_Tasks__clean_up_junk_transactions', |
|
87 | + array('EE_Cron_Tasks', 'clean_out_junk_transactions') |
|
88 | + ); |
|
89 | + // logging |
|
90 | + add_action( |
|
91 | + 'AHEE__EE_System__load_core_configuration__complete', |
|
92 | + array('EE_Cron_Tasks', 'log_scheduled_ee_crons') |
|
93 | + ); |
|
94 | + EE_Registry::instance()->load_lib('Messages_Scheduler'); |
|
95 | + //clean out old gateway logs |
|
96 | + add_action( |
|
97 | + 'AHEE_EE_Cron_Tasks__clean_out_old_gateway_logs', |
|
98 | + array('EE_Cron_Tasks', 'clean_out_old_gateway_logs') |
|
99 | + ); |
|
100 | + } |
|
101 | + |
|
102 | + |
|
103 | + /** |
|
104 | + * @access protected |
|
105 | + * @return void |
|
106 | + */ |
|
107 | + public static function log_scheduled_ee_crons() |
|
108 | + { |
|
109 | + $ee_crons = array( |
|
110 | + 'AHEE__EE_Cron_Tasks__update_transaction_with_payment', |
|
111 | + 'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions', |
|
112 | + 'AHEE__EE_Cron_Tasks__clean_up_junk_transactions', |
|
113 | + ); |
|
114 | + $crons = (array) get_option('cron'); |
|
115 | + if ( ! is_array($crons)) { |
|
116 | + return; |
|
117 | + } |
|
118 | + foreach ($crons as $timestamp => $cron) { |
|
119 | + foreach ($ee_crons as $ee_cron) { |
|
120 | + if (isset($cron[$ee_cron]) && is_array($cron[$ee_cron])) { |
|
121 | + do_action('AHEE_log', __CLASS__, __FUNCTION__, $ee_cron, 'scheduled EE cron'); |
|
122 | + foreach ($cron[$ee_cron] as $ee_cron_details) { |
|
123 | + if ( ! empty($ee_cron_details['args'])) { |
|
124 | + do_action( |
|
125 | + 'AHEE_log', |
|
126 | + __CLASS__, |
|
127 | + __FUNCTION__, |
|
128 | + print_r($ee_cron_details['args'], true), |
|
129 | + "{$ee_cron} args" |
|
130 | + ); |
|
131 | + } |
|
132 | + } |
|
133 | + } |
|
134 | + } |
|
135 | + } |
|
136 | + } |
|
137 | + |
|
138 | + |
|
139 | + |
|
140 | + /** |
|
141 | + * reschedule_cron_for_transactions_if_maintenance_mode |
|
142 | + * if Maintenance Mode is active, this will reschedule a cron to run again in 10 minutes |
|
143 | + * |
|
144 | + * @param string $cron_task |
|
145 | + * @param array $TXN_IDs |
|
146 | + * @return bool |
|
147 | + * @throws \DomainException |
|
148 | + */ |
|
149 | 149 | public static function reschedule_cron_for_transactions_if_maintenance_mode( $cron_task, array $TXN_IDs ) { |
150 | - if( ! method_exists('EE_Cron_Tasks', $cron_task)) { |
|
151 | - throw new \DomainException( |
|
152 | - sprintf( |
|
153 | - __('"%1$s" is not valid method on EE_Cron_Tasks.', 'event_espresso'), |
|
154 | - $cron_task |
|
155 | - ) |
|
156 | - ); |
|
157 | - } |
|
150 | + if( ! method_exists('EE_Cron_Tasks', $cron_task)) { |
|
151 | + throw new \DomainException( |
|
152 | + sprintf( |
|
153 | + __('"%1$s" is not valid method on EE_Cron_Tasks.', 'event_espresso'), |
|
154 | + $cron_task |
|
155 | + ) |
|
156 | + ); |
|
157 | + } |
|
158 | 158 | // reschedule the cron if we can't hit the db right now |
159 | 159 | if ( ! EE_Maintenance_Mode::instance()->models_can_query() ) { |
160 | 160 | foreach( $TXN_IDs as $TXN_ID => $additional_vars ) { |
161 | - // ensure $additional_vars is an array |
|
162 | - $additional_vars = is_array($additional_vars) ? $additional_vars : array($additional_vars); |
|
161 | + // ensure $additional_vars is an array |
|
162 | + $additional_vars = is_array($additional_vars) ? $additional_vars : array($additional_vars); |
|
163 | 163 | // reset cron job for the TXN |
164 | - call_user_func_array( |
|
165 | - array('EE_Cron_Tasks', $cron_task), |
|
166 | - array_merge( |
|
167 | - array( |
|
168 | - time() + (10 * MINUTE_IN_SECONDS), |
|
169 | - $TXN_ID |
|
170 | - ), |
|
171 | - $additional_vars |
|
172 | - ) |
|
173 | - ); |
|
164 | + call_user_func_array( |
|
165 | + array('EE_Cron_Tasks', $cron_task), |
|
166 | + array_merge( |
|
167 | + array( |
|
168 | + time() + (10 * MINUTE_IN_SECONDS), |
|
169 | + $TXN_ID |
|
170 | + ), |
|
171 | + $additional_vars |
|
172 | + ) |
|
173 | + ); |
|
174 | 174 | } |
175 | 175 | return true; |
176 | 176 | } |
@@ -180,85 +180,85 @@ discard block |
||
180 | 180 | |
181 | 181 | |
182 | 182 | |
183 | - /**************** UPDATE TRANSACTION WITH PAYMENT ****************/ |
|
184 | - |
|
185 | - |
|
186 | - /** |
|
187 | - * array of TXN IDs and the payment |
|
188 | - * |
|
189 | - * @var array |
|
190 | - */ |
|
191 | - protected static $_update_transactions_with_payment = array(); |
|
192 | - |
|
193 | - |
|
194 | - /** |
|
195 | - * schedule_update_transaction_with_payment |
|
196 | - * sets a wp_schedule_single_event() for updating any TXNs that may |
|
197 | - * require updating due to recently received payments |
|
198 | - * |
|
199 | - * @param int $timestamp |
|
200 | - * @param int $TXN_ID |
|
201 | - * @param int $PAY_ID |
|
202 | - */ |
|
203 | - public static function schedule_update_transaction_with_payment( |
|
204 | - $timestamp, |
|
205 | - $TXN_ID, |
|
206 | - $PAY_ID |
|
207 | - ) { |
|
208 | - do_action('AHEE_log', __CLASS__, __FUNCTION__); |
|
209 | - // validate $TXN_ID and $timestamp |
|
210 | - $TXN_ID = absint($TXN_ID); |
|
211 | - $timestamp = absint($timestamp); |
|
212 | - if ($TXN_ID && $timestamp) { |
|
213 | - wp_schedule_single_event( |
|
214 | - $timestamp, |
|
215 | - 'AHEE__EE_Cron_Tasks__update_transaction_with_payment_2', |
|
216 | - array($TXN_ID, $PAY_ID) |
|
217 | - ); |
|
218 | - } |
|
219 | - } |
|
220 | - |
|
221 | - |
|
222 | - /** |
|
223 | - * setup_update_for_transaction_with_payment |
|
224 | - * this is the callback for the action hook: |
|
225 | - * 'AHEE__EE_Cron_Tasks__update_transaction_with_payment' |
|
226 | - * which is setup by EE_Cron_Tasks::schedule_update_transaction_with_payment(). |
|
227 | - * The passed TXN_ID and associated payment gets added to an array, and then |
|
228 | - * the EE_Cron_Tasks::update_transaction_with_payment() function is hooked into |
|
229 | - * 'shutdown' which will actually handle the processing of any |
|
230 | - * transactions requiring updating, because doing so now would be too early |
|
231 | - * and the required resources may not be available |
|
232 | - * |
|
233 | - * @param int $TXN_ID |
|
234 | - * @param int $PAY_ID |
|
235 | - */ |
|
236 | - public static function setup_update_for_transaction_with_payment($TXN_ID = 0, $PAY_ID = 0) |
|
237 | - { |
|
238 | - do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID'); |
|
239 | - if (absint($TXN_ID)) { |
|
240 | - self::$_update_transactions_with_payment[$TXN_ID] = $PAY_ID; |
|
241 | - add_action( |
|
242 | - 'shutdown', |
|
243 | - array('EE_Cron_Tasks', 'update_transaction_with_payment'), |
|
244 | - 5 |
|
245 | - ); |
|
246 | - } |
|
247 | - } |
|
248 | - |
|
249 | - |
|
250 | - /** |
|
251 | - * update_transaction_with_payment |
|
252 | - * loops through the self::$_abandoned_transactions array |
|
253 | - * and attempts to finalize any TXNs that have not been completed |
|
254 | - * but have had their sessions expired, most likely due to a user not |
|
255 | - * returning from an off-site payment gateway |
|
256 | - * |
|
257 | - * @throws \EE_Error |
|
258 | - */ |
|
259 | - public static function update_transaction_with_payment() |
|
260 | - { |
|
261 | - do_action('AHEE_log', __CLASS__, __FUNCTION__); |
|
183 | + /**************** UPDATE TRANSACTION WITH PAYMENT ****************/ |
|
184 | + |
|
185 | + |
|
186 | + /** |
|
187 | + * array of TXN IDs and the payment |
|
188 | + * |
|
189 | + * @var array |
|
190 | + */ |
|
191 | + protected static $_update_transactions_with_payment = array(); |
|
192 | + |
|
193 | + |
|
194 | + /** |
|
195 | + * schedule_update_transaction_with_payment |
|
196 | + * sets a wp_schedule_single_event() for updating any TXNs that may |
|
197 | + * require updating due to recently received payments |
|
198 | + * |
|
199 | + * @param int $timestamp |
|
200 | + * @param int $TXN_ID |
|
201 | + * @param int $PAY_ID |
|
202 | + */ |
|
203 | + public static function schedule_update_transaction_with_payment( |
|
204 | + $timestamp, |
|
205 | + $TXN_ID, |
|
206 | + $PAY_ID |
|
207 | + ) { |
|
208 | + do_action('AHEE_log', __CLASS__, __FUNCTION__); |
|
209 | + // validate $TXN_ID and $timestamp |
|
210 | + $TXN_ID = absint($TXN_ID); |
|
211 | + $timestamp = absint($timestamp); |
|
212 | + if ($TXN_ID && $timestamp) { |
|
213 | + wp_schedule_single_event( |
|
214 | + $timestamp, |
|
215 | + 'AHEE__EE_Cron_Tasks__update_transaction_with_payment_2', |
|
216 | + array($TXN_ID, $PAY_ID) |
|
217 | + ); |
|
218 | + } |
|
219 | + } |
|
220 | + |
|
221 | + |
|
222 | + /** |
|
223 | + * setup_update_for_transaction_with_payment |
|
224 | + * this is the callback for the action hook: |
|
225 | + * 'AHEE__EE_Cron_Tasks__update_transaction_with_payment' |
|
226 | + * which is setup by EE_Cron_Tasks::schedule_update_transaction_with_payment(). |
|
227 | + * The passed TXN_ID and associated payment gets added to an array, and then |
|
228 | + * the EE_Cron_Tasks::update_transaction_with_payment() function is hooked into |
|
229 | + * 'shutdown' which will actually handle the processing of any |
|
230 | + * transactions requiring updating, because doing so now would be too early |
|
231 | + * and the required resources may not be available |
|
232 | + * |
|
233 | + * @param int $TXN_ID |
|
234 | + * @param int $PAY_ID |
|
235 | + */ |
|
236 | + public static function setup_update_for_transaction_with_payment($TXN_ID = 0, $PAY_ID = 0) |
|
237 | + { |
|
238 | + do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID'); |
|
239 | + if (absint($TXN_ID)) { |
|
240 | + self::$_update_transactions_with_payment[$TXN_ID] = $PAY_ID; |
|
241 | + add_action( |
|
242 | + 'shutdown', |
|
243 | + array('EE_Cron_Tasks', 'update_transaction_with_payment'), |
|
244 | + 5 |
|
245 | + ); |
|
246 | + } |
|
247 | + } |
|
248 | + |
|
249 | + |
|
250 | + /** |
|
251 | + * update_transaction_with_payment |
|
252 | + * loops through the self::$_abandoned_transactions array |
|
253 | + * and attempts to finalize any TXNs that have not been completed |
|
254 | + * but have had their sessions expired, most likely due to a user not |
|
255 | + * returning from an off-site payment gateway |
|
256 | + * |
|
257 | + * @throws \EE_Error |
|
258 | + */ |
|
259 | + public static function update_transaction_with_payment() |
|
260 | + { |
|
261 | + do_action('AHEE_log', __CLASS__, __FUNCTION__); |
|
262 | 262 | if ( |
263 | 263 | // are there any TXNs that need cleaning up ? |
264 | 264 | empty( self::$_update_transactions_with_payment ) |
@@ -268,119 +268,119 @@ discard block |
||
268 | 268 | self::$_update_transactions_with_payment |
269 | 269 | ) |
270 | 270 | ) { |
271 | - return; |
|
272 | - } |
|
273 | - /** @type EE_Payment_Processor $payment_processor */ |
|
274 | - $payment_processor = EE_Registry::instance()->load_core('Payment_Processor'); |
|
275 | - // set revisit flag for payment processor |
|
276 | - $payment_processor->set_revisit(false); |
|
277 | - // load EEM_Transaction |
|
278 | - EE_Registry::instance()->load_model('Transaction'); |
|
279 | - foreach (self::$_update_transactions_with_payment as $TXN_ID => $PAY_ID) { |
|
280 | - // reschedule the cron if we can't hit the db right now |
|
281 | - if ( ! EE_Maintenance_Mode::instance()->models_can_query()) { |
|
282 | - // reset cron job for updating the TXN |
|
283 | - EE_Cron_Tasks::schedule_update_transaction_with_payment( |
|
284 | - time() + EE_Cron_Tasks::reschedule_timeout, |
|
285 | - $TXN_ID, |
|
286 | - $PAY_ID |
|
287 | - ); |
|
288 | - continue; |
|
289 | - } |
|
290 | - $transaction = EEM_Transaction::instance()->get_one_by_ID($TXN_ID); |
|
291 | - $payment = EEM_Payment::instance()->get_one_by_ID($PAY_ID); |
|
292 | - // verify transaction |
|
293 | - if ($transaction instanceof EE_Transaction && $payment instanceof EE_Payment) { |
|
294 | - // now try to update the TXN with any payments |
|
295 | - $payment_processor->update_txn_based_on_payment($transaction, $payment, true, true); |
|
296 | - } |
|
297 | - unset(self::$_update_transactions_with_payment[$TXN_ID]); |
|
298 | - } |
|
299 | - } |
|
300 | - |
|
301 | - |
|
302 | - |
|
303 | - /************ END OF UPDATE TRANSACTION WITH PAYMENT ************/ |
|
304 | - |
|
305 | - |
|
306 | - /***************** FINALIZE ABANDONED TRANSACTIONS *****************/ |
|
307 | - |
|
308 | - |
|
309 | - /** |
|
310 | - * array of TXN IDs |
|
311 | - * |
|
312 | - * @var array |
|
313 | - */ |
|
314 | - protected static $_abandoned_transactions = array(); |
|
315 | - |
|
316 | - |
|
317 | - /** |
|
318 | - * schedule_finalize_abandoned_transactions_check |
|
319 | - * sets a wp_schedule_single_event() for finalizing any TXNs that may |
|
320 | - * have been abandoned during the registration process |
|
321 | - * |
|
322 | - * @param int $timestamp |
|
323 | - * @param int $TXN_ID |
|
324 | - */ |
|
325 | - public static function schedule_finalize_abandoned_transactions_check( |
|
326 | - $timestamp, |
|
327 | - $TXN_ID |
|
328 | - ) { |
|
329 | - // validate $TXN_ID and $timestamp |
|
330 | - $TXN_ID = absint($TXN_ID); |
|
331 | - $timestamp = absint($timestamp); |
|
332 | - do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID'); |
|
333 | - if ($TXN_ID && $timestamp) { |
|
334 | - wp_schedule_single_event( |
|
335 | - $timestamp, |
|
336 | - 'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions', |
|
337 | - array($TXN_ID) |
|
338 | - ); |
|
339 | - } |
|
340 | - } |
|
341 | - |
|
342 | - |
|
343 | - /** |
|
344 | - * check_for_abandoned_transactions |
|
345 | - * this is the callback for the action hook: |
|
346 | - * 'AHEE__EE_Cron_Tasks__espresso_finalize_abandoned_transactions' |
|
347 | - * which is utilized by wp_schedule_single_event() |
|
348 | - * in EE_SPCO_Reg_Step_Payment_Options::_post_payment_processing(). |
|
349 | - * The passed TXN_ID gets added to an array, and then the |
|
350 | - * espresso_finalize_abandoned_transactions() function is hooked into |
|
351 | - * 'AHEE__EE_System__core_loaded_and_ready' which will actually handle the |
|
352 | - * processing of any abandoned transactions, because doing so now would be |
|
353 | - * too early and the required resources may not be available |
|
354 | - * |
|
355 | - * @param int $TXN_ID |
|
356 | - */ |
|
357 | - public static function check_for_abandoned_transactions($TXN_ID = 0) |
|
358 | - { |
|
359 | - do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID'); |
|
360 | - if (absint($TXN_ID)) { |
|
361 | - self::$_abandoned_transactions[] = $TXN_ID; |
|
362 | - add_action( |
|
363 | - 'shutdown', |
|
364 | - array('EE_Cron_Tasks', 'finalize_abandoned_transactions'), |
|
365 | - 5 |
|
366 | - ); |
|
367 | - } |
|
368 | - } |
|
369 | - |
|
370 | - |
|
371 | - /** |
|
372 | - * finalize_abandoned_transactions |
|
373 | - * loops through the self::$_abandoned_transactions array |
|
374 | - * and attempts to finalize any TXNs that have not been completed |
|
375 | - * but have had their sessions expired, most likely due to a user not |
|
376 | - * returning from an off-site payment gateway |
|
377 | - * |
|
378 | - * @throws \EE_Error |
|
379 | - */ |
|
380 | - public static function finalize_abandoned_transactions() |
|
381 | - { |
|
382 | - do_action('AHEE_log', __CLASS__, __FUNCTION__); |
|
383 | - if ( |
|
271 | + return; |
|
272 | + } |
|
273 | + /** @type EE_Payment_Processor $payment_processor */ |
|
274 | + $payment_processor = EE_Registry::instance()->load_core('Payment_Processor'); |
|
275 | + // set revisit flag for payment processor |
|
276 | + $payment_processor->set_revisit(false); |
|
277 | + // load EEM_Transaction |
|
278 | + EE_Registry::instance()->load_model('Transaction'); |
|
279 | + foreach (self::$_update_transactions_with_payment as $TXN_ID => $PAY_ID) { |
|
280 | + // reschedule the cron if we can't hit the db right now |
|
281 | + if ( ! EE_Maintenance_Mode::instance()->models_can_query()) { |
|
282 | + // reset cron job for updating the TXN |
|
283 | + EE_Cron_Tasks::schedule_update_transaction_with_payment( |
|
284 | + time() + EE_Cron_Tasks::reschedule_timeout, |
|
285 | + $TXN_ID, |
|
286 | + $PAY_ID |
|
287 | + ); |
|
288 | + continue; |
|
289 | + } |
|
290 | + $transaction = EEM_Transaction::instance()->get_one_by_ID($TXN_ID); |
|
291 | + $payment = EEM_Payment::instance()->get_one_by_ID($PAY_ID); |
|
292 | + // verify transaction |
|
293 | + if ($transaction instanceof EE_Transaction && $payment instanceof EE_Payment) { |
|
294 | + // now try to update the TXN with any payments |
|
295 | + $payment_processor->update_txn_based_on_payment($transaction, $payment, true, true); |
|
296 | + } |
|
297 | + unset(self::$_update_transactions_with_payment[$TXN_ID]); |
|
298 | + } |
|
299 | + } |
|
300 | + |
|
301 | + |
|
302 | + |
|
303 | + /************ END OF UPDATE TRANSACTION WITH PAYMENT ************/ |
|
304 | + |
|
305 | + |
|
306 | + /***************** FINALIZE ABANDONED TRANSACTIONS *****************/ |
|
307 | + |
|
308 | + |
|
309 | + /** |
|
310 | + * array of TXN IDs |
|
311 | + * |
|
312 | + * @var array |
|
313 | + */ |
|
314 | + protected static $_abandoned_transactions = array(); |
|
315 | + |
|
316 | + |
|
317 | + /** |
|
318 | + * schedule_finalize_abandoned_transactions_check |
|
319 | + * sets a wp_schedule_single_event() for finalizing any TXNs that may |
|
320 | + * have been abandoned during the registration process |
|
321 | + * |
|
322 | + * @param int $timestamp |
|
323 | + * @param int $TXN_ID |
|
324 | + */ |
|
325 | + public static function schedule_finalize_abandoned_transactions_check( |
|
326 | + $timestamp, |
|
327 | + $TXN_ID |
|
328 | + ) { |
|
329 | + // validate $TXN_ID and $timestamp |
|
330 | + $TXN_ID = absint($TXN_ID); |
|
331 | + $timestamp = absint($timestamp); |
|
332 | + do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID'); |
|
333 | + if ($TXN_ID && $timestamp) { |
|
334 | + wp_schedule_single_event( |
|
335 | + $timestamp, |
|
336 | + 'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions', |
|
337 | + array($TXN_ID) |
|
338 | + ); |
|
339 | + } |
|
340 | + } |
|
341 | + |
|
342 | + |
|
343 | + /** |
|
344 | + * check_for_abandoned_transactions |
|
345 | + * this is the callback for the action hook: |
|
346 | + * 'AHEE__EE_Cron_Tasks__espresso_finalize_abandoned_transactions' |
|
347 | + * which is utilized by wp_schedule_single_event() |
|
348 | + * in EE_SPCO_Reg_Step_Payment_Options::_post_payment_processing(). |
|
349 | + * The passed TXN_ID gets added to an array, and then the |
|
350 | + * espresso_finalize_abandoned_transactions() function is hooked into |
|
351 | + * 'AHEE__EE_System__core_loaded_and_ready' which will actually handle the |
|
352 | + * processing of any abandoned transactions, because doing so now would be |
|
353 | + * too early and the required resources may not be available |
|
354 | + * |
|
355 | + * @param int $TXN_ID |
|
356 | + */ |
|
357 | + public static function check_for_abandoned_transactions($TXN_ID = 0) |
|
358 | + { |
|
359 | + do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID'); |
|
360 | + if (absint($TXN_ID)) { |
|
361 | + self::$_abandoned_transactions[] = $TXN_ID; |
|
362 | + add_action( |
|
363 | + 'shutdown', |
|
364 | + array('EE_Cron_Tasks', 'finalize_abandoned_transactions'), |
|
365 | + 5 |
|
366 | + ); |
|
367 | + } |
|
368 | + } |
|
369 | + |
|
370 | + |
|
371 | + /** |
|
372 | + * finalize_abandoned_transactions |
|
373 | + * loops through the self::$_abandoned_transactions array |
|
374 | + * and attempts to finalize any TXNs that have not been completed |
|
375 | + * but have had their sessions expired, most likely due to a user not |
|
376 | + * returning from an off-site payment gateway |
|
377 | + * |
|
378 | + * @throws \EE_Error |
|
379 | + */ |
|
380 | + public static function finalize_abandoned_transactions() |
|
381 | + { |
|
382 | + do_action('AHEE_log', __CLASS__, __FUNCTION__); |
|
383 | + if ( |
|
384 | 384 | // are there any TXNs that need cleaning up ? |
385 | 385 | empty( self::$_abandoned_transactions ) |
386 | 386 | // reschedule the cron if we can't hit the db right now |
@@ -389,45 +389,45 @@ discard block |
||
389 | 389 | self::$_abandoned_transactions |
390 | 390 | ) |
391 | 391 | ) { |
392 | - return; |
|
393 | - } |
|
394 | - /** @type EE_Transaction_Processor $transaction_processor */ |
|
395 | - $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor'); |
|
396 | - // set revisit flag for txn processor |
|
397 | - $transaction_processor->set_revisit(false); |
|
398 | - /** @type EE_Payment_Processor $payment_processor */ |
|
399 | - $payment_processor = EE_Registry::instance()->load_core('Payment_Processor'); |
|
400 | - // load EEM_Transaction |
|
401 | - EE_Registry::instance()->load_model('Transaction'); |
|
402 | - foreach (self::$_abandoned_transactions as $TXN_ID) { |
|
403 | - do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID'); |
|
404 | - // reschedule the cron if we can't hit the db right now |
|
405 | - if ( ! EE_Maintenance_Mode::instance()->models_can_query()) { |
|
406 | - // reset cron job for finalizing the TXN |
|
407 | - EE_Cron_Tasks::schedule_finalize_abandoned_transactions_check( |
|
408 | - time() + EE_Cron_Tasks::reschedule_timeout, |
|
409 | - $TXN_ID |
|
410 | - ); |
|
411 | - continue; |
|
412 | - } |
|
413 | - $transaction = EEM_Transaction::instance()->get_one_by_ID($TXN_ID); |
|
414 | - // verify transaction |
|
415 | - if ($transaction instanceof EE_Transaction) { |
|
416 | - // don't finalize the TXN if it has already been completed |
|
417 | - if ($transaction->all_reg_steps_completed() === true) { |
|
418 | - continue; |
|
419 | - } |
|
420 | - // let's simulate an IPN here which will trigger any notifications that need to go out |
|
421 | - $payment_processor->update_txn_based_on_payment($transaction, $transaction->last_payment(), true, true); |
|
422 | - do_action('AHEE__EE_Cron_Tasks__finalize_abandoned_transactions__abandoned_transaction', $transaction); |
|
423 | - } |
|
424 | - unset(self::$_abandoned_transactions[$TXN_ID]); |
|
425 | - } |
|
426 | - } |
|
427 | - |
|
428 | - |
|
429 | - |
|
430 | - /************* END OF FINALIZE ABANDONED TRANSACTIONS *************/ |
|
392 | + return; |
|
393 | + } |
|
394 | + /** @type EE_Transaction_Processor $transaction_processor */ |
|
395 | + $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor'); |
|
396 | + // set revisit flag for txn processor |
|
397 | + $transaction_processor->set_revisit(false); |
|
398 | + /** @type EE_Payment_Processor $payment_processor */ |
|
399 | + $payment_processor = EE_Registry::instance()->load_core('Payment_Processor'); |
|
400 | + // load EEM_Transaction |
|
401 | + EE_Registry::instance()->load_model('Transaction'); |
|
402 | + foreach (self::$_abandoned_transactions as $TXN_ID) { |
|
403 | + do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID'); |
|
404 | + // reschedule the cron if we can't hit the db right now |
|
405 | + if ( ! EE_Maintenance_Mode::instance()->models_can_query()) { |
|
406 | + // reset cron job for finalizing the TXN |
|
407 | + EE_Cron_Tasks::schedule_finalize_abandoned_transactions_check( |
|
408 | + time() + EE_Cron_Tasks::reschedule_timeout, |
|
409 | + $TXN_ID |
|
410 | + ); |
|
411 | + continue; |
|
412 | + } |
|
413 | + $transaction = EEM_Transaction::instance()->get_one_by_ID($TXN_ID); |
|
414 | + // verify transaction |
|
415 | + if ($transaction instanceof EE_Transaction) { |
|
416 | + // don't finalize the TXN if it has already been completed |
|
417 | + if ($transaction->all_reg_steps_completed() === true) { |
|
418 | + continue; |
|
419 | + } |
|
420 | + // let's simulate an IPN here which will trigger any notifications that need to go out |
|
421 | + $payment_processor->update_txn_based_on_payment($transaction, $transaction->last_payment(), true, true); |
|
422 | + do_action('AHEE__EE_Cron_Tasks__finalize_abandoned_transactions__abandoned_transaction', $transaction); |
|
423 | + } |
|
424 | + unset(self::$_abandoned_transactions[$TXN_ID]); |
|
425 | + } |
|
426 | + } |
|
427 | + |
|
428 | + |
|
429 | + |
|
430 | + /************* END OF FINALIZE ABANDONED TRANSACTIONS *************/ |
|
431 | 431 | |
432 | 432 | |
433 | 433 | /***************** EXPIRED TRANSACTION CHECK *****************/ |
@@ -496,12 +496,12 @@ discard block |
||
496 | 496 | |
497 | 497 | |
498 | 498 | |
499 | - /** |
|
500 | - * process_expired_transactions |
|
501 | - * loops through the self::$_expired_transactions array and processes any failed TXNs |
|
502 | - * |
|
503 | - * @throws \EE_Error |
|
504 | - */ |
|
499 | + /** |
|
500 | + * process_expired_transactions |
|
501 | + * loops through the self::$_expired_transactions array and processes any failed TXNs |
|
502 | + * |
|
503 | + * @throws \EE_Error |
|
504 | + */ |
|
505 | 505 | public static function process_expired_transactions() { |
506 | 506 | if ( |
507 | 507 | // are there any TXNs that need cleaning up ? |
@@ -512,58 +512,58 @@ discard block |
||
512 | 512 | self::$_expired_transactions |
513 | 513 | ) |
514 | 514 | ) { |
515 | - return; |
|
516 | - } |
|
517 | - /** @type EE_Transaction_Processor $transaction_processor */ |
|
518 | - $transaction_processor = EE_Registry::instance()->load_class( 'Transaction_Processor' ); |
|
519 | - // set revisit flag for txn processor |
|
520 | - $transaction_processor->set_revisit( false ); |
|
521 | - // load EEM_Transaction |
|
522 | - EE_Registry::instance()->load_model( 'Transaction' ); |
|
523 | - foreach ( self::$_expired_transactions as $TXN_ID ) { |
|
524 | - $transaction = EEM_Transaction::instance()->get_one_by_ID( $TXN_ID ); |
|
525 | - // verify transaction and whether it is failed or not |
|
526 | - if ( $transaction instanceof EE_Transaction) { |
|
527 | - switch( $transaction->status_ID() ) { |
|
528 | - // Completed TXNs |
|
529 | - case EEM_Transaction::complete_status_code : |
|
530 | - do_action( 'AHEE__EE_Cron_Tasks__process_expired_transactions__completed_transaction', $transaction ); |
|
531 | - break; |
|
532 | - // Overpaid TXNs |
|
533 | - case EEM_Transaction::overpaid_status_code : |
|
534 | - do_action( 'AHEE__EE_Cron_Tasks__process_expired_transactions__overpaid_transaction', $transaction ); |
|
535 | - break; |
|
536 | - // Incomplete TXNs |
|
537 | - case EEM_Transaction::incomplete_status_code : |
|
538 | - do_action( 'AHEE__EE_Cron_Tasks__process_expired_transactions__incomplete_transaction', $transaction ); |
|
539 | - // todo : merge the finalize_abandoned_transactions cron into this one... |
|
540 | - // todo : move business logic into EE_Transaction_Processor for finalizing abandoned transactions |
|
541 | - break; |
|
542 | - // Failed TXNs |
|
543 | - case EEM_Transaction::failed_status_code : |
|
544 | - do_action( 'AHEE__EE_Cron_Tasks__process_expired_transactions__failed_transaction', $transaction ); |
|
545 | - // todo : perform garbage collection here and remove clean_out_junk_transactions() |
|
546 | - //$registrations = $transaction->registrations(); |
|
547 | - //if ( ! empty( $registrations ) ) { |
|
548 | - // foreach ( $registrations as $registration ) { |
|
549 | - // if ( $registration instanceof EE_Registration ) { |
|
550 | - //$delete_registration = true; |
|
551 | - //if ( $registration->attendee() instanceof EE_Attendee ) { |
|
552 | - // $delete_registration = false; |
|
553 | - //} |
|
554 | - //if ( $delete_registration ) { |
|
555 | - // $registration->delete_permanently(); |
|
556 | - // $registration->delete_related_permanently(); |
|
557 | - //} |
|
558 | - // } |
|
559 | - // } |
|
560 | - //} |
|
561 | - break; |
|
562 | - } |
|
563 | - |
|
564 | - } |
|
565 | - unset( self::$_expired_transactions[ $TXN_ID ] ); |
|
566 | - } |
|
515 | + return; |
|
516 | + } |
|
517 | + /** @type EE_Transaction_Processor $transaction_processor */ |
|
518 | + $transaction_processor = EE_Registry::instance()->load_class( 'Transaction_Processor' ); |
|
519 | + // set revisit flag for txn processor |
|
520 | + $transaction_processor->set_revisit( false ); |
|
521 | + // load EEM_Transaction |
|
522 | + EE_Registry::instance()->load_model( 'Transaction' ); |
|
523 | + foreach ( self::$_expired_transactions as $TXN_ID ) { |
|
524 | + $transaction = EEM_Transaction::instance()->get_one_by_ID( $TXN_ID ); |
|
525 | + // verify transaction and whether it is failed or not |
|
526 | + if ( $transaction instanceof EE_Transaction) { |
|
527 | + switch( $transaction->status_ID() ) { |
|
528 | + // Completed TXNs |
|
529 | + case EEM_Transaction::complete_status_code : |
|
530 | + do_action( 'AHEE__EE_Cron_Tasks__process_expired_transactions__completed_transaction', $transaction ); |
|
531 | + break; |
|
532 | + // Overpaid TXNs |
|
533 | + case EEM_Transaction::overpaid_status_code : |
|
534 | + do_action( 'AHEE__EE_Cron_Tasks__process_expired_transactions__overpaid_transaction', $transaction ); |
|
535 | + break; |
|
536 | + // Incomplete TXNs |
|
537 | + case EEM_Transaction::incomplete_status_code : |
|
538 | + do_action( 'AHEE__EE_Cron_Tasks__process_expired_transactions__incomplete_transaction', $transaction ); |
|
539 | + // todo : merge the finalize_abandoned_transactions cron into this one... |
|
540 | + // todo : move business logic into EE_Transaction_Processor for finalizing abandoned transactions |
|
541 | + break; |
|
542 | + // Failed TXNs |
|
543 | + case EEM_Transaction::failed_status_code : |
|
544 | + do_action( 'AHEE__EE_Cron_Tasks__process_expired_transactions__failed_transaction', $transaction ); |
|
545 | + // todo : perform garbage collection here and remove clean_out_junk_transactions() |
|
546 | + //$registrations = $transaction->registrations(); |
|
547 | + //if ( ! empty( $registrations ) ) { |
|
548 | + // foreach ( $registrations as $registration ) { |
|
549 | + // if ( $registration instanceof EE_Registration ) { |
|
550 | + //$delete_registration = true; |
|
551 | + //if ( $registration->attendee() instanceof EE_Attendee ) { |
|
552 | + // $delete_registration = false; |
|
553 | + //} |
|
554 | + //if ( $delete_registration ) { |
|
555 | + // $registration->delete_permanently(); |
|
556 | + // $registration->delete_related_permanently(); |
|
557 | + //} |
|
558 | + // } |
|
559 | + // } |
|
560 | + //} |
|
561 | + break; |
|
562 | + } |
|
563 | + |
|
564 | + } |
|
565 | + unset( self::$_expired_transactions[ $TXN_ID ] ); |
|
566 | + } |
|
567 | 567 | } |
568 | 568 | |
569 | 569 | |
@@ -571,33 +571,33 @@ discard block |
||
571 | 571 | /************* END OF EXPIRED TRANSACTION CHECK *************/ |
572 | 572 | |
573 | 573 | |
574 | - /************* START CLEAN UP BOT TRANSACTIONS **********************/ |
|
575 | - |
|
576 | - //when a transaction is initially made, schedule this check. |
|
577 | - //if it has NO REG data by the time it has expired, forget about it |
|
578 | - public static function clean_out_junk_transactions() |
|
579 | - { |
|
580 | - if (EE_Maintenance_Mode::instance()->models_can_query()) { |
|
581 | - EEM_Transaction::instance('')->delete_junk_transactions(); |
|
582 | - EEM_Registration::instance('')->delete_registrations_with_no_transaction(); |
|
583 | - EEM_Line_Item::instance('')->delete_line_items_with_no_transaction(); |
|
584 | - } |
|
585 | - } |
|
586 | - |
|
587 | - |
|
588 | - |
|
589 | - /** |
|
590 | - * Deletes old gateway logs. After about a week we usually don't need them for debugging. But folks can filter that. |
|
591 | - */ |
|
592 | - public static function clean_out_old_gateway_logs(){ |
|
593 | - if (EE_Maintenance_Mode::instance()->models_can_query()) { |
|
594 | - $time_diff_for_comparison = apply_filters( |
|
595 | - 'FHEE__EE_Cron_Tasks__clean_out_old_gateway_logs__time_diff_for_comparison', |
|
596 | - "-1 week" |
|
597 | - ); |
|
598 | - EEM_Change_Log::instance()->delete_gateway_logs_older_than(new DateTime($time_diff_for_comparison)); |
|
599 | - } |
|
600 | - } |
|
574 | + /************* START CLEAN UP BOT TRANSACTIONS **********************/ |
|
575 | + |
|
576 | + //when a transaction is initially made, schedule this check. |
|
577 | + //if it has NO REG data by the time it has expired, forget about it |
|
578 | + public static function clean_out_junk_transactions() |
|
579 | + { |
|
580 | + if (EE_Maintenance_Mode::instance()->models_can_query()) { |
|
581 | + EEM_Transaction::instance('')->delete_junk_transactions(); |
|
582 | + EEM_Registration::instance('')->delete_registrations_with_no_transaction(); |
|
583 | + EEM_Line_Item::instance('')->delete_line_items_with_no_transaction(); |
|
584 | + } |
|
585 | + } |
|
586 | + |
|
587 | + |
|
588 | + |
|
589 | + /** |
|
590 | + * Deletes old gateway logs. After about a week we usually don't need them for debugging. But folks can filter that. |
|
591 | + */ |
|
592 | + public static function clean_out_old_gateway_logs(){ |
|
593 | + if (EE_Maintenance_Mode::instance()->models_can_query()) { |
|
594 | + $time_diff_for_comparison = apply_filters( |
|
595 | + 'FHEE__EE_Cron_Tasks__clean_out_old_gateway_logs__time_diff_for_comparison', |
|
596 | + "-1 week" |
|
597 | + ); |
|
598 | + EEM_Change_Log::instance()->delete_gateway_logs_older_than(new DateTime($time_diff_for_comparison)); |
|
599 | + } |
|
600 | + } |
|
601 | 601 | |
602 | 602 | |
603 | 603 | } |
@@ -16,234 +16,234 @@ |
||
16 | 16 | class Registry |
17 | 17 | { |
18 | 18 | |
19 | - /** |
|
20 | - * This holds the jsdata data object that will be exposed on pages that enqueue the `eejs-core` script. |
|
21 | - * @var array |
|
22 | - */ |
|
23 | - protected $jsdata = array(); |
|
24 | - |
|
25 | - |
|
26 | - /** |
|
27 | - * Registry constructor. |
|
28 | - * Hooking into WP actions for script registry. |
|
29 | - */ |
|
30 | - public function __construct() |
|
31 | - { |
|
32 | - add_action('wp_enqueue_scripts', array($this, 'scripts'), 100); |
|
33 | - add_action('admin_enqueue_scripts', array($this, 'scripts'), 100); |
|
34 | - add_action('wp_print_footer_scripts', array($this, 'enqueueData'), 1); |
|
35 | - add_action('admin_print_footer_scripts', array($this, 'enqueueData'), 1); |
|
36 | - } |
|
37 | - |
|
38 | - |
|
39 | - /** |
|
40 | - * Callback for the WP script actions. |
|
41 | - * Used to register globally accessible core scripts. |
|
42 | - * Also used to add the eejs.data object to the source for any js having eejs-core as a dependency. |
|
43 | - */ |
|
44 | - public function scripts() |
|
45 | - { |
|
46 | - global $wp_version; |
|
47 | - wp_register_script( |
|
48 | - 'eejs-core', |
|
49 | - EE_PLUGIN_DIR_URL . 'core/services/assets/core_assets/eejs-core.js', |
|
50 | - array(), |
|
51 | - espresso_version(), |
|
52 | - true |
|
53 | - ); |
|
54 | - //only run this if WordPress 4.4.0 > is in use. |
|
55 | - if (version_compare($wp_version, '4.4.0', '>')) { |
|
56 | - //js.api |
|
57 | - wp_register_script( |
|
58 | - 'eejs-api', |
|
59 | - EE_LIBRARIES_URL . 'rest_api/assets/js/eejs-api.min.js', |
|
60 | - array('underscore', 'eejs-core'), |
|
61 | - espresso_version(), |
|
62 | - true |
|
63 | - ); |
|
64 | - $this->jsdata['eejs_api_nonce'] = wp_create_nonce('wp_rest'); |
|
65 | - $this->jsdata['paths'] = array('rest_route' => rest_url('ee/v4.8.36/')); |
|
66 | - } |
|
67 | - } |
|
68 | - |
|
69 | - |
|
70 | - /** |
|
71 | - * Call back for the script print in frontend and backend. |
|
72 | - * Used to call wp_localize_scripts so that data can be added throughout the runtime until this later hookpoint. |
|
73 | - * @since 4.9.31.rc.015 |
|
74 | - */ |
|
75 | - public function enqueueData() |
|
76 | - { |
|
77 | - wp_localize_script('eejs-core', 'eejs', array('data' => $this->jsdata)); |
|
78 | - } |
|
79 | - |
|
80 | - |
|
81 | - /** |
|
82 | - * Used to add data to eejs.data object. |
|
83 | - * |
|
84 | - * Note: Overriding existing data is not allowed. |
|
85 | - * |
|
86 | - * Data will be accessible as a javascript object when you list `eejs-core` as a dependency for your javascript. |
|
87 | - * If the data you add is something like this: |
|
88 | - * |
|
89 | - * $this->addData( 'my_plugin_data', array( 'foo' => 'gar' ) ); |
|
90 | - * |
|
91 | - * It will be exposed in the page source as: |
|
92 | - * |
|
93 | - * eejs.data.my_plugin_data.foo == gar |
|
94 | - * |
|
95 | - * @param string $key Key used to access your data |
|
96 | - * @param string|array $value Value to attach to key |
|
97 | - * @throws InvalidArgumentException |
|
98 | - */ |
|
99 | - public function addData($key, $value) |
|
100 | - { |
|
101 | - if ($this->verifyDataNotExisting($key)) { |
|
102 | - $this->jsdata[$key] = $value; |
|
103 | - } |
|
104 | - } |
|
105 | - |
|
106 | - |
|
107 | - /** |
|
108 | - * Similar to addData except this allows for users to push values to an existing key where the values on key are |
|
109 | - * elements in an array. |
|
110 | - * |
|
111 | - * When you use this method, the value you include will be appended to the end of an array on $key. |
|
112 | - * |
|
113 | - * So if the $key was 'test' and you added a value of 'my_data' then it would be represented in the javascript object |
|
114 | - * like this, |
|
115 | - * |
|
116 | - * eejs.data.test = [ |
|
117 | - * my_data, |
|
118 | - * ] |
|
119 | - * |
|
120 | - * If there has already been a scalar value attached to the data object given key, then |
|
121 | - * this will throw an exception. |
|
122 | - * |
|
123 | - * @param string $key Key to attach data to. |
|
124 | - * @param string|array $value Value being registered. |
|
125 | - * @throws InvalidArgumentException |
|
126 | - */ |
|
127 | - public function pushData($key, $value) |
|
128 | - { |
|
129 | - if (isset($this->jsdata[$key]) |
|
130 | - && ! is_array($this->jsdata[$key]) |
|
131 | - ) { |
|
132 | - throw new invalidArgumentException( |
|
133 | - sprintf( |
|
134 | - __( |
|
135 | - 'The value for %1$s is already set and it is not an array. The %2$s method can only be used to |
|
19 | + /** |
|
20 | + * This holds the jsdata data object that will be exposed on pages that enqueue the `eejs-core` script. |
|
21 | + * @var array |
|
22 | + */ |
|
23 | + protected $jsdata = array(); |
|
24 | + |
|
25 | + |
|
26 | + /** |
|
27 | + * Registry constructor. |
|
28 | + * Hooking into WP actions for script registry. |
|
29 | + */ |
|
30 | + public function __construct() |
|
31 | + { |
|
32 | + add_action('wp_enqueue_scripts', array($this, 'scripts'), 100); |
|
33 | + add_action('admin_enqueue_scripts', array($this, 'scripts'), 100); |
|
34 | + add_action('wp_print_footer_scripts', array($this, 'enqueueData'), 1); |
|
35 | + add_action('admin_print_footer_scripts', array($this, 'enqueueData'), 1); |
|
36 | + } |
|
37 | + |
|
38 | + |
|
39 | + /** |
|
40 | + * Callback for the WP script actions. |
|
41 | + * Used to register globally accessible core scripts. |
|
42 | + * Also used to add the eejs.data object to the source for any js having eejs-core as a dependency. |
|
43 | + */ |
|
44 | + public function scripts() |
|
45 | + { |
|
46 | + global $wp_version; |
|
47 | + wp_register_script( |
|
48 | + 'eejs-core', |
|
49 | + EE_PLUGIN_DIR_URL . 'core/services/assets/core_assets/eejs-core.js', |
|
50 | + array(), |
|
51 | + espresso_version(), |
|
52 | + true |
|
53 | + ); |
|
54 | + //only run this if WordPress 4.4.0 > is in use. |
|
55 | + if (version_compare($wp_version, '4.4.0', '>')) { |
|
56 | + //js.api |
|
57 | + wp_register_script( |
|
58 | + 'eejs-api', |
|
59 | + EE_LIBRARIES_URL . 'rest_api/assets/js/eejs-api.min.js', |
|
60 | + array('underscore', 'eejs-core'), |
|
61 | + espresso_version(), |
|
62 | + true |
|
63 | + ); |
|
64 | + $this->jsdata['eejs_api_nonce'] = wp_create_nonce('wp_rest'); |
|
65 | + $this->jsdata['paths'] = array('rest_route' => rest_url('ee/v4.8.36/')); |
|
66 | + } |
|
67 | + } |
|
68 | + |
|
69 | + |
|
70 | + /** |
|
71 | + * Call back for the script print in frontend and backend. |
|
72 | + * Used to call wp_localize_scripts so that data can be added throughout the runtime until this later hookpoint. |
|
73 | + * @since 4.9.31.rc.015 |
|
74 | + */ |
|
75 | + public function enqueueData() |
|
76 | + { |
|
77 | + wp_localize_script('eejs-core', 'eejs', array('data' => $this->jsdata)); |
|
78 | + } |
|
79 | + |
|
80 | + |
|
81 | + /** |
|
82 | + * Used to add data to eejs.data object. |
|
83 | + * |
|
84 | + * Note: Overriding existing data is not allowed. |
|
85 | + * |
|
86 | + * Data will be accessible as a javascript object when you list `eejs-core` as a dependency for your javascript. |
|
87 | + * If the data you add is something like this: |
|
88 | + * |
|
89 | + * $this->addData( 'my_plugin_data', array( 'foo' => 'gar' ) ); |
|
90 | + * |
|
91 | + * It will be exposed in the page source as: |
|
92 | + * |
|
93 | + * eejs.data.my_plugin_data.foo == gar |
|
94 | + * |
|
95 | + * @param string $key Key used to access your data |
|
96 | + * @param string|array $value Value to attach to key |
|
97 | + * @throws InvalidArgumentException |
|
98 | + */ |
|
99 | + public function addData($key, $value) |
|
100 | + { |
|
101 | + if ($this->verifyDataNotExisting($key)) { |
|
102 | + $this->jsdata[$key] = $value; |
|
103 | + } |
|
104 | + } |
|
105 | + |
|
106 | + |
|
107 | + /** |
|
108 | + * Similar to addData except this allows for users to push values to an existing key where the values on key are |
|
109 | + * elements in an array. |
|
110 | + * |
|
111 | + * When you use this method, the value you include will be appended to the end of an array on $key. |
|
112 | + * |
|
113 | + * So if the $key was 'test' and you added a value of 'my_data' then it would be represented in the javascript object |
|
114 | + * like this, |
|
115 | + * |
|
116 | + * eejs.data.test = [ |
|
117 | + * my_data, |
|
118 | + * ] |
|
119 | + * |
|
120 | + * If there has already been a scalar value attached to the data object given key, then |
|
121 | + * this will throw an exception. |
|
122 | + * |
|
123 | + * @param string $key Key to attach data to. |
|
124 | + * @param string|array $value Value being registered. |
|
125 | + * @throws InvalidArgumentException |
|
126 | + */ |
|
127 | + public function pushData($key, $value) |
|
128 | + { |
|
129 | + if (isset($this->jsdata[$key]) |
|
130 | + && ! is_array($this->jsdata[$key]) |
|
131 | + ) { |
|
132 | + throw new invalidArgumentException( |
|
133 | + sprintf( |
|
134 | + __( |
|
135 | + 'The value for %1$s is already set and it is not an array. The %2$s method can only be used to |
|
136 | 136 | push values to this data element when it is an array.', |
137 | - 'event_espresso' |
|
138 | - ), |
|
139 | - $key, |
|
140 | - __METHOD__ |
|
141 | - ) |
|
142 | - ); |
|
143 | - } |
|
144 | - |
|
145 | - $this->jsdata[$key][] = $value; |
|
146 | - } |
|
147 | - |
|
148 | - |
|
149 | - /** |
|
150 | - * Used to set content used by javascript for a template. |
|
151 | - * Note: Overrides of existing registered templates are not allowed. |
|
152 | - * |
|
153 | - * @param string $template_reference |
|
154 | - * @param string $template_content |
|
155 | - * @throws InvalidArgumentException |
|
156 | - */ |
|
157 | - public function addTemplate($template_reference, $template_content) |
|
158 | - { |
|
159 | - if (! isset($this->jsdata['templates'])) { |
|
160 | - $this->jsdata['templates'] = array(); |
|
161 | - } |
|
162 | - |
|
163 | - //no overrides allowed. |
|
164 | - if (isset($this->jsdata['templates'][$template_reference])) { |
|
165 | - throw new invalidArgumentException( |
|
166 | - sprintf( |
|
167 | - __( |
|
168 | - 'The %1$s key already exists for the templates array in the js data array. No overrides are allowed.', |
|
169 | - 'event_espresso' |
|
170 | - ), |
|
171 | - $template_reference |
|
172 | - ) |
|
173 | - ); |
|
174 | - } else { |
|
175 | - $this->jsdata['templates'][$template_reference] = $template_content; |
|
176 | - } |
|
177 | - } |
|
178 | - |
|
179 | - |
|
180 | - /** |
|
181 | - * Retrieve the template content already registered for the given reference. |
|
182 | - * @param string $template_reference |
|
183 | - * @return string |
|
184 | - */ |
|
185 | - public function getTemplate($template_reference) |
|
186 | - { |
|
187 | - return isset($this->jsdata['templates'], $this->jsdata['templates'][$template_reference]) |
|
188 | - ? $this->jsdata['templates'][$template_reference] |
|
189 | - : ''; |
|
190 | - } |
|
191 | - |
|
192 | - |
|
193 | - /** |
|
194 | - * Retrieve registered data. |
|
195 | - * |
|
196 | - * @param string $key Name of key to attach data to. |
|
197 | - * @return mixed If there is no for the given key, then false is returned. |
|
198 | - */ |
|
199 | - public function getData($key) |
|
200 | - { |
|
201 | - return isset($this->jsdata[$key]) |
|
202 | - ? $this->jsdata[$key] |
|
203 | - : false; |
|
204 | - } |
|
205 | - |
|
206 | - |
|
207 | - |
|
208 | - |
|
209 | - /** |
|
210 | - * Verifies whether the given data exists already on the jsdata array. |
|
211 | - * |
|
212 | - * Overriding data is not allowed. |
|
213 | - * |
|
214 | - * @param string $key Index for data. |
|
215 | - * @return bool If valid then return true. |
|
216 | - * @throws InvalidArgumentException if data already exists. |
|
217 | - */ |
|
218 | - protected function verifyDataNotExisting($key) |
|
219 | - { |
|
220 | - if (isset($this->jsdata[$key])) { |
|
221 | - if (is_array($this->jsdata[$key])) { |
|
222 | - throw new InvalidArgumentException( |
|
223 | - sprintf( |
|
224 | - __( |
|
225 | - 'The value for %1$s already exists in the Registry::eejs object. |
|
137 | + 'event_espresso' |
|
138 | + ), |
|
139 | + $key, |
|
140 | + __METHOD__ |
|
141 | + ) |
|
142 | + ); |
|
143 | + } |
|
144 | + |
|
145 | + $this->jsdata[$key][] = $value; |
|
146 | + } |
|
147 | + |
|
148 | + |
|
149 | + /** |
|
150 | + * Used to set content used by javascript for a template. |
|
151 | + * Note: Overrides of existing registered templates are not allowed. |
|
152 | + * |
|
153 | + * @param string $template_reference |
|
154 | + * @param string $template_content |
|
155 | + * @throws InvalidArgumentException |
|
156 | + */ |
|
157 | + public function addTemplate($template_reference, $template_content) |
|
158 | + { |
|
159 | + if (! isset($this->jsdata['templates'])) { |
|
160 | + $this->jsdata['templates'] = array(); |
|
161 | + } |
|
162 | + |
|
163 | + //no overrides allowed. |
|
164 | + if (isset($this->jsdata['templates'][$template_reference])) { |
|
165 | + throw new invalidArgumentException( |
|
166 | + sprintf( |
|
167 | + __( |
|
168 | + 'The %1$s key already exists for the templates array in the js data array. No overrides are allowed.', |
|
169 | + 'event_espresso' |
|
170 | + ), |
|
171 | + $template_reference |
|
172 | + ) |
|
173 | + ); |
|
174 | + } else { |
|
175 | + $this->jsdata['templates'][$template_reference] = $template_content; |
|
176 | + } |
|
177 | + } |
|
178 | + |
|
179 | + |
|
180 | + /** |
|
181 | + * Retrieve the template content already registered for the given reference. |
|
182 | + * @param string $template_reference |
|
183 | + * @return string |
|
184 | + */ |
|
185 | + public function getTemplate($template_reference) |
|
186 | + { |
|
187 | + return isset($this->jsdata['templates'], $this->jsdata['templates'][$template_reference]) |
|
188 | + ? $this->jsdata['templates'][$template_reference] |
|
189 | + : ''; |
|
190 | + } |
|
191 | + |
|
192 | + |
|
193 | + /** |
|
194 | + * Retrieve registered data. |
|
195 | + * |
|
196 | + * @param string $key Name of key to attach data to. |
|
197 | + * @return mixed If there is no for the given key, then false is returned. |
|
198 | + */ |
|
199 | + public function getData($key) |
|
200 | + { |
|
201 | + return isset($this->jsdata[$key]) |
|
202 | + ? $this->jsdata[$key] |
|
203 | + : false; |
|
204 | + } |
|
205 | + |
|
206 | + |
|
207 | + |
|
208 | + |
|
209 | + /** |
|
210 | + * Verifies whether the given data exists already on the jsdata array. |
|
211 | + * |
|
212 | + * Overriding data is not allowed. |
|
213 | + * |
|
214 | + * @param string $key Index for data. |
|
215 | + * @return bool If valid then return true. |
|
216 | + * @throws InvalidArgumentException if data already exists. |
|
217 | + */ |
|
218 | + protected function verifyDataNotExisting($key) |
|
219 | + { |
|
220 | + if (isset($this->jsdata[$key])) { |
|
221 | + if (is_array($this->jsdata[$key])) { |
|
222 | + throw new InvalidArgumentException( |
|
223 | + sprintf( |
|
224 | + __( |
|
225 | + 'The value for %1$s already exists in the Registry::eejs object. |
|
226 | 226 | Overrides are not allowed. Since the value of this data is an array, you may want to use the |
227 | 227 | %2$s method to push your value to the array.', |
228 | - 'event_espresso' |
|
229 | - ), |
|
230 | - $key, |
|
231 | - 'pushData()' |
|
232 | - ) |
|
233 | - ); |
|
234 | - } else { |
|
235 | - throw new InvalidArgumentException( |
|
236 | - sprintf( |
|
237 | - __( |
|
238 | - 'The value for %1$s already exists in the Registry::eejs object. Overrides are not |
|
228 | + 'event_espresso' |
|
229 | + ), |
|
230 | + $key, |
|
231 | + 'pushData()' |
|
232 | + ) |
|
233 | + ); |
|
234 | + } else { |
|
235 | + throw new InvalidArgumentException( |
|
236 | + sprintf( |
|
237 | + __( |
|
238 | + 'The value for %1$s already exists in the Registry::eejs object. Overrides are not |
|
239 | 239 | allowed. Consider attaching your value to a different key', |
240 | - 'event_espresso' |
|
241 | - ), |
|
242 | - $key |
|
243 | - ) |
|
244 | - ); |
|
245 | - } |
|
246 | - } |
|
247 | - return true; |
|
248 | - } |
|
240 | + 'event_espresso' |
|
241 | + ), |
|
242 | + $key |
|
243 | + ) |
|
244 | + ); |
|
245 | + } |
|
246 | + } |
|
247 | + return true; |
|
248 | + } |
|
249 | 249 | } |
@@ -25,120 +25,120 @@ |
||
25 | 25 | class JsonModelSchema |
26 | 26 | { |
27 | 27 | |
28 | - /** |
|
29 | - * @var \EEM_Base |
|
30 | - */ |
|
31 | - protected $model; |
|
32 | - |
|
33 | - /** |
|
34 | - * JsonModelSchema constructor. |
|
35 | - * |
|
36 | - * @param \EEM_Base $model |
|
37 | - */ |
|
38 | - public function __construct(EEM_Base $model) |
|
39 | - { |
|
40 | - $this->model = $model; |
|
41 | - } |
|
42 | - |
|
43 | - /** |
|
44 | - * Return the schema for a given model from a given model. |
|
45 | - * @param \EEM_Base $model |
|
46 | - * @return array |
|
47 | - */ |
|
48 | - public function getModelSchema() |
|
49 | - { |
|
50 | - return $this->getModelSchemaForRelations( |
|
51 | - $this->model->relation_settings(), |
|
52 | - $this->getModelSchemaForFields( |
|
53 | - $this->model->field_settings(), |
|
54 | - $this->getInitialSchemaStructure() |
|
55 | - ) |
|
56 | - ); |
|
57 | - } |
|
58 | - |
|
59 | - |
|
60 | - /** |
|
61 | - * Get the schema for a given set of model fields. |
|
62 | - * @param \EE_Model_Field_Base[] $model_fields |
|
63 | - * @return array |
|
64 | - */ |
|
65 | - public function getModelSchemaForFields(array $model_fields, array $schema) |
|
66 | - { |
|
67 | - foreach ($model_fields as $field => $model_field) { |
|
68 | - if (! $model_field instanceof EE_Model_Field_Base) { |
|
69 | - continue; |
|
70 | - } |
|
71 | - $schema['properties'][$field] = $model_field->getSchema(); |
|
72 | - |
|
73 | - //if this is a primary key field add the primary key item |
|
74 | - if ($model_field instanceof EE_Primary_Key_Field_Base) { |
|
75 | - $schema['properties'][$field]['primary_key'] = true; |
|
76 | - if ($model_field instanceof EE_Primary_Key_Int_Field) { |
|
77 | - $schema['properties'][$field]['readonly'] = true; |
|
78 | - } |
|
79 | - } |
|
80 | - |
|
81 | - //if this is a foreign key field add the foreign key item |
|
82 | - if ($model_field instanceof EE_Foreign_Key_Field_Base) { |
|
83 | - $schema['properties'][$field]['foreign_key'] = array( |
|
84 | - 'description' => esc_html__('This is a foreign key the points to the given models.', 'event_espresso'), |
|
85 | - 'type' => 'array', |
|
86 | - 'enum' => $model_field->get_model_class_names_pointed_to() |
|
87 | - ); |
|
88 | - } |
|
89 | - } |
|
90 | - return $schema; |
|
91 | - } |
|
92 | - |
|
93 | - |
|
94 | - /** |
|
95 | - * Get the schema for a given set of model relations |
|
96 | - * @param EE_Model_Relation_Base[] $relations_on_model |
|
97 | - * @return array |
|
98 | - */ |
|
99 | - public function getModelSchemaForRelations(array $relations_on_model, array $schema) |
|
100 | - { |
|
101 | - foreach ($relations_on_model as $model_name => $relation) { |
|
102 | - if (! $relation instanceof EE_Model_Relation_Base) { |
|
103 | - continue; |
|
104 | - } |
|
105 | - $model_name_for_schema = $relation instanceof EE_Belongs_To_Relation |
|
106 | - ? strtolower($model_name) |
|
107 | - : EEH_Inflector::pluralize_and_lower($model_name); |
|
108 | - $schema['properties'][$model_name_for_schema] = $relation->getSchema(); |
|
109 | - $schema['properties'][$model_name_for_schema]['relation_model'] = $model_name; |
|
110 | - } |
|
111 | - return $schema; |
|
112 | - } |
|
113 | - |
|
114 | - |
|
115 | - /** |
|
116 | - * Outputs the schema header for a model. |
|
117 | - * @param \EEM_Base $model |
|
118 | - * @return array |
|
119 | - */ |
|
120 | - public function getInitialSchemaStructure() |
|
121 | - { |
|
122 | - return array( |
|
123 | - '$schema' => 'http://json-schema.org/draft-04/schema#', |
|
124 | - 'title' => $this->model->get_this_model_name(), |
|
125 | - 'type' => 'object', |
|
126 | - 'properties' => array() |
|
127 | - ); |
|
128 | - } |
|
129 | - |
|
130 | - |
|
131 | - /** |
|
132 | - * Allows one to just use the object as a string to get the json. |
|
133 | - * eg. |
|
134 | - * |
|
135 | - * $json_schema = new JsonModelSchema(EEM_Event::instance()); |
|
136 | - * echo $json_schema; //outputs the schema as a json formatted string. |
|
137 | - * |
|
138 | - * @return bool|false|mixed|string |
|
139 | - */ |
|
140 | - public function __toString() |
|
141 | - { |
|
142 | - return wp_json_encode($this->getModelSchema()); |
|
143 | - } |
|
28 | + /** |
|
29 | + * @var \EEM_Base |
|
30 | + */ |
|
31 | + protected $model; |
|
32 | + |
|
33 | + /** |
|
34 | + * JsonModelSchema constructor. |
|
35 | + * |
|
36 | + * @param \EEM_Base $model |
|
37 | + */ |
|
38 | + public function __construct(EEM_Base $model) |
|
39 | + { |
|
40 | + $this->model = $model; |
|
41 | + } |
|
42 | + |
|
43 | + /** |
|
44 | + * Return the schema for a given model from a given model. |
|
45 | + * @param \EEM_Base $model |
|
46 | + * @return array |
|
47 | + */ |
|
48 | + public function getModelSchema() |
|
49 | + { |
|
50 | + return $this->getModelSchemaForRelations( |
|
51 | + $this->model->relation_settings(), |
|
52 | + $this->getModelSchemaForFields( |
|
53 | + $this->model->field_settings(), |
|
54 | + $this->getInitialSchemaStructure() |
|
55 | + ) |
|
56 | + ); |
|
57 | + } |
|
58 | + |
|
59 | + |
|
60 | + /** |
|
61 | + * Get the schema for a given set of model fields. |
|
62 | + * @param \EE_Model_Field_Base[] $model_fields |
|
63 | + * @return array |
|
64 | + */ |
|
65 | + public function getModelSchemaForFields(array $model_fields, array $schema) |
|
66 | + { |
|
67 | + foreach ($model_fields as $field => $model_field) { |
|
68 | + if (! $model_field instanceof EE_Model_Field_Base) { |
|
69 | + continue; |
|
70 | + } |
|
71 | + $schema['properties'][$field] = $model_field->getSchema(); |
|
72 | + |
|
73 | + //if this is a primary key field add the primary key item |
|
74 | + if ($model_field instanceof EE_Primary_Key_Field_Base) { |
|
75 | + $schema['properties'][$field]['primary_key'] = true; |
|
76 | + if ($model_field instanceof EE_Primary_Key_Int_Field) { |
|
77 | + $schema['properties'][$field]['readonly'] = true; |
|
78 | + } |
|
79 | + } |
|
80 | + |
|
81 | + //if this is a foreign key field add the foreign key item |
|
82 | + if ($model_field instanceof EE_Foreign_Key_Field_Base) { |
|
83 | + $schema['properties'][$field]['foreign_key'] = array( |
|
84 | + 'description' => esc_html__('This is a foreign key the points to the given models.', 'event_espresso'), |
|
85 | + 'type' => 'array', |
|
86 | + 'enum' => $model_field->get_model_class_names_pointed_to() |
|
87 | + ); |
|
88 | + } |
|
89 | + } |
|
90 | + return $schema; |
|
91 | + } |
|
92 | + |
|
93 | + |
|
94 | + /** |
|
95 | + * Get the schema for a given set of model relations |
|
96 | + * @param EE_Model_Relation_Base[] $relations_on_model |
|
97 | + * @return array |
|
98 | + */ |
|
99 | + public function getModelSchemaForRelations(array $relations_on_model, array $schema) |
|
100 | + { |
|
101 | + foreach ($relations_on_model as $model_name => $relation) { |
|
102 | + if (! $relation instanceof EE_Model_Relation_Base) { |
|
103 | + continue; |
|
104 | + } |
|
105 | + $model_name_for_schema = $relation instanceof EE_Belongs_To_Relation |
|
106 | + ? strtolower($model_name) |
|
107 | + : EEH_Inflector::pluralize_and_lower($model_name); |
|
108 | + $schema['properties'][$model_name_for_schema] = $relation->getSchema(); |
|
109 | + $schema['properties'][$model_name_for_schema]['relation_model'] = $model_name; |
|
110 | + } |
|
111 | + return $schema; |
|
112 | + } |
|
113 | + |
|
114 | + |
|
115 | + /** |
|
116 | + * Outputs the schema header for a model. |
|
117 | + * @param \EEM_Base $model |
|
118 | + * @return array |
|
119 | + */ |
|
120 | + public function getInitialSchemaStructure() |
|
121 | + { |
|
122 | + return array( |
|
123 | + '$schema' => 'http://json-schema.org/draft-04/schema#', |
|
124 | + 'title' => $this->model->get_this_model_name(), |
|
125 | + 'type' => 'object', |
|
126 | + 'properties' => array() |
|
127 | + ); |
|
128 | + } |
|
129 | + |
|
130 | + |
|
131 | + /** |
|
132 | + * Allows one to just use the object as a string to get the json. |
|
133 | + * eg. |
|
134 | + * |
|
135 | + * $json_schema = new JsonModelSchema(EEM_Event::instance()); |
|
136 | + * echo $json_schema; //outputs the schema as a json formatted string. |
|
137 | + * |
|
138 | + * @return bool|false|mixed|string |
|
139 | + */ |
|
140 | + public function __toString() |
|
141 | + { |
|
142 | + return wp_json_encode($this->getModelSchema()); |
|
143 | + } |
|
144 | 144 | } |
@@ -129,13 +129,13 @@ discard block |
||
129 | 129 | |
130 | 130 | |
131 | 131 | |
132 | - /** |
|
133 | - * Updates the TKT_sold quantity on all the tickets matching $query_params |
|
134 | - * |
|
135 | - * @param EE_Ticket[] $tickets |
|
136 | - * @return void |
|
137 | - * @throws \EE_Error |
|
138 | - */ |
|
132 | + /** |
|
133 | + * Updates the TKT_sold quantity on all the tickets matching $query_params |
|
134 | + * |
|
135 | + * @param EE_Ticket[] $tickets |
|
136 | + * @return void |
|
137 | + * @throws \EE_Error |
|
138 | + */ |
|
139 | 139 | public function update_tickets_sold($tickets){ |
140 | 140 | foreach($tickets as $ticket){ |
141 | 141 | /* @var $ticket EE_Ticket */ |
@@ -145,41 +145,41 @@ discard block |
||
145 | 145 | |
146 | 146 | |
147 | 147 | |
148 | - /** |
|
149 | - * returns an array of EE_Ticket objects with a non-zero value for TKT_reserved |
|
150 | - * |
|
151 | - * @return EE_Base_Class[]|EE_Ticket[] |
|
152 | - * @throws \EE_Error |
|
153 | - */ |
|
154 | - public function get_tickets_with_reservations() |
|
155 | - { |
|
156 | - return $this->get_all( |
|
157 | - array( |
|
158 | - array( |
|
159 | - 'TKT_reserved' => array( '>', 0 ) |
|
160 | - ) |
|
161 | - ) |
|
162 | - ); |
|
148 | + /** |
|
149 | + * returns an array of EE_Ticket objects with a non-zero value for TKT_reserved |
|
150 | + * |
|
151 | + * @return EE_Base_Class[]|EE_Ticket[] |
|
152 | + * @throws \EE_Error |
|
153 | + */ |
|
154 | + public function get_tickets_with_reservations() |
|
155 | + { |
|
156 | + return $this->get_all( |
|
157 | + array( |
|
158 | + array( |
|
159 | + 'TKT_reserved' => array( '>', 0 ) |
|
160 | + ) |
|
161 | + ) |
|
162 | + ); |
|
163 | 163 | } |
164 | 164 | |
165 | 165 | |
166 | 166 | |
167 | - /** |
|
168 | - * returns an array of EE_Ticket objects matching the supplied list of IDs |
|
169 | - * |
|
170 | - * @param array $ticket_IDs |
|
171 | - * @return EE_Base_Class[]|EE_Ticket[] |
|
172 | - * @throws \EE_Error |
|
173 | - */ |
|
174 | - public function get_tickets_with_IDs(array $ticket_IDs) |
|
175 | - { |
|
176 | - return $this->get_all( |
|
177 | - array( |
|
178 | - array( |
|
179 | - 'TKT_ID' => array( 'IN', $ticket_IDs ) |
|
180 | - ) |
|
181 | - ) |
|
182 | - ); |
|
167 | + /** |
|
168 | + * returns an array of EE_Ticket objects matching the supplied list of IDs |
|
169 | + * |
|
170 | + * @param array $ticket_IDs |
|
171 | + * @return EE_Base_Class[]|EE_Ticket[] |
|
172 | + * @throws \EE_Error |
|
173 | + */ |
|
174 | + public function get_tickets_with_IDs(array $ticket_IDs) |
|
175 | + { |
|
176 | + return $this->get_all( |
|
177 | + array( |
|
178 | + array( |
|
179 | + 'TKT_ID' => array( 'IN', $ticket_IDs ) |
|
180 | + ) |
|
181 | + ) |
|
182 | + ); |
|
183 | 183 | } |
184 | 184 | |
185 | 185 |
@@ -21,8 +21,8 @@ discard block |
||
21 | 21 | * |
22 | 22 | * ------------------------------------------------------------------------ |
23 | 23 | */ |
24 | -require_once ( EE_MODELS . 'EEM_Soft_Delete_Base.model.php' ); |
|
25 | -require_once ( EE_CLASSES . 'EE_Ticket.class.php' ); |
|
24 | +require_once (EE_MODELS.'EEM_Soft_Delete_Base.model.php'); |
|
25 | +require_once (EE_CLASSES.'EE_Ticket.class.php'); |
|
26 | 26 | |
27 | 27 | class EEM_Ticket extends EEM_Soft_Delete_Base { |
28 | 28 | |
@@ -35,36 +35,36 @@ discard block |
||
35 | 35 | * @access private |
36 | 36 | * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any incoming timezone data that gets saved). Note this just sends the timezone info to the date time model field objects. Default is NULL (and will be assumed using the set timezone in the 'timezone_string' wp option) |
37 | 37 | */ |
38 | - protected function __construct( $timezone ) { |
|
39 | - $this->singular_item = __('Ticket','event_espresso'); |
|
40 | - $this->plural_item = __('Tickets','event_espresso'); |
|
38 | + protected function __construct($timezone) { |
|
39 | + $this->singular_item = __('Ticket', 'event_espresso'); |
|
40 | + $this->plural_item = __('Tickets', 'event_espresso'); |
|
41 | 41 | |
42 | 42 | $this->_tables = array( |
43 | 43 | 'Ticket'=> new EE_Primary_Table('esp_ticket', 'TKT_ID') |
44 | 44 | ); |
45 | 45 | $this->_fields = array( |
46 | 46 | 'Ticket'=>array( |
47 | - 'TKT_ID'=> new EE_Primary_Key_Int_Field('TKT_ID', __('Ticket ID','event_espresso')), |
|
48 | - 'TTM_ID'=>new EE_Foreign_Key_Int_Field('TTM_ID', __('Ticket Template ID','event_espresso'), false, 0, 'Ticket_Template'), |
|
47 | + 'TKT_ID'=> new EE_Primary_Key_Int_Field('TKT_ID', __('Ticket ID', 'event_espresso')), |
|
48 | + 'TTM_ID'=>new EE_Foreign_Key_Int_Field('TTM_ID', __('Ticket Template ID', 'event_espresso'), false, 0, 'Ticket_Template'), |
|
49 | 49 | 'TKT_name'=>new EE_Plain_Text_Field('TKT_name', __('Ticket Name', 'event_espresso'), false, ''), |
50 | - 'TKT_description'=>new EE_Post_Content_Field('TKT_description', __('Description of Ticket', 'event_espresso'), false, '' ), |
|
51 | - 'TKT_start_date'=>new EE_Datetime_Field('TKT_start_date', __('Start time/date of Ticket','event_espresso'), false, EE_Datetime_Field::now, $timezone ), |
|
52 | - 'TKT_end_date'=>new EE_Datetime_Field('TKT_end_date', __('End time/date of Ticket','event_espresso'), false, EE_Datetime_Field::now, $timezone ), |
|
53 | - 'TKT_min'=>new EE_Integer_Field('TKT_min', __('Minimum quantity of this ticket that must be purchased', 'event_espresso'), false, 0 ), |
|
54 | - 'TKT_max'=>new EE_Infinite_Integer_Field('TKT_max', __('Maximum quantity of this ticket that can be purchased in one transaction', 'event_espresso'), false, EE_INF ), |
|
50 | + 'TKT_description'=>new EE_Post_Content_Field('TKT_description', __('Description of Ticket', 'event_espresso'), false, ''), |
|
51 | + 'TKT_start_date'=>new EE_Datetime_Field('TKT_start_date', __('Start time/date of Ticket', 'event_espresso'), false, EE_Datetime_Field::now, $timezone), |
|
52 | + 'TKT_end_date'=>new EE_Datetime_Field('TKT_end_date', __('End time/date of Ticket', 'event_espresso'), false, EE_Datetime_Field::now, $timezone), |
|
53 | + 'TKT_min'=>new EE_Integer_Field('TKT_min', __('Minimum quantity of this ticket that must be purchased', 'event_espresso'), false, 0), |
|
54 | + 'TKT_max'=>new EE_Infinite_Integer_Field('TKT_max', __('Maximum quantity of this ticket that can be purchased in one transaction', 'event_espresso'), false, EE_INF), |
|
55 | 55 | 'TKT_price'=> new EE_Money_Field('TKT_price', 'Final calculated price for ticket', false, 0), |
56 | 56 | 'TKT_sold' => new EE_Integer_Field('TKT_sold', __('Number of this ticket sold', 'event_espresso'), false, 0), |
57 | - 'TKT_qty'=>new EE_Infinite_Integer_Field('TKT_qty', __('Quantity of this ticket that is available','event_espresso'), false, EE_INF), |
|
58 | - 'TKT_reserved'=>new EE_Integer_Field('TKT_reserved', __('Quantity of this ticket that is reserved, but not yet fully purchased','event_espresso'), false, 0 ), |
|
59 | - 'TKT_uses'=>new EE_Infinite_Integer_Field('TKT_uses', __('Number of datetimes this ticket can be used at', 'event_espresso'), false, EE_INF ), |
|
60 | - 'TKT_required'=>new EE_Boolean_Field('TKT_required', __("Flag indicating whether this ticket must be purchased with a transaction", "event_espresso"), false, false ), |
|
61 | - 'TKT_taxable'=>new EE_Boolean_Field('TKT_taxable', __("Flag indicating whether there is tax applied on this ticket", "event_espresso"), false,false), |
|
62 | - 'TKT_is_default'=>new EE_Boolean_Field('TKT_is_default', __('Flag indicating that this ticket is a default ticket', 'event_espresso'), false, false ), |
|
57 | + 'TKT_qty'=>new EE_Infinite_Integer_Field('TKT_qty', __('Quantity of this ticket that is available', 'event_espresso'), false, EE_INF), |
|
58 | + 'TKT_reserved'=>new EE_Integer_Field('TKT_reserved', __('Quantity of this ticket that is reserved, but not yet fully purchased', 'event_espresso'), false, 0), |
|
59 | + 'TKT_uses'=>new EE_Infinite_Integer_Field('TKT_uses', __('Number of datetimes this ticket can be used at', 'event_espresso'), false, EE_INF), |
|
60 | + 'TKT_required'=>new EE_Boolean_Field('TKT_required', __("Flag indicating whether this ticket must be purchased with a transaction", "event_espresso"), false, false), |
|
61 | + 'TKT_taxable'=>new EE_Boolean_Field('TKT_taxable', __("Flag indicating whether there is tax applied on this ticket", "event_espresso"), false, false), |
|
62 | + 'TKT_is_default'=>new EE_Boolean_Field('TKT_is_default', __('Flag indicating that this ticket is a default ticket', 'event_espresso'), false, false), |
|
63 | 63 | 'TKT_order' => new EE_Integer_Field('TKT_order', __('The order in which the Ticket is displayed in the editor (used for autosaves when the form doesn\'t have the ticket ID yet)', 'event_espresso'), false, 0), |
64 | - 'TKT_row' => new EE_Integer_Field('TKT_row', __('How tickets are displayed in the ui', 'event_espresso'), false, 0 ), |
|
64 | + 'TKT_row' => new EE_Integer_Field('TKT_row', __('How tickets are displayed in the ui', 'event_espresso'), false, 0), |
|
65 | 65 | 'TKT_deleted' => new EE_Trashed_Flag_Field('TKT_deleted', __('Flag indicating if this has been archived or not', 'event_espresso'), false, false), |
66 | - 'TKT_wp_user' => new EE_WP_User_Field('TKT_wp_user', __('Ticket Creator ID', 'event_espresso'), FALSE ), |
|
67 | - 'TKT_parent' => new EE_Integer_Field('TKT_parent', __('Indicates what TKT_ID is the parent of this TKT_ID (used in autosaves/revisions)'), true, 0 ) |
|
66 | + 'TKT_wp_user' => new EE_WP_User_Field('TKT_wp_user', __('Ticket Creator ID', 'event_espresso'), FALSE), |
|
67 | + 'TKT_parent' => new EE_Integer_Field('TKT_parent', __('Indicates what TKT_ID is the parent of this TKT_ID (used in autosaves/revisions)'), true, 0) |
|
68 | 68 | )); |
69 | 69 | $this->_model_relations = array( |
70 | 70 | 'Datetime'=>new EE_HABTM_Relation('Datetime_Ticket'), |
@@ -76,12 +76,12 @@ discard block |
||
76 | 76 | ); |
77 | 77 | |
78 | 78 | //this model is generally available for reading |
79 | - $this->_cap_restriction_generators[ EEM_Base::caps_read ] = new EE_Restriction_Generator_Default_Public('TKT_is_default', 'Datetime.Event'); |
|
79 | + $this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Default_Public('TKT_is_default', 'Datetime.Event'); |
|
80 | 80 | //account for default tickets in the caps |
81 | - $this->_cap_restriction_generators[ EEM_Base::caps_read_admin ] = new EE_Restriction_Generator_Default_Protected( 'TKT_is_default', 'Datetime.Event' ); |
|
82 | - $this->_cap_restriction_generators[ EEM_Base::caps_edit ] = new EE_Restriction_Generator_Default_Protected( 'TKT_is_default', 'Datetime.Event' ); |
|
83 | - $this->_cap_restriction_generators[ EEM_Base::caps_delete ] = new EE_Restriction_Generator_Default_Protected( 'TKT_is_default', 'Datetime.Event' ); |
|
84 | - parent::__construct( $timezone ); |
|
81 | + $this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Default_Protected('TKT_is_default', 'Datetime.Event'); |
|
82 | + $this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Default_Protected('TKT_is_default', 'Datetime.Event'); |
|
83 | + $this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Default_Protected('TKT_is_default', 'Datetime.Event'); |
|
84 | + parent::__construct($timezone); |
|
85 | 85 | } |
86 | 86 | |
87 | 87 | |
@@ -92,9 +92,9 @@ discard block |
||
92 | 92 | */ |
93 | 93 | public function get_all_default_tickets() { |
94 | 94 | /** @type EE_Ticket[] $tickets */ |
95 | - $tickets = $this->get_all( array( array('TKT_is_default' => 1), 'order_by' => array('TKT_ID' => 'ASC')) ); |
|
95 | + $tickets = $this->get_all(array(array('TKT_is_default' => 1), 'order_by' => array('TKT_ID' => 'ASC'))); |
|
96 | 96 | //we need to set the start date and end date to today's date and the start of the default dtt |
97 | - return $this->_set_default_dates( $tickets ); |
|
97 | + return $this->_set_default_dates($tickets); |
|
98 | 98 | } |
99 | 99 | |
100 | 100 | |
@@ -104,11 +104,11 @@ discard block |
||
104 | 104 | * @param EE_Ticket[] $tickets |
105 | 105 | * @return EE_Ticket[] |
106 | 106 | */ |
107 | - private function _set_default_dates( $tickets ) { |
|
108 | - foreach ( $tickets as $ticket ) { |
|
109 | - $ticket->set('TKT_start_date', (int)$this->current_time_for_query('TKT_start_date', true) ); |
|
110 | - $ticket->set('TKT_end_date', (int)$this->current_time_for_query( 'TKT_end_date', true ) + (60 * 60 * 24 * 30 ) ); |
|
111 | - $ticket->set_end_time( $this->convert_datetime_for_query( 'TKT_end_date', '11:59 pm', 'g:i a', $this->_timezone ) ); |
|
107 | + private function _set_default_dates($tickets) { |
|
108 | + foreach ($tickets as $ticket) { |
|
109 | + $ticket->set('TKT_start_date', (int) $this->current_time_for_query('TKT_start_date', true)); |
|
110 | + $ticket->set('TKT_end_date', (int) $this->current_time_for_query('TKT_end_date', true) + (60 * 60 * 24 * 30)); |
|
111 | + $ticket->set_end_time($this->convert_datetime_for_query('TKT_end_date', '11:59 pm', 'g:i a', $this->_timezone)); |
|
112 | 112 | } |
113 | 113 | |
114 | 114 | return $tickets; |
@@ -123,8 +123,8 @@ discard block |
||
123 | 123 | * @param array $query_params |
124 | 124 | * @return int |
125 | 125 | */ |
126 | - public function sum_tickets_currently_available_at_datetime($DTT_ID, $query_params = array()){ |
|
127 | - return EEM_Datetime::instance()->sum_tickets_currently_available_at_datetime( $DTT_ID, $query_params ); |
|
126 | + public function sum_tickets_currently_available_at_datetime($DTT_ID, $query_params = array()) { |
|
127 | + return EEM_Datetime::instance()->sum_tickets_currently_available_at_datetime($DTT_ID, $query_params); |
|
128 | 128 | } |
129 | 129 | |
130 | 130 | |
@@ -136,8 +136,8 @@ discard block |
||
136 | 136 | * @return void |
137 | 137 | * @throws \EE_Error |
138 | 138 | */ |
139 | - public function update_tickets_sold($tickets){ |
|
140 | - foreach($tickets as $ticket){ |
|
139 | + public function update_tickets_sold($tickets) { |
|
140 | + foreach ($tickets as $ticket) { |
|
141 | 141 | /* @var $ticket EE_Ticket */ |
142 | 142 | $ticket->update_tickets_sold(); |
143 | 143 | } |
@@ -156,7 +156,7 @@ discard block |
||
156 | 156 | return $this->get_all( |
157 | 157 | array( |
158 | 158 | array( |
159 | - 'TKT_reserved' => array( '>', 0 ) |
|
159 | + 'TKT_reserved' => array('>', 0) |
|
160 | 160 | ) |
161 | 161 | ) |
162 | 162 | ); |
@@ -176,7 +176,7 @@ discard block |
||
176 | 176 | return $this->get_all( |
177 | 177 | array( |
178 | 178 | array( |
179 | - 'TKT_ID' => array( 'IN', $ticket_IDs ) |
|
179 | + 'TKT_ID' => array('IN', $ticket_IDs) |
|
180 | 180 | ) |
181 | 181 | ) |
182 | 182 | ); |