Completed
Branch FET-10586-integer-input (b0e424)
by
unknown
13:52
created
core/db_models/EEM_Line_Item.model.php 2 patches
Spacing   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -105,41 +105,41 @@  discard block
 block discarded – undo
105 105
 	 * @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)
106 106
 	 * @return \EEM_Line_Item
107 107
 	 */
108
-	protected function __construct( $timezone ) {
109
-		$this->singular_item = __('Line Item','event_espresso');
110
-		$this->plural_item = __('Line Items','event_espresso');
108
+	protected function __construct($timezone) {
109
+		$this->singular_item = __('Line Item', 'event_espresso');
110
+		$this->plural_item = __('Line Items', 'event_espresso');
111 111
 
112 112
 		$this->_tables = array(
113
-			'Line_Item'=>new EE_Primary_Table('esp_line_item','LIN_ID')
113
+			'Line_Item'=>new EE_Primary_Table('esp_line_item', 'LIN_ID')
114 114
 		);
115
-		$line_items_can_be_for = apply_filters( 'FHEE__EEM_Line_Item__line_items_can_be_for', array('Ticket','Price', 'Event' ) );
115
+		$line_items_can_be_for = apply_filters('FHEE__EEM_Line_Item__line_items_can_be_for', array('Ticket', 'Price', 'Event'));
116 116
 		$this->_fields = array(
117 117
 			'Line_Item' => array(
118
-				'LIN_ID' 				=> new EE_Primary_Key_Int_Field( 'LIN_ID', __( "ID", "event_espresso" ) ),
119
-				'LIN_code' 			=> new EE_Slug_Field( 'LIN_code', __( "Code for index into Cart", "event_espresso" ), TRUE ),
120
-				'TXN_ID' 				=> new EE_Foreign_Key_Int_Field( 'TXN_ID', __( "Transaction ID", "event_espresso" ), TRUE, NULL, 'Transaction' ),
121
-				'LIN_name' 			=> new EE_Full_HTML_Field( 'LIN_name', __( "Line Item Name", "event_espresso" ), FALSE, '' ),
122
-				'LIN_desc' 			=> new EE_Full_HTML_Field( 'LIN_desc', __( "Line Item Description", "event_espresso" ), TRUE ),
123
-				'LIN_unit_price' 	=> new EE_Money_Field( 'LIN_unit_price', __( "Unit Price", "event_espresso" ), FALSE, 0 ),
124
-				'LIN_percent' 		=> new EE_Float_Field( 'LIN_percent', __( "Percent", "event_espresso" ), FALSE, 0 ),
125
-				'LIN_is_taxable' 	=> new EE_Boolean_Field( 'LIN_is_taxable', __( "Taxable", "event_espresso" ), FALSE, FALSE ),
126
-				'LIN_order' 			=> new EE_Integer_Field( 'LIN_order', __( "Order of Application towards total of parent", "event_espresso" ), FALSE, 1 ),
127
-				'LIN_total' 			=> new EE_Money_Field( 'LIN_total', __( "Total (unit price x quantity)", "event_espresso" ), FALSE, 0 ),
128
-				'LIN_quantity' 	=> new EE_Integer_Field( 'LIN_quantity', __( "Quantity", "event_espresso" ), TRUE, 1 ),
129
-				'LIN_parent' 		=> new EE_Integer_Field( 'LIN_parent', __( "Parent ID (this item goes towards that Line Item's total)", "event_espresso" ), TRUE, NULL ),
130
-				'LIN_type' 			=> new EE_Enum_Text_Field( 'LIN_type', __( "Type", "event_espresso" ), FALSE, 'line-item', array(
118
+				'LIN_ID' 				=> new EE_Primary_Key_Int_Field('LIN_ID', __("ID", "event_espresso")),
119
+				'LIN_code' 			=> new EE_Slug_Field('LIN_code', __("Code for index into Cart", "event_espresso"), TRUE),
120
+				'TXN_ID' 				=> new EE_Foreign_Key_Int_Field('TXN_ID', __("Transaction ID", "event_espresso"), TRUE, NULL, 'Transaction'),
121
+				'LIN_name' 			=> new EE_Full_HTML_Field('LIN_name', __("Line Item Name", "event_espresso"), FALSE, ''),
122
+				'LIN_desc' 			=> new EE_Full_HTML_Field('LIN_desc', __("Line Item Description", "event_espresso"), TRUE),
123
+				'LIN_unit_price' 	=> new EE_Money_Field('LIN_unit_price', __("Unit Price", "event_espresso"), FALSE, 0),
124
+				'LIN_percent' 		=> new EE_Float_Field('LIN_percent', __("Percent", "event_espresso"), FALSE, 0),
125
+				'LIN_is_taxable' 	=> new EE_Boolean_Field('LIN_is_taxable', __("Taxable", "event_espresso"), FALSE, FALSE),
126
+				'LIN_order' 			=> new EE_Integer_Field('LIN_order', __("Order of Application towards total of parent", "event_espresso"), FALSE, 1),
127
+				'LIN_total' 			=> new EE_Money_Field('LIN_total', __("Total (unit price x quantity)", "event_espresso"), FALSE, 0),
128
+				'LIN_quantity' 	=> new EE_Integer_Field('LIN_quantity', __("Quantity", "event_espresso"), TRUE, 1),
129
+				'LIN_parent' 		=> new EE_Integer_Field('LIN_parent', __("Parent ID (this item goes towards that Line Item's total)", "event_espresso"), TRUE, NULL),
130
+				'LIN_type' 			=> new EE_Enum_Text_Field('LIN_type', __("Type", "event_espresso"), FALSE, 'line-item', array(
131 131
 						self::type_line_item		=>  __("Line Item", "event_espresso"),
132 132
 						self::type_sub_line_item	=>  __("Sub-Item", "event_espresso"),
133 133
 						self::type_sub_total		=>  __("Subtotal", "event_espresso"),
134 134
 						self::type_tax_sub_total 	=> __("Tax Subtotal", "event_espresso"),
135 135
 						self::type_tax					=>  __("Tax", "event_espresso"),
136 136
 						self::type_total				=>  __("Total", "event_espresso"),
137
-						self::type_cancellation	=> __( 'Cancellation', 'event_espresso' )
137
+						self::type_cancellation	=> __('Cancellation', 'event_espresso')
138 138
 					)
139 139
 				),
140
-				'OBJ_ID' 					=> new EE_Foreign_Key_Int_Field( 'OBJ_ID', __( 'ID of Item purchased.', 'event_espresso' ), TRUE, NULL, $line_items_can_be_for ),
141
-				'OBJ_type'				=>new EE_Any_Foreign_Model_Name_Field( 'OBJ_type', __( "Model Name this Line Item is for", "event_espresso" ), TRUE, NULL, $line_items_can_be_for ),
142
-				'LIN_timestamp' => new EE_Datetime_Field('LIN_timestamp', __('When the line item was created','event_espresso'), false, EE_Datetime_Field::now, $timezone ),
140
+				'OBJ_ID' 					=> new EE_Foreign_Key_Int_Field('OBJ_ID', __('ID of Item purchased.', 'event_espresso'), TRUE, NULL, $line_items_can_be_for),
141
+				'OBJ_type'				=>new EE_Any_Foreign_Model_Name_Field('OBJ_type', __("Model Name this Line Item is for", "event_espresso"), TRUE, NULL, $line_items_can_be_for),
142
+				'LIN_timestamp' => new EE_Datetime_Field('LIN_timestamp', __('When the line item was created', 'event_espresso'), false, EE_Datetime_Field::now, $timezone),
143 143
 			)
144 144
 		);
145 145
 		$this->_model_relations = array(
@@ -150,7 +150,7 @@  discard block
 block discarded – undo
150 150
 		);
151 151
 		$this->_model_chain_to_wp_user = 'Transaction.Registration.Event';
152 152
 		$this->_caps_slug = 'transactions';
153
-		parent::__construct( $timezone );
153
+		parent::__construct($timezone);
154 154
 	}
155 155
 
156 156
 
@@ -161,9 +161,9 @@  discard block
 block discarded – undo
161 161
 	 * @param EE_Transaction|int $transaction
162 162
 	 * @return EE_Line_Item[]
163 163
 	 */
164
-	public function get_all_of_type_for_transaction( $line_item_type, $transaction ){
165
-		$transaction = EEM_Transaction::instance()->ensure_is_ID( $transaction );
166
-		return $this->get_all( array( array(
164
+	public function get_all_of_type_for_transaction($line_item_type, $transaction) {
165
+		$transaction = EEM_Transaction::instance()->ensure_is_ID($transaction);
166
+		return $this->get_all(array(array(
167 167
 			'LIN_type' => $line_item_type,
168 168
 			'TXN_ID' => $transaction
169 169
 		)));
@@ -177,14 +177,14 @@  discard block
 block discarded – undo
177 177
 	 * @param EE_Transaction|int $transaction
178 178
 	 * @return EE_Line_Item[]
179 179
 	 */
180
-	public function get_all_non_ticket_line_items_for_transaction( $transaction ) {
181
-		$transaction = EEM_Transaction::instance()->ensure_is_ID( $transaction );
182
-		return $this->get_all( array( array(
180
+	public function get_all_non_ticket_line_items_for_transaction($transaction) {
181
+		$transaction = EEM_Transaction::instance()->ensure_is_ID($transaction);
182
+		return $this->get_all(array(array(
183 183
 			'LIN_type' => self::type_line_item,
184 184
 			'TXN_ID' => $transaction,
185 185
 			'OR' => array(
186
-				'OBJ_type*notticket' => array( '!=', 'Ticket'),
187
-				'OBJ_type*null' => array( 'IS_NULL' ))
186
+				'OBJ_type*notticket' => array('!=', 'Ticket'),
187
+				'OBJ_type*null' => array('IS_NULL'))
188 188
 		)));
189 189
 	}
190 190
 
@@ -194,7 +194,7 @@  discard block
 block discarded – undo
194 194
 	 * because if there are spam bots afoot there will be LOTS of line items
195 195
 	 * @return int count of how many deleted
196 196
 	 */
197
-	public function delete_line_items_with_no_transaction(){
197
+	public function delete_line_items_with_no_transaction() {
198 198
 		/** @type WPDB $wpdb */
199 199
 		global $wpdb;
200 200
 		$time_to_leave_alone = apply_filters(
@@ -202,13 +202,13 @@  discard block
 block discarded – undo
202 202
 		);
203 203
 		$query = $wpdb->prepare(
204 204
 				'DELETE li
205
-				FROM ' . $this->table() . ' li
206
-				LEFT JOIN ' . EEM_Transaction::instance()->table(). ' t ON li.TXN_ID = t.TXN_ID
205
+				FROM ' . $this->table().' li
206
+				LEFT JOIN ' . EEM_Transaction::instance()->table().' t ON li.TXN_ID = t.TXN_ID
207 207
 				WHERE t.TXN_ID IS NULL AND li.LIN_timestamp < %s',
208 208
 				// use GMT time because that's what TXN_timestamps are in
209
-				date(  'Y-m-d H:i:s', time() - $time_to_leave_alone )
209
+				date('Y-m-d H:i:s', time() - $time_to_leave_alone)
210 210
 				);
211
-		return $wpdb->query( $query );
211
+		return $wpdb->query($query);
212 212
 	}
213 213
 
214 214
 
@@ -221,10 +221,10 @@  discard block
 block discarded – undo
221 221
 	 * @param \EE_Base_Class $object
222 222
 	 * @return EE_Line_Item[]
223 223
 	 */
224
-	public function get_line_item_for_transaction_object( $TXN_ID, EE_Base_Class $object ){
225
-		return $this->get_all( array( array(
224
+	public function get_line_item_for_transaction_object($TXN_ID, EE_Base_Class $object) {
225
+		return $this->get_all(array(array(
226 226
 			'TXN_ID' 		=> $TXN_ID,
227
-			'OBJ_type' 	=> str_replace( 'EE_', '', get_class( $object )),
227
+			'OBJ_type' 	=> str_replace('EE_', '', get_class($object)),
228 228
 			'OBJ_ID' 		=> $object->ID()
229 229
 		)));
230 230
 	}
@@ -240,16 +240,16 @@  discard block
 block discarded – undo
240 240
 	 * @param array $OBJ_IDs
241 241
 	 * @return EE_Line_Item[]
242 242
 	 */
243
-	public function get_object_line_items_for_transaction( $TXN_ID, $OBJ_type = 'Event', $OBJ_IDs = array() ){
243
+	public function get_object_line_items_for_transaction($TXN_ID, $OBJ_type = 'Event', $OBJ_IDs = array()) {
244 244
 		$query_params = array(
245 245
 			'OBJ_type' 	=> $OBJ_type,
246 246
 			// if incoming $OBJ_IDs is an array, then make sure it is formatted correctly for the query
247
-			'OBJ_ID' 		=> is_array( $OBJ_IDs ) && ! isset( $OBJ_IDs['IN'] ) ? array( 'IN', $OBJ_IDs ) : $OBJ_IDs
247
+			'OBJ_ID' 		=> is_array($OBJ_IDs) && ! isset($OBJ_IDs['IN']) ? array('IN', $OBJ_IDs) : $OBJ_IDs
248 248
 		);
249
-		if ( $TXN_ID ) {
249
+		if ($TXN_ID) {
250 250
 			$query_params['TXN_ID'] = $TXN_ID;
251 251
 		}
252
-		return $this->get_all( array( $query_params ));
252
+		return $this->get_all(array($query_params));
253 253
 	}
254 254
 
255 255
 
@@ -260,13 +260,13 @@  discard block
 block discarded – undo
260 260
 	 * @param EE_Transaction $transaction
261 261
 	 * @return EE_Line_Item[]
262 262
 	 */
263
-	public function get_all_ticket_line_items_for_transaction( EE_Transaction $transaction ) {
264
-		return $this->get_all( array(
263
+	public function get_all_ticket_line_items_for_transaction(EE_Transaction $transaction) {
264
+		return $this->get_all(array(
265 265
 		   array(
266 266
 			   'TXN_ID'   => $transaction->ID(),
267 267
 			   'OBJ_type' => 'Ticket',
268 268
 		   )
269
-	   ) );
269
+	   ));
270 270
 	}
271 271
 
272 272
 
@@ -278,14 +278,14 @@  discard block
 block discarded – undo
278 278
 	 * @param int $TKT_ID
279 279
 	 * @return \EE_Line_Item
280 280
 	 */
281
-	public function get_ticket_line_item_for_transaction( $TXN_ID, $TKT_ID ) {
282
-		return $this->get_one( array(
281
+	public function get_ticket_line_item_for_transaction($TXN_ID, $TKT_ID) {
282
+		return $this->get_one(array(
283 283
 		   array(
284
-			   'TXN_ID'   => EEM_Transaction::instance()->ensure_is_ID( $TXN_ID ),
284
+			   'TXN_ID'   => EEM_Transaction::instance()->ensure_is_ID($TXN_ID),
285 285
 			   'OBJ_ID'   => $TKT_ID,
286 286
 			   'OBJ_type' => 'Ticket',
287 287
 		   )
288
-	   ) );
288
+	   ));
289 289
 	}
290 290
 
291 291
 
@@ -300,8 +300,8 @@  discard block
 block discarded – undo
300 300
 	 * @param EE_Promotion $promotion
301 301
 	 * @return EE_Line_Item
302 302
 	 */
303
-	public function get_existing_promotion_line_item( EE_Line_Item $parent_line_item, EE_Promotion $promotion ) {
304
-		return $this->get_one( array(
303
+	public function get_existing_promotion_line_item(EE_Line_Item $parent_line_item, EE_Promotion $promotion) {
304
+		return $this->get_one(array(
305 305
 			array(
306 306
 				'TXN_ID' 			=> $parent_line_item->TXN_ID(),
307 307
 				'LIN_parent' 	=> $parent_line_item->ID(),
@@ -322,8 +322,8 @@  discard block
 block discarded – undo
322 322
 	 * @param EE_Line_Item $parent_line_item
323 323
 	 * @return EE_Line_Item[]
324 324
 	 */
325
-	public function get_all_promotion_line_items( EE_Line_Item $parent_line_item ) {
326
-		return $this->get_all( array(
325
+	public function get_all_promotion_line_items(EE_Line_Item $parent_line_item) {
326
+		return $this->get_all(array(
327 327
 			array(
328 328
 				'TXN_ID' 			=> $parent_line_item->TXN_ID(),
329 329
 				'LIN_parent' 	=> $parent_line_item->ID(),
@@ -340,8 +340,8 @@  discard block
 block discarded – undo
340 340
 	 * @param EE_Registration $registration
341 341
 	 * @return EE_Line_ITem
342 342
 	 */
343
-	public function get_line_item_for_registration( EE_Registration $registration ) {
344
-		return $this->get_one( $this->line_item_for_registration_query_params( $registration ));
343
+	public function get_line_item_for_registration(EE_Registration $registration) {
344
+		return $this->get_one($this->line_item_for_registration_query_params($registration));
345 345
 	}
346 346
 
347 347
 	/**
@@ -350,14 +350,14 @@  discard block
 block discarded – undo
350 350
 	 * @param array $original_query_params any extra query params you'd like to be merged with
351 351
 	 * @return array like EEM_Base::get_all()'s $query_params
352 352
 	 */
353
-	public function line_item_for_registration_query_params( EE_Registration $registration, $original_query_params = array() ) {
354
-		return array_replace_recursive( $original_query_params, array(
353
+	public function line_item_for_registration_query_params(EE_Registration $registration, $original_query_params = array()) {
354
+		return array_replace_recursive($original_query_params, array(
355 355
 			array(
356 356
 				'OBJ_ID' => $registration->ticket_ID(),
357 357
 				'OBJ_type' => 'Ticket',
358 358
 				'TXN_ID' => $registration->transaction_ID()
359 359
 			)
360
-		) );
360
+		));
361 361
 	}
362 362
 
363 363
 
Please login to merge, or discard this patch.
Indentation   +56 added lines, -56 removed lines patch added patch discarded remove patch
@@ -362,62 +362,62 @@
 block discarded – undo
362 362
 
363 363
 
364 364
 
365
-    /**
366
-     * @return EE_Base_Class[]|EE_Line_Item[]
367
-     * @throws \EE_Error
368
-     */
369
-    public function get_total_line_items_with_no_transaction()
370
-    {
371
-        return $this->get_total_line_items_for_carts();
372
-    }
373
-
374
-
375
-
376
-    /**
377
-     * @return EE_Base_Class[]|EE_Line_Item[]
378
-     * @throws \EE_Error
379
-     */
380
-    public function get_total_line_items_for_active_carts()
381
-    {
382
-        return $this->get_total_line_items_for_carts(false);
383
-    }
384
-
385
-
386
-
387
-    /**
388
-     * @return EE_Base_Class[]|EE_Line_Item[]
389
-     * @throws \EE_Error
390
-     */
391
-    public function get_total_line_items_for_expired_carts()
392
-    {
393
-        return $this->get_total_line_items_for_carts(true);
394
-    }
395
-
396
-
397
-
398
-    /**
399
-     * Returns an array of grand total line items where the TXN_ID is 0.
400
-     * If $expired is set to true, then only line items for expired sessions will be returned.
401
-     * If $expired is set to false, then only line items for active sessions will be returned.
402
-     *
403
-     * @param bool|null $expired
404
-     * @return EE_Base_Class[]|EE_Line_Item[]
405
-     * @throws \EE_Error
406
-     */
407
-    private function get_total_line_items_for_carts($expired = null)
408
-    {
409
-        $where_params = array(
410
-            'TXN_ID'        => 0,
411
-            'LIN_type'      => 'total',
412
-        );
413
-        if ($expired !== null) {
414
-            $where_params['LIN_timestamp'] = array(
415
-                $expired ? '<=' : '>',
416
-                time() - EE_Registry::instance()->SSN->lifespan(),
417
-            );
418
-        }
419
-        return $this->get_all(array($where_params));
420
-    }
365
+	/**
366
+	 * @return EE_Base_Class[]|EE_Line_Item[]
367
+	 * @throws \EE_Error
368
+	 */
369
+	public function get_total_line_items_with_no_transaction()
370
+	{
371
+		return $this->get_total_line_items_for_carts();
372
+	}
373
+
374
+
375
+
376
+	/**
377
+	 * @return EE_Base_Class[]|EE_Line_Item[]
378
+	 * @throws \EE_Error
379
+	 */
380
+	public function get_total_line_items_for_active_carts()
381
+	{
382
+		return $this->get_total_line_items_for_carts(false);
383
+	}
384
+
385
+
386
+
387
+	/**
388
+	 * @return EE_Base_Class[]|EE_Line_Item[]
389
+	 * @throws \EE_Error
390
+	 */
391
+	public function get_total_line_items_for_expired_carts()
392
+	{
393
+		return $this->get_total_line_items_for_carts(true);
394
+	}
395
+
396
+
397
+
398
+	/**
399
+	 * Returns an array of grand total line items where the TXN_ID is 0.
400
+	 * If $expired is set to true, then only line items for expired sessions will be returned.
401
+	 * If $expired is set to false, then only line items for active sessions will be returned.
402
+	 *
403
+	 * @param bool|null $expired
404
+	 * @return EE_Base_Class[]|EE_Line_Item[]
405
+	 * @throws \EE_Error
406
+	 */
407
+	private function get_total_line_items_for_carts($expired = null)
408
+	{
409
+		$where_params = array(
410
+			'TXN_ID'        => 0,
411
+			'LIN_type'      => 'total',
412
+		);
413
+		if ($expired !== null) {
414
+			$where_params['LIN_timestamp'] = array(
415
+				$expired ? '<=' : '>',
416
+				time() - EE_Registry::instance()->SSN->lifespan(),
417
+			);
418
+		}
419
+		return $this->get_all(array($where_params));
420
+	}
421 421
 
422 422
 
423 423
 
Please login to merge, or discard this patch.
core/db_models/EEM_Ticket.model.php 2 patches
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -129,13 +129,13 @@  discard block
 block discarded – undo
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
 block discarded – undo
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
 
Please login to merge, or discard this patch.
Spacing   +39 added lines, -39 removed lines patch added patch discarded remove patch
@@ -21,8 +21,8 @@  discard block
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
         );
Please login to merge, or discard this patch.
core/db_classes/EE_Line_Item.class.php 2 patches
Spacing   +209 added lines, -209 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
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
@@ -50,9 +50,9 @@  discard block
 block discarded – undo
50 50
 	 *                             		    date_format and the second value is the time format
51 51
 	 * @return EE_Line_Item
52 52
 	 */
53
-	public static function new_instance( $props_n_values = array(), $timezone = null, $date_formats = array() ) {
54
-		$has_object = parent::_check_for_object( $props_n_values, __CLASS__, $timezone, $date_formats );
55
-		return $has_object ? $has_object : new self( $props_n_values, false, $timezone, $date_formats );
53
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array()) {
54
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
55
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
56 56
 	}
57 57
 
58 58
 
@@ -63,8 +63,8 @@  discard block
 block discarded – undo
63 63
 	 *                          		the website will be used.
64 64
 	 * @return EE_Line_Item
65 65
 	 */
66
-	public static function new_instance_from_db( $props_n_values = array(), $timezone = null ) {
67
-		return new self( $props_n_values, TRUE, $timezone );
66
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null) {
67
+		return new self($props_n_values, TRUE, $timezone);
68 68
 	}
69 69
 
70 70
 
@@ -75,10 +75,10 @@  discard block
 block discarded – undo
75 75
 	 * @param bool   $bydb
76 76
 	 * @param string $timezone
77 77
 	 */
78
-	protected function __construct( $fieldValues = array(), $bydb = FALSE, $timezone = '' ) {
79
-		parent::__construct( $fieldValues, $bydb, $timezone );
80
-		if ( ! $this->get( 'LIN_code' ) ) {
81
-			$this->set_code( $this->generate_code() );
78
+	protected function __construct($fieldValues = array(), $bydb = FALSE, $timezone = '') {
79
+		parent::__construct($fieldValues, $bydb, $timezone);
80
+		if ( ! $this->get('LIN_code')) {
81
+			$this->set_code($this->generate_code());
82 82
 		}
83 83
 	}
84 84
 
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
 	 * @return int
90 90
 	 */
91 91
 	public function ID() {
92
-		return $this->get( 'LIN_ID' );
92
+		return $this->get('LIN_ID');
93 93
 	}
94 94
 
95 95
 
@@ -99,7 +99,7 @@  discard block
 block discarded – undo
99 99
 	 * @return int
100 100
 	 */
101 101
 	public function TXN_ID() {
102
-		return $this->get( 'TXN_ID' );
102
+		return $this->get('TXN_ID');
103 103
 	}
104 104
 
105 105
 
@@ -108,8 +108,8 @@  discard block
 block discarded – undo
108 108
 	 * Sets TXN_ID
109 109
 	 * @param int $TXN_ID
110 110
 	 */
111
-	public function set_TXN_ID( $TXN_ID ) {
112
-		$this->set( 'TXN_ID', $TXN_ID );
111
+	public function set_TXN_ID($TXN_ID) {
112
+		$this->set('TXN_ID', $TXN_ID);
113 113
 	}
114 114
 
115 115
 
@@ -119,9 +119,9 @@  discard block
 block discarded – undo
119 119
 	 * @return string
120 120
 	 */
121 121
 	public function name() {
122
-		$name =  $this->get( 'LIN_name' );
123
-		if( ! $name ){
124
-			$name = ucwords( str_replace( '-', ' ', $this->type() ) );
122
+		$name = $this->get('LIN_name');
123
+		if ( ! $name) {
124
+			$name = ucwords(str_replace('-', ' ', $this->type()));
125 125
 		}
126 126
 		return $name;
127 127
 	}
@@ -132,8 +132,8 @@  discard block
 block discarded – undo
132 132
 	 * Sets name
133 133
 	 * @param string $name
134 134
 	 */
135
-	public function set_name( $name ) {
136
-		$this->set( 'LIN_name', $name );
135
+	public function set_name($name) {
136
+		$this->set('LIN_name', $name);
137 137
 	}
138 138
 
139 139
 
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
 	 * @return string
144 144
 	 */
145 145
 	public function desc() {
146
-		return $this->get( 'LIN_desc' );
146
+		return $this->get('LIN_desc');
147 147
 	}
148 148
 
149 149
 
@@ -152,8 +152,8 @@  discard block
 block discarded – undo
152 152
 	 * Sets desc
153 153
 	 * @param string $desc
154 154
 	 */
155
-	public function set_desc( $desc ) {
156
-		$this->set( 'LIN_desc', $desc );
155
+	public function set_desc($desc) {
156
+		$this->set('LIN_desc', $desc);
157 157
 	}
158 158
 
159 159
 
@@ -163,7 +163,7 @@  discard block
 block discarded – undo
163 163
 	 * @return int
164 164
 	 */
165 165
 	public function quantity() {
166
-		return $this->get( 'LIN_quantity' );
166
+		return $this->get('LIN_quantity');
167 167
 	}
168 168
 
169 169
 
@@ -172,8 +172,8 @@  discard block
 block discarded – undo
172 172
 	 * Sets quantity
173 173
 	 * @param int $quantity
174 174
 	 */
175
-    public function set_quantity( $quantity ) {
176
-		$this->set( 'LIN_quantity', max( $quantity, 0 ) );
175
+    public function set_quantity($quantity) {
176
+		$this->set('LIN_quantity', max($quantity, 0));
177 177
 	}
178 178
 
179 179
 
@@ -183,7 +183,7 @@  discard block
 block discarded – undo
183 183
 	 * @return string
184 184
 	 */
185 185
 	public function OBJ_ID() {
186
-		return $this->get( 'OBJ_ID' );
186
+		return $this->get('OBJ_ID');
187 187
 	}
188 188
 
189 189
 
@@ -192,8 +192,8 @@  discard block
 block discarded – undo
192 192
 	 * Sets item_id
193 193
 	 * @param string $item_id
194 194
 	 */
195
-	public function set_OBJ_ID( $item_id ) {
196
-		$this->set( 'OBJ_ID', $item_id );
195
+	public function set_OBJ_ID($item_id) {
196
+		$this->set('OBJ_ID', $item_id);
197 197
 	}
198 198
 
199 199
 
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
 	 * @return string
204 204
 	 */
205 205
 	public function OBJ_type() {
206
-		return $this->get( 'OBJ_type' );
206
+		return $this->get('OBJ_type');
207 207
 	}
208 208
 
209 209
 
@@ -240,8 +240,8 @@  discard block
 block discarded – undo
240 240
 	 * Sets item_type
241 241
 	 * @param string $OBJ_type
242 242
 	 */
243
-	public function set_OBJ_type( $OBJ_type ) {
244
-		$this->set( 'OBJ_type', $OBJ_type );
243
+	public function set_OBJ_type($OBJ_type) {
244
+		$this->set('OBJ_type', $OBJ_type);
245 245
 	}
246 246
 
247 247
 
@@ -251,7 +251,7 @@  discard block
 block discarded – undo
251 251
 	 * @return float
252 252
 	 */
253 253
 	public function unit_price() {
254
-		return $this->get( 'LIN_unit_price' );
254
+		return $this->get('LIN_unit_price');
255 255
 	}
256 256
 
257 257
 
@@ -261,8 +261,8 @@  discard block
 block discarded – undo
261 261
 	 *
262 262
 	 * @param float $unit_price
263 263
 	 */
264
-	public function set_unit_price( $unit_price ) {
265
-		$this->set( 'LIN_unit_price', $unit_price );
264
+	public function set_unit_price($unit_price) {
265
+		$this->set('LIN_unit_price', $unit_price);
266 266
 	}
267 267
 
268 268
 
@@ -273,19 +273,19 @@  discard block
 block discarded – undo
273 273
 	 * @return boolean
274 274
 	 */
275 275
 	public function is_percent() {
276
-		if( $this->is_tax_sub_total() ) {
276
+		if ($this->is_tax_sub_total()) {
277 277
 			//tax subtotals HAVE a percent on them, that percentage only applies
278 278
 			//to taxable items, so its' an exception. Treat it like a flat line item
279 279
 			return false;
280 280
 		}
281
-		$unit_price = abs( $this->get( 'LIN_unit_price' ) );
282
-		$percent = abs( $this->get( 'LIN_percent' ) );
283
-		if ( $unit_price < .001 && $percent ) {
281
+		$unit_price = abs($this->get('LIN_unit_price'));
282
+		$percent = abs($this->get('LIN_percent'));
283
+		if ($unit_price < .001 && $percent) {
284 284
 			return TRUE;
285
-		} elseif ( $unit_price >= .001 && !$percent ) {
285
+		} elseif ($unit_price >= .001 && ! $percent) {
286 286
 			return FALSE;
287
-		} elseif ( $unit_price >= .001 && $percent ) {
288
-			throw new EE_Error( sprintf( __( "A Line Item can not have a unit price of (%s) AND a percent (%s)!", "event_espresso" ), $unit_price, $percent ) );
287
+		} elseif ($unit_price >= .001 && $percent) {
288
+			throw new EE_Error(sprintf(__("A Line Item can not have a unit price of (%s) AND a percent (%s)!", "event_espresso"), $unit_price, $percent));
289 289
 		} else {
290 290
 			// if they're both 0, assume its not a percent item
291 291
 			return FALSE;
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
 	 * @return float
300 300
 	 */
301 301
 	public function percent() {
302
-		return $this->get( 'LIN_percent' );
302
+		return $this->get('LIN_percent');
303 303
 	}
304 304
 
305 305
 
@@ -308,8 +308,8 @@  discard block
 block discarded – undo
308 308
 	 * Sets percent (between 100-0.01)
309 309
 	 * @param float $percent
310 310
 	 */
311
-	public function set_percent( $percent ) {
312
-		$this->set( 'LIN_percent', $percent );
311
+	public function set_percent($percent) {
312
+		$this->set('LIN_percent', $percent);
313 313
 	}
314 314
 
315 315
 
@@ -319,7 +319,7 @@  discard block
 block discarded – undo
319 319
 	 * @return float
320 320
 	 */
321 321
 	public function total() {
322
-		return $this->get( 'LIN_total' );
322
+		return $this->get('LIN_total');
323 323
 	}
324 324
 
325 325
 
@@ -328,8 +328,8 @@  discard block
 block discarded – undo
328 328
 	 * Sets total
329 329
 	 * @param float $total
330 330
 	 */
331
-	public function set_total( $total ) {
332
-		$this->set( 'LIN_total', $total );
331
+	public function set_total($total) {
332
+		$this->set('LIN_total', $total);
333 333
 	}
334 334
 
335 335
 
@@ -339,7 +339,7 @@  discard block
 block discarded – undo
339 339
 	 * @return int
340 340
 	 */
341 341
 	public function order() {
342
-		return $this->get( 'LIN_order' );
342
+		return $this->get('LIN_order');
343 343
 	}
344 344
 
345 345
 
@@ -348,8 +348,8 @@  discard block
 block discarded – undo
348 348
 	 * Sets order
349 349
 	 * @param int $order
350 350
 	 */
351
-	public function set_order( $order ) {
352
-		$this->set( 'LIN_order', $order );
351
+	public function set_order($order) {
352
+		$this->set('LIN_order', $order);
353 353
 	}
354 354
 
355 355
 
@@ -359,7 +359,7 @@  discard block
 block discarded – undo
359 359
 	 * @return int
360 360
 	 */
361 361
 	public function parent_ID() {
362
-		return $this->get( 'LIN_parent' );
362
+		return $this->get('LIN_parent');
363 363
 	}
364 364
 
365 365
 
@@ -368,8 +368,8 @@  discard block
 block discarded – undo
368 368
 	 * Sets parent
369 369
 	 * @param int $parent
370 370
 	 */
371
-	public function set_parent_ID( $parent ) {
372
-		$this->set( 'LIN_parent', $parent );
371
+	public function set_parent_ID($parent) {
372
+		$this->set('LIN_parent', $parent);
373 373
 	}
374 374
 
375 375
 
@@ -379,7 +379,7 @@  discard block
 block discarded – undo
379 379
 	 * @return string
380 380
 	 */
381 381
 	public function type() {
382
-		return $this->get( 'LIN_type' );
382
+		return $this->get('LIN_type');
383 383
 	}
384 384
 
385 385
 
@@ -388,8 +388,8 @@  discard block
 block discarded – undo
388 388
 	 * Sets type
389 389
 	 * @param string $type
390 390
 	 */
391
-	public function set_type( $type ) {
392
-		$this->set( 'LIN_type', $type );
391
+	public function set_type($type) {
392
+		$this->set('LIN_type', $type);
393 393
 	}
394 394
 
395 395
 
@@ -402,8 +402,8 @@  discard block
 block discarded – undo
402 402
 	 * @return EE_Line_Item
403 403
 	 */
404 404
 	public function parent() {
405
-		if( $this->ID() ) {
406
-			return $this->get_model()->get_one_by_ID( $this->parent_ID() );
405
+		if ($this->ID()) {
406
+			return $this->get_model()->get_one_by_ID($this->parent_ID());
407 407
 		} else {
408 408
 			return $this->_parent;
409 409
 		}
@@ -416,13 +416,13 @@  discard block
 block discarded – undo
416 416
 	 * @return EE_Line_Item[]
417 417
 	 */
418 418
 	public function children() {
419
-		if ( $this->ID() ) {
419
+		if ($this->ID()) {
420 420
 			return $this->get_model()->get_all(
421 421
 					array(
422
-						array( 'LIN_parent' => $this->ID() ),
423
-						'order_by' => array( 'LIN_order' => 'ASC' ) ) );
422
+						array('LIN_parent' => $this->ID()),
423
+						'order_by' => array('LIN_order' => 'ASC') ) );
424 424
 		} else {
425
-			if ( ! is_array( $this->_children ) ) {
425
+			if ( ! is_array($this->_children)) {
426 426
 				$this->_children = array();
427 427
 			}
428 428
 			return $this->_children;
@@ -436,7 +436,7 @@  discard block
 block discarded – undo
436 436
 	 * @return string
437 437
 	 */
438 438
 	public function code() {
439
-		return $this->get( 'LIN_code' );
439
+		return $this->get('LIN_code');
440 440
 	}
441 441
 
442 442
 
@@ -445,8 +445,8 @@  discard block
 block discarded – undo
445 445
 	 * Sets code
446 446
 	 * @param string $code
447 447
 	 */
448
-	public function set_code( $code ) {
449
-		$this->set( 'LIN_code', $code );
448
+	public function set_code($code) {
449
+		$this->set('LIN_code', $code);
450 450
 	}
451 451
 
452 452
 
@@ -456,7 +456,7 @@  discard block
 block discarded – undo
456 456
 	 * @return boolean
457 457
 	 */
458 458
 	public function is_taxable() {
459
-		return $this->get( 'LIN_is_taxable' );
459
+		return $this->get('LIN_is_taxable');
460 460
 	}
461 461
 
462 462
 
@@ -465,8 +465,8 @@  discard block
 block discarded – undo
465 465
 	 * Sets is_taxable
466 466
 	 * @param boolean $is_taxable
467 467
 	 */
468
-	public function set_is_taxable( $is_taxable ) {
469
-		$this->set( 'LIN_is_taxable', $is_taxable );
468
+	public function set_is_taxable($is_taxable) {
469
+		$this->set('LIN_is_taxable', $is_taxable);
470 470
 	}
471 471
 
472 472
 
@@ -481,7 +481,7 @@  discard block
 block discarded – undo
481 481
 	 */
482 482
 	public function get_object() {
483 483
 		$model_name_of_related_obj = $this->OBJ_type();
484
-		return $this->get_model()->has_relation(  $model_name_of_related_obj ) ? $this->get_first_related( $model_name_of_related_obj ) : NULL;
484
+		return $this->get_model()->has_relation($model_name_of_related_obj) ? $this->get_first_related($model_name_of_related_obj) : NULL;
485 485
 	}
486 486
 
487 487
 
@@ -492,11 +492,11 @@  discard block
 block discarded – undo
492 492
 	 * @param array $query_params
493 493
 	 * @return EE_Ticket
494 494
 	 */
495
-	public function ticket( $query_params = array() ) {
495
+	public function ticket($query_params = array()) {
496 496
 		//we're going to assume that when this method is called we always want to receive the attached ticket EVEN if that ticket is archived.  This can be overridden via the incoming $query_params argument
497
-		$remove_defaults = array( 'default_where_conditions' => 'none' );
498
-		$query_params = array_merge( $remove_defaults, $query_params );
499
-		return $this->get_first_related( 'Ticket', $query_params );
497
+		$remove_defaults = array('default_where_conditions' => 'none');
498
+		$query_params = array_merge($remove_defaults, $query_params);
499
+		return $this->get_first_related('Ticket', $query_params);
500 500
 	}
501 501
 
502 502
 
@@ -506,11 +506,11 @@  discard block
 block discarded – undo
506 506
 	 * @return EE_Datetime | NULL
507 507
 	 */
508 508
 	public function get_ticket_datetime() {
509
-		if ( $this->OBJ_type() === 'Ticket' ) {
509
+		if ($this->OBJ_type() === 'Ticket') {
510 510
 			$ticket = $this->ticket();
511
-			if ( $ticket instanceof EE_Ticket ) {
511
+			if ($ticket instanceof EE_Ticket) {
512 512
 				$datetime = $ticket->first_datetime();
513
-				if ( $datetime instanceof EE_Datetime ) {
513
+				if ($datetime instanceof EE_Datetime) {
514 514
 					return $datetime;
515 515
 				}
516 516
 			}
@@ -526,9 +526,9 @@  discard block
 block discarded – undo
526 526
 	 * @return string
527 527
 	 */
528 528
 	public function ticket_event_name() {
529
-		$event_name = __( "Unknown", "event_espresso" );
529
+		$event_name = __("Unknown", "event_espresso");
530 530
 		$event = $this->ticket_event();
531
-		if ( $event instanceof EE_Event ) {
531
+		if ($event instanceof EE_Event) {
532 532
 			$event_name = $event->name();
533 533
 		}
534 534
 		return $event_name;
@@ -542,9 +542,9 @@  discard block
 block discarded – undo
542 542
 	public function ticket_event() {
543 543
 		$event = null;
544 544
 		$ticket = $this->ticket();
545
-		if ( $ticket instanceof EE_Ticket ) {
545
+		if ($ticket instanceof EE_Ticket) {
546 546
 			$datetime = $ticket->first_datetime();
547
-			if ( $datetime instanceof EE_Datetime ) {
547
+			if ($datetime instanceof EE_Datetime) {
548 548
 				$event = $datetime->event();
549 549
 			}
550 550
 		}
@@ -559,11 +559,11 @@  discard block
 block discarded – undo
559 559
 	 * @param string $time_format
560 560
 	 * @return string
561 561
 	 */
562
-	public function ticket_datetime_start( $date_format = '', $time_format = '' ) {
563
-		$first_datetime_string = __( "Unknown", "event_espresso" );
562
+	public function ticket_datetime_start($date_format = '', $time_format = '') {
563
+		$first_datetime_string = __("Unknown", "event_espresso");
564 564
 		$datetime = $this->get_ticket_datetime();
565
-		if ( $datetime ) {
566
-			$first_datetime_string = $datetime->start_date_and_time( $date_format, $time_format );
565
+		if ($datetime) {
566
+			$first_datetime_string = $datetime->start_date_and_time($date_format, $time_format);
567 567
 		}
568 568
 		return $first_datetime_string;
569 569
 	}
@@ -578,26 +578,26 @@  discard block
 block discarded – undo
578 578
 	 * @return bool success
579 579
 	 * @throws \EE_Error
580 580
 	 */
581
-	public function add_child_line_item( EEI_Line_Item $line_item, $set_order = true ) {
581
+	public function add_child_line_item(EEI_Line_Item $line_item, $set_order = true) {
582 582
 		// should we calculate the LIN_order for this line item ?
583
-		if ( $set_order || $line_item->order() === null ) {
584
-			$line_item->set_order( count( $this->children() ) );
583
+		if ($set_order || $line_item->order() === null) {
584
+			$line_item->set_order(count($this->children()));
585 585
 		}
586
-		if ( $this->ID() ) {
586
+		if ($this->ID()) {
587 587
 			//check for any duplicate line items (with the same code), if so, this replaces it
588
-			$line_item_with_same_code = $this->get_child_line_item(  $line_item->code() );
589
-			if( $line_item_with_same_code instanceof EE_Line_Item && $line_item_with_same_code !== $line_item ) {
590
-				$this->delete_child_line_item( $line_item_with_same_code->code() );
588
+			$line_item_with_same_code = $this->get_child_line_item($line_item->code());
589
+			if ($line_item_with_same_code instanceof EE_Line_Item && $line_item_with_same_code !== $line_item) {
590
+				$this->delete_child_line_item($line_item_with_same_code->code());
591 591
 			}
592
-			$line_item->set_parent_ID( $this->ID() );
593
-			if( $this->TXN_ID() ){
594
-				$line_item->set_TXN_ID( $this->TXN_ID() );
592
+			$line_item->set_parent_ID($this->ID());
593
+			if ($this->TXN_ID()) {
594
+				$line_item->set_TXN_ID($this->TXN_ID());
595 595
 			}
596 596
 			return $line_item->save();
597 597
 		} else {
598
-			$this->_children[ $line_item->code() ] = $line_item;
599
-			if( $line_item->parent() != $this ) {
600
-				$line_item->set_parent( $this );
598
+			$this->_children[$line_item->code()] = $line_item;
599
+			if ($line_item->parent() != $this) {
600
+				$line_item->set_parent($this);
601 601
 			}
602 602
 			return TRUE;
603 603
 		}
@@ -611,16 +611,16 @@  discard block
 block discarded – undo
611 611
 	 * @param EE_Line_Item $line_item
612 612
 	 *
613 613
 	 */
614
-	public function set_parent( $line_item ) {
615
-		if ( $this->ID() ) {
616
-			if( ! $line_item->ID() ) {
614
+	public function set_parent($line_item) {
615
+		if ($this->ID()) {
616
+			if ( ! $line_item->ID()) {
617 617
 				$line_item->save();
618 618
 			}
619
-			$this->set_parent_ID( $line_item->ID() );
619
+			$this->set_parent_ID($line_item->ID());
620 620
 			$this->save();
621 621
 		} else {
622 622
 			$this->_parent = $line_item;
623
-			$this->set_parent_ID( $line_item->ID() );
623
+			$this->set_parent_ID($line_item->ID());
624 624
 		}
625 625
 	}
626 626
 
@@ -633,11 +633,11 @@  discard block
 block discarded – undo
633 633
 	 * @param string $code
634 634
 	 * @return EE_Line_Item
635 635
 	 */
636
-	public function get_child_line_item( $code ) {
637
-		if ( $this->ID() ) {
638
-			return $this->get_model()->get_one( array( array( 'LIN_parent' => $this->ID(), 'LIN_code' => $code ) ) );
636
+	public function get_child_line_item($code) {
637
+		if ($this->ID()) {
638
+			return $this->get_model()->get_one(array(array('LIN_parent' => $this->ID(), 'LIN_code' => $code)));
639 639
 		} else {
640
-			return isset( $this->_children[ $code ] ) ? $this->_children[ $code ] : null;
640
+			return isset($this->_children[$code]) ? $this->_children[$code] : null;
641 641
 		}
642 642
 	}
643 643
 
@@ -648,10 +648,10 @@  discard block
 block discarded – undo
648 648
 	 * @return int
649 649
 	 */
650 650
 	public function delete_children_line_items() {
651
-		if ( $this->ID() ) {
652
-			return $this->get_model()->delete( array( array( 'LIN_parent' => $this->ID() ) ) );
651
+		if ($this->ID()) {
652
+			return $this->get_model()->delete(array(array('LIN_parent' => $this->ID())));
653 653
 		} else {
654
-			$count = count( $this->_children );
654
+			$count = count($this->_children);
655 655
 			$this->_children = array();
656 656
 			return $count;
657 657
 		}
@@ -668,25 +668,25 @@  discard block
 block discarded – undo
668 668
 	 * @param bool $stop_search_once_found
669 669
 	 * @return int count of items deleted (or simply removed from the line item's cache, if not has not been saved to the DB yet)
670 670
 	 */
671
-	public function delete_child_line_item( $code, $stop_search_once_found = true ) {
672
-		if ( $this->ID() ) {
671
+	public function delete_child_line_item($code, $stop_search_once_found = true) {
672
+		if ($this->ID()) {
673 673
 			$items_deleted = 0;
674
-			if( $this->code() == $code ) {
675
-				$items_deleted += EEH_Line_Item::delete_all_child_items( $this );
674
+			if ($this->code() == $code) {
675
+				$items_deleted += EEH_Line_Item::delete_all_child_items($this);
676 676
 				$items_deleted += (int) $this->delete();
677
-				if( $stop_search_once_found ){
677
+				if ($stop_search_once_found) {
678 678
 					return $items_deleted;
679 679
 				}
680 680
 			}
681
-			foreach( $this->children() as $child_line_item ) {
682
-				$items_deleted += $child_line_item->delete_child_line_item( $code, $stop_search_once_found );
681
+			foreach ($this->children() as $child_line_item) {
682
+				$items_deleted += $child_line_item->delete_child_line_item($code, $stop_search_once_found);
683 683
 			}
684 684
 			return $items_deleted;
685 685
 		} else {
686
-			if( isset( $this->_children[ $code ] ) ) {
687
-				unset( $this->_children[ $code ] );
686
+			if (isset($this->_children[$code])) {
687
+				unset($this->_children[$code]);
688 688
 				return 1;
689
-			}else{
689
+			} else {
690 690
 				return 0;
691 691
 			}
692 692
 		}
@@ -699,9 +699,9 @@  discard block
 block discarded – undo
699 699
 	 * @return boolean
700 700
 	 */
701 701
 	public function delete_if_childless_subtotal() {
702
-		if( $this->ID() &&
702
+		if ($this->ID() &&
703 703
 				$this->type() == EEM_Line_Item::type_sub_total &&
704
-				! $this->children() ) {
704
+				! $this->children()) {
705 705
 			return $this->delete();
706 706
 		} else {
707 707
 			return false;
@@ -716,7 +716,7 @@  discard block
 block discarded – undo
716 716
 	 */
717 717
 	public function generate_code() {
718 718
 		// each line item in the cart requires a unique identifier
719
-		return md5( $this->get( 'OBJ_type' ) . $this->get( 'OBJ_ID' ) . microtime() );
719
+		return md5($this->get('OBJ_type').$this->get('OBJ_ID').microtime());
720 720
 	}
721 721
 
722 722
 
@@ -799,7 +799,7 @@  discard block
 block discarded – undo
799 799
 	 * @return string like '2, 004.00', formatted according to the localized currency
800 800
 	 */
801 801
 	public function unit_price_no_code() {
802
-		return $this->get_pretty( 'LIN_unit_price', 'no_currency_code' );
802
+		return $this->get_pretty('LIN_unit_price', 'no_currency_code');
803 803
 	}
804 804
 
805 805
 
@@ -809,7 +809,7 @@  discard block
 block discarded – undo
809 809
 	 * @return string like '2, 004.00', formatted according to the localized currency
810 810
 	 */
811 811
 	public function total_no_code() {
812
-		return $this->get_pretty( 'LIN_total', 'no_currency_code' );
812
+		return $this->get_pretty('LIN_total', 'no_currency_code');
813 813
 	}
814 814
 
815 815
 
@@ -829,17 +829,17 @@  discard block
 block discarded – undo
829 829
 		$tax_total = $this->recalculate_taxes_and_tax_total();
830 830
 		$total = $pre_tax_total + $tax_total;
831 831
 		// no negative totals plz
832
-		$total = max( $total, 0 );
833
-		$this->set_total( $total );
832
+		$total = max($total, 0);
833
+		$this->set_total($total);
834 834
 		//only update the related transaction's total
835 835
 		//if we intend to save this line item and its a grand total
836
-		if(
836
+		if (
837 837
 			$this->allow_persist() &&
838 838
 			$this->type() === EEM_Line_Item::type_total &&
839 839
 			$this->transaction() instanceof EE_Transaction
840
-		){
841
-			$this->transaction()->set_total( $total );
842
-			if ( $this->transaction()->ID() ) {
840
+		) {
841
+			$this->transaction()->set_total($total);
842
+			if ($this->transaction()->ID()) {
843 843
 				$this->transaction()->save();
844 844
 			}
845 845
 		}
@@ -858,47 +858,47 @@  discard block
 block discarded – undo
858 858
 	public function recalculate_pre_tax_total() {
859 859
 		$total = 0;
860 860
 		$my_children = $this->children();
861
-		$has_children = ! empty( $my_children );
862
-		if ( $has_children && $this->is_line_item() ) {
863
-			$total = $this->_recalculate_pretax_total_for_line_item( $total, $my_children );
864
-		} elseif ( ! $has_children && ( $this->is_sub_line_item() || $this->is_line_item() ) ) {
861
+		$has_children = ! empty($my_children);
862
+		if ($has_children && $this->is_line_item()) {
863
+			$total = $this->_recalculate_pretax_total_for_line_item($total, $my_children);
864
+		} elseif ( ! $has_children && ($this->is_sub_line_item() || $this->is_line_item())) {
865 865
 			$total = $this->unit_price() * $this->quantity();
866
-		} elseif( $this->is_sub_total() || $this->is_total() ) {
867
-			$total = $this->_recalculate_pretax_total_for_subtotal( $total, $my_children );
868
-		} elseif ( $this->is_tax_sub_total() || $this->is_tax() || $this->is_cancelled() ) {
866
+		} elseif ($this->is_sub_total() || $this->is_total()) {
867
+			$total = $this->_recalculate_pretax_total_for_subtotal($total, $my_children);
868
+		} elseif ($this->is_tax_sub_total() || $this->is_tax() || $this->is_cancelled()) {
869 869
 			// completely ignore tax totals, tax sub-totals, and cancelled line items, when calculating the pre-tax-total
870 870
 			return 0;
871 871
 		}
872 872
 		// ensure all non-line items and non-sub-line-items have a quantity of 1 (except for Events)
873
-		if(
873
+		if (
874 874
 			! $this->is_line_item() &&
875 875
 			! $this->is_sub_line_item() &&
876 876
 			! $this->is_cancellation()
877 877
 		) {
878
-			if ( $this->OBJ_type() !== 'Event' ) {
879
-				$this->set_quantity( 1 );
878
+			if ($this->OBJ_type() !== 'Event') {
879
+				$this->set_quantity(1);
880 880
 			}
881
-			if( ! $this->is_percent() ) {
882
-				$this->set_unit_price( $this->total() );
881
+			if ( ! $this->is_percent()) {
882
+				$this->set_unit_price($this->total());
883 883
 			}
884 884
 		}
885 885
 
886 886
 		//we don't want to bother saving grand totals, because that needs to factor in taxes anyways
887 887
 		//so it ought to be
888
-		if( ! $this->is_total() ) {
889
-			$this->set_total( $total );
888
+		if ( ! $this->is_total()) {
889
+			$this->set_total($total);
890 890
 			//if not a percent line item, make sure we keep the unit price in sync
891
-			if(
891
+			if (
892 892
 				$has_children
893 893
 				&& $this->is_line_item()
894 894
 				&& ! $this->is_percent()
895 895
 			) {
896
-				if( $this->quantity() === 0 ){
896
+				if ($this->quantity() === 0) {
897 897
 					$new_unit_price = 0;
898 898
 				} else {
899 899
 					$new_unit_price = $this->total() / $this->quantity();
900 900
 				}
901
-				$this->set_unit_price( $new_unit_price );
901
+				$this->set_unit_price($new_unit_price);
902 902
 			}
903 903
 			$this->maybe_save();
904 904
 		}
@@ -918,39 +918,39 @@  discard block
 block discarded – undo
918 918
 	 * @return float
919 919
 	 * @throws \EE_Error
920 920
 	 */
921
-	protected function _recalculate_pretax_total_for_subtotal( $calculated_total_so_far, $my_children = null ) {
922
-		if( $my_children === null ) {
921
+	protected function _recalculate_pretax_total_for_subtotal($calculated_total_so_far, $my_children = null) {
922
+		if ($my_children === null) {
923 923
 			$my_children = $this->children();
924 924
 		}
925 925
 		//get the total of all its children
926
-		foreach ( $my_children as $child_line_item ) {
927
-			if ( $child_line_item instanceof EE_Line_Item && ! $child_line_item->is_cancellation() ) {
926
+		foreach ($my_children as $child_line_item) {
927
+			if ($child_line_item instanceof EE_Line_Item && ! $child_line_item->is_cancellation()) {
928 928
 				// percentage line items are based on total so far
929
-				if ( $child_line_item->is_percent() ) {
929
+				if ($child_line_item->is_percent()) {
930 930
 					//round as we go so that the line items add up ok
931 931
 					$percent_total = round(
932 932
 						$calculated_total_so_far * $child_line_item->percent() / 100,
933 933
 						EE_Registry::instance()->CFG->currency->dec_plc
934 934
 					);
935
-					$child_line_item->set_total( $percent_total );
935
+					$child_line_item->set_total($percent_total);
936 936
 					//so far all percent line items should have a quantity of 1
937 937
 					//(ie, no double percent discounts. Although that might be requested someday)
938
-					$child_line_item->set_quantity( 1 );
938
+					$child_line_item->set_quantity(1);
939 939
 					$child_line_item->maybe_save();
940 940
 					$calculated_total_so_far += $percent_total;
941 941
 				} else {
942 942
 					//verify flat sub-line-item quantities match their parent
943
-					if( $child_line_item->is_sub_line_item() ) {
944
-						$child_line_item->set_quantity( $this->quantity() );
943
+					if ($child_line_item->is_sub_line_item()) {
944
+						$child_line_item->set_quantity($this->quantity());
945 945
 					}
946 946
 					$calculated_total_so_far += $child_line_item->recalculate_pre_tax_total();
947 947
 				}
948 948
 			}
949 949
 		}
950 950
 
951
-		if( $this->is_sub_total() ){
951
+		if ($this->is_sub_total()) {
952 952
 			// no negative totals plz
953
-			$calculated_total_so_far = max( $calculated_total_so_far, 0 );
953
+			$calculated_total_so_far = max($calculated_total_so_far, 0);
954 954
 		}
955 955
 		return $calculated_total_so_far;
956 956
 	}
@@ -968,8 +968,8 @@  discard block
 block discarded – undo
968 968
 	 * @return float
969 969
 	 * @throws \EE_Error
970 970
 	 */
971
-	protected function _recalculate_pretax_total_for_line_item( $calculated_total_so_far, $my_children = null ) {
972
-		if( $my_children === null ) {
971
+	protected function _recalculate_pretax_total_for_line_item($calculated_total_so_far, $my_children = null) {
972
+		if ($my_children === null) {
973 973
 			$my_children = $this->children();
974 974
 		}
975 975
 		//we need to keep track of the running total for a single item,
@@ -977,10 +977,10 @@  discard block
 block discarded – undo
977 977
 		$unit_price_for_total = 0;
978 978
 		$quantity_for_total = 1;
979 979
 		//get the total of all its children
980
-		foreach ( $my_children as $child_line_item ) {
981
-			if ( $child_line_item instanceof EE_Line_Item &&
980
+		foreach ($my_children as $child_line_item) {
981
+			if ($child_line_item instanceof EE_Line_Item &&
982 982
 					! $child_line_item->is_cancellation()) {
983
-				if ( $child_line_item->is_percent() ) {
983
+				if ($child_line_item->is_percent()) {
984 984
 					//it should be the unit-price-so-far multiplied by teh percent multiplied by the quantity
985 985
 					//not total multiplied by percent, because that ignores rounding along-the-way
986 986
 					$percent_unit_price = round(
@@ -988,17 +988,17 @@  discard block
 block discarded – undo
988 988
 						EE_Registry::instance()->CFG->currency->dec_plc
989 989
 					);
990 990
 					$percent_total = $percent_unit_price * $quantity_for_total;
991
-					$child_line_item->set_total( $percent_total );
991
+					$child_line_item->set_total($percent_total);
992 992
 					//so far all percent line items should have a quantity of 1
993 993
 					//(ie, no double percent discounts. Although that might be requested someday)
994
-					$child_line_item->set_quantity( 1 );
994
+					$child_line_item->set_quantity(1);
995 995
 					$child_line_item->maybe_save();
996 996
 					$calculated_total_so_far += $percent_total;
997 997
 					$unit_price_for_total += $percent_unit_price;
998 998
 				} else {
999 999
 					//verify flat sub-line-item quantities match their parent
1000
-					if( $child_line_item->is_sub_line_item() ) {
1001
-						$child_line_item->set_quantity( $this->quantity() );
1000
+					if ($child_line_item->is_sub_line_item()) {
1001
+						$child_line_item->set_quantity($this->quantity());
1002 1002
 					}
1003 1003
 					$quantity_for_total = $child_line_item->quantity();
1004 1004
 					$calculated_total_so_far += $child_line_item->recalculate_pre_tax_total();
@@ -1022,10 +1022,10 @@  discard block
 block discarded – undo
1022 1022
 		//calculate the pretax total
1023 1023
 		$taxable_total = $this->taxable_total();
1024 1024
 		$tax_total = 0;
1025
-		foreach ( $taxes as $tax ) {
1025
+		foreach ($taxes as $tax) {
1026 1026
 			$total_on_this_tax = $taxable_total * $tax->percent() / 100;
1027 1027
 			//remember the total on this line item
1028
-			$tax->set_total( $total_on_this_tax );
1028
+			$tax->set_total($total_on_this_tax);
1029 1029
 			$tax_total += $tax->total();
1030 1030
 		}
1031 1031
 		$this->_recalculate_tax_sub_total();
@@ -1039,21 +1039,21 @@  discard block
 block discarded – undo
1039 1039
 	 * @return void
1040 1040
 	 */
1041 1041
 	private function _recalculate_tax_sub_total() {
1042
-		if ( $this->is_tax_sub_total() ) {
1042
+		if ($this->is_tax_sub_total()) {
1043 1043
 			$total = 0;
1044 1044
 			$total_percent = 0;
1045 1045
 			//simply loop through all its children (which should be taxes) and sum their total
1046
-			foreach ( $this->children() as $child_tax ) {
1047
-				if ( $child_tax instanceof EE_Line_Item ) {
1046
+			foreach ($this->children() as $child_tax) {
1047
+				if ($child_tax instanceof EE_Line_Item) {
1048 1048
 					$total += $child_tax->total();
1049 1049
 					$total_percent += $child_tax->percent();
1050 1050
 				}
1051 1051
 			}
1052
-			$this->set_total( $total );
1053
-			$this->set_percent( $total_percent );
1054
-		} elseif ( $this->is_total() ) {
1055
-			foreach ( $this->children() as $maybe_tax_subtotal ) {
1056
-				if ( $maybe_tax_subtotal instanceof EE_Line_Item ) {
1052
+			$this->set_total($total);
1053
+			$this->set_percent($total_percent);
1054
+		} elseif ($this->is_total()) {
1055
+			foreach ($this->children() as $maybe_tax_subtotal) {
1056
+				if ($maybe_tax_subtotal instanceof EE_Line_Item) {
1057 1057
 					$maybe_tax_subtotal->_recalculate_tax_sub_total();
1058 1058
 				}
1059 1059
 			}
@@ -1069,8 +1069,8 @@  discard block
 block discarded – undo
1069 1069
 	public function get_total_tax() {
1070 1070
 		$this->_recalculate_tax_sub_total();
1071 1071
 		$total = 0;
1072
-		foreach ( $this->tax_descendants() as $tax_line_item ) {
1073
-			if ( $tax_line_item instanceof EE_Line_Item ) {
1072
+		foreach ($this->tax_descendants() as $tax_line_item) {
1073
+			if ($tax_line_item instanceof EE_Line_Item) {
1074 1074
 				$total += $tax_line_item->total();
1075 1075
 			}
1076 1076
 		}
@@ -1084,15 +1084,15 @@  discard block
 block discarded – undo
1084 1084
 	 */
1085 1085
 	public function get_items_total() {
1086 1086
 		//by default, let's make sure we're consistent with the existing line item
1087
-		if( $this->is_total() ) {
1088
-			$pretax_subtotal_li = EEH_Line_Item::get_pre_tax_subtotal( $this );
1089
-			if( $pretax_subtotal_li instanceof EE_Line_Item ) {
1087
+		if ($this->is_total()) {
1088
+			$pretax_subtotal_li = EEH_Line_Item::get_pre_tax_subtotal($this);
1089
+			if ($pretax_subtotal_li instanceof EE_Line_Item) {
1090 1090
 				return $pretax_subtotal_li->total();
1091 1091
 			}
1092 1092
 		}
1093 1093
 		$total = 0;
1094
-		foreach ( $this->get_items() as $item ) {
1095
-			if ( $item instanceof EE_Line_Item ) {
1094
+		foreach ($this->get_items() as $item) {
1095
+			if ($item instanceof EE_Line_Item) {
1096 1096
 				$total += $item->total();
1097 1097
 			}
1098 1098
 		}
@@ -1107,7 +1107,7 @@  discard block
 block discarded – undo
1107 1107
 	 * @return EE_Line_Item[]
1108 1108
 	 */
1109 1109
 	public function tax_descendants() {
1110
-		return EEH_Line_Item::get_tax_descendants( $this );
1110
+		return EEH_Line_Item::get_tax_descendants($this);
1111 1111
 	}
1112 1112
 
1113 1113
 
@@ -1117,7 +1117,7 @@  discard block
 block discarded – undo
1117 1117
 	 * @return EE_Line_Item[]
1118 1118
 	 */
1119 1119
 	public function get_items() {
1120
-		return EEH_Line_Item::get_line_item_descendants( $this );
1120
+		return EEH_Line_Item::get_line_item_descendants($this);
1121 1121
 	}
1122 1122
 
1123 1123
 
@@ -1133,22 +1133,22 @@  discard block
 block discarded – undo
1133 1133
 	 */
1134 1134
 	public function taxable_total() {
1135 1135
 		$total = 0;
1136
-		if ( $this->children() ) {
1137
-			foreach ( $this->children() as $child_line_item ) {
1138
-				if ( $child_line_item->type() === EEM_Line_Item::type_line_item && $child_line_item->is_taxable()) {
1136
+		if ($this->children()) {
1137
+			foreach ($this->children() as $child_line_item) {
1138
+				if ($child_line_item->type() === EEM_Line_Item::type_line_item && $child_line_item->is_taxable()) {
1139 1139
 					//if it's a percent item, only take into account the percent
1140 1140
 					//that's taxable too (the taxable total so far)
1141
-					if( $child_line_item->is_percent() ) {
1142
-						$total = $total + ( $total * $child_line_item->percent() / 100 );
1143
-					}else{
1141
+					if ($child_line_item->is_percent()) {
1142
+						$total = $total + ($total * $child_line_item->percent() / 100);
1143
+					} else {
1144 1144
 						$total += $child_line_item->total();
1145 1145
 					}
1146
-				}elseif( $child_line_item->type() === EEM_Line_Item::type_sub_total ){
1146
+				}elseif ($child_line_item->type() === EEM_Line_Item::type_sub_total) {
1147 1147
 					$total += $child_line_item->taxable_total();
1148 1148
 				}
1149 1149
 			}
1150 1150
 		}
1151
-		return max( $total, 0 );
1151
+		return max($total, 0);
1152 1152
 	}
1153 1153
 
1154 1154
 
@@ -1158,7 +1158,7 @@  discard block
 block discarded – undo
1158 1158
 	 * @return EE_Transaction
1159 1159
 	 */
1160 1160
 	public function transaction() {
1161
-		return $this->get_first_related( 'Transaction' );
1161
+		return $this->get_first_related('Transaction');
1162 1162
 	}
1163 1163
 
1164 1164
 
@@ -1171,18 +1171,18 @@  discard block
 block discarded – undo
1171 1171
 	 * @param int $txn_id if none is provided, assumes $this->TXN_ID()
1172 1172
 	 * @return int count of items saved
1173 1173
 	 */
1174
-	public function save_this_and_descendants_to_txn( $txn_id = NULL ) {
1174
+	public function save_this_and_descendants_to_txn($txn_id = NULL) {
1175 1175
 		$count = 0;
1176
-		if ( ! $txn_id ) {
1176
+		if ( ! $txn_id) {
1177 1177
 			$txn_id = $this->TXN_ID();
1178 1178
 		}
1179
-		$this->set_TXN_ID( $txn_id );
1179
+		$this->set_TXN_ID($txn_id);
1180 1180
 		$children = $this->children();
1181 1181
 		$count += $this->save() ? 1 : 0;
1182
-		foreach ( $children as $child_line_item ) {
1183
-			if ( $child_line_item instanceof EE_Line_Item ) {
1184
-				$child_line_item->set_parent_ID( $this->ID() );
1185
-				$count += $child_line_item->save_this_and_descendants_to_txn( $txn_id );
1182
+		foreach ($children as $child_line_item) {
1183
+			if ($child_line_item instanceof EE_Line_Item) {
1184
+				$child_line_item->set_parent_ID($this->ID());
1185
+				$count += $child_line_item->save_this_and_descendants_to_txn($txn_id);
1186 1186
 			}
1187 1187
 		}
1188 1188
 		return $count;
@@ -1199,9 +1199,9 @@  discard block
 block discarded – undo
1199 1199
 		$count = 0;
1200 1200
 		$children = $this->children();
1201 1201
 		$count += $this->save() ? 1 : 0;
1202
-		foreach ( $children as $child_line_item ) {
1203
-			if ( $child_line_item instanceof EE_Line_Item ) {
1204
-				$child_line_item->set_parent_ID( $this->ID() );
1202
+		foreach ($children as $child_line_item) {
1203
+			if ($child_line_item instanceof EE_Line_Item) {
1204
+				$child_line_item->set_parent_ID($this->ID());
1205 1205
 				$count += $child_line_item->save_this_and_descendants();
1206 1206
 			}
1207 1207
 		}
@@ -1215,8 +1215,8 @@  discard block
 block discarded – undo
1215 1215
 	 * @return EE_Line_Item[]
1216 1216
 	 */
1217 1217
 	public function get_cancellations() {
1218
-		EE_Registry::instance()->load_helper( 'Line_Item' );
1219
-		return EEH_Line_Item::get_descendants_of_type( $this, EEM_Line_Item::type_cancellation );
1218
+		EE_Registry::instance()->load_helper('Line_Item');
1219
+		return EEH_Line_Item::get_descendants_of_type($this, EEM_Line_Item::type_cancellation);
1220 1220
 	}
1221 1221
 
1222 1222
 
@@ -1227,7 +1227,7 @@  discard block
 block discarded – undo
1227 1227
 	 * @return int count of items saved
1228 1228
 	 */
1229 1229
 	public function maybe_save() {
1230
-		if ( $this->ID() ) {
1230
+		if ($this->ID()) {
1231 1231
 			return $this->save();
1232 1232
 		}
1233 1233
 		return false;
Please login to merge, or discard this patch.
Indentation   +52 added lines, -52 removed lines patch added patch discarded remove patch
@@ -172,7 +172,7 @@  discard block
 block discarded – undo
172 172
 	 * Sets quantity
173 173
 	 * @param int $quantity
174 174
 	 */
175
-    public function set_quantity( $quantity ) {
175
+	public function set_quantity( $quantity ) {
176 176
 		$this->set( 'LIN_quantity', max( $quantity, 0 ) );
177 177
 	}
178 178
 
@@ -212,25 +212,25 @@  discard block
 block discarded – undo
212 212
 	 * Gets item_type
213 213
 	 * @return string
214 214
 	 */
215
-    public function OBJ_type_i18n() {
216
-	    $obj_type = $this->OBJ_type();
217
-        switch ($obj_type) {
218
-            case 'Event':
219
-                $obj_type = __('Event', 'event_espresso');
220
-                break;
221
-            case 'Price':
222
-                $obj_type = __('Price', 'event_espresso');
223
-                break;
224
-            case 'Promotion':
225
-                $obj_type = __('Promotion', 'event_espresso');
226
-                break;
227
-            case 'Ticket':
228
-                $obj_type = __('Ticket', 'event_espresso');
229
-                break;
230
-            case 'Transaction':
231
-                $obj_type = __('Transaction', 'event_espresso');
232
-                break;
233
-        }
215
+	public function OBJ_type_i18n() {
216
+		$obj_type = $this->OBJ_type();
217
+		switch ($obj_type) {
218
+			case 'Event':
219
+				$obj_type = __('Event', 'event_espresso');
220
+				break;
221
+			case 'Price':
222
+				$obj_type = __('Price', 'event_espresso');
223
+				break;
224
+			case 'Promotion':
225
+				$obj_type = __('Promotion', 'event_espresso');
226
+				break;
227
+			case 'Ticket':
228
+				$obj_type = __('Ticket', 'event_espresso');
229
+				break;
230
+			case 'Transaction':
231
+				$obj_type = __('Transaction', 'event_espresso');
232
+				break;
233
+		}
234 234
 		return apply_filters('FHEE__EE_Line_Item__OBJ_type_i18n', $obj_type, $this);
235 235
 	}
236 236
 
@@ -1244,48 +1244,48 @@  discard block
 block discarded – undo
1244 1244
 
1245 1245
 
1246 1246
 
1247
-    /**
1248
-     * @param bool $raw
1249
-     * @return int
1250
-     * @throws \EE_Error
1251
-     */
1252
-    public function timestamp($raw = false)
1253
-    {
1254
-        return $raw ? $this->get_raw('LIN_timestamp') : $this->get('LIN_timestamp');
1255
-    }
1247
+	/**
1248
+	 * @param bool $raw
1249
+	 * @return int
1250
+	 * @throws \EE_Error
1251
+	 */
1252
+	public function timestamp($raw = false)
1253
+	{
1254
+		return $raw ? $this->get_raw('LIN_timestamp') : $this->get('LIN_timestamp');
1255
+	}
1256 1256
 
1257 1257
 
1258 1258
 
1259 1259
 
1260
-    /************************* DEPRECATED *************************/
1260
+	/************************* DEPRECATED *************************/
1261 1261
 
1262 1262
 
1263 1263
 
1264
-    /**
1265
-     * @deprecated 4.6.0
1266
-     * @param string $type one of the constants on EEM_Line_Item
1267
-     * @return EE_Line_Item[]
1268
-     */
1269
-    protected function _get_descendants_of_type($type)
1270
-    {
1271
-        EE_Error::doing_it_wrong('EE_Line_Item::_get_descendants_of_type()',
1272
-            __('Method replaced with EEH_Line_Item::get_descendants_of_type()', 'event_espresso'), '4.6.0');
1273
-        return EEH_Line_Item::get_descendants_of_type($this, $type);
1274
-    }
1264
+	/**
1265
+	 * @deprecated 4.6.0
1266
+	 * @param string $type one of the constants on EEM_Line_Item
1267
+	 * @return EE_Line_Item[]
1268
+	 */
1269
+	protected function _get_descendants_of_type($type)
1270
+	{
1271
+		EE_Error::doing_it_wrong('EE_Line_Item::_get_descendants_of_type()',
1272
+			__('Method replaced with EEH_Line_Item::get_descendants_of_type()', 'event_espresso'), '4.6.0');
1273
+		return EEH_Line_Item::get_descendants_of_type($this, $type);
1274
+	}
1275 1275
 
1276 1276
 
1277 1277
 
1278
-    /**
1279
-     * @deprecated 4.6.0
1280
-     * @param string $type like one of the EEM_Line_Item::type_*
1281
-     * @return EE_Line_Item
1282
-     */
1283
-    public function get_nearest_descendant_of_type($type)
1284
-    {
1285
-        EE_Error::doing_it_wrong('EE_Line_Item::get_nearest_descendant_of_type()',
1286
-            __('Method replaced with EEH_Line_Item::get_nearest_descendant_of_type()', 'event_espresso'), '4.6.0');
1287
-        return EEH_Line_Item::get_nearest_descendant_of_type($this, $type);
1288
-    }
1278
+	/**
1279
+	 * @deprecated 4.6.0
1280
+	 * @param string $type like one of the EEM_Line_Item::type_*
1281
+	 * @return EE_Line_Item
1282
+	 */
1283
+	public function get_nearest_descendant_of_type($type)
1284
+	{
1285
+		EE_Error::doing_it_wrong('EE_Line_Item::get_nearest_descendant_of_type()',
1286
+			__('Method replaced with EEH_Line_Item::get_nearest_descendant_of_type()', 'event_espresso'), '4.6.0');
1287
+		return EEH_Line_Item::get_nearest_descendant_of_type($this, $type);
1288
+	}
1289 1289
 
1290 1290
 
1291 1291
 
Please login to merge, or discard this patch.
modules/ticket_sales_monitor/EED_Ticket_Sales_Monitor.module.php 2 patches
Indentation   +946 added lines, -946 removed lines patch added patch discarded remove patch
@@ -2,7 +2,7 @@  discard block
 block discarded – undo
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
 block discarded – undo
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
Please login to merge, or discard this patch.
Spacing   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -21,7 +21,7 @@  discard block
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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())
Please login to merge, or discard this patch.
modules/core_rest_api/EED_Core_Rest_Api.module.php 1 patch
Indentation   +791 added lines, -791 removed lines patch added patch discarded remove patch
@@ -18,807 +18,807 @@
 block discarded – undo
18 18
 class EED_Core_Rest_Api extends \EED_Module
19 19
 {
20 20
 
21
-    const ee_api_namespace           = 'ee/v';
21
+	const ee_api_namespace           = 'ee/v';
22 22
 
23
-    const ee_api_namespace_for_regex = 'ee\/v([^/]*)\/';
23
+	const ee_api_namespace_for_regex = 'ee\/v([^/]*)\/';
24 24
 
25
-    const saved_routes_option_names  = 'ee_core_routes';
25
+	const saved_routes_option_names  = 'ee_core_routes';
26 26
 
27
-    /**
28
-     * string used in _links response bodies to make them globally unique.
29
-     *
30
-     * @see http://v2.wp-api.org/extending/linking/
31
-     */
32
-    const ee_api_link_namespace = 'https://api.eventespresso.com/';
27
+	/**
28
+	 * string used in _links response bodies to make them globally unique.
29
+	 *
30
+	 * @see http://v2.wp-api.org/extending/linking/
31
+	 */
32
+	const ee_api_link_namespace = 'https://api.eventespresso.com/';
33 33
 
34
-    /**
35
-     * @var Calculated_Model_Fields
36
-     */
37
-    protected static $_field_calculator = null;
34
+	/**
35
+	 * @var Calculated_Model_Fields
36
+	 */
37
+	protected static $_field_calculator = null;
38 38
 
39 39
 
40 40
 
41
-    /**
42
-     * @return EED_Core_Rest_Api
43
-     */
44
-    public static function instance()
45
-    {
46
-        self::$_field_calculator = new Calculated_Model_Fields();
47
-        return parent::get_instance(__CLASS__);
48
-    }
41
+	/**
42
+	 * @return EED_Core_Rest_Api
43
+	 */
44
+	public static function instance()
45
+	{
46
+		self::$_field_calculator = new Calculated_Model_Fields();
47
+		return parent::get_instance(__CLASS__);
48
+	}
49 49
 
50 50
 
51 51
 
52
-    /**
53
-     *    set_hooks - for hooking into EE Core, other modules, etc
54
-     *
55
-     * @access    public
56
-     * @return    void
57
-     */
58
-    public static function set_hooks()
59
-    {
60
-        self::set_hooks_both();
61
-    }
62
-
63
-
64
-
65
-    /**
66
-     *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
67
-     *
68
-     * @access    public
69
-     * @return    void
70
-     */
71
-    public static function set_hooks_admin()
72
-    {
73
-        self::set_hooks_both();
74
-    }
75
-
76
-
77
-
78
-    public static function set_hooks_both()
79
-    {
80
-        add_action('rest_api_init', array('EED_Core_Rest_Api', 'register_routes'), 10);
81
-        add_action('rest_api_init', array('EED_Core_Rest_Api', 'set_hooks_rest_api'), 5);
82
-        add_filter('rest_route_data', array('EED_Core_Rest_Api', 'hide_old_endpoints'), 10, 2);
83
-        add_filter('rest_index',
84
-            array('EventEspresso\core\libraries\rest_api\controllers\model\Meta', 'filter_ee_metadata_into_index'));
85
-        EED_Core_Rest_Api::invalidate_cached_route_data_on_version_change();
86
-    }
87
-
88
-
89
-
90
-    /**
91
-     * sets up hooks which only need to be included as part of REST API requests;
92
-     * other requests like to the frontend or admin etc don't need them
93
-     */
94
-    public static function set_hooks_rest_api()
95
-    {
96
-        //set hooks which account for changes made to the API
97
-        EED_Core_Rest_Api::_set_hooks_for_changes();
98
-    }
99
-
100
-
101
-
102
-    /**
103
-     * public wrapper of _set_hooks_for_changes.
104
-     * Loads all the hooks which make requests to old versions of the API
105
-     * appear the same as they always did
106
-     */
107
-    public static function set_hooks_for_changes()
108
-    {
109
-        self::_set_hooks_for_changes();
110
-    }
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-    /**
119
-     * Loads all the hooks which make requests to old versions of the API
120
-     * appear the same as they always did
121
-     */
122
-    protected static function _set_hooks_for_changes()
123
-    {
124
-        $folder_contents = EEH_File::get_contents_of_folders(array(EE_LIBRARIES . 'rest_api' . DS . 'changes'), false);
125
-        foreach ($folder_contents as $classname_in_namespace => $filepath) {
126
-            //ignore the base parent class
127
-            if ($classname_in_namespace === 'Changes_In_Base') {
128
-                continue;
129
-            }
130
-            $full_classname = 'EventEspresso\core\libraries\rest_api\changes\\' . $classname_in_namespace;
131
-            if (class_exists($full_classname)) {
132
-                $instance_of_class = new $full_classname;
133
-                if ($instance_of_class instanceof Changes_In_Base) {
134
-                    $instance_of_class->set_hooks();
135
-                }
136
-            }
137
-        }
138
-    }
139
-
140
-
141
-
142
-    /**
143
-     * Filters the WP routes to add our EE-related ones. This takes a bit of time
144
-     * so we actually prefer to only do it when an EE plugin is activated or upgraded
145
-     */
146
-    public static function register_routes()
147
-    {
148
-        foreach (EED_Core_Rest_Api::get_ee_route_data() as $namespace => $relative_urls) {
149
-            foreach ($relative_urls as $endpoint => $routes) {
150
-                foreach ($routes as $route) {
151
-                    $route_args = array(
152
-                        array(
153
-                            'callback' => $route['callback'],
154
-                            'methods'  => $route['methods'],
155
-                            'args'     => isset($route['args']) ? $route['args'] : array(),
156
-                        )
157
-                    );
158
-                    if (isset($route['schema_callback'])) {
159
-                        $model_name = isset($route['schema_callback'][0])
160
-                            ? $route['schema_callback'][0]
161
-                            : '';
162
-                        $version = isset( $route['schema_callback'][1])
163
-                            ? $route['schema_callback'][1]
164
-                            : '';
165
-                        if (! empty($model_name) && ! empty($version)) {
166
-                            $route_args['schema'] = function () use ($model_name, $version) {
167
-                                return ModelRead::handle_schema_request(
168
-                                    $model_name,
169
-                                    $version
170
-                                );
171
-                            };
172
-                        }
173
-                    }
174
-                    register_rest_route(
175
-                        $namespace,
176
-                        $endpoint,
177
-                        $route_args
178
-                    );
179
-                }
180
-            }
181
-        }
182
-    }
183
-
184
-
185
-
186
-    /**
187
-     * Checks if there was a version change or something that merits invalidating the cached
188
-     * route data. If so, invalidates the cached route data so that it gets refreshed
189
-     * next time the WP API is used
190
-     */
191
-    public static function invalidate_cached_route_data_on_version_change()
192
-    {
193
-        if (EE_System::instance()->detect_req_type() != EE_System::req_type_normal) {
194
-            EED_Core_Rest_Api::invalidate_cached_route_data();
195
-        }
196
-        foreach (EE_Registry::instance()->addons as $addon) {
197
-            if ($addon instanceof EE_Addon && $addon->detect_req_type() != EE_System::req_type_normal) {
198
-                EED_Core_Rest_Api::invalidate_cached_route_data();
199
-            }
200
-        }
201
-    }
202
-
203
-
204
-
205
-    /**
206
-     * Removes the cached route data so it will get refreshed next time the WP API is used
207
-     */
208
-    public static function invalidate_cached_route_data()
209
-    {
210
-        //delete the saved EE REST API routes
211
-        foreach (EED_Core_Rest_Api::versions_served() as $version => $hidden) {
212
-            delete_option(EED_Core_Rest_Api::saved_routes_option_names . $version);
213
-        }
214
-    }
215
-
216
-
217
-
218
-    /**
219
-     * Gets the EE route data
220
-     *
221
-     * @return array top-level key is the namespace, next-level key is the route and its value is array{
222
-     * @type string|array $callback
223
-     * @type string       $methods
224
-     * @type boolean      $hidden_endpoint
225
-     * }
226
-     */
227
-    public static function get_ee_route_data()
228
-    {
229
-        $ee_routes = array();
230
-        foreach (self::versions_served() as $version => $hidden_endpoints) {
231
-            $ee_routes[self::ee_api_namespace . $version] = self::_get_ee_route_data_for_version($version,
232
-                $hidden_endpoints);
233
-        }
234
-        return $ee_routes;
235
-    }
236
-
237
-
238
-
239
-    /**
240
-     * Gets the EE route data from the wp options if it exists already,
241
-     * otherwise re-generates it and saves it to the option
242
-     *
243
-     * @param string  $version
244
-     * @param boolean $hidden_endpoints
245
-     * @return array
246
-     */
247
-    protected static function _get_ee_route_data_for_version($version, $hidden_endpoints = false)
248
-    {
249
-        $ee_routes = get_option(self::saved_routes_option_names . $version, null);
250
-        if ( ! $ee_routes || (defined('EE_REST_API_DEBUG_MODE') && EE_REST_API_DEBUG_MODE)) {
251
-            $ee_routes = self::_save_ee_route_data_for_version($version, $hidden_endpoints);
252
-        }
253
-        return $ee_routes;
254
-    }
255
-
256
-
257
-
258
-    /**
259
-     * Saves the EE REST API route data to a wp option and returns it
260
-     *
261
-     * @param string  $version
262
-     * @param boolean $hidden_endpoints
263
-     * @return mixed|null|void
264
-     */
265
-    protected static function _save_ee_route_data_for_version($version, $hidden_endpoints = false)
266
-    {
267
-        $instance = self::instance();
268
-        $routes = apply_filters(
269
-            'EED_Core_Rest_Api__save_ee_route_data_for_version__routes',
270
-            array_replace_recursive(
271
-                $instance->_get_config_route_data_for_version($version, $hidden_endpoints),
272
-                $instance->_get_meta_route_data_for_version($version, $hidden_endpoints),
273
-                $instance->_get_model_route_data_for_version($version, $hidden_endpoints),
274
-                $instance->_get_rpc_route_data_for_version($version, $hidden_endpoints)
275
-            )
276
-        );
277
-        $option_name = self::saved_routes_option_names . $version;
278
-        if (get_option($option_name)) {
279
-            update_option($option_name, $routes, true);
280
-        } else {
281
-            add_option($option_name, $routes, null, 'no');
282
-        }
283
-        return $routes;
284
-    }
285
-
286
-
287
-
288
-    /**
289
-     * Calculates all the EE routes and saves it to a wordpress option so we don't
290
-     * need to calculate it on every request
291
-     *
292
-     * @deprecated since version 4.9.1
293
-     * @return void
294
-     */
295
-    public static function save_ee_routes()
296
-    {
297
-        if (EE_Maintenance_Mode::instance()->models_can_query()) {
298
-            $instance = self::instance();
299
-            $routes = apply_filters(
300
-                'EED_Core_Rest_Api__save_ee_routes__routes',
301
-                array_replace_recursive(
302
-                    $instance->_register_config_routes(),
303
-                    $instance->_register_meta_routes(),
304
-                    $instance->_register_model_routes(),
305
-                    $instance->_register_rpc_routes()
306
-                )
307
-            );
308
-            update_option(self::saved_routes_option_names, $routes, true);
309
-        }
310
-    }
311
-
312
-
313
-
314
-    /**
315
-     * Gets all the route information relating to EE models
316
-     *
317
-     * @return array @see get_ee_route_data
318
-     * @deprecated since version 4.9.1
319
-     */
320
-    protected function _register_model_routes()
321
-    {
322
-        $model_routes = array();
323
-        foreach (self::versions_served() as $version => $hidden_endpoint) {
324
-            $model_routes[EED_Core_Rest_Api::ee_api_namespace
325
-                          . $version] = $this->_get_config_route_data_for_version($version, $hidden_endpoint);
326
-        }
327
-        return $model_routes;
328
-    }
329
-
330
-
331
-
332
-    /**
333
-     * Gets the route data for EE models in the specified version
334
-     *
335
-     * @param string  $version
336
-     * @param boolean $hidden_endpoint
337
-     * @return array
338
-     */
339
-    protected function _get_model_route_data_for_version($version, $hidden_endpoint = false)
340
-    {
341
-        $model_version_info = new Model_Version_Info($version);
342
-        $models_to_register = apply_filters(
343
-            'FHEE__EED_Core_REST_API___register_model_routes',
344
-            $model_version_info->models_for_requested_version()
345
-        );
346
-        //let's not bother having endpoints for extra metas
347
-        unset($models_to_register['Extra_Meta']);
348
-        unset($models_to_register['Extra_Join']);
349
-        $model_routes = array();
350
-        foreach ($models_to_register as $model_name => $model_classname) {
351
-            $model = \EE_Registry::instance()->load_model($model_name);
352
-
353
-            //if this isn't a valid model then let's skip iterate to the next item in the loop.
354
-            if (! $model instanceof EEM_Base) {
355
-                continue;
356
-            }
357
-
358
-            //yes we could just register one route for ALL models, but then they wouldn't show up in the index
359
-            $plural_model_route = EEH_Inflector::pluralize_and_lower($model_name);
360
-            $singular_model_route = $plural_model_route . '/(?P<id>\d+)';
361
-            $model_routes[$plural_model_route] = array(
362
-                array(
363
-                    'callback'        => array(
364
-                        'EventEspresso\core\libraries\rest_api\controllers\model\Read',
365
-                        'handle_request_get_all',
366
-                    ),
367
-                    'methods'         => WP_REST_Server::READABLE,
368
-                    'hidden_endpoint' => $hidden_endpoint,
369
-                    'args'            => $this->_get_read_query_params($model, $version),
370
-                    '_links'          => array(
371
-                        'self' => rest_url(EED_Core_Rest_Api::ee_api_namespace . $version . $singular_model_route),
372
-                    ),
373
-                    'schema_callback' => array($model_name, $version)
374
-                ),
375
-                //						array(
376
-                //							'callback' => array(
377
-                //								'EventEspresso\core\libraries\rest_api\controllers\model\Write',
378
-                //								'handle_request_create_one' ),
379
-                //							'methods' => WP_REST_Server::CREATABLE,
380
-                //							'hidden_endpoint' => $hidden_endpoint
381
-                //						)
382
-            );
383
-            $model_routes[$singular_model_route] = array(
384
-                array(
385
-                    'callback'        => array(
386
-                        'EventEspresso\core\libraries\rest_api\controllers\model\Read',
387
-                        'handle_request_get_one',
388
-                    ),
389
-                    'methods'         => WP_REST_Server::READABLE,
390
-                    'hidden_endpoint' => $hidden_endpoint,
391
-                    'args'            => $this->_get_response_selection_query_params($model, $version),
392
-                ),
393
-                //						array(
394
-                //							'callback' => array(
395
-                //								'EventEspresso\core\libraries\rest_api\controllers\model\Write',
396
-                //								'handle_request_edit_one' ),
397
-                //							'methods' => WP_REST_Server::EDITABLE,
398
-                //							'hidden_endpoint' => $hidden_endpoint
399
-                //							),
400
-            );
401
-            //@todo: also handle  DELETE for a single item
402
-            foreach ($model_version_info->relation_settings($model) as $relation_name => $relation_obj) {
403
-                $related_model_name_endpoint_part = ModelRead::get_related_entity_name(
404
-                    $relation_name,
405
-                    $relation_obj
406
-                );
407
-                $model_routes[$singular_model_route . '/' . $related_model_name_endpoint_part] = array(
408
-                    array(
409
-                        'callback'        => array(
410
-                            'EventEspresso\core\libraries\rest_api\controllers\model\Read',
411
-                            'handle_request_get_related',
412
-                        ),
413
-                        'methods'         => WP_REST_Server::READABLE,
414
-                        'hidden_endpoint' => $hidden_endpoint,
415
-                        'args'            => $this->_get_read_query_params($relation_obj->get_other_model(), $version),
416
-                    ),
417
-                    //							array(
418
-                    //								'callback' => array(
419
-                    //									'EventEspresso\core\libraries\rest_api\controllers\model\Write',
420
-                    //									'handle_request_create_or_update_related' ),
421
-                    //								'methods' => WP_REST_Server::EDITABLE,
422
-                    //								'hidden_endpoint' => $hidden_endpoint
423
-                    //							)
424
-                );
425
-                //@todo: handle delete related and possibly remove relation (not sure hwo to distinguish)
426
-            }
427
-        }
428
-        return $model_routes;
429
-    }
430
-
431
-
432
-
433
-    /**
434
-     * Adds all the RPC-style routes (remote procedure call-like routes, ie
435
-     * routes that don't conform to the traditional REST CRUD-style).
436
-     *
437
-     * @deprecated since 4.9.1
438
-     */
439
-    protected function _register_rpc_routes()
440
-    {
441
-        $routes = array();
442
-        foreach (self::versions_served() as $version => $hidden_endpoint) {
443
-            $routes[self::ee_api_namespace . $version] = $this->_get_rpc_route_data_for_version($version,
444
-                $hidden_endpoint);
445
-        }
446
-        return $routes;
447
-    }
448
-
449
-
450
-
451
-    /**
452
-     * @param string  $version
453
-     * @param boolean $hidden_endpoint
454
-     * @return array
455
-     */
456
-    protected function _get_rpc_route_data_for_version($version, $hidden_endpoint = false)
457
-    {
458
-        $this_versions_routes = array();
459
-        //checkin endpoint
460
-        $this_versions_routes['registrations/(?P<REG_ID>\d+)/toggle_checkin_for_datetime/(?P<DTT_ID>\d+)'] = array(
461
-            array(
462
-                'callback'        => array(
463
-                    'EventEspresso\core\libraries\rest_api\controllers\rpc\Checkin',
464
-                    'handle_request_toggle_checkin',
465
-                ),
466
-                'methods'         => WP_REST_Server::CREATABLE,
467
-                'hidden_endpoint' => $hidden_endpoint,
468
-                'args'            => array(
469
-                    'force' => array(
470
-                        'required'    => false,
471
-                        'default'     => false,
472
-                        'description' => __('Whether to force toggle checkin, or to verify the registration status and allowed ticket uses',
473
-                            'event_espresso'),
474
-                    ),
475
-                ),
476
-            ),
477
-        );
478
-        return apply_filters(
479
-            'FHEE__EED_Core_Rest_Api___register_rpc_routes__this_versions_routes',
480
-            $this_versions_routes,
481
-            $version,
482
-            $hidden_endpoint
483
-        );
484
-    }
485
-
486
-
487
-
488
-    /**
489
-     * Gets the query params that can be used when request one or many
490
-     *
491
-     * @param EEM_Base $model
492
-     * @param string   $version
493
-     * @return array
494
-     */
495
-    protected function _get_response_selection_query_params(\EEM_Base $model, $version)
496
-    {
497
-        return apply_filters(
498
-            'FHEE__EED_Core_Rest_Api___get_response_selection_query_params',
499
-            array(
500
-                'include'   => array(
501
-                    'required' => false,
502
-                    'default'  => '*',
503
-                ),
504
-                'calculate' => array(
505
-                    'required' => false,
506
-                    'default'  => '',
507
-                    'enum'     => self::$_field_calculator->retrieve_calculated_fields_for_model($model),
508
-                ),
509
-            ),
510
-            $model,
511
-            $version
512
-        );
513
-    }
514
-
515
-
516
-
517
-    /**
518
-     * Gets info about reading query params that are acceptable
519
-     *
520
-     * @param \EEM_Base $model eg 'Event' or 'Venue'
521
-     * @param  string   $version
522
-     * @return array    describing the args acceptable when querying this model
523
-     * @throws \EE_Error
524
-     */
525
-    protected function _get_read_query_params(\EEM_Base $model, $version)
526
-    {
527
-        $default_orderby = array();
528
-        foreach ($model->get_combined_primary_key_fields() as $key_field) {
529
-            $default_orderby[$key_field->get_name()] = 'ASC';
530
-        }
531
-        return array_merge(
532
-            $this->_get_response_selection_query_params($model, $version),
533
-            array(
534
-                'where'    => array(
535
-                    'required' => false,
536
-                    'default'  => array(),
537
-                ),
538
-                'limit'    => array(
539
-                    'required' => false,
540
-                    'default'  => EED_Core_Rest_Api::get_default_query_limit(),
541
-                ),
542
-                'order_by' => array(
543
-                    'required' => false,
544
-                    'default'  => $default_orderby,
545
-                ),
546
-                'group_by' => array(
547
-                    'required' => false,
548
-                    'default'  => null,
549
-                ),
550
-                'having'   => array(
551
-                    'required' => false,
552
-                    'default'  => null,
553
-                ),
554
-                'caps'     => array(
555
-                    'required' => false,
556
-                    'default'  => EEM_Base::caps_read,
557
-                ),
558
-            )
559
-        );
560
-    }
561
-
562
-
563
-
564
-    /**
565
-     * Gets routes for the config
566
-     *
567
-     * @return array @see _register_model_routes
568
-     * @deprecated since version 4.9.1
569
-     */
570
-    protected function _register_config_routes()
571
-    {
572
-        $config_routes = array();
573
-        foreach (self::versions_served() as $version => $hidden_endpoint) {
574
-            $config_routes[self::ee_api_namespace . $version] = $this->_get_config_route_data_for_version($version,
575
-                $hidden_endpoint);
576
-        }
577
-        return $config_routes;
578
-    }
579
-
580
-
581
-
582
-    /**
583
-     * Gets routes for the config for the specified version
584
-     *
585
-     * @param string  $version
586
-     * @param boolean $hidden_endpoint
587
-     * @return array
588
-     */
589
-    protected function _get_config_route_data_for_version($version, $hidden_endpoint)
590
-    {
591
-        return array(
592
-            'config'    => array(
593
-                array(
594
-                    'callback'        => array(
595
-                        'EventEspresso\core\libraries\rest_api\controllers\config\Read',
596
-                        'handle_request',
597
-                    ),
598
-                    'methods'         => WP_REST_Server::READABLE,
599
-                    'hidden_endpoint' => $hidden_endpoint,
600
-                ),
601
-            ),
602
-            'site_info' => array(
603
-                array(
604
-                    'callback'        => array(
605
-                        'EventEspresso\core\libraries\rest_api\controllers\config\Read',
606
-                        'handle_request_site_info',
607
-                    ),
608
-                    'methods'         => WP_REST_Server::READABLE,
609
-                    'hidden_endpoint' => $hidden_endpoint,
610
-                ),
611
-            ),
612
-        );
613
-    }
614
-
615
-
616
-
617
-    /**
618
-     * Gets the meta info routes
619
-     *
620
-     * @return array @see _register_model_routes
621
-     * @deprecated since version 4.9.1
622
-     */
623
-    protected function _register_meta_routes()
624
-    {
625
-        $meta_routes = array();
626
-        foreach (self::versions_served() as $version => $hidden_endpoint) {
627
-            $meta_routes[self::ee_api_namespace . $version] = $this->_get_meta_route_data_for_version($version,
628
-                $hidden_endpoint);
629
-        }
630
-        return $meta_routes;
631
-    }
632
-
633
-
634
-
635
-    /**
636
-     * @param string  $version
637
-     * @param boolean $hidden_endpoint
638
-     * @return array
639
-     */
640
-    protected function _get_meta_route_data_for_version($version, $hidden_endpoint = false)
641
-    {
642
-        return array(
643
-            'resources' => array(
644
-                array(
645
-                    'callback'        => array(
646
-                        'EventEspresso\core\libraries\rest_api\controllers\model\Meta',
647
-                        'handle_request_models_meta',
648
-                    ),
649
-                    'methods'         => WP_REST_Server::READABLE,
650
-                    'hidden_endpoint' => $hidden_endpoint,
651
-                ),
652
-            ),
653
-        );
654
-    }
655
-
656
-
657
-
658
-    /**
659
-     * Tries to hide old 4.6 endpoints from the
660
-     *
661
-     * @param array $route_data
662
-     * @return array
663
-     */
664
-    public static function hide_old_endpoints($route_data)
665
-    {
666
-        //allow API clients to override which endpoints get hidden, in case
667
-        //they want to discover particular endpoints
668
-        //also, we don't have access to the request so we have to just grab it from the superglobal
669
-        $force_show_ee_namespace = ltrim(
670
-            EEH_Array::is_set($_REQUEST, 'force_show_ee_namespace', ''),
671
-            '/'
672
-        );
673
-        foreach (EED_Core_Rest_Api::get_ee_route_data() as $namespace => $relative_urls) {
674
-            foreach ($relative_urls as $endpoint => $routes) {
675
-                foreach ($routes as $route) {
676
-                    //by default, hide "hidden_endpoint"s, unless the request indicates
677
-                    //to $force_show_ee_namespace, in which case only show that one
678
-                    //namespace's endpoints (and hide all others)
679
-                    if (($route['hidden_endpoint'] && $force_show_ee_namespace === '')
680
-                        || ($force_show_ee_namespace !== '' && $force_show_ee_namespace !== $namespace)
681
-                    ) {
682
-                        $full_route = '/' . ltrim($namespace, '/') . '/' . ltrim($endpoint, '/');
683
-                        unset($route_data[$full_route]);
684
-                    }
685
-                }
686
-            }
687
-        }
688
-        return $route_data;
689
-    }
690
-
691
-
692
-
693
-    /**
694
-     * Returns an array describing which versions of core support serving requests for.
695
-     * Keys are core versions' major and minor version, and values are the
696
-     * LOWEST requested version they can serve. Eg, 4.7 can serve requests for 4.6-like
697
-     * data by just removing a few models and fields from the responses. However, 4.15 might remove
698
-     * the answers table entirely, in which case it would be very difficult for
699
-     * it to serve 4.6-style responses.
700
-     * Versions of core that are missing from this array are unknowns.
701
-     * previous ver
702
-     *
703
-     * @return array
704
-     */
705
-    public static function version_compatibilities()
706
-    {
707
-        return apply_filters(
708
-            'FHEE__EED_Core_REST_API__version_compatibilities',
709
-            array(
710
-                '4.8.29' => '4.8.29',
711
-                '4.8.33' => '4.8.29',
712
-                '4.8.34' => '4.8.29',
713
-                '4.8.36' => '4.8.29',
714
-            )
715
-        );
716
-    }
717
-
718
-
719
-
720
-    /**
721
-     * Gets the latest API version served. Eg if there
722
-     * are two versions served of the API, 4.8.29 and 4.8.32, and
723
-     * we are on core version 4.8.34, it will return the string "4.8.32"
724
-     *
725
-     * @return string
726
-     */
727
-    public static function latest_rest_api_version()
728
-    {
729
-        $versions_served = \EED_Core_Rest_Api::versions_served();
730
-        $versions_served_keys = array_keys($versions_served);
731
-        return end($versions_served_keys);
732
-    }
733
-
734
-
735
-
736
-    /**
737
-     * Using EED_Core_Rest_Api::version_compatibilities(), determines what version of
738
-     * EE the API can serve requests for. Eg, if we are on 4.15 of core, and
739
-     * we can serve requests from 4.12 or later, this will return array( '4.12', '4.13', '4.14', '4.15' ).
740
-     * We also indicate whether or not this version should be put in the index or not
741
-     *
742
-     * @return array keys are API version numbers (just major and minor numbers), and values
743
-     * are whether or not they should be hidden
744
-     */
745
-    public static function versions_served()
746
-    {
747
-        $versions_served = array();
748
-        $possibly_served_versions = EED_Core_Rest_Api::version_compatibilities();
749
-        $lowest_compatible_version = end($possibly_served_versions);
750
-        reset($possibly_served_versions);
751
-        $versions_served_historically = array_keys($possibly_served_versions);
752
-        $latest_version = end($versions_served_historically);
753
-        reset($versions_served_historically);
754
-        //for each version of core we have ever served:
755
-        foreach ($versions_served_historically as $key_versioned_endpoint) {
756
-            //if it's not above the current core version, and it's compatible with the current version of core
757
-            if ($key_versioned_endpoint == $latest_version) {
758
-                //don't hide the latest version in the index
759
-                $versions_served[$key_versioned_endpoint] = false;
760
-            } else if (
761
-                $key_versioned_endpoint < EED_Core_Rest_Api::core_version()
762
-                && $key_versioned_endpoint >= $lowest_compatible_version
763
-            ) {
764
-                //include, but hide, previous versions which are still supported
765
-                $versions_served[$key_versioned_endpoint] = true;
766
-            } elseif (
767
-            apply_filters(
768
-                'FHEE__EED_Core_Rest_Api__versions_served__include_incompatible_versions',
769
-                false,
770
-                $possibly_served_versions
771
-            )
772
-            ) {
773
-                //if a version is no longer supported, don't include it in index or list of versions served
774
-                $versions_served[$key_versioned_endpoint] = true;
775
-            }
776
-        }
777
-        return $versions_served;
778
-    }
779
-
780
-
781
-
782
-    /**
783
-     * Gets the major and minor version of EE core's version string
784
-     *
785
-     * @return string
786
-     */
787
-    public static function core_version()
788
-    {
789
-        return apply_filters('FHEE__EED_Core_REST_API__core_version',
790
-            implode('.', array_slice(explode('.', espresso_version()), 0, 3)));
791
-    }
792
-
793
-
794
-
795
-    /**
796
-     * Gets the default limit that should be used when querying for resources
797
-     *
798
-     * @return int
799
-     */
800
-    public static function get_default_query_limit()
801
-    {
802
-        //we actually don't use a const because we want folks to always use
803
-        //this method, not the const directly
804
-        return apply_filters(
805
-            'FHEE__EED_Core_Rest_Api__get_default_query_limit',
806
-            50
807
-        );
808
-    }
809
-
810
-
811
-
812
-    /**
813
-     *    run - initial module setup
814
-     *
815
-     * @access    public
816
-     * @param  WP $WP
817
-     * @return    void
818
-     */
819
-    public function run($WP)
820
-    {
821
-    }
52
+	/**
53
+	 *    set_hooks - for hooking into EE Core, other modules, etc
54
+	 *
55
+	 * @access    public
56
+	 * @return    void
57
+	 */
58
+	public static function set_hooks()
59
+	{
60
+		self::set_hooks_both();
61
+	}
62
+
63
+
64
+
65
+	/**
66
+	 *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
67
+	 *
68
+	 * @access    public
69
+	 * @return    void
70
+	 */
71
+	public static function set_hooks_admin()
72
+	{
73
+		self::set_hooks_both();
74
+	}
75
+
76
+
77
+
78
+	public static function set_hooks_both()
79
+	{
80
+		add_action('rest_api_init', array('EED_Core_Rest_Api', 'register_routes'), 10);
81
+		add_action('rest_api_init', array('EED_Core_Rest_Api', 'set_hooks_rest_api'), 5);
82
+		add_filter('rest_route_data', array('EED_Core_Rest_Api', 'hide_old_endpoints'), 10, 2);
83
+		add_filter('rest_index',
84
+			array('EventEspresso\core\libraries\rest_api\controllers\model\Meta', 'filter_ee_metadata_into_index'));
85
+		EED_Core_Rest_Api::invalidate_cached_route_data_on_version_change();
86
+	}
87
+
88
+
89
+
90
+	/**
91
+	 * sets up hooks which only need to be included as part of REST API requests;
92
+	 * other requests like to the frontend or admin etc don't need them
93
+	 */
94
+	public static function set_hooks_rest_api()
95
+	{
96
+		//set hooks which account for changes made to the API
97
+		EED_Core_Rest_Api::_set_hooks_for_changes();
98
+	}
99
+
100
+
101
+
102
+	/**
103
+	 * public wrapper of _set_hooks_for_changes.
104
+	 * Loads all the hooks which make requests to old versions of the API
105
+	 * appear the same as they always did
106
+	 */
107
+	public static function set_hooks_for_changes()
108
+	{
109
+		self::_set_hooks_for_changes();
110
+	}
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+	/**
119
+	 * Loads all the hooks which make requests to old versions of the API
120
+	 * appear the same as they always did
121
+	 */
122
+	protected static function _set_hooks_for_changes()
123
+	{
124
+		$folder_contents = EEH_File::get_contents_of_folders(array(EE_LIBRARIES . 'rest_api' . DS . 'changes'), false);
125
+		foreach ($folder_contents as $classname_in_namespace => $filepath) {
126
+			//ignore the base parent class
127
+			if ($classname_in_namespace === 'Changes_In_Base') {
128
+				continue;
129
+			}
130
+			$full_classname = 'EventEspresso\core\libraries\rest_api\changes\\' . $classname_in_namespace;
131
+			if (class_exists($full_classname)) {
132
+				$instance_of_class = new $full_classname;
133
+				if ($instance_of_class instanceof Changes_In_Base) {
134
+					$instance_of_class->set_hooks();
135
+				}
136
+			}
137
+		}
138
+	}
139
+
140
+
141
+
142
+	/**
143
+	 * Filters the WP routes to add our EE-related ones. This takes a bit of time
144
+	 * so we actually prefer to only do it when an EE plugin is activated or upgraded
145
+	 */
146
+	public static function register_routes()
147
+	{
148
+		foreach (EED_Core_Rest_Api::get_ee_route_data() as $namespace => $relative_urls) {
149
+			foreach ($relative_urls as $endpoint => $routes) {
150
+				foreach ($routes as $route) {
151
+					$route_args = array(
152
+						array(
153
+							'callback' => $route['callback'],
154
+							'methods'  => $route['methods'],
155
+							'args'     => isset($route['args']) ? $route['args'] : array(),
156
+						)
157
+					);
158
+					if (isset($route['schema_callback'])) {
159
+						$model_name = isset($route['schema_callback'][0])
160
+							? $route['schema_callback'][0]
161
+							: '';
162
+						$version = isset( $route['schema_callback'][1])
163
+							? $route['schema_callback'][1]
164
+							: '';
165
+						if (! empty($model_name) && ! empty($version)) {
166
+							$route_args['schema'] = function () use ($model_name, $version) {
167
+								return ModelRead::handle_schema_request(
168
+									$model_name,
169
+									$version
170
+								);
171
+							};
172
+						}
173
+					}
174
+					register_rest_route(
175
+						$namespace,
176
+						$endpoint,
177
+						$route_args
178
+					);
179
+				}
180
+			}
181
+		}
182
+	}
183
+
184
+
185
+
186
+	/**
187
+	 * Checks if there was a version change or something that merits invalidating the cached
188
+	 * route data. If so, invalidates the cached route data so that it gets refreshed
189
+	 * next time the WP API is used
190
+	 */
191
+	public static function invalidate_cached_route_data_on_version_change()
192
+	{
193
+		if (EE_System::instance()->detect_req_type() != EE_System::req_type_normal) {
194
+			EED_Core_Rest_Api::invalidate_cached_route_data();
195
+		}
196
+		foreach (EE_Registry::instance()->addons as $addon) {
197
+			if ($addon instanceof EE_Addon && $addon->detect_req_type() != EE_System::req_type_normal) {
198
+				EED_Core_Rest_Api::invalidate_cached_route_data();
199
+			}
200
+		}
201
+	}
202
+
203
+
204
+
205
+	/**
206
+	 * Removes the cached route data so it will get refreshed next time the WP API is used
207
+	 */
208
+	public static function invalidate_cached_route_data()
209
+	{
210
+		//delete the saved EE REST API routes
211
+		foreach (EED_Core_Rest_Api::versions_served() as $version => $hidden) {
212
+			delete_option(EED_Core_Rest_Api::saved_routes_option_names . $version);
213
+		}
214
+	}
215
+
216
+
217
+
218
+	/**
219
+	 * Gets the EE route data
220
+	 *
221
+	 * @return array top-level key is the namespace, next-level key is the route and its value is array{
222
+	 * @type string|array $callback
223
+	 * @type string       $methods
224
+	 * @type boolean      $hidden_endpoint
225
+	 * }
226
+	 */
227
+	public static function get_ee_route_data()
228
+	{
229
+		$ee_routes = array();
230
+		foreach (self::versions_served() as $version => $hidden_endpoints) {
231
+			$ee_routes[self::ee_api_namespace . $version] = self::_get_ee_route_data_for_version($version,
232
+				$hidden_endpoints);
233
+		}
234
+		return $ee_routes;
235
+	}
236
+
237
+
238
+
239
+	/**
240
+	 * Gets the EE route data from the wp options if it exists already,
241
+	 * otherwise re-generates it and saves it to the option
242
+	 *
243
+	 * @param string  $version
244
+	 * @param boolean $hidden_endpoints
245
+	 * @return array
246
+	 */
247
+	protected static function _get_ee_route_data_for_version($version, $hidden_endpoints = false)
248
+	{
249
+		$ee_routes = get_option(self::saved_routes_option_names . $version, null);
250
+		if ( ! $ee_routes || (defined('EE_REST_API_DEBUG_MODE') && EE_REST_API_DEBUG_MODE)) {
251
+			$ee_routes = self::_save_ee_route_data_for_version($version, $hidden_endpoints);
252
+		}
253
+		return $ee_routes;
254
+	}
255
+
256
+
257
+
258
+	/**
259
+	 * Saves the EE REST API route data to a wp option and returns it
260
+	 *
261
+	 * @param string  $version
262
+	 * @param boolean $hidden_endpoints
263
+	 * @return mixed|null|void
264
+	 */
265
+	protected static function _save_ee_route_data_for_version($version, $hidden_endpoints = false)
266
+	{
267
+		$instance = self::instance();
268
+		$routes = apply_filters(
269
+			'EED_Core_Rest_Api__save_ee_route_data_for_version__routes',
270
+			array_replace_recursive(
271
+				$instance->_get_config_route_data_for_version($version, $hidden_endpoints),
272
+				$instance->_get_meta_route_data_for_version($version, $hidden_endpoints),
273
+				$instance->_get_model_route_data_for_version($version, $hidden_endpoints),
274
+				$instance->_get_rpc_route_data_for_version($version, $hidden_endpoints)
275
+			)
276
+		);
277
+		$option_name = self::saved_routes_option_names . $version;
278
+		if (get_option($option_name)) {
279
+			update_option($option_name, $routes, true);
280
+		} else {
281
+			add_option($option_name, $routes, null, 'no');
282
+		}
283
+		return $routes;
284
+	}
285
+
286
+
287
+
288
+	/**
289
+	 * Calculates all the EE routes and saves it to a wordpress option so we don't
290
+	 * need to calculate it on every request
291
+	 *
292
+	 * @deprecated since version 4.9.1
293
+	 * @return void
294
+	 */
295
+	public static function save_ee_routes()
296
+	{
297
+		if (EE_Maintenance_Mode::instance()->models_can_query()) {
298
+			$instance = self::instance();
299
+			$routes = apply_filters(
300
+				'EED_Core_Rest_Api__save_ee_routes__routes',
301
+				array_replace_recursive(
302
+					$instance->_register_config_routes(),
303
+					$instance->_register_meta_routes(),
304
+					$instance->_register_model_routes(),
305
+					$instance->_register_rpc_routes()
306
+				)
307
+			);
308
+			update_option(self::saved_routes_option_names, $routes, true);
309
+		}
310
+	}
311
+
312
+
313
+
314
+	/**
315
+	 * Gets all the route information relating to EE models
316
+	 *
317
+	 * @return array @see get_ee_route_data
318
+	 * @deprecated since version 4.9.1
319
+	 */
320
+	protected function _register_model_routes()
321
+	{
322
+		$model_routes = array();
323
+		foreach (self::versions_served() as $version => $hidden_endpoint) {
324
+			$model_routes[EED_Core_Rest_Api::ee_api_namespace
325
+						  . $version] = $this->_get_config_route_data_for_version($version, $hidden_endpoint);
326
+		}
327
+		return $model_routes;
328
+	}
329
+
330
+
331
+
332
+	/**
333
+	 * Gets the route data for EE models in the specified version
334
+	 *
335
+	 * @param string  $version
336
+	 * @param boolean $hidden_endpoint
337
+	 * @return array
338
+	 */
339
+	protected function _get_model_route_data_for_version($version, $hidden_endpoint = false)
340
+	{
341
+		$model_version_info = new Model_Version_Info($version);
342
+		$models_to_register = apply_filters(
343
+			'FHEE__EED_Core_REST_API___register_model_routes',
344
+			$model_version_info->models_for_requested_version()
345
+		);
346
+		//let's not bother having endpoints for extra metas
347
+		unset($models_to_register['Extra_Meta']);
348
+		unset($models_to_register['Extra_Join']);
349
+		$model_routes = array();
350
+		foreach ($models_to_register as $model_name => $model_classname) {
351
+			$model = \EE_Registry::instance()->load_model($model_name);
352
+
353
+			//if this isn't a valid model then let's skip iterate to the next item in the loop.
354
+			if (! $model instanceof EEM_Base) {
355
+				continue;
356
+			}
357
+
358
+			//yes we could just register one route for ALL models, but then they wouldn't show up in the index
359
+			$plural_model_route = EEH_Inflector::pluralize_and_lower($model_name);
360
+			$singular_model_route = $plural_model_route . '/(?P<id>\d+)';
361
+			$model_routes[$plural_model_route] = array(
362
+				array(
363
+					'callback'        => array(
364
+						'EventEspresso\core\libraries\rest_api\controllers\model\Read',
365
+						'handle_request_get_all',
366
+					),
367
+					'methods'         => WP_REST_Server::READABLE,
368
+					'hidden_endpoint' => $hidden_endpoint,
369
+					'args'            => $this->_get_read_query_params($model, $version),
370
+					'_links'          => array(
371
+						'self' => rest_url(EED_Core_Rest_Api::ee_api_namespace . $version . $singular_model_route),
372
+					),
373
+					'schema_callback' => array($model_name, $version)
374
+				),
375
+				//						array(
376
+				//							'callback' => array(
377
+				//								'EventEspresso\core\libraries\rest_api\controllers\model\Write',
378
+				//								'handle_request_create_one' ),
379
+				//							'methods' => WP_REST_Server::CREATABLE,
380
+				//							'hidden_endpoint' => $hidden_endpoint
381
+				//						)
382
+			);
383
+			$model_routes[$singular_model_route] = array(
384
+				array(
385
+					'callback'        => array(
386
+						'EventEspresso\core\libraries\rest_api\controllers\model\Read',
387
+						'handle_request_get_one',
388
+					),
389
+					'methods'         => WP_REST_Server::READABLE,
390
+					'hidden_endpoint' => $hidden_endpoint,
391
+					'args'            => $this->_get_response_selection_query_params($model, $version),
392
+				),
393
+				//						array(
394
+				//							'callback' => array(
395
+				//								'EventEspresso\core\libraries\rest_api\controllers\model\Write',
396
+				//								'handle_request_edit_one' ),
397
+				//							'methods' => WP_REST_Server::EDITABLE,
398
+				//							'hidden_endpoint' => $hidden_endpoint
399
+				//							),
400
+			);
401
+			//@todo: also handle  DELETE for a single item
402
+			foreach ($model_version_info->relation_settings($model) as $relation_name => $relation_obj) {
403
+				$related_model_name_endpoint_part = ModelRead::get_related_entity_name(
404
+					$relation_name,
405
+					$relation_obj
406
+				);
407
+				$model_routes[$singular_model_route . '/' . $related_model_name_endpoint_part] = array(
408
+					array(
409
+						'callback'        => array(
410
+							'EventEspresso\core\libraries\rest_api\controllers\model\Read',
411
+							'handle_request_get_related',
412
+						),
413
+						'methods'         => WP_REST_Server::READABLE,
414
+						'hidden_endpoint' => $hidden_endpoint,
415
+						'args'            => $this->_get_read_query_params($relation_obj->get_other_model(), $version),
416
+					),
417
+					//							array(
418
+					//								'callback' => array(
419
+					//									'EventEspresso\core\libraries\rest_api\controllers\model\Write',
420
+					//									'handle_request_create_or_update_related' ),
421
+					//								'methods' => WP_REST_Server::EDITABLE,
422
+					//								'hidden_endpoint' => $hidden_endpoint
423
+					//							)
424
+				);
425
+				//@todo: handle delete related and possibly remove relation (not sure hwo to distinguish)
426
+			}
427
+		}
428
+		return $model_routes;
429
+	}
430
+
431
+
432
+
433
+	/**
434
+	 * Adds all the RPC-style routes (remote procedure call-like routes, ie
435
+	 * routes that don't conform to the traditional REST CRUD-style).
436
+	 *
437
+	 * @deprecated since 4.9.1
438
+	 */
439
+	protected function _register_rpc_routes()
440
+	{
441
+		$routes = array();
442
+		foreach (self::versions_served() as $version => $hidden_endpoint) {
443
+			$routes[self::ee_api_namespace . $version] = $this->_get_rpc_route_data_for_version($version,
444
+				$hidden_endpoint);
445
+		}
446
+		return $routes;
447
+	}
448
+
449
+
450
+
451
+	/**
452
+	 * @param string  $version
453
+	 * @param boolean $hidden_endpoint
454
+	 * @return array
455
+	 */
456
+	protected function _get_rpc_route_data_for_version($version, $hidden_endpoint = false)
457
+	{
458
+		$this_versions_routes = array();
459
+		//checkin endpoint
460
+		$this_versions_routes['registrations/(?P<REG_ID>\d+)/toggle_checkin_for_datetime/(?P<DTT_ID>\d+)'] = array(
461
+			array(
462
+				'callback'        => array(
463
+					'EventEspresso\core\libraries\rest_api\controllers\rpc\Checkin',
464
+					'handle_request_toggle_checkin',
465
+				),
466
+				'methods'         => WP_REST_Server::CREATABLE,
467
+				'hidden_endpoint' => $hidden_endpoint,
468
+				'args'            => array(
469
+					'force' => array(
470
+						'required'    => false,
471
+						'default'     => false,
472
+						'description' => __('Whether to force toggle checkin, or to verify the registration status and allowed ticket uses',
473
+							'event_espresso'),
474
+					),
475
+				),
476
+			),
477
+		);
478
+		return apply_filters(
479
+			'FHEE__EED_Core_Rest_Api___register_rpc_routes__this_versions_routes',
480
+			$this_versions_routes,
481
+			$version,
482
+			$hidden_endpoint
483
+		);
484
+	}
485
+
486
+
487
+
488
+	/**
489
+	 * Gets the query params that can be used when request one or many
490
+	 *
491
+	 * @param EEM_Base $model
492
+	 * @param string   $version
493
+	 * @return array
494
+	 */
495
+	protected function _get_response_selection_query_params(\EEM_Base $model, $version)
496
+	{
497
+		return apply_filters(
498
+			'FHEE__EED_Core_Rest_Api___get_response_selection_query_params',
499
+			array(
500
+				'include'   => array(
501
+					'required' => false,
502
+					'default'  => '*',
503
+				),
504
+				'calculate' => array(
505
+					'required' => false,
506
+					'default'  => '',
507
+					'enum'     => self::$_field_calculator->retrieve_calculated_fields_for_model($model),
508
+				),
509
+			),
510
+			$model,
511
+			$version
512
+		);
513
+	}
514
+
515
+
516
+
517
+	/**
518
+	 * Gets info about reading query params that are acceptable
519
+	 *
520
+	 * @param \EEM_Base $model eg 'Event' or 'Venue'
521
+	 * @param  string   $version
522
+	 * @return array    describing the args acceptable when querying this model
523
+	 * @throws \EE_Error
524
+	 */
525
+	protected function _get_read_query_params(\EEM_Base $model, $version)
526
+	{
527
+		$default_orderby = array();
528
+		foreach ($model->get_combined_primary_key_fields() as $key_field) {
529
+			$default_orderby[$key_field->get_name()] = 'ASC';
530
+		}
531
+		return array_merge(
532
+			$this->_get_response_selection_query_params($model, $version),
533
+			array(
534
+				'where'    => array(
535
+					'required' => false,
536
+					'default'  => array(),
537
+				),
538
+				'limit'    => array(
539
+					'required' => false,
540
+					'default'  => EED_Core_Rest_Api::get_default_query_limit(),
541
+				),
542
+				'order_by' => array(
543
+					'required' => false,
544
+					'default'  => $default_orderby,
545
+				),
546
+				'group_by' => array(
547
+					'required' => false,
548
+					'default'  => null,
549
+				),
550
+				'having'   => array(
551
+					'required' => false,
552
+					'default'  => null,
553
+				),
554
+				'caps'     => array(
555
+					'required' => false,
556
+					'default'  => EEM_Base::caps_read,
557
+				),
558
+			)
559
+		);
560
+	}
561
+
562
+
563
+
564
+	/**
565
+	 * Gets routes for the config
566
+	 *
567
+	 * @return array @see _register_model_routes
568
+	 * @deprecated since version 4.9.1
569
+	 */
570
+	protected function _register_config_routes()
571
+	{
572
+		$config_routes = array();
573
+		foreach (self::versions_served() as $version => $hidden_endpoint) {
574
+			$config_routes[self::ee_api_namespace . $version] = $this->_get_config_route_data_for_version($version,
575
+				$hidden_endpoint);
576
+		}
577
+		return $config_routes;
578
+	}
579
+
580
+
581
+
582
+	/**
583
+	 * Gets routes for the config for the specified version
584
+	 *
585
+	 * @param string  $version
586
+	 * @param boolean $hidden_endpoint
587
+	 * @return array
588
+	 */
589
+	protected function _get_config_route_data_for_version($version, $hidden_endpoint)
590
+	{
591
+		return array(
592
+			'config'    => array(
593
+				array(
594
+					'callback'        => array(
595
+						'EventEspresso\core\libraries\rest_api\controllers\config\Read',
596
+						'handle_request',
597
+					),
598
+					'methods'         => WP_REST_Server::READABLE,
599
+					'hidden_endpoint' => $hidden_endpoint,
600
+				),
601
+			),
602
+			'site_info' => array(
603
+				array(
604
+					'callback'        => array(
605
+						'EventEspresso\core\libraries\rest_api\controllers\config\Read',
606
+						'handle_request_site_info',
607
+					),
608
+					'methods'         => WP_REST_Server::READABLE,
609
+					'hidden_endpoint' => $hidden_endpoint,
610
+				),
611
+			),
612
+		);
613
+	}
614
+
615
+
616
+
617
+	/**
618
+	 * Gets the meta info routes
619
+	 *
620
+	 * @return array @see _register_model_routes
621
+	 * @deprecated since version 4.9.1
622
+	 */
623
+	protected function _register_meta_routes()
624
+	{
625
+		$meta_routes = array();
626
+		foreach (self::versions_served() as $version => $hidden_endpoint) {
627
+			$meta_routes[self::ee_api_namespace . $version] = $this->_get_meta_route_data_for_version($version,
628
+				$hidden_endpoint);
629
+		}
630
+		return $meta_routes;
631
+	}
632
+
633
+
634
+
635
+	/**
636
+	 * @param string  $version
637
+	 * @param boolean $hidden_endpoint
638
+	 * @return array
639
+	 */
640
+	protected function _get_meta_route_data_for_version($version, $hidden_endpoint = false)
641
+	{
642
+		return array(
643
+			'resources' => array(
644
+				array(
645
+					'callback'        => array(
646
+						'EventEspresso\core\libraries\rest_api\controllers\model\Meta',
647
+						'handle_request_models_meta',
648
+					),
649
+					'methods'         => WP_REST_Server::READABLE,
650
+					'hidden_endpoint' => $hidden_endpoint,
651
+				),
652
+			),
653
+		);
654
+	}
655
+
656
+
657
+
658
+	/**
659
+	 * Tries to hide old 4.6 endpoints from the
660
+	 *
661
+	 * @param array $route_data
662
+	 * @return array
663
+	 */
664
+	public static function hide_old_endpoints($route_data)
665
+	{
666
+		//allow API clients to override which endpoints get hidden, in case
667
+		//they want to discover particular endpoints
668
+		//also, we don't have access to the request so we have to just grab it from the superglobal
669
+		$force_show_ee_namespace = ltrim(
670
+			EEH_Array::is_set($_REQUEST, 'force_show_ee_namespace', ''),
671
+			'/'
672
+		);
673
+		foreach (EED_Core_Rest_Api::get_ee_route_data() as $namespace => $relative_urls) {
674
+			foreach ($relative_urls as $endpoint => $routes) {
675
+				foreach ($routes as $route) {
676
+					//by default, hide "hidden_endpoint"s, unless the request indicates
677
+					//to $force_show_ee_namespace, in which case only show that one
678
+					//namespace's endpoints (and hide all others)
679
+					if (($route['hidden_endpoint'] && $force_show_ee_namespace === '')
680
+						|| ($force_show_ee_namespace !== '' && $force_show_ee_namespace !== $namespace)
681
+					) {
682
+						$full_route = '/' . ltrim($namespace, '/') . '/' . ltrim($endpoint, '/');
683
+						unset($route_data[$full_route]);
684
+					}
685
+				}
686
+			}
687
+		}
688
+		return $route_data;
689
+	}
690
+
691
+
692
+
693
+	/**
694
+	 * Returns an array describing which versions of core support serving requests for.
695
+	 * Keys are core versions' major and minor version, and values are the
696
+	 * LOWEST requested version they can serve. Eg, 4.7 can serve requests for 4.6-like
697
+	 * data by just removing a few models and fields from the responses. However, 4.15 might remove
698
+	 * the answers table entirely, in which case it would be very difficult for
699
+	 * it to serve 4.6-style responses.
700
+	 * Versions of core that are missing from this array are unknowns.
701
+	 * previous ver
702
+	 *
703
+	 * @return array
704
+	 */
705
+	public static function version_compatibilities()
706
+	{
707
+		return apply_filters(
708
+			'FHEE__EED_Core_REST_API__version_compatibilities',
709
+			array(
710
+				'4.8.29' => '4.8.29',
711
+				'4.8.33' => '4.8.29',
712
+				'4.8.34' => '4.8.29',
713
+				'4.8.36' => '4.8.29',
714
+			)
715
+		);
716
+	}
717
+
718
+
719
+
720
+	/**
721
+	 * Gets the latest API version served. Eg if there
722
+	 * are two versions served of the API, 4.8.29 and 4.8.32, and
723
+	 * we are on core version 4.8.34, it will return the string "4.8.32"
724
+	 *
725
+	 * @return string
726
+	 */
727
+	public static function latest_rest_api_version()
728
+	{
729
+		$versions_served = \EED_Core_Rest_Api::versions_served();
730
+		$versions_served_keys = array_keys($versions_served);
731
+		return end($versions_served_keys);
732
+	}
733
+
734
+
735
+
736
+	/**
737
+	 * Using EED_Core_Rest_Api::version_compatibilities(), determines what version of
738
+	 * EE the API can serve requests for. Eg, if we are on 4.15 of core, and
739
+	 * we can serve requests from 4.12 or later, this will return array( '4.12', '4.13', '4.14', '4.15' ).
740
+	 * We also indicate whether or not this version should be put in the index or not
741
+	 *
742
+	 * @return array keys are API version numbers (just major and minor numbers), and values
743
+	 * are whether or not they should be hidden
744
+	 */
745
+	public static function versions_served()
746
+	{
747
+		$versions_served = array();
748
+		$possibly_served_versions = EED_Core_Rest_Api::version_compatibilities();
749
+		$lowest_compatible_version = end($possibly_served_versions);
750
+		reset($possibly_served_versions);
751
+		$versions_served_historically = array_keys($possibly_served_versions);
752
+		$latest_version = end($versions_served_historically);
753
+		reset($versions_served_historically);
754
+		//for each version of core we have ever served:
755
+		foreach ($versions_served_historically as $key_versioned_endpoint) {
756
+			//if it's not above the current core version, and it's compatible with the current version of core
757
+			if ($key_versioned_endpoint == $latest_version) {
758
+				//don't hide the latest version in the index
759
+				$versions_served[$key_versioned_endpoint] = false;
760
+			} else if (
761
+				$key_versioned_endpoint < EED_Core_Rest_Api::core_version()
762
+				&& $key_versioned_endpoint >= $lowest_compatible_version
763
+			) {
764
+				//include, but hide, previous versions which are still supported
765
+				$versions_served[$key_versioned_endpoint] = true;
766
+			} elseif (
767
+			apply_filters(
768
+				'FHEE__EED_Core_Rest_Api__versions_served__include_incompatible_versions',
769
+				false,
770
+				$possibly_served_versions
771
+			)
772
+			) {
773
+				//if a version is no longer supported, don't include it in index or list of versions served
774
+				$versions_served[$key_versioned_endpoint] = true;
775
+			}
776
+		}
777
+		return $versions_served;
778
+	}
779
+
780
+
781
+
782
+	/**
783
+	 * Gets the major and minor version of EE core's version string
784
+	 *
785
+	 * @return string
786
+	 */
787
+	public static function core_version()
788
+	{
789
+		return apply_filters('FHEE__EED_Core_REST_API__core_version',
790
+			implode('.', array_slice(explode('.', espresso_version()), 0, 3)));
791
+	}
792
+
793
+
794
+
795
+	/**
796
+	 * Gets the default limit that should be used when querying for resources
797
+	 *
798
+	 * @return int
799
+	 */
800
+	public static function get_default_query_limit()
801
+	{
802
+		//we actually don't use a const because we want folks to always use
803
+		//this method, not the const directly
804
+		return apply_filters(
805
+			'FHEE__EED_Core_Rest_Api__get_default_query_limit',
806
+			50
807
+		);
808
+	}
809
+
810
+
811
+
812
+	/**
813
+	 *    run - initial module setup
814
+	 *
815
+	 * @access    public
816
+	 * @param  WP $WP
817
+	 * @return    void
818
+	 */
819
+	public function run($WP)
820
+	{
821
+	}
822 822
 }
823 823
 
824 824
 // End of file EED_Core_Rest_Api.module.php
Please login to merge, or discard this patch.
core/libraries/form_sections/inputs/EE_Datepicker_Input.php 1 patch
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -6,21 +6,21 @@  discard block
 block discarded – undo
6 6
  * @subpackage
7 7
  * @author				Mike Nelson
8 8
  */
9
-class EE_Datepicker_Input extends EE_Form_Input_Base{
9
+class EE_Datepicker_Input extends EE_Form_Input_Base {
10 10
 
11 11
 	/**
12 12
 	 * @param array $input_settings
13 13
 	 */
14
-	function __construct( $input_settings = array() ){
15
-		$this->_set_display_strategy( new EE_Text_Input_Display_Strategy( 'datepicker' ) );
16
-		$this->_set_normalization_strategy( new EE_Text_Normalization() );
14
+	function __construct($input_settings = array()) {
15
+		$this->_set_display_strategy(new EE_Text_Input_Display_Strategy('datepicker'));
16
+		$this->_set_normalization_strategy(new EE_Text_Normalization());
17 17
 		//we could do better for validation, but at least verify its plaintext
18
-		$this->_add_validation_strategy( new EE_Plaintext_Validation_Strategy( isset( $input_settings[ 'validation_error_message' ] ) ? $input_settings[ 'validation_error_message' ] : NULL ) );
19
-		parent::__construct( $input_settings );
20
-		$this->set_html_class( $this->html_class() . ' datepicker' );
18
+		$this->_add_validation_strategy(new EE_Plaintext_Validation_Strategy(isset($input_settings['validation_error_message']) ? $input_settings['validation_error_message'] : NULL));
19
+		parent::__construct($input_settings);
20
+		$this->set_html_class($this->html_class().' datepicker');
21 21
 		// add some style and make it dance
22
-		add_action( 'wp_enqueue_scripts', array( 'EE_Datepicker_Input', 'enqueue_styles_and_scripts' ));
23
-		add_action( 'admin_enqueue_scripts', array( 'EE_Datepicker_Input', 'enqueue_styles_and_scripts' ));
22
+		add_action('wp_enqueue_scripts', array('EE_Datepicker_Input', 'enqueue_styles_and_scripts'));
23
+		add_action('admin_enqueue_scripts', array('EE_Datepicker_Input', 'enqueue_styles_and_scripts'));
24 24
 	}
25 25
 
26 26
 
@@ -33,8 +33,8 @@  discard block
 block discarded – undo
33 33
 	 */
34 34
 	public static function enqueue_styles_and_scripts() {
35 35
 		// load css
36
-		wp_register_style( 'espresso-ui-theme', EE_GLOBAL_ASSETS_URL . 'css/espresso-ui-theme/jquery-ui-1.10.3.custom.min.css', array(), EVENT_ESPRESSO_VERSION );
37
-		wp_enqueue_style( 'espresso-ui-theme');
36
+		wp_register_style('espresso-ui-theme', EE_GLOBAL_ASSETS_URL.'css/espresso-ui-theme/jquery-ui-1.10.3.custom.min.css', array(), EVENT_ESPRESSO_VERSION);
37
+		wp_enqueue_style('espresso-ui-theme');
38 38
 	}
39 39
 
40 40
 
Please login to merge, or discard this patch.
core/helpers/EEH_Schema.helper.php 2 patches
Indentation   +66 added lines, -66 removed lines patch added patch discarded remove patch
@@ -17,67 +17,67 @@  discard block
 block discarded – undo
17 17
 class EEH_Schema {
18 18
 
19 19
 
20
-    /**
21
-     * generates JSON-based linked data for an event
22
-     *
23
-     * @param \EE_Event $event
24
-     */
25
-    public static function add_json_linked_data_for_event(\EE_Event $event)
26
-    {
27
-    	//Check we have a valid datetime for the event
28
-    	if(! $event->primary_datetime() instanceof EE_Datetime) {
29
-    		return;
30
-    	}
31
-
32
-        $template_args = array(
33
-            'event_permalink' => '',
34
-            'event_name' => '',
35
-            'event_description' => '',
36
-            'event_start' => '',
37
-            'event_end' => '',
38
-            'currency' => '',
39
-            'event_tickets' => array(),
40
-            'venue_name' => '',
41
-            'venue_url' => '',
42
-            'venue_locality' => '',
43
-            'venue_region' => '',
44
-            'event_image' => '',
45
-        );
46
-        $template_args['event_permalink'] = $event->get_permalink();
47
-        $template_args['event_name'] = $event->name();
48
-        $template_args['event_description'] = wp_strip_all_tags($event->short_description(200));
49
-        $template_args['event_start'] = $event->primary_datetime()->start_date(DateTime::ATOM);
50
-        $template_args['event_end'] = $event->primary_datetime()->end_date(DateTime::ATOM);
51
-        $template_args['currency'] = EE_Registry::instance()->CFG->currency->code;
52
-        foreach ($event->tickets() as $ticket) {
53
-            $ID = $ticket->ID();
54
-            $template_args['event_tickets'][$ID]['start_date'] = $ticket->start_date(DateTime::ATOM, null);
55
-            $template_args['event_tickets'][$ID]['end_date'] = $ticket->end_date(DateTime::ATOM, null);
56
-            $template_args['event_tickets'][$ID]['price'] = number_format(
57
-                $ticket->price(),
58
-                EE_Registry::instance()->CFG->currency->dec_plc,
59
-                EE_Registry::instance()->CFG->currency->dec_mrk,
60
-                EE_Registry::instance()->CFG->currency->thsnds
61
-            );
62
-        }
63
-        $VNU_ID = espresso_venue_id();
64
-        if ( ! empty($VNU_ID) && ! espresso_is_venue_private($VNU_ID)) {
65
-            $venue = EEH_Venue_View::get_venue($VNU_ID);
66
-            $template_args['venue_name'] = get_the_title($VNU_ID);
67
-            $template_args['venue_url'] = get_permalink($VNU_ID);
68
-            $template_args['venue_locality'] = $venue->city();
69
-            $template_args['venue_region'] = $venue->state_name();
70
-        }
71
-        $template_args['event_image'] = $event->feature_image_url();
72
-        $template_args = apply_filters(
73
-            'FHEE__EEH_Schema__add_json_linked_data_for_event__template_args',
74
-            $template_args,
75
-            $event,
76
-            $VNU_ID
77
-        );
78
-        extract($template_args, EXTR_OVERWRITE);
79
-        include EE_TEMPLATES . 'json_linked_data_for_event.template.php';
80
-    }
20
+	/**
21
+	 * generates JSON-based linked data for an event
22
+	 *
23
+	 * @param \EE_Event $event
24
+	 */
25
+	public static function add_json_linked_data_for_event(\EE_Event $event)
26
+	{
27
+		//Check we have a valid datetime for the event
28
+		if(! $event->primary_datetime() instanceof EE_Datetime) {
29
+			return;
30
+		}
31
+
32
+		$template_args = array(
33
+			'event_permalink' => '',
34
+			'event_name' => '',
35
+			'event_description' => '',
36
+			'event_start' => '',
37
+			'event_end' => '',
38
+			'currency' => '',
39
+			'event_tickets' => array(),
40
+			'venue_name' => '',
41
+			'venue_url' => '',
42
+			'venue_locality' => '',
43
+			'venue_region' => '',
44
+			'event_image' => '',
45
+		);
46
+		$template_args['event_permalink'] = $event->get_permalink();
47
+		$template_args['event_name'] = $event->name();
48
+		$template_args['event_description'] = wp_strip_all_tags($event->short_description(200));
49
+		$template_args['event_start'] = $event->primary_datetime()->start_date(DateTime::ATOM);
50
+		$template_args['event_end'] = $event->primary_datetime()->end_date(DateTime::ATOM);
51
+		$template_args['currency'] = EE_Registry::instance()->CFG->currency->code;
52
+		foreach ($event->tickets() as $ticket) {
53
+			$ID = $ticket->ID();
54
+			$template_args['event_tickets'][$ID]['start_date'] = $ticket->start_date(DateTime::ATOM, null);
55
+			$template_args['event_tickets'][$ID]['end_date'] = $ticket->end_date(DateTime::ATOM, null);
56
+			$template_args['event_tickets'][$ID]['price'] = number_format(
57
+				$ticket->price(),
58
+				EE_Registry::instance()->CFG->currency->dec_plc,
59
+				EE_Registry::instance()->CFG->currency->dec_mrk,
60
+				EE_Registry::instance()->CFG->currency->thsnds
61
+			);
62
+		}
63
+		$VNU_ID = espresso_venue_id();
64
+		if ( ! empty($VNU_ID) && ! espresso_is_venue_private($VNU_ID)) {
65
+			$venue = EEH_Venue_View::get_venue($VNU_ID);
66
+			$template_args['venue_name'] = get_the_title($VNU_ID);
67
+			$template_args['venue_url'] = get_permalink($VNU_ID);
68
+			$template_args['venue_locality'] = $venue->city();
69
+			$template_args['venue_region'] = $venue->state_name();
70
+		}
71
+		$template_args['event_image'] = $event->feature_image_url();
72
+		$template_args = apply_filters(
73
+			'FHEE__EEH_Schema__add_json_linked_data_for_event__template_args',
74
+			$template_args,
75
+			$event,
76
+			$VNU_ID
77
+		);
78
+		extract($template_args, EXTR_OVERWRITE);
79
+		include EE_TEMPLATES . 'json_linked_data_for_event.template.php';
80
+	}
81 81
 
82 82
 
83 83
 	/**
@@ -91,8 +91,8 @@  discard block
 block discarded – undo
91 91
 	 */
92 92
 	public static function location( $location = null ) {
93 93
 		return ! empty( $location ) ? '<div itemprop="location" itemscope itemtype="http://schema.org/Place">'
94
-		                              . $location
95
-		                              . '</div>' : '';
94
+									  . $location
95
+									  . '</div>' : '';
96 96
 	}
97 97
 
98 98
 
@@ -212,8 +212,8 @@  discard block
 block discarded – undo
212 212
 	 */
213 213
 	public static function postalCode( EEI_Address $obj_with_address = null ) {
214 214
 		return $obj_with_address->zip() !== null && $obj_with_address->zip() !== '' ? '<span itemprop="postalCode">'
215
-		                                                                              . $obj_with_address->zip()
216
-		                                                                              . '</span>' : '';
215
+																					  . $obj_with_address->zip()
216
+																					  . '</span>' : '';
217 217
 	}
218 218
 
219 219
 
@@ -247,7 +247,7 @@  discard block
 block discarded – undo
247 247
 		//Check the URL includes a scheme
248 248
 		$parsed_url = parse_url($url);
249 249
 		if ( empty($parsed_url['scheme']) ) {
250
-		    $url = 'http://' . ltrim($url, '/');
250
+			$url = 'http://' . ltrim($url, '/');
251 251
 		}
252 252
 
253 253
 		$atts = '';
Please login to merge, or discard this patch.
Spacing   +31 added lines, -31 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
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
 
@@ -25,7 +25,7 @@  discard block
 block discarded – undo
25 25
     public static function add_json_linked_data_for_event(\EE_Event $event)
26 26
     {
27 27
     	//Check we have a valid datetime for the event
28
-    	if(! $event->primary_datetime() instanceof EE_Datetime) {
28
+    	if ( ! $event->primary_datetime() instanceof EE_Datetime) {
29 29
     		return;
30 30
     	}
31 31
 
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
             $VNU_ID
77 77
         );
78 78
         extract($template_args, EXTR_OVERWRITE);
79
-        include EE_TEMPLATES . 'json_linked_data_for_event.template.php';
79
+        include EE_TEMPLATES.'json_linked_data_for_event.template.php';
80 80
     }
81 81
 
82 82
 
@@ -89,8 +89,8 @@  discard block
 block discarded – undo
89 89
 	 * @param string $location
90 90
 	 * @return string
91 91
 	 */
92
-	public static function location( $location = null ) {
93
-		return ! empty( $location ) ? '<div itemprop="location" itemscope itemtype="http://schema.org/Place">'
92
+	public static function location($location = null) {
93
+		return ! empty($location) ? '<div itemprop="location" itemscope itemtype="http://schema.org/Place">'
94 94
 		                              . $location
95 95
 		                              . '</div>' : '';
96 96
 	}
@@ -105,8 +105,8 @@  discard block
 block discarded – undo
105 105
 	 * @param string $name
106 106
 	 * @return string
107 107
 	 */
108
-	public static function name( $name = null ) {
109
-		return ! empty( $name ) ? '<span itemprop="name">' . $name . '</span>' : '';
108
+	public static function name($name = null) {
109
+		return ! empty($name) ? '<span itemprop="name">'.$name.'</span>' : '';
110 110
 	}
111 111
 
112 112
 
@@ -119,9 +119,9 @@  discard block
 block discarded – undo
119 119
 	 * @param EEI_Address $obj_with_address
120 120
 	 * @return string
121 121
 	 */
122
-	public static function streetAddress( EEI_Address $obj_with_address = null ) {
122
+	public static function streetAddress(EEI_Address $obj_with_address = null) {
123 123
 		return $obj_with_address->address() !== null && $obj_with_address->address() !== ''
124
-			? '<span itemprop="streetAddress">' . $obj_with_address->address() . '</span>' : '';
124
+			? '<span itemprop="streetAddress">'.$obj_with_address->address().'</span>' : '';
125 125
 	}
126 126
 
127 127
 
@@ -134,14 +134,14 @@  discard block
 block discarded – undo
134 134
 	 * @param EEI_Address $obj_with_address
135 135
 	 * @return string
136 136
 	 */
137
-	public static function postOfficeBoxNumber( EEI_Address $obj_with_address = null ) {
137
+	public static function postOfficeBoxNumber(EEI_Address $obj_with_address = null) {
138 138
 		// regex check for some form of PO Box or P.O. Box, etc, etc, etc
139
-		if ( preg_match(
139
+		if (preg_match(
140 140
 			"/^\s*((P(OST)?.?\s*(O(FF(ICE)?)?)?.?\s+(B(IN|OX))?)|B(IN|OX))/i",
141 141
 			$obj_with_address->address2()
142
-		) ) {
142
+		)) {
143 143
 			return $obj_with_address->address2() !== null && $obj_with_address->address2() !== ''
144
-				? '<span itemprop="postOfficeBoxNumber">' . $obj_with_address->address2() . '</span>' : '';
144
+				? '<span itemprop="postOfficeBoxNumber">'.$obj_with_address->address2().'</span>' : '';
145 145
 		} else {
146 146
 			return $obj_with_address->address2();
147 147
 		}
@@ -157,9 +157,9 @@  discard block
 block discarded – undo
157 157
 	 * @param EEI_Address $obj_with_address
158 158
 	 * @return string
159 159
 	 */
160
-	public static function addressLocality( EEI_Address $obj_with_address = null ) {
160
+	public static function addressLocality(EEI_Address $obj_with_address = null) {
161 161
 		return $obj_with_address->city() !== null && $obj_with_address->city() !== ''
162
-			? '<span itemprop="addressLocality">' . $obj_with_address->city() . '</span>' : '';
162
+			? '<span itemprop="addressLocality">'.$obj_with_address->city().'</span>' : '';
163 163
 	}
164 164
 
165 165
 
@@ -172,10 +172,10 @@  discard block
 block discarded – undo
172 172
 	 * @param EEI_Address $obj_with_address
173 173
 	 * @return string
174 174
 	 */
175
-	public static function addressRegion( EEI_Address $obj_with_address = null ) {
175
+	public static function addressRegion(EEI_Address $obj_with_address = null) {
176 176
 		$state = $obj_with_address->state_name();
177
-		if ( ! empty( $state ) ) {
178
-			return '<span itemprop="addressRegion">' . $state . '</span>';
177
+		if ( ! empty($state)) {
178
+			return '<span itemprop="addressRegion">'.$state.'</span>';
179 179
 		} else {
180 180
 			return '';
181 181
 		}
@@ -191,10 +191,10 @@  discard block
 block discarded – undo
191 191
 	 * @param EEI_Address $obj_with_address
192 192
 	 * @return string
193 193
 	 */
194
-	public static function addressCountry( EEI_Address $obj_with_address = null ) {
194
+	public static function addressCountry(EEI_Address $obj_with_address = null) {
195 195
 		$country = $obj_with_address->country_name();
196
-		if ( ! empty( $country ) ) {
197
-			return '<span itemprop="addressCountry">' . $country . '</span>';
196
+		if ( ! empty($country)) {
197
+			return '<span itemprop="addressCountry">'.$country.'</span>';
198 198
 		} else {
199 199
 			return '';
200 200
 		}
@@ -210,7 +210,7 @@  discard block
 block discarded – undo
210 210
 	 * @param EEI_Address $obj_with_address
211 211
 	 * @return string
212 212
 	 */
213
-	public static function postalCode( EEI_Address $obj_with_address = null ) {
213
+	public static function postalCode(EEI_Address $obj_with_address = null) {
214 214
 		return $obj_with_address->zip() !== null && $obj_with_address->zip() !== '' ? '<span itemprop="postalCode">'
215 215
 		                                                                              . $obj_with_address->zip()
216 216
 		                                                                              . '</span>' : '';
@@ -226,8 +226,8 @@  discard block
 block discarded – undo
226 226
 	 * @param string $phone_nmbr
227 227
 	 * @return string
228 228
 	 */
229
-	public static function telephone( $phone_nmbr = null ) {
230
-		return $phone_nmbr !== null && $phone_nmbr !== '' ? '<span itemprop="telephone">' . $phone_nmbr . '</span>'
229
+	public static function telephone($phone_nmbr = null) {
230
+		return $phone_nmbr !== null && $phone_nmbr !== '' ? '<span itemprop="telephone">'.$phone_nmbr.'</span>'
231 231
 			: '';
232 232
 	}
233 233
 
@@ -243,19 +243,19 @@  discard block
 block discarded – undo
243 243
 	 * @param array  $attributes - array of additional link attributes in  attribute_name => value pairs. ie: array( 'title' => 'click here', 'class' => 'link-class' )
244 244
 	 * @return string (link)
245 245
 	 */
246
-	public static function url( $url = null, $text = null, $attributes = array() ) {
246
+	public static function url($url = null, $text = null, $attributes = array()) {
247 247
 		//Check the URL includes a scheme
248 248
 		$parsed_url = parse_url($url);
249
-		if ( empty($parsed_url['scheme']) ) {
250
-		    $url = 'http://' . ltrim($url, '/');
249
+		if (empty($parsed_url['scheme'])) {
250
+		    $url = 'http://'.ltrim($url, '/');
251 251
 		}
252 252
 
253 253
 		$atts = '';
254
-		foreach ( $attributes as $attribute => $value ) {
255
-			$atts .= ' ' . $attribute . '="' . $value . '"';
254
+		foreach ($attributes as $attribute => $value) {
255
+			$atts .= ' '.$attribute.'="'.$value.'"';
256 256
 		}
257 257
 		$text = $text !== null && $text !== '' ? $text : $url;
258
-		return $url !== null && $url !== '' ? '<a itemprop="url" href="' . $url . '"' . $atts . '>' . $text . '</a>'
258
+		return $url !== null && $url !== '' ? '<a itemprop="url" href="'.$url.'"'.$atts.'>'.$text.'</a>'
259 259
 			: '';
260 260
 	}
261 261
 
Please login to merge, or discard this patch.
core/business/EE_Transaction_Processor.class.php 2 patches
Indentation   +45 added lines, -46 removed lines patch added patch discarded remove patch
@@ -7,8 +7,7 @@  discard block
 block discarded – undo
7 7
  * the interaction of EE_Transaction and EE_Registration model objects
8 8
  * Provides methods for manipulating and processing changes to an EE_Transaction
9 9
  * and it's related EE_Registrations with regards to the checkout/registration process
10
-
11
-*
10
+ *
12 11
 *@package     Event Espresso
13 12
  * @subpackage 	core
14 13
  * @author      Brent Christensen
@@ -177,24 +176,24 @@  discard block
 block discarded – undo
177 176
 
178 177
 
179 178
 
180
-    /**
181
-     * update_transaction_and_registrations_after_checkout_or_payment
182
-     * cycles thru related registrations and calls update_registration_after_checkout_or_payment() on each
183
-     *
184
-     * @param EE_Transaction $transaction
185
-     * @param \EE_Payment | NULL $payment
186
-     * @param array              $registration_query_params    array of query WHERE params to use
187
-     *                                                         when retrieving cached registrations from a transaction
188
-     * @param bool $trigger_notifications                      whether or not to call
189
-     *                                                         \EE_Registration_Processor::trigger_registration_update_notifications()
190
-     * @return array
191
-     * @throws \EE_Error
192
-     */
179
+	/**
180
+	 * update_transaction_and_registrations_after_checkout_or_payment
181
+	 * cycles thru related registrations and calls update_registration_after_checkout_or_payment() on each
182
+	 *
183
+	 * @param EE_Transaction $transaction
184
+	 * @param \EE_Payment | NULL $payment
185
+	 * @param array              $registration_query_params    array of query WHERE params to use
186
+	 *                                                         when retrieving cached registrations from a transaction
187
+	 * @param bool $trigger_notifications                      whether or not to call
188
+	 *                                                         \EE_Registration_Processor::trigger_registration_update_notifications()
189
+	 * @return array
190
+	 * @throws \EE_Error
191
+	 */
193 192
 	public function update_transaction_and_registrations_after_checkout_or_payment(
194 193
 		EE_Transaction $transaction,
195 194
 		$payment = null,
196 195
 		$registration_query_params = array(),
197
-        $trigger_notifications = true
196
+		$trigger_notifications = true
198 197
 	) {
199 198
 		// make sure some query params are set for retrieving registrations
200 199
 		$this->_set_registration_query_params( $registration_query_params );
@@ -224,15 +223,15 @@  discard block
 block discarded – undo
224 223
 			$update_params
225 224
 		);
226 225
 		if ($trigger_notifications) {
227
-            // send messages
228
-            /** @type EE_Registration_Processor $registration_processor */
229
-            $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
230
-            $registration_processor->trigger_registration_update_notifications(
231
-                $transaction->primary_registration(),
232
-                $update_params
233
-            );
234
-        }
235
-        do_action(
226
+			// send messages
227
+			/** @type EE_Registration_Processor $registration_processor */
228
+			$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
229
+			$registration_processor->trigger_registration_update_notifications(
230
+				$transaction->primary_registration(),
231
+				$update_params
232
+			);
233
+		}
234
+		do_action(
236 235
 			'AHEE__EE_Transaction_Processor__update_transaction_and_registrations_after_checkout_or_payment',
237 236
 			$transaction,
238 237
 			$update_params
@@ -242,17 +241,17 @@  discard block
 block discarded – undo
242 241
 
243 242
 
244 243
 
245
-    /**
246
-     * update_transaction_after_registration_reopened
247
-     * readjusts TXN and Line Item totals after a registration is changed from
248
-     * cancelled or declined to another reg status such as pending payment or approved
249
-     *
250
-     * @param \EE_Registration $registration
251
-     * @param array            $closed_reg_statuses
252
-     * @param bool             $update_txn
253
-     * @return bool
254
-     * @throws \EE_Error
255
-     */
244
+	/**
245
+	 * update_transaction_after_registration_reopened
246
+	 * readjusts TXN and Line Item totals after a registration is changed from
247
+	 * cancelled or declined to another reg status such as pending payment or approved
248
+	 *
249
+	 * @param \EE_Registration $registration
250
+	 * @param array            $closed_reg_statuses
251
+	 * @param bool             $update_txn
252
+	 * @return bool
253
+	 * @throws \EE_Error
254
+	 */
256 255
 	public function update_transaction_after_reinstating_canceled_registration(
257 256
 		EE_Registration $registration,
258 257
 		$closed_reg_statuses = array(),
@@ -314,15 +313,15 @@  discard block
 block discarded – undo
314 313
 		try {
315 314
 			$transaction = $this->get_transaction_for_registration( $registration );
316 315
 			if (
317
-			    apply_filters(
318
-                    'FHEE__EE_Transaction_Processor__update_transaction_after_canceled_or_declined_registration__cancel_ticket_line_item',
319
-                    true,
320
-                    $registration,
321
-                    $transaction
322
-                )
323
-            ){
324
-                $ticket_line_item = $this->get_ticket_line_item_for_transaction_registration( $transaction, $registration );
325
-                EEH_Line_Item::cancel_ticket_line_item( $ticket_line_item );
316
+				apply_filters(
317
+					'FHEE__EE_Transaction_Processor__update_transaction_after_canceled_or_declined_registration__cancel_ticket_line_item',
318
+					true,
319
+					$registration,
320
+					$transaction
321
+				)
322
+			){
323
+				$ticket_line_item = $this->get_ticket_line_item_for_transaction_registration( $transaction, $registration );
324
+				EEH_Line_Item::cancel_ticket_line_item( $ticket_line_item );
326 325
 			}
327 326
 		} catch ( EE_Error $e ) {
328 327
 			EE_Error::add_error(
@@ -532,7 +531,7 @@  discard block
 block discarded – undo
532 531
 						foreach ( $available_payment_methods as $available_payment_method ) {
533 532
 							if (
534 533
 								$available_payment_method instanceof EE_Payment_Method
535
-							    && $available_payment_method->open_by_default()
534
+								&& $available_payment_method->open_by_default()
536 535
 							) {
537 536
 								$PMD_ID = $available_payment_method->ID();
538 537
 								break;
Please login to merge, or discard this patch.
Spacing   +86 added lines, -86 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php if ( ! defined('EVENT_ESPRESSO_VERSION')) { exit('No direct script access allowed'); }
2
-EE_Registry::instance()->load_class( 'Processor_Base' );
2
+EE_Registry::instance()->load_class('Processor_Base');
3 3
 
4 4
 /**
5 5
  * Class EE_Transaction_Processor
@@ -50,10 +50,10 @@  discard block
 block discarded – undo
50 50
 	 * @param array $registration_query_params
51 51
 	 *@return EE_Transaction_Processor instance
52 52
 	 */
53
-	public static function instance( $registration_query_params = array() ) {
53
+	public static function instance($registration_query_params = array()) {
54 54
 		// check if class object is instantiated
55
-		if ( ! self::$_instance instanceof EE_Transaction_Processor ) {
56
-			self::$_instance = new self( $registration_query_params );
55
+		if ( ! self::$_instance instanceof EE_Transaction_Processor) {
56
+			self::$_instance = new self($registration_query_params);
57 57
 		}
58 58
 		return self::$_instance;
59 59
 	}
@@ -63,9 +63,9 @@  discard block
 block discarded – undo
63 63
 	/**
64 64
 	 * @param array $registration_query_params
65 65
 	 */
66
-	private function __construct( $registration_query_params = array() ) {
66
+	private function __construct($registration_query_params = array()) {
67 67
 		// make sure some query params are set for retrieving registrations
68
-		$this->_set_registration_query_params( $registration_query_params );
68
+		$this->_set_registration_query_params($registration_query_params);
69 69
 	}
70 70
 
71 71
 
@@ -74,8 +74,8 @@  discard block
 block discarded – undo
74 74
 	 * @access private
75 75
 	 * @param array $registration_query_params
76 76
 	 */
77
-	private function _set_registration_query_params( $registration_query_params ) {
78
-		$this->_registration_query_params = ! empty( $registration_query_params ) ? $registration_query_params : array( 'order_by' => array( 'REG_count' => 'ASC' ));
77
+	private function _set_registration_query_params($registration_query_params) {
78
+		$this->_registration_query_params = ! empty($registration_query_params) ? $registration_query_params : array('order_by' => array('REG_count' => 'ASC'));
79 79
 	}
80 80
 
81 81
 
@@ -104,10 +104,10 @@  discard block
 block discarded – undo
104 104
 		);
105 105
 		// send messages
106 106
 		/** @type EE_Registration_Processor $registration_processor */
107
-		$registration_processor = EE_Registry::instance()->load_class( 'Registration_Processor' );
107
+		$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
108 108
 		$registration_processor->trigger_registration_update_notifications(
109 109
 			$transaction->primary_registration(),
110
-			array( 'manually_updated' 	=> true )
110
+			array('manually_updated' 	=> true)
111 111
 		);
112 112
 		do_action(
113 113
 			'AHEE__EE_Transaction_Processor__manually_update_registration_statuses',
@@ -197,13 +197,13 @@  discard block
 block discarded – undo
197 197
         $trigger_notifications = true
198 198
 	) {
199 199
 		// make sure some query params are set for retrieving registrations
200
-		$this->_set_registration_query_params( $registration_query_params );
200
+		$this->_set_registration_query_params($registration_query_params);
201 201
 		// get final reg step status
202 202
 		$finalized = $transaction->final_reg_step_completed();
203 203
 		// if the 'finalize_registration' step has been initiated (has a timestamp)
204 204
 		// but has not yet been fully completed (TRUE)
205
-		if ( is_int( $finalized ) && $finalized !== false && $finalized !== true ) {
206
-			$transaction->set_reg_step_completed( 'finalize_registration' );
205
+		if (is_int($finalized) && $finalized !== false && $finalized !== true) {
206
+			$transaction->set_reg_step_completed('finalize_registration');
207 207
 			$finalized = true;
208 208
 		}
209 209
 		$transaction->save();
@@ -259,22 +259,22 @@  discard block
 block discarded – undo
259 259
 		$update_txn = true
260 260
 	) {
261 261
 		// these reg statuses should not be considered in any calculations involving monies owing
262
-		$closed_reg_statuses = ! empty( $closed_reg_statuses ) ? $closed_reg_statuses : EEM_Registration::closed_reg_statuses();
263
-		if ( in_array( $registration->status_ID(), $closed_reg_statuses, true ) ) {
262
+		$closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses : EEM_Registration::closed_reg_statuses();
263
+		if (in_array($registration->status_ID(), $closed_reg_statuses, true)) {
264 264
 			return false;
265 265
 		}
266 266
 		try {
267
-			$transaction = $this->get_transaction_for_registration( $registration );
267
+			$transaction = $this->get_transaction_for_registration($registration);
268 268
 			$ticket_line_item = $this->get_ticket_line_item_for_transaction_registration(
269 269
 				$transaction,
270 270
 				$registration
271 271
 			);
272 272
 			// un-cancel the ticket
273
-			$success = EEH_Line_Item::reinstate_canceled_ticket_line_item( $ticket_line_item );
274
-		} catch ( EE_Error $e ) {
273
+			$success = EEH_Line_Item::reinstate_canceled_ticket_line_item($ticket_line_item);
274
+		} catch (EE_Error $e) {
275 275
 			EE_Error::add_error(
276 276
 				sprintf(
277
-					__( 'The Ticket Line Item for Registration %1$d could not be reinstated because :%2$s%3$s', 'event_espresso' ),
277
+					__('The Ticket Line Item for Registration %1$d could not be reinstated because :%2$s%3$s', 'event_espresso'),
278 278
 					$registration->ID(),
279 279
 					'<br />',
280 280
 					$e->getMessage()
@@ -283,7 +283,7 @@  discard block
 block discarded – undo
283 283
 			);
284 284
 			return false;
285 285
 		}
286
-		if ( $update_txn ) {
286
+		if ($update_txn) {
287 287
 			return $transaction->save() ? $success : false;
288 288
 		}
289 289
 		return $success;
@@ -307,12 +307,12 @@  discard block
 block discarded – undo
307 307
 		$update_txn = true
308 308
 	) {
309 309
 		// these reg statuses should not be considered in any calculations involving monies owing
310
-		$closed_reg_statuses = ! empty( $closed_reg_statuses ) ? $closed_reg_statuses : EEM_Registration::closed_reg_statuses();
311
-		if ( ! in_array( $registration->status_ID(), $closed_reg_statuses, true ) ) {
310
+		$closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses : EEM_Registration::closed_reg_statuses();
311
+		if ( ! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
312 312
 			return false;
313 313
 		}
314 314
 		try {
315
-			$transaction = $this->get_transaction_for_registration( $registration );
315
+			$transaction = $this->get_transaction_for_registration($registration);
316 316
 			if (
317 317
 			    apply_filters(
318 318
                     'FHEE__EE_Transaction_Processor__update_transaction_after_canceled_or_declined_registration__cancel_ticket_line_item',
@@ -320,14 +320,14 @@  discard block
 block discarded – undo
320 320
                     $registration,
321 321
                     $transaction
322 322
                 )
323
-            ){
324
-                $ticket_line_item = $this->get_ticket_line_item_for_transaction_registration( $transaction, $registration );
325
-                EEH_Line_Item::cancel_ticket_line_item( $ticket_line_item );
323
+            ) {
324
+                $ticket_line_item = $this->get_ticket_line_item_for_transaction_registration($transaction, $registration);
325
+                EEH_Line_Item::cancel_ticket_line_item($ticket_line_item);
326 326
 			}
327
-		} catch ( EE_Error $e ) {
327
+		} catch (EE_Error $e) {
328 328
 			EE_Error::add_error(
329 329
 				sprintf(
330
-					__( 'The Ticket Line Item for Registration %1$d could not be cancelled because :%2$s%3$s', 'event_espresso' ),
330
+					__('The Ticket Line Item for Registration %1$d could not be cancelled because :%2$s%3$s', 'event_espresso'),
331 331
 					$registration->ID(),
332 332
 					'<br />',
333 333
 					$e->getMessage()
@@ -336,7 +336,7 @@  discard block
 block discarded – undo
336 336
 			);
337 337
 			return false;
338 338
 		}
339
-		if ( $update_txn ) {
339
+		if ($update_txn) {
340 340
 			return $transaction->save() ? true : false;
341 341
 		}
342 342
 		return true;
@@ -352,12 +352,12 @@  discard block
 block discarded – undo
352 352
 	 * @return 	EE_Transaction
353 353
 	 * @throws 	EE_Error
354 354
 	 */
355
-	public function get_transaction_for_registration( EE_Registration $registration ) {
355
+	public function get_transaction_for_registration(EE_Registration $registration) {
356 356
 		$transaction = $registration->transaction();
357
-		if ( ! $transaction instanceof EE_Transaction ) {
357
+		if ( ! $transaction instanceof EE_Transaction) {
358 358
 			throw new EE_Error(
359 359
 				sprintf(
360
-					__( 'The Transaction for Registration %1$d was not found or is invalid.', 'event_espresso' ),
360
+					__('The Transaction for Registration %1$d was not found or is invalid.', 'event_espresso'),
361 361
 					$registration->ID()
362 362
 				)
363 363
 			);
@@ -380,16 +380,16 @@  discard block
 block discarded – undo
380 380
 		EE_Transaction $transaction,
381 381
 		EE_Registration $registration
382 382
 	) {
383
-		EE_Registry::instance()->load_helper( 'Line_Item' );
383
+		EE_Registry::instance()->load_helper('Line_Item');
384 384
 		$ticket_line_item = EEM_Line_Item::instance()->get_ticket_line_item_for_transaction(
385 385
 			$transaction->ID(),
386 386
 			$registration->ticket_ID()
387 387
 		);
388
-		if ( ! $ticket_line_item instanceof EE_Line_Item ) {
388
+		if ( ! $ticket_line_item instanceof EE_Line_Item) {
389 389
 			throw new EE_Error(
390 390
 				sprintf(
391
-					__( 'The Line Item for Transaction %1$d and Ticket %2$d was not found or is invalid.',
392
-						'event_espresso' ),
391
+					__('The Line Item for Transaction %1$d and Ticket %2$d was not found or is invalid.',
392
+						'event_espresso'),
393 393
 					$transaction->ID(),
394 394
 					$registration->ticket_ID()
395 395
 				)
@@ -422,22 +422,22 @@  discard block
 block discarded – undo
422 422
 		$update_txn = true
423 423
 	) {
424 424
 		// make sure some query params are set for retrieving registrations
425
-		$this->_set_registration_query_params( $registration_query_params );
425
+		$this->_set_registration_query_params($registration_query_params);
426 426
 		// these reg statuses should not be considered in any calculations involving monies owing
427
-		$closed_reg_statuses = ! empty( $closed_reg_statuses ) ? $closed_reg_statuses : EEM_Registration::closed_reg_statuses();
427
+		$closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses : EEM_Registration::closed_reg_statuses();
428 428
 		// loop through cached registrations
429
-		foreach ( $transaction->registrations( $this->_registration_query_params ) as $registration ) {
429
+		foreach ($transaction->registrations($this->_registration_query_params) as $registration) {
430 430
 			if (
431 431
 				$registration instanceof EE_Registration
432
-				&& ! in_array( $registration->status_ID(), $closed_reg_statuses )
432
+				&& ! in_array($registration->status_ID(), $closed_reg_statuses)
433 433
 			) {
434 434
 				return false;
435 435
 			}
436 436
 		}
437
-		if ( in_array( $new_TXN_status, EEM_Transaction::txn_status_array() ) ) {
438
-			$transaction->set_status( $new_TXN_status );
437
+		if (in_array($new_TXN_status, EEM_Transaction::txn_status_array())) {
438
+			$transaction->set_status($new_TXN_status);
439 439
 		}
440
-		if ( $update_txn ) {
440
+		if ($update_txn) {
441 441
 			return $transaction->save() ? true : false;
442 442
 		}
443 443
 		return true;
@@ -466,22 +466,22 @@  discard block
 block discarded – undo
466 466
 	) {
467 467
 		$response = false;
468 468
 		/** @type EE_Registration_Processor $registration_processor */
469
-		$registration_processor = EE_Registry::instance()->load_class( 'Registration_Processor' );
469
+		$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
470 470
 		// check that method exists
471
-		if ( ! method_exists( $registration_processor, $method_name )) {
472
-			throw new EE_Error( __( 'Method does not exist.', 'event_espresso' ));
471
+		if ( ! method_exists($registration_processor, $method_name)) {
472
+			throw new EE_Error(__('Method does not exist.', 'event_espresso'));
473 473
 		}
474 474
 		// make sure some query params are set for retrieving registrations
475
-		$this->_set_registration_query_params( $registration_query_params );
475
+		$this->_set_registration_query_params($registration_query_params);
476 476
 		// loop through cached registrations
477
-		foreach ( $transaction->registrations( $this->_registration_query_params ) as $registration ) {
478
-			if ( $registration instanceof EE_Registration ) {
479
-				if ( $additional_param ) {
480
-					$response = $registration_processor->{$method_name}( $registration, $additional_param )
477
+		foreach ($transaction->registrations($this->_registration_query_params) as $registration) {
478
+			if ($registration instanceof EE_Registration) {
479
+				if ($additional_param) {
480
+					$response = $registration_processor->{$method_name}($registration, $additional_param)
481 481
 						? true
482 482
 						: $response;
483 483
 				} else {
484
-					$response = $registration_processor->{$method_name}( $registration )
484
+					$response = $registration_processor->{$method_name}($registration)
485 485
 						? true
486 486
 						: $response;
487 487
 				}
@@ -508,28 +508,28 @@  discard block
 block discarded – undo
508 508
 	public function set_transaction_payment_method_based_on_registration_statuses(
509 509
 		EE_Registration $edited_registration
510 510
 	) {
511
-		if ( $edited_registration instanceof EE_Registration ) {
511
+		if ($edited_registration instanceof EE_Registration) {
512 512
 			$transaction = $edited_registration->transaction();
513
-			if ( $transaction instanceof EE_Transaction ) {
513
+			if ($transaction instanceof EE_Transaction) {
514 514
 				$all_not_approved = true;
515
-				foreach ( $transaction->registrations() as $registration ) {
516
-					if ( $registration instanceof EE_Registration ) {
515
+				foreach ($transaction->registrations() as $registration) {
516
+					if ($registration instanceof EE_Registration) {
517 517
 						// if any REG != "Not Approved" then toggle to false
518 518
 						$all_not_approved = $registration->is_not_approved() ? $all_not_approved : false;
519 519
 					}
520 520
 				}
521 521
 				// if ALL Registrations are "Not Approved"
522
-				if ( $all_not_approved ) {
523
-					$transaction->set_payment_method_ID( null );
522
+				if ($all_not_approved) {
523
+					$transaction->set_payment_method_ID(null);
524 524
 					$transaction->save();
525 525
 				} else {
526 526
 					$available_payment_methods = EEM_Payment_Method::instance()->get_all_for_transaction(
527 527
 						$transaction,
528 528
 						EEM_Payment_Method::scope_cart
529 529
 					);
530
-					if ( ! empty( $available_payment_methods ) ) {
530
+					if ( ! empty($available_payment_methods)) {
531 531
 						$PMD_ID = 0;
532
-						foreach ( $available_payment_methods as $available_payment_method ) {
532
+						foreach ($available_payment_methods as $available_payment_method) {
533 533
 							if (
534 534
 								$available_payment_method instanceof EE_Payment_Method
535 535
 							    && $available_payment_method->open_by_default()
@@ -538,22 +538,22 @@  discard block
 block discarded – undo
538 538
 								break;
539 539
 							}
540 540
 						}
541
-						if ( ! $PMD_ID ) {
542
-							$first_payment_method = reset( $available_payment_methods );
543
-							if ( $first_payment_method instanceof EE_Payment_Method ) {
541
+						if ( ! $PMD_ID) {
542
+							$first_payment_method = reset($available_payment_methods);
543
+							if ($first_payment_method instanceof EE_Payment_Method) {
544 544
 								$PMD_ID = $first_payment_method->ID();
545 545
 							} else {
546 546
 								EE_Error::add_error(
547
-									__( 'A valid Payment Method could not be determined. Please ensure that at least one Payment Method is activated.', 'event_espresso' ),
547
+									__('A valid Payment Method could not be determined. Please ensure that at least one Payment Method is activated.', 'event_espresso'),
548 548
 									__FILE__, __LINE__, __FUNCTION__
549 549
 								);
550 550
 							}
551 551
 						}
552
-						$transaction->set_payment_method_ID( $PMD_ID );
552
+						$transaction->set_payment_method_ID($PMD_ID);
553 553
 						$transaction->save();
554 554
 					} else {
555 555
 						EE_Error::add_error(
556
-							__( 'Please activate at least one Payment Method in order for things to operate correctly.', 'event_espresso' ),
556
+							__('Please activate at least one Payment Method in order for things to operate correctly.', 'event_espresso'),
557 557
 							__FILE__, __LINE__, __FUNCTION__
558 558
 						);
559 559
 					}
@@ -590,7 +590,7 @@  discard block
 block discarded – undo
590 590
 	 * @deprecated 4.9.12
591 591
 	 * @param string $old_txn_status
592 592
 	 */
593
-	public function set_old_txn_status( $old_txn_status ) {
593
+	public function set_old_txn_status($old_txn_status) {
594 594
 		EE_Error::doing_it_wrong(
595 595
 			__METHOD__,
596 596
 			esc_html__(
@@ -600,7 +600,7 @@  discard block
 block discarded – undo
600 600
 			'4.9.12'
601 601
 		);
602 602
 		// only set the first time
603
-		if ( $this->_old_txn_status === null ) {
603
+		if ($this->_old_txn_status === null) {
604 604
 			$this->_old_txn_status = $old_txn_status;
605 605
 		}
606 606
 	}
@@ -629,7 +629,7 @@  discard block
 block discarded – undo
629 629
 	 * @deprecated 4.9.12
630 630
 	 * @param string $new_txn_status
631 631
 	 */
632
-	public function set_new_txn_status( $new_txn_status ) {
632
+	public function set_new_txn_status($new_txn_status) {
633 633
 		EE_Error::doing_it_wrong(
634 634
 			__METHOD__,
635 635
 			esc_html__(
@@ -673,7 +673,7 @@  discard block
 block discarded – undo
673 673
 	 * @param EE_Transaction $transaction
674 674
 	 * @return boolean
675 675
 	 */
676
-	public function all_reg_steps_completed( EE_Transaction $transaction ) {
676
+	public function all_reg_steps_completed(EE_Transaction $transaction) {
677 677
 		EE_Error::doing_it_wrong(
678 678
 			__METHOD__,
679 679
 			esc_html__(
@@ -700,7 +700,7 @@  discard block
 block discarded – undo
700 700
 	 * @param string         $exception
701 701
 	 * @return boolean
702 702
 	 */
703
-	public function all_reg_steps_completed_except( EE_Transaction $transaction, $exception = '' ) {
703
+	public function all_reg_steps_completed_except(EE_Transaction $transaction, $exception = '') {
704 704
 		EE_Error::doing_it_wrong(
705 705
 			__METHOD__,
706 706
 			esc_html__(
@@ -710,7 +710,7 @@  discard block
 block discarded – undo
710 710
 			'4.9.12',
711 711
 			'5.0.0'
712 712
 		);
713
-		return $transaction->all_reg_steps_completed_except( $exception );
713
+		return $transaction->all_reg_steps_completed_except($exception);
714 714
 	}
715 715
 
716 716
 
@@ -726,7 +726,7 @@  discard block
 block discarded – undo
726 726
 	 * @param EE_Transaction $transaction
727 727
 	 * @return boolean
728 728
 	 */
729
-	public function all_reg_steps_completed_except_final_step( EE_Transaction $transaction ) {
729
+	public function all_reg_steps_completed_except_final_step(EE_Transaction $transaction) {
730 730
 		EE_Error::doing_it_wrong(
731 731
 			__METHOD__,
732 732
 			esc_html__(
@@ -753,7 +753,7 @@  discard block
 block discarded – undo
753 753
 	 * @param string         $reg_step_slug
754 754
 	 * @return boolean | int
755 755
 	 */
756
-	public function reg_step_completed( EE_Transaction $transaction, $reg_step_slug ) {
756
+	public function reg_step_completed(EE_Transaction $transaction, $reg_step_slug) {
757 757
 		EE_Error::doing_it_wrong(
758 758
 			__METHOD__,
759 759
 			esc_html__(
@@ -763,7 +763,7 @@  discard block
 block discarded – undo
763 763
 			'4.9.12',
764 764
 			'5.0.0'
765 765
 		);
766
-		return $transaction->reg_step_completed( $reg_step_slug );
766
+		return $transaction->reg_step_completed($reg_step_slug);
767 767
 	}
768 768
 
769 769
 
@@ -779,7 +779,7 @@  discard block
 block discarded – undo
779 779
 	 * @param EE_Transaction $transaction
780 780
 	 * @return boolean | int
781 781
 	 */
782
-	public function final_reg_step_completed( EE_Transaction $transaction ) {
782
+	public function final_reg_step_completed(EE_Transaction $transaction) {
783 783
 		EE_Error::doing_it_wrong(
784 784
 			__METHOD__,
785 785
 			esc_html__(
@@ -805,7 +805,7 @@  discard block
 block discarded – undo
805 805
 	 * @return boolean
806 806
 	 * @throws \EE_Error
807 807
 	 */
808
-	public function set_reg_step_initiated( EE_Transaction $transaction, $reg_step_slug ) {
808
+	public function set_reg_step_initiated(EE_Transaction $transaction, $reg_step_slug) {
809 809
 		EE_Error::doing_it_wrong(
810 810
 			__METHOD__,
811 811
 			esc_html__(
@@ -815,7 +815,7 @@  discard block
 block discarded – undo
815 815
 			'4.9.12',
816 816
 			'5.0.0'
817 817
 		);
818
-		return $transaction->set_reg_step_initiated( $reg_step_slug );
818
+		return $transaction->set_reg_step_initiated($reg_step_slug);
819 819
 	}
820 820
 
821 821
 
@@ -831,7 +831,7 @@  discard block
 block discarded – undo
831 831
 	 * @return boolean
832 832
 	 * @throws \EE_Error
833 833
 	 */
834
-	public function set_reg_step_completed( EE_Transaction $transaction, $reg_step_slug ) {
834
+	public function set_reg_step_completed(EE_Transaction $transaction, $reg_step_slug) {
835 835
 		EE_Error::doing_it_wrong(
836 836
 			__METHOD__,
837 837
 			esc_html__(
@@ -841,7 +841,7 @@  discard block
 block discarded – undo
841 841
 			'4.9.12',
842 842
 			'5.0.0'
843 843
 		);
844
-		return $transaction->set_reg_step_completed( $reg_step_slug );
844
+		return $transaction->set_reg_step_completed($reg_step_slug);
845 845
 	}
846 846
 
847 847
 
@@ -857,7 +857,7 @@  discard block
 block discarded – undo
857 857
 	 * @return boolean
858 858
 	 * @throws \EE_Error
859 859
 	 */
860
-	public function set_reg_step_not_completed( EE_Transaction $transaction, $reg_step_slug ) {
860
+	public function set_reg_step_not_completed(EE_Transaction $transaction, $reg_step_slug) {
861 861
 		EE_Error::doing_it_wrong(
862 862
 			__METHOD__,
863 863
 			esc_html__(
@@ -867,7 +867,7 @@  discard block
 block discarded – undo
867 867
 			'4.9.12',
868 868
 			'5.0.0'
869 869
 		);
870
-		return $transaction->set_reg_step_not_completed( $reg_step_slug );
870
+		return $transaction->set_reg_step_not_completed($reg_step_slug);
871 871
 	}
872 872
 
873 873
 
@@ -884,7 +884,7 @@  discard block
 block discarded – undo
884 884
 	 * @param string          $reg_step_slug
885 885
 	 * @return void
886 886
 	 */
887
-	public function remove_reg_step( EE_Transaction $transaction, $reg_step_slug ) {
887
+	public function remove_reg_step(EE_Transaction $transaction, $reg_step_slug) {
888 888
 		EE_Error::doing_it_wrong(
889 889
 			__METHOD__,
890 890
 			esc_html__(
@@ -894,7 +894,7 @@  discard block
 block discarded – undo
894 894
 			'4.9.12',
895 895
 			'5.0.0'
896 896
 		);
897
-		$transaction->remove_reg_step( $reg_step_slug );
897
+		$transaction->remove_reg_step($reg_step_slug);
898 898
 	}
899 899
 
900 900
 
@@ -910,7 +910,7 @@  discard block
 block discarded – undo
910 910
 	 * @return    boolean
911 911
 	 * @throws \EE_Error
912 912
 	 */
913
-	public function toggle_failed_transaction_status( EE_Transaction $transaction ) {
913
+	public function toggle_failed_transaction_status(EE_Transaction $transaction) {
914 914
 		EE_Error::doing_it_wrong(
915 915
 			__METHOD__,
916 916
 			esc_html__(
@@ -934,7 +934,7 @@  discard block
 block discarded – undo
934 934
 	 * @param  EE_Transaction $transaction
935 935
 	 * @return boolean
936 936
 	 */
937
-	public function toggle_abandoned_transaction_status( EE_Transaction $transaction ) {
937
+	public function toggle_abandoned_transaction_status(EE_Transaction $transaction) {
938 938
 		EE_Error::doing_it_wrong(
939 939
 			__METHOD__,
940 940
 			esc_html__(
Please login to merge, or discard this patch.
core/libraries/messages/EE_Message_Repository.lib.php 2 patches
Indentation   +251 added lines, -251 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if (! defined('EVENT_ESPRESSO_VERSION')) {
3
-    exit('No direct script access allowed');
3
+	exit('No direct script access allowed');
4 4
 }
5 5
 
6 6
 
@@ -16,256 +16,256 @@  discard block
 block discarded – undo
16 16
 {
17 17
 
18 18
 
19
-    /**
20
-     *    EE_Message_Repository constructor
21
-     */
22
-    public function __construct()
23
-    {
24
-        $this->interface = 'EE_Message';
25
-        parent::__construct();
26
-    }
27
-
28
-
29
-    /**
30
-     * Add the EE_Message to the repository.
31
-     * This also ensures that the MSG_token is saves as a part of the info for retrieval.
32
-     *
33
-     * @param EE_Message $message
34
-     * @param mixed      $info Any included data is saved in the attached object info array indexed by 'data'
35
-     * @return bool
36
-     */
37
-    public function add($message, $info = null)
38
-    {
39
-        $attached = parent::add($message);
40
-        //ensure $info is an array if not already
41
-        $info = $info === null ? $info = array() : (array)$info;
42
-        $data = $this->_init_data($info, $attached, $message);
43
-        if ($attached) {
44
-            $this->set_info($message, $data);
45
-        }
46
-        return $attached;
47
-    }
48
-
49
-
50
-    /**
51
-     * Initializes the data from the incoming info.
52
-     *
53
-     * @param array      $info     incoming data.
54
-     * @param bool       $attached Indicates whether the object was attached successfully.
55
-     * @param EE_Message $message
56
-     * @return array
57
-     */
58
-    protected function _init_data($info, $attached, $message)
59
-    {
60
-        $data = array(
61
-            'test_send'               => false,
62
-            'preview'                 => false,
63
-            'data_handler_class_name' => '',
64
-            'data'                    => array(
65
-                'MSG_generation_data' => array(),
66
-            ),
67
-        );
68
-        if (isset($info['preview'])) {
69
-            $data['preview'] = $info['preview'];
70
-            unset($info['preview']);
71
-        }
72
-        if (isset($info['test_send'])) {
73
-            $data['test_send'] = $info['test_send'];
74
-            unset($info['test_send']);
75
-        }
76
-        if (isset($info['data_handler_class_name'])) {
77
-            $data['data_handler_class_name'] = $info['data_handler_class_name'];
78
-            unset($info['data_handler_class_name']);
79
-        }
80
-        if ($attached && $message->STS_ID() === EEM_Message::status_incomplete) {
81
-            $generation_data = isset($info['MSG_generation_data']) ? $info['MSG_generation_data'] : array();
82
-            //if data isn't in $info...let's see if its available via the message object
83
-            $generation_data = ! $generation_data ? $message->get_generation_data() : $generation_data;
84
-            //still empty then let's just use info
85
-            $generation_data                     = ! $generation_data ? $info : $generation_data;
86
-            $data['data']['MSG_generation_data'] = $generation_data;
87
-        }
88
-        return $data;
89
-    }
90
-
91
-
92
-    /**
93
-     * Save all EE_Message objects to the db.
94
-     *
95
-     * @param bool $do_hooks_only  When true, only the hooks related to saving are fired.
96
-     * @return array array(
97
-     *                  'updated' => 0, //count of how many messages updated
98
-     *                  'notupdated' => 0, //count of how many messages not updated.
99
-     *                  'errors' => array( $token ), //array of message object tokens that had errors in saving
100
-     *                  )
101
-     */
102
-    public function saveAll($do_hooks_only = false)
103
-    {
104
-        $save_tracking = array('updated' => 0, 'notupdated' => 0, 'errors' => array());
105
-
106
-        if (! $do_hooks_only) {
107
-            $this->rewind();
108
-            //exit early if there is nothing to save.
109
-            if ($this->count() < 1) {
110
-                return $save_tracking;
111
-            }
112
-
113
-            while ($this->valid()) {
114
-                $saved = $this->current()->save();
115
-                if ($saved === false) {
116
-                    $save_tracking['errors'][] = $this->current()->MSG_token();
117
-                } elseif ($saved) {
118
-                    $save_tracking['updated']++;
119
-                } else {
120
-                    $save_tracking['notupdated']++;
121
-                }
122
-                //maybe persist generation data if this is an incomplete EE_Message.
123
-                $this->_maybe_persist_attached_data();
124
-
125
-                $this->next();
126
-            }
127
-        }
128
-        do_action('AHEE__EE_Message_Repository__saveAll__after', $save_tracking, $this, $do_hooks_only);
129
-        return $save_tracking;
130
-    }
131
-
132
-
133
-    /**
134
-     * Retrieves a EE_Message from the repository that matches the given token.
135
-     *
136
-     * @param string $token Token.
137
-     * @return EE_Message | null
138
-     */
139
-    public function getMessageByToken($token)
140
-    {
141
-        $this->rewind();
142
-        while ($this->valid()) {
143
-            if ($this->current()->MSG_token() === $token) {
144
-                $message = $this->current();
145
-                $this->rewind();
146
-                return $message;
147
-            }
148
-            $this->next();
149
-        }
150
-        return null;
151
-    }
152
-
153
-
154
-    /**
155
-     * This retrieves any data required for generation that may be saved with the current EE_Message in storage.
156
-     *
157
-     * @return array();
158
-     */
159
-    public function get_generation_data()
160
-    {
161
-        //first verify we're at a valid iterator point.
162
-        if ( ! $this->valid()) {
163
-            return array();
164
-        }
165
-        $info = $this->getInfo();
166
-        return isset($info['data']) && isset($info['data']['MSG_generation_data']) ? $info['data']['MSG_generation_data'] : array();
167
-    }
168
-
169
-
170
-    /**
171
-     * Retrieves the data_handler_class_name or reference associated with the current EE_Message object in the iterator.
172
-     *
173
-     * @return string
174
-     */
175
-    public function get_data_handler()
176
-    {
177
-        if ( ! $this->valid()) {
178
-            return '';
179
-        }
180
-        $info = $this->getInfo();
181
-        return isset($info['data_handler_class_name']) ? $info['data_handler_class_name'] : '';
182
-    }
183
-
184
-
185
-    /**
186
-     * Returns whether this EE_Message is for a preview or not.
187
-     *
188
-     * @return bool
189
-     */
190
-    public function is_preview()
191
-    {
192
-        if ( ! $this->valid()) {
193
-            return false;
194
-        }
195
-        $info = $this->getInfo();
196
-        return $info['preview'];
197
-    }
198
-
199
-
200
-    /**
201
-     * Returns whether the current message pointed to is for a test send.
202
-     *
203
-     * @return bool
204
-     */
205
-    public function is_test_send()
206
-    {
207
-        if ( ! $this->valid()) {
208
-            return false;
209
-        }
210
-        $info = $this->getInfo();
211
-        return $info['test_send'];
212
-    }
213
-
214
-
215
-    /**
216
-     *  This checks if the current EE_Message in the iterator is incomplete. If it is, then
217
-     *  data is attached for later retrieval (batch generation).
218
-     */
219
-    protected function _maybe_persist_attached_data()
220
-    {
221
-        if ( ! $this->valid()) {
222
-            return;
223
-        }
224
-
225
-        $info                    = $this->getInfo();
226
-        $data_handler_class_name = isset($info['data_handler_class_name']) ? $info['data_handler_class_name'] : '';
227
-        $data                    = isset($info['data']) && isset($info['data']['MSG_generation_data']) ? $info['data']['MSG_generation_data'] : array();
228
-        if ($data && $this->current()->STS_ID() === EEM_Message::status_incomplete) {
229
-            $this->current()->set_generation_data($data);
230
-            $this->current()->set_field_or_extra_meta('data_handler_class_name', $data_handler_class_name);
231
-        }
232
-    }
233
-
234
-
235
-    /**
236
-     * This method returns a count of messages in the repository that have a given priority.
237
-     *
238
-     * @param int   $priority the priority that is being filtered for the count.
239
-     * @param array $status   the optional status(es) that will also be filtered by when priority matches.
240
-     * @return int  count of messages in the queue matching the conditions.
241
-     */
242
-    public function count_by_priority_and_status($priority, $status = array())
243
-    {
244
-        if ( ! empty($status)) {
245
-            $status = is_array($status) ? $status : array($status);
246
-        }
247
-
248
-        $count = 0;
249
-        $this->rewind();
250
-        while ($this->valid()) {
251
-            if ($this->current()->priority() === $priority && (($status && in_array($this->current()->STS_ID(),
252
-                            $status)) || ! $status)
253
-            ) {
254
-                $count++;
255
-            }
256
-            $this->next();
257
-        }
258
-        return $count;
259
-    }
260
-
261
-
262
-    /**
263
-     * @return EE_Message
264
-     */
265
-    public function current()
266
-    {
267
-        return parent::current();
268
-    }
19
+	/**
20
+	 *    EE_Message_Repository constructor
21
+	 */
22
+	public function __construct()
23
+	{
24
+		$this->interface = 'EE_Message';
25
+		parent::__construct();
26
+	}
27
+
28
+
29
+	/**
30
+	 * Add the EE_Message to the repository.
31
+	 * This also ensures that the MSG_token is saves as a part of the info for retrieval.
32
+	 *
33
+	 * @param EE_Message $message
34
+	 * @param mixed      $info Any included data is saved in the attached object info array indexed by 'data'
35
+	 * @return bool
36
+	 */
37
+	public function add($message, $info = null)
38
+	{
39
+		$attached = parent::add($message);
40
+		//ensure $info is an array if not already
41
+		$info = $info === null ? $info = array() : (array)$info;
42
+		$data = $this->_init_data($info, $attached, $message);
43
+		if ($attached) {
44
+			$this->set_info($message, $data);
45
+		}
46
+		return $attached;
47
+	}
48
+
49
+
50
+	/**
51
+	 * Initializes the data from the incoming info.
52
+	 *
53
+	 * @param array      $info     incoming data.
54
+	 * @param bool       $attached Indicates whether the object was attached successfully.
55
+	 * @param EE_Message $message
56
+	 * @return array
57
+	 */
58
+	protected function _init_data($info, $attached, $message)
59
+	{
60
+		$data = array(
61
+			'test_send'               => false,
62
+			'preview'                 => false,
63
+			'data_handler_class_name' => '',
64
+			'data'                    => array(
65
+				'MSG_generation_data' => array(),
66
+			),
67
+		);
68
+		if (isset($info['preview'])) {
69
+			$data['preview'] = $info['preview'];
70
+			unset($info['preview']);
71
+		}
72
+		if (isset($info['test_send'])) {
73
+			$data['test_send'] = $info['test_send'];
74
+			unset($info['test_send']);
75
+		}
76
+		if (isset($info['data_handler_class_name'])) {
77
+			$data['data_handler_class_name'] = $info['data_handler_class_name'];
78
+			unset($info['data_handler_class_name']);
79
+		}
80
+		if ($attached && $message->STS_ID() === EEM_Message::status_incomplete) {
81
+			$generation_data = isset($info['MSG_generation_data']) ? $info['MSG_generation_data'] : array();
82
+			//if data isn't in $info...let's see if its available via the message object
83
+			$generation_data = ! $generation_data ? $message->get_generation_data() : $generation_data;
84
+			//still empty then let's just use info
85
+			$generation_data                     = ! $generation_data ? $info : $generation_data;
86
+			$data['data']['MSG_generation_data'] = $generation_data;
87
+		}
88
+		return $data;
89
+	}
90
+
91
+
92
+	/**
93
+	 * Save all EE_Message objects to the db.
94
+	 *
95
+	 * @param bool $do_hooks_only  When true, only the hooks related to saving are fired.
96
+	 * @return array array(
97
+	 *                  'updated' => 0, //count of how many messages updated
98
+	 *                  'notupdated' => 0, //count of how many messages not updated.
99
+	 *                  'errors' => array( $token ), //array of message object tokens that had errors in saving
100
+	 *                  )
101
+	 */
102
+	public function saveAll($do_hooks_only = false)
103
+	{
104
+		$save_tracking = array('updated' => 0, 'notupdated' => 0, 'errors' => array());
105
+
106
+		if (! $do_hooks_only) {
107
+			$this->rewind();
108
+			//exit early if there is nothing to save.
109
+			if ($this->count() < 1) {
110
+				return $save_tracking;
111
+			}
112
+
113
+			while ($this->valid()) {
114
+				$saved = $this->current()->save();
115
+				if ($saved === false) {
116
+					$save_tracking['errors'][] = $this->current()->MSG_token();
117
+				} elseif ($saved) {
118
+					$save_tracking['updated']++;
119
+				} else {
120
+					$save_tracking['notupdated']++;
121
+				}
122
+				//maybe persist generation data if this is an incomplete EE_Message.
123
+				$this->_maybe_persist_attached_data();
124
+
125
+				$this->next();
126
+			}
127
+		}
128
+		do_action('AHEE__EE_Message_Repository__saveAll__after', $save_tracking, $this, $do_hooks_only);
129
+		return $save_tracking;
130
+	}
131
+
132
+
133
+	/**
134
+	 * Retrieves a EE_Message from the repository that matches the given token.
135
+	 *
136
+	 * @param string $token Token.
137
+	 * @return EE_Message | null
138
+	 */
139
+	public function getMessageByToken($token)
140
+	{
141
+		$this->rewind();
142
+		while ($this->valid()) {
143
+			if ($this->current()->MSG_token() === $token) {
144
+				$message = $this->current();
145
+				$this->rewind();
146
+				return $message;
147
+			}
148
+			$this->next();
149
+		}
150
+		return null;
151
+	}
152
+
153
+
154
+	/**
155
+	 * This retrieves any data required for generation that may be saved with the current EE_Message in storage.
156
+	 *
157
+	 * @return array();
158
+	 */
159
+	public function get_generation_data()
160
+	{
161
+		//first verify we're at a valid iterator point.
162
+		if ( ! $this->valid()) {
163
+			return array();
164
+		}
165
+		$info = $this->getInfo();
166
+		return isset($info['data']) && isset($info['data']['MSG_generation_data']) ? $info['data']['MSG_generation_data'] : array();
167
+	}
168
+
169
+
170
+	/**
171
+	 * Retrieves the data_handler_class_name or reference associated with the current EE_Message object in the iterator.
172
+	 *
173
+	 * @return string
174
+	 */
175
+	public function get_data_handler()
176
+	{
177
+		if ( ! $this->valid()) {
178
+			return '';
179
+		}
180
+		$info = $this->getInfo();
181
+		return isset($info['data_handler_class_name']) ? $info['data_handler_class_name'] : '';
182
+	}
183
+
184
+
185
+	/**
186
+	 * Returns whether this EE_Message is for a preview or not.
187
+	 *
188
+	 * @return bool
189
+	 */
190
+	public function is_preview()
191
+	{
192
+		if ( ! $this->valid()) {
193
+			return false;
194
+		}
195
+		$info = $this->getInfo();
196
+		return $info['preview'];
197
+	}
198
+
199
+
200
+	/**
201
+	 * Returns whether the current message pointed to is for a test send.
202
+	 *
203
+	 * @return bool
204
+	 */
205
+	public function is_test_send()
206
+	{
207
+		if ( ! $this->valid()) {
208
+			return false;
209
+		}
210
+		$info = $this->getInfo();
211
+		return $info['test_send'];
212
+	}
213
+
214
+
215
+	/**
216
+	 *  This checks if the current EE_Message in the iterator is incomplete. If it is, then
217
+	 *  data is attached for later retrieval (batch generation).
218
+	 */
219
+	protected function _maybe_persist_attached_data()
220
+	{
221
+		if ( ! $this->valid()) {
222
+			return;
223
+		}
224
+
225
+		$info                    = $this->getInfo();
226
+		$data_handler_class_name = isset($info['data_handler_class_name']) ? $info['data_handler_class_name'] : '';
227
+		$data                    = isset($info['data']) && isset($info['data']['MSG_generation_data']) ? $info['data']['MSG_generation_data'] : array();
228
+		if ($data && $this->current()->STS_ID() === EEM_Message::status_incomplete) {
229
+			$this->current()->set_generation_data($data);
230
+			$this->current()->set_field_or_extra_meta('data_handler_class_name', $data_handler_class_name);
231
+		}
232
+	}
233
+
234
+
235
+	/**
236
+	 * This method returns a count of messages in the repository that have a given priority.
237
+	 *
238
+	 * @param int   $priority the priority that is being filtered for the count.
239
+	 * @param array $status   the optional status(es) that will also be filtered by when priority matches.
240
+	 * @return int  count of messages in the queue matching the conditions.
241
+	 */
242
+	public function count_by_priority_and_status($priority, $status = array())
243
+	{
244
+		if ( ! empty($status)) {
245
+			$status = is_array($status) ? $status : array($status);
246
+		}
247
+
248
+		$count = 0;
249
+		$this->rewind();
250
+		while ($this->valid()) {
251
+			if ($this->current()->priority() === $priority && (($status && in_array($this->current()->STS_ID(),
252
+							$status)) || ! $status)
253
+			) {
254
+				$count++;
255
+			}
256
+			$this->next();
257
+		}
258
+		return $count;
259
+	}
260
+
261
+
262
+	/**
263
+	 * @return EE_Message
264
+	 */
265
+	public function current()
266
+	{
267
+		return parent::current();
268
+	}
269 269
 
270 270
 
271 271
 }
272 272
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
-if (! defined('EVENT_ESPRESSO_VERSION')) {
2
+if ( ! defined('EVENT_ESPRESSO_VERSION')) {
3 3
     exit('No direct script access allowed');
4 4
 }
5 5
 
@@ -38,7 +38,7 @@  discard block
 block discarded – undo
38 38
     {
39 39
         $attached = parent::add($message);
40 40
         //ensure $info is an array if not already
41
-        $info = $info === null ? $info = array() : (array)$info;
41
+        $info = $info === null ? $info = array() : (array) $info;
42 42
         $data = $this->_init_data($info, $attached, $message);
43 43
         if ($attached) {
44 44
             $this->set_info($message, $data);
@@ -103,7 +103,7 @@  discard block
 block discarded – undo
103 103
     {
104 104
         $save_tracking = array('updated' => 0, 'notupdated' => 0, 'errors' => array());
105 105
 
106
-        if (! $do_hooks_only) {
106
+        if ( ! $do_hooks_only) {
107 107
             $this->rewind();
108 108
             //exit early if there is nothing to save.
109 109
             if ($this->count() < 1) {
Please login to merge, or discard this patch.