Completed
Branch sideload-incorrect-upload-from (81f0fb)
by
unknown
24:49 queued 17:07
created
core/libraries/messages/EE_Messages_Queue.lib.php 2 patches
Indentation   +690 added lines, -690 removed lines patch added patch discarded remove patch
@@ -14,694 +14,694 @@
 block discarded – undo
14 14
 {
15 15
 
16 16
 
17
-    /**
18
-     * @type    string  reference for sending action
19
-     */
20
-    const action_sending = 'sending';
21
-
22
-    /**
23
-     * @type    string  reference for generation action
24
-     */
25
-    const action_generating = 'generation';
26
-
27
-
28
-    /**
29
-     * @type EE_Message_Repository $_message_repository
30
-     */
31
-    protected $_message_repository;
32
-
33
-    /**
34
-     * Sets the limit of how many messages are generated per process.
35
-     *
36
-     * @type int
37
-     */
38
-    protected $_batch_count;
39
-
40
-
41
-    /**
42
-     * This is an array of cached queue items being stored in this object.
43
-     * The array keys will be the ID of the EE_Message in the db if saved.  If the EE_Message
44
-     * is not saved to the db then its key will be an increment of "UNS" (i.e. UNS1, UNS2 etc.)
45
-     *
46
-     * @type EE_Message[]
47
-     */
48
-    protected $_cached_queue_items;
49
-
50
-    /**
51
-     * Tracks the number of unsaved queue items.
52
-     *
53
-     * @type int
54
-     */
55
-    protected $_unsaved_count = 0;
56
-
57
-    /**
58
-     * used to record if a do_messenger_hooks has already been called for a message type.  This prevents multiple
59
-     * hooks getting fired if users have setup their action/filter hooks to prevent duplicate calls.
60
-     *
61
-     * @type array
62
-     */
63
-    protected $_did_hook = array();
64
-
65
-
66
-    /**
67
-     * Constructor.
68
-     * Setup all the initial properties and load a EE_Message_Repository.
69
-     *
70
-     * @param \EE_Message_Repository $message_repository
71
-     */
72
-    public function __construct(EE_Message_Repository $message_repository)
73
-    {
74
-        $this->_batch_count        = apply_filters('FHEE__EE_Messages_Queue___batch_count', 50);
75
-        $this->_message_repository = $message_repository;
76
-    }
77
-
78
-
79
-    /**
80
-     * Add a EE_Message object to the queue
81
-     *
82
-     * @param EE_Message $message
83
-     * @param array      $data         This will be an array of data to attach to the object in the repository.  If the
84
-     *                                 object is persisted, this data will be saved on an extra_meta object related to
85
-     *                                 EE_Message.
86
-     * @param  bool      $preview      Whether this EE_Message represents a preview or not.
87
-     * @param  bool      $test_send    This indicates whether to do a test send instead of actual send. A test send will
88
-     *                                 use the messenger send method but typically is based on preview data.
89
-     * @return bool          Whether the message was successfully added to the repository or not.
90
-     */
91
-    public function add(EE_Message $message, $data = array(), $preview = false, $test_send = false)
92
-    {
93
-        $data['preview']   = $preview;
94
-        $data['test_send'] = $test_send;
95
-        return $this->_message_repository->add($message, $data);
96
-    }
97
-
98
-
99
-    /**
100
-     * Removes EE_Message from _queue that matches the given EE_Message if the pointer is on a matching EE_Message
101
-     *
102
-     * @param EE_Message $message The message to detach from the queue
103
-     * @param bool       $persist This flag indicates whether to attempt to delete the object from the db as well.
104
-     * @return bool
105
-     */
106
-    public function remove(EE_Message $message, $persist = false)
107
-    {
108
-        if ($persist && $this->_message_repository->current() !== $message) {
109
-            // get pointer on right message
110
-            if ($this->_message_repository->has($message)) {
111
-                $this->_message_repository->rewind();
112
-                while ($this->_message_repository->valid()) {
113
-                    if ($this->_message_repository->current() === $message) {
114
-                        break;
115
-                    }
116
-                    $this->_message_repository->next();
117
-                }
118
-            } else {
119
-                return false;
120
-            }
121
-        }
122
-        return $persist ? $this->_message_repository->delete() : $this->_message_repository->remove($message);
123
-    }
124
-
125
-
126
-    /**
127
-     * Persists all queued EE_Message objects to the db.
128
-     *
129
-     * @param bool $do_hooks_only       @see EE_Message_Repository::saveAll
130
-     * @return array @see EE_Messages_Repository::saveAll() for return values.
131
-     */
132
-    public function save($do_hooks_only = false)
133
-    {
134
-        return $this->_message_repository->saveAll($do_hooks_only);
135
-    }
136
-
137
-
138
-    /**
139
-     * @return EE_Message_Repository
140
-     */
141
-    public function get_message_repository()
142
-    {
143
-        return $this->_message_repository;
144
-    }
145
-
146
-
147
-    /**
148
-     * This does the following things:
149
-     * 1. Checks if there is a lock on generation (prevents race conditions).  If there is a lock then exits (return
150
-     * false).
151
-     * 2. If no lock, sets lock, then retrieves a batch of non-generated EE_Message objects and adds to queue
152
-     * 3. Returns bool.  True = batch ready.  False = no batch ready (or nothing available for generation).
153
-     * Note: Callers should make sure they release the lock otherwise batch generation will be prevented from
154
-     * continuing. The lock is on a transient that is set to expire after one hour as a fallback in case locks are not
155
-     * removed.
156
-     *
157
-     * @return bool  true if successfully retrieved batch, false no batch ready.
158
-     */
159
-    public function get_batch_to_generate()
160
-    {
161
-        if ($this->is_locked(EE_Messages_Queue::action_generating)) {
162
-            return false;
163
-        }
164
-
165
-        // lock batch generation to prevent race conditions.
166
-        $this->lock_queue(EE_Messages_Queue::action_generating);
167
-
168
-        $query_args = array(
169
-            // key 0 = where conditions
170
-            0          => array('STS_ID' => EEM_Message::status_incomplete),
171
-            'order_by' => $this->_get_priority_orderby(),
172
-            'limit'    => $this->_batch_count,
173
-        );
174
-        $messages   = EEM_Message::instance()->get_all($query_args);
175
-
176
-        if (! $messages) {
177
-            return false; // nothing to generate
178
-        }
179
-
180
-        foreach ($messages as $message) {
181
-            if ($message instanceof EE_Message) {
182
-                $data = $message->all_extra_meta_array();
183
-                $this->add($message, $data);
184
-            }
185
-        }
186
-        return true;
187
-    }
188
-
189
-
190
-    /**
191
-     * This does the following things:
192
-     * 1. Checks if there is a lock on sending (prevents race conditions).  If there is a lock then exits (return
193
-     * false).
194
-     * 2. Grabs the allowed number of messages to send for the rate_limit.  If cannot send any more messages, then
195
-     * return false.
196
-     * 2. If no lock, sets lock, then retrieves a batch of EE_Message objects, adds to queue and triggers execution.
197
-     * 3. On success or unsuccessful send, sets status appropriately.
198
-     * 4. Saves messages via the queue
199
-     * 5. Releases lock.
200
-     *
201
-     * @return bool  true on success, false if something preventing sending (i.e. lock set).  Note: true does not
202
-     *               necessarily mean that all messages were successfully sent.  It just means that this method
203
-     *               successfully completed. On true, client may want to call $this->count_STS_in_queue(
204
-     *               EEM_Message::status_failed ) to see if any failed EE_Message objects.  Each failed message object
205
-     *               will also have a saved error message on it to assist with notifying user.
206
-     */
207
-    public function get_to_send_batch_and_send()
208
-    {
209
-        $rate_limit = $this->get_rate_limit();
210
-        if ($rate_limit < 1
211
-            || $this->is_locked(EE_Messages_Queue::action_sending)) {
212
-            return false;
213
-        }
214
-
215
-        $this->lock_queue(EE_Messages_Queue::action_sending);
216
-
217
-        $batch = $this->_batch_count < $rate_limit ? $this->_batch_count : $rate_limit;
218
-
219
-        $query_args = array(
220
-            // key 0 = where conditions
221
-            0          => array('STS_ID' => array('IN', EEM_Message::instance()->stati_indicating_to_send())),
222
-            'order_by' => $this->_get_priority_orderby(),
223
-            'limit'    => $batch,
224
-        );
225
-
226
-        $messages_to_send = EEM_Message::instance()->get_all($query_args);
227
-
228
-
229
-        // any to send?
230
-        if (! $messages_to_send) {
231
-            $this->unlock_queue(EE_Messages_Queue::action_sending);
232
-            return false;
233
-        }
234
-
235
-        $queue_count = 0;
236
-
237
-        // add to queue.
238
-        foreach ($messages_to_send as $message) {
239
-            if ($message instanceof EE_Message) {
240
-                $queue_count++;
241
-                $this->add($message);
242
-            }
243
-        }
244
-
245
-        // send messages  (this also updates the rate limit)
246
-        $this->execute();
247
-
248
-        // release lock
249
-        $this->unlock_queue(EE_Messages_Queue::action_sending);
250
-        // update rate limit
251
-        $this->set_rate_limit($queue_count);
252
-        return true;
253
-    }
254
-
255
-
256
-    /**
257
-     * Locks the queue so that no other queues can call the "batch" methods.
258
-     *
259
-     * @param   string $type The type of queue being locked.
260
-     */
261
-    public function lock_queue($type = EE_Messages_Queue::action_generating)
262
-    {
263
-        update_option($this->_get_lock_key($type), $this->_get_lock_expiry($type));
264
-    }
265
-
266
-
267
-    /**
268
-     * Unlocks the queue so that batch methods can be used.
269
-     *
270
-     * @param   string $type The type of queue being unlocked.
271
-     */
272
-    public function unlock_queue($type = EE_Messages_Queue::action_generating)
273
-    {
274
-        delete_option($this->_get_lock_key($type));
275
-    }
276
-
277
-
278
-    /**
279
-     * Retrieve the key used for the lock transient.
280
-     *
281
-     * @param string $type The type of lock.
282
-     * @return string
283
-     */
284
-    protected function _get_lock_key($type = EE_Messages_Queue::action_generating)
285
-    {
286
-        return '_ee_lock_' . $type;
287
-    }
288
-
289
-
290
-    /**
291
-     * Retrieve the expiry time for the lock transient.
292
-     *
293
-     * @param string $type The type of lock
294
-     * @return int   time to expiry in seconds.
295
-     */
296
-    protected function _get_lock_expiry($type = EE_Messages_Queue::action_generating)
297
-    {
298
-        return time() + (int) apply_filters('FHEE__EE_Messages_Queue__lock_expiry', HOUR_IN_SECONDS, $type);
299
-    }
300
-
301
-
302
-    /**
303
-     * Returns the key used for rate limit transient.
304
-     *
305
-     * @return string
306
-     */
307
-    protected function _get_rate_limit_key()
308
-    {
309
-        return '_ee_rate_limit';
310
-    }
311
-
312
-
313
-    /**
314
-     * Returns the rate limit expiry time.
315
-     *
316
-     * @return int
317
-     */
318
-    protected function _get_rate_limit_expiry()
319
-    {
320
-        return time() + (int) apply_filters('FHEE__EE_Messages_Queue__rate_limit_expiry', HOUR_IN_SECONDS);
321
-    }
322
-
323
-
324
-    /**
325
-     * Returns the default rate limit for sending messages.
326
-     *
327
-     * @return int
328
-     */
329
-    protected function _default_rate_limit()
330
-    {
331
-        return (int) apply_filters('FHEE__EE_Messages_Queue___rate_limit', 200);
332
-    }
333
-
334
-
335
-    /**
336
-     * Return the orderby array for priority.
337
-     *
338
-     * @return array
339
-     */
340
-    protected function _get_priority_orderby()
341
-    {
342
-        return array(
343
-            'MSG_priority' => 'ASC',
344
-            'MSG_modified' => 'DESC',
345
-        );
346
-    }
347
-
348
-
349
-    /**
350
-     * Returns whether batch methods are "locked" or not, and if models an currently be used to query the database.
351
-     * Return true when batch methods should not be used; returns false when they can be.
352
-     *
353
-     * @param  string $type The type of lock being checked for.
354
-     * @return bool
355
-     */
356
-    public function is_locked($type = EE_Messages_Queue::action_generating)
357
-    {
358
-        if (! EE_Maintenance_Mode::instance()->models_can_query()) {
359
-            return true;
360
-        }
361
-        $lock = (int) get_option($this->_get_lock_key($type), 0);
362
-        /**
363
-         * This filters the default is_locked behaviour.
364
-         */
365
-        $is_locked = filter_var(
366
-            apply_filters(
367
-                'FHEE__EE_Messages_Queue__is_locked',
368
-                $lock > time(),
369
-                $this
370
-            ),
371
-            FILTER_VALIDATE_BOOLEAN
372
-        );
373
-
374
-        /**
375
-         * @see usage of this filter in EE_Messages_Queue::initiate_request_by_priority() method.
376
-         *            Also implemented here because messages processed on the same request should not have any locks applied.
377
-         */
378
-        if (apply_filters('FHEE__EE_Messages_Processor__initiate_request_by_priority__do_immediate_processing', false)
379
-            || EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request
380
-        ) {
381
-            $is_locked = false;
382
-        }
383
-
384
-
385
-        return $is_locked;
386
-    }
387
-
388
-
389
-    /**
390
-     * Retrieves the rate limit that may be cached as a transient.
391
-     * If the rate limit is not set, then this sets the default rate limit and expiry and returns it.
392
-     *
393
-     * @param bool $return_expiry  If true then return the expiry time not the rate_limit.
394
-     * @return int
395
-     */
396
-    protected function get_rate_limit($return_expiry = false)
397
-    {
398
-        $stored_rate_info = get_option($this->_get_rate_limit_key(), array());
399
-        $rate_limit = isset($stored_rate_info[0])
400
-            ? (int) $stored_rate_info[0]
401
-            : 0;
402
-        $expiry = isset($stored_rate_info[1])
403
-            ? (int) $stored_rate_info[1]
404
-            : 0;
405
-        // set the default for tracking?
406
-        if (empty($stored_rate_info) || time() > $expiry) {
407
-            $expiry = $this->_get_rate_limit_expiry();
408
-            $rate_limit = $this->_default_rate_limit();
409
-            update_option($this->_get_rate_limit_key(), array($rate_limit, $expiry));
410
-        }
411
-        return $return_expiry ? $expiry : $rate_limit;
412
-    }
413
-
414
-
415
-    /**
416
-     * This updates existing rate limit with the new limit which is the old minus the batch.
417
-     *
418
-     * @param int $batch_completed This sets the new rate limit based on the given batch that was completed.
419
-     */
420
-    protected function set_rate_limit($batch_completed)
421
-    {
422
-        // first get the most up to date rate limit (in case its expired and reset)
423
-        $rate_limit = $this->get_rate_limit();
424
-        $expiry = $this->get_rate_limit(true);
425
-        $new_limit  = $rate_limit - $batch_completed;
426
-        // updating the transient option directly to avoid resetting the expiry.
427
-
428
-        update_option($this->_get_rate_limit_key(), array($new_limit, $expiry));
429
-    }
430
-
431
-
432
-    /**
433
-     * This method checks the queue for ANY EE_Message objects with a priority matching the given priority passed in.
434
-     * If that exists, then we immediately initiate a non-blocking request to do the requested action type.
435
-     * Note: Keep in mind that there is the possibility that the request will not execute if there is already another
436
-     * request running on a queue for the given task.
437
-     *
438
-     * @param string $task     This indicates what type of request is going to be initiated.
439
-     * @param int    $priority This indicates the priority that triggers initiating the request.
440
-     */
441
-    public function initiate_request_by_priority($task = 'generate', $priority = EEM_Message::priority_high)
442
-    {
443
-        // determine what status is matched with the priority as part of the trigger conditions.
444
-        $status = $task == 'generate'
445
-            ? EEM_Message::status_incomplete
446
-            : EEM_Message::instance()->stati_indicating_to_send();
447
-        // always make sure we save because either this will get executed immediately on a separate request
448
-        // or remains in the queue for the regularly scheduled queue batch.
449
-        $this->save();
450
-        /**
451
-         * This filter/option allows users to override processing of messages on separate requests and instead have everything
452
-         * happen on the same request.  If this is utilized remember:
453
-         * - message priorities don't matter
454
-         * - existing unprocessed messages in the queue will not get processed unless manually triggered.
455
-         * - things will be perceived to take longer to happen for end users (i.e. registrations) because of the additional
456
-         *   processing happening on the same request.
457
-         * - any race condition protection (locks) are removed because they don't apply when things are processed on
458
-         *   the same request.
459
-         */
460
-        if (apply_filters('FHEE__EE_Messages_Processor__initiate_request_by_priority__do_immediate_processing', false)
461
-            || EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request
462
-        ) {
463
-            $messages_processor = EE_Registry::instance()->load_lib('Messages_Processor');
464
-            if ($messages_processor instanceof EE_Messages_Processor) {
465
-                return $messages_processor->process_immediately_from_queue($this);
466
-            }
467
-            // if we get here then that means the messages processor couldn't be loaded so messages will just remain
468
-            // queued for manual triggering by end user.
469
-        }
470
-
471
-        if ($this->_message_repository->count_by_priority_and_status($priority, $status)) {
472
-            EE_Messages_Scheduler::initiate_scheduled_non_blocking_request($task);
473
-        }
474
-    }
475
-
476
-
477
-    /**
478
-     *  Loops through the EE_Message objects in the _queue and calls the messenger send methods for each message.
479
-     *
480
-     * @param   bool     $save                    Used to indicate whether to save the message queue after sending
481
-     *                                            (default will save).
482
-     * @param   mixed    $sending_messenger       (optional) When the sending messenger is different than
483
-     *                                            what is on the EE_Message object in the queue.
484
-     *                                            For instance, showing the browser view of an email message,
485
-     *                                            or giving a pdf generated view of an html document.
486
-     *                                            This should be an instance of EE_messenger but if you call this
487
-     *                                            method
488
-     *                                            intending it to be a sending messenger but a valid one could not be
489
-     *                                            retrieved then send in an instance of EE_Error that contains the
490
-     *                                            related error message.
491
-     * @param   bool|int $by_priority             When set, this indicates that only messages
492
-     *                                            matching the given priority should be executed.
493
-     * @return int        Number of messages sent.  Note, 0 does not mean that no messages were processed.
494
-     *                                            Also, if the messenger is an request type messenger (or a preview),
495
-     *                                            its entirely possible that the messenger will exit before
496
-     */
497
-    public function execute($save = true, $sending_messenger = null, $by_priority = false)
498
-    {
499
-        $messages_sent   = 0;
500
-        $this->_did_hook = array();
501
-        $this->_message_repository->rewind();
502
-
503
-        while ($this->_message_repository->valid()) {
504
-            $error_messages = array();
505
-            /** @type EE_Message $message */
506
-            $message = $this->_message_repository->current();
507
-            // only process things that are queued for sending
508
-            if (! in_array($message->STS_ID(), EEM_Message::instance()->stati_indicating_to_send())) {
509
-                $this->_message_repository->next();
510
-                continue;
511
-            }
512
-            // if $by_priority is set and does not match then continue;
513
-            if ($by_priority && $by_priority != $message->priority()) {
514
-                $this->_message_repository->next();
515
-                continue;
516
-            }
517
-            // error checking
518
-            if (! $message->valid_messenger()) {
519
-                $error_messages[] = sprintf(
520
-                    __('The %s messenger is not active at time of sending.', 'event_espresso'),
521
-                    $message->messenger()
522
-                );
523
-            }
524
-            if (! $message->valid_message_type()) {
525
-                $error_messages[] = sprintf(
526
-                    __('The %s message type is not active at the time of sending.', 'event_espresso'),
527
-                    $message->message_type()
528
-                );
529
-            }
530
-            // if there was supposed to be a sending messenger for this message, but it was invalid/inactive,
531
-            // then it will instead be an EE_Error object, so let's check for that
532
-            if ($sending_messenger instanceof EE_Error) {
533
-                $error_messages[] = $sending_messenger->getMessage();
534
-            }
535
-            // if there are no errors, then let's process the message
536
-            if (empty($error_messages)) {
537
-                if ($save) {
538
-                    $message->set_messenger_is_executing();
539
-                }
540
-                if ($this->_process_message($message, $sending_messenger)) {
541
-                    $messages_sent++;
542
-                }
543
-            }
544
-            $this->_set_error_message($message, $error_messages);
545
-            // add modified time
546
-            $message->set_modified(time());
547
-            // we save each message after its processed to make sure its status persists in case PHP times-out or runs
548
-            // out of memory. @see https://events.codebasehq.com/projects/event-espresso/tickets/10281
549
-            if ($save) {
550
-                $message->save();
551
-            }
552
-
553
-            $this->_message_repository->next();
554
-        }
555
-        if ($save) {
556
-            $this->save(true);
557
-        }
558
-        return $messages_sent;
559
-    }
560
-
561
-
562
-    /**
563
-     * _process_message
564
-     *
565
-     * @param EE_Message $message
566
-     * @param mixed      $sending_messenger (optional)
567
-     * @return bool
568
-     */
569
-    protected function _process_message(EE_Message $message, $sending_messenger = null)
570
-    {
571
-        // these *should* have been validated in the execute() method above
572
-        $messenger    = $message->messenger_object();
573
-        $message_type = $message->message_type_object();
574
-        // do actions for sending messenger if it differs from generating messenger and swap values.
575
-        if ($sending_messenger instanceof EE_messenger
576
-            && $messenger instanceof EE_messenger
577
-            && $sending_messenger->name != $messenger->name
578
-        ) {
579
-            $messenger->do_secondary_messenger_hooks($sending_messenger->name);
580
-            $messenger = $sending_messenger;
581
-        }
582
-        // send using messenger, but double check objects
583
-        if ($messenger instanceof EE_messenger && $message_type instanceof EE_message_type) {
584
-            // set hook for message type (but only if not using another messenger to send).
585
-            if (! isset($this->_did_hook[ $message_type->name ])) {
586
-                $message_type->do_messenger_hooks($messenger);
587
-                $this->_did_hook[ $message_type->name ] = 1;
588
-            }
589
-            // if preview then use preview method
590
-            return $this->_message_repository->is_preview()
591
-                ? $this->_do_preview($message, $messenger, $message_type, $this->_message_repository->is_test_send())
592
-                : $this->_do_send($message, $messenger, $message_type);
593
-        }
594
-        return false;
595
-    }
596
-
597
-
598
-    /**
599
-     * The intention of this method is to count how many EE_Message objects
600
-     * are in the queue with a given status.
601
-     * Example usage:
602
-     * After a caller calls the "EE_Message_Queue::execute()" method, the caller can check if there were any failed
603
-     * sends by calling $queue->count_STS_in_queue( EEM_Message_Queue::status_failed ).
604
-     *
605
-     * @param array|string $status Stati to check for in queue
606
-     * @return int  Count of EE_Message's matching the given status.
607
-     */
608
-    public function count_STS_in_queue($status)
609
-    {
610
-        $count  = 0;
611
-        $status = is_array($status) ? $status : array($status);
612
-        $this->_message_repository->rewind();
613
-        foreach ($this->_message_repository as $message) {
614
-            if (in_array($message->STS_ID(), $status)) {
615
-                $count++;
616
-            }
617
-        }
618
-        return $count;
619
-    }
620
-
621
-
622
-    /**
623
-     * Executes the get_preview method on the provided messenger.
624
-     *
625
-     * @param EE_Message      $message
626
-     * @param EE_messenger    $messenger
627
-     * @param EE_message_type $message_type
628
-     * @param                 $test_send
629
-     * @return bool   true means all went well, false means, not so much.
630
-     */
631
-    protected function _do_preview(
632
-        EE_Message $message,
633
-        EE_messenger $messenger,
634
-        EE_message_type $message_type,
635
-        $test_send
636
-    ) {
637
-        if ($preview = $messenger->get_preview($message, $message_type, $test_send)) {
638
-            if (! $test_send) {
639
-                $message->set_content($preview);
640
-            }
641
-            $message->set_STS_ID(EEM_Message::status_sent);
642
-            return true;
643
-        } else {
644
-            $message->set_STS_ID(EEM_Message::status_failed);
645
-            return false;
646
-        }
647
-    }
648
-
649
-
650
-    /**
651
-     * Executes the send method on the provided messenger
652
-     * EE_Messengers are expected to:
653
-     * - return true if the send was successful.
654
-     * - return false if the send was unsuccessful but can be tried again.
655
-     * - throw an Exception if the send was unsuccessful and cannot be tried again.
656
-     *
657
-     * @param EE_Message      $message
658
-     * @param EE_messenger    $messenger
659
-     * @param EE_message_type $message_type
660
-     * @return bool true means all went well, false means, not so much.
661
-     */
662
-    protected function _do_send(EE_Message $message, EE_messenger $messenger, EE_message_type $message_type)
663
-    {
664
-        try {
665
-            if ($messenger->send_message($message, $message_type)) {
666
-                $message->set_STS_ID(EEM_Message::status_sent);
667
-                return true;
668
-            } else {
669
-                $message->set_STS_ID(EEM_Message::status_retry);
670
-                return false;
671
-            }
672
-        } catch (SendMessageException $e) {
673
-            $message->set_STS_ID(EEM_Message::status_failed);
674
-            $message->set_error_message($e->getMessage());
675
-            return false;
676
-        }
677
-    }
678
-
679
-
680
-    /**
681
-     * This sets any necessary error messages on the message object and its status to failed.
682
-     *
683
-     * @param EE_Message $message
684
-     * @param array      $error_messages the response from the messenger.
685
-     */
686
-    protected function _set_error_message(EE_Message $message, $error_messages)
687
-    {
688
-        $error_messages = (array) $error_messages;
689
-        if (in_array($message->STS_ID(), EEM_Message::instance()->stati_indicating_failed_sending())) {
690
-            $notices          = EE_Error::has_notices();
691
-            $error_messages[] = __(
692
-                'Messenger and Message Type were valid and active, but the messenger send method failed.',
693
-                'event_espresso'
694
-            );
695
-            if ($notices === 1) {
696
-                $notices           = EE_Error::get_vanilla_notices();
697
-                $notices['errors'] = isset($notices['errors']) ? $notices['errors'] : array();
698
-                $error_messages[]  = implode("\n", $notices['errors']);
699
-            }
700
-        }
701
-        if (count($error_messages) > 0) {
702
-            $msg = __('Message was not executed successfully.', 'event_espresso');
703
-            $msg = $msg . "\n" . implode("\n", $error_messages);
704
-            $message->set_error_message($msg);
705
-        }
706
-    }
17
+	/**
18
+	 * @type    string  reference for sending action
19
+	 */
20
+	const action_sending = 'sending';
21
+
22
+	/**
23
+	 * @type    string  reference for generation action
24
+	 */
25
+	const action_generating = 'generation';
26
+
27
+
28
+	/**
29
+	 * @type EE_Message_Repository $_message_repository
30
+	 */
31
+	protected $_message_repository;
32
+
33
+	/**
34
+	 * Sets the limit of how many messages are generated per process.
35
+	 *
36
+	 * @type int
37
+	 */
38
+	protected $_batch_count;
39
+
40
+
41
+	/**
42
+	 * This is an array of cached queue items being stored in this object.
43
+	 * The array keys will be the ID of the EE_Message in the db if saved.  If the EE_Message
44
+	 * is not saved to the db then its key will be an increment of "UNS" (i.e. UNS1, UNS2 etc.)
45
+	 *
46
+	 * @type EE_Message[]
47
+	 */
48
+	protected $_cached_queue_items;
49
+
50
+	/**
51
+	 * Tracks the number of unsaved queue items.
52
+	 *
53
+	 * @type int
54
+	 */
55
+	protected $_unsaved_count = 0;
56
+
57
+	/**
58
+	 * used to record if a do_messenger_hooks has already been called for a message type.  This prevents multiple
59
+	 * hooks getting fired if users have setup their action/filter hooks to prevent duplicate calls.
60
+	 *
61
+	 * @type array
62
+	 */
63
+	protected $_did_hook = array();
64
+
65
+
66
+	/**
67
+	 * Constructor.
68
+	 * Setup all the initial properties and load a EE_Message_Repository.
69
+	 *
70
+	 * @param \EE_Message_Repository $message_repository
71
+	 */
72
+	public function __construct(EE_Message_Repository $message_repository)
73
+	{
74
+		$this->_batch_count        = apply_filters('FHEE__EE_Messages_Queue___batch_count', 50);
75
+		$this->_message_repository = $message_repository;
76
+	}
77
+
78
+
79
+	/**
80
+	 * Add a EE_Message object to the queue
81
+	 *
82
+	 * @param EE_Message $message
83
+	 * @param array      $data         This will be an array of data to attach to the object in the repository.  If the
84
+	 *                                 object is persisted, this data will be saved on an extra_meta object related to
85
+	 *                                 EE_Message.
86
+	 * @param  bool      $preview      Whether this EE_Message represents a preview or not.
87
+	 * @param  bool      $test_send    This indicates whether to do a test send instead of actual send. A test send will
88
+	 *                                 use the messenger send method but typically is based on preview data.
89
+	 * @return bool          Whether the message was successfully added to the repository or not.
90
+	 */
91
+	public function add(EE_Message $message, $data = array(), $preview = false, $test_send = false)
92
+	{
93
+		$data['preview']   = $preview;
94
+		$data['test_send'] = $test_send;
95
+		return $this->_message_repository->add($message, $data);
96
+	}
97
+
98
+
99
+	/**
100
+	 * Removes EE_Message from _queue that matches the given EE_Message if the pointer is on a matching EE_Message
101
+	 *
102
+	 * @param EE_Message $message The message to detach from the queue
103
+	 * @param bool       $persist This flag indicates whether to attempt to delete the object from the db as well.
104
+	 * @return bool
105
+	 */
106
+	public function remove(EE_Message $message, $persist = false)
107
+	{
108
+		if ($persist && $this->_message_repository->current() !== $message) {
109
+			// get pointer on right message
110
+			if ($this->_message_repository->has($message)) {
111
+				$this->_message_repository->rewind();
112
+				while ($this->_message_repository->valid()) {
113
+					if ($this->_message_repository->current() === $message) {
114
+						break;
115
+					}
116
+					$this->_message_repository->next();
117
+				}
118
+			} else {
119
+				return false;
120
+			}
121
+		}
122
+		return $persist ? $this->_message_repository->delete() : $this->_message_repository->remove($message);
123
+	}
124
+
125
+
126
+	/**
127
+	 * Persists all queued EE_Message objects to the db.
128
+	 *
129
+	 * @param bool $do_hooks_only       @see EE_Message_Repository::saveAll
130
+	 * @return array @see EE_Messages_Repository::saveAll() for return values.
131
+	 */
132
+	public function save($do_hooks_only = false)
133
+	{
134
+		return $this->_message_repository->saveAll($do_hooks_only);
135
+	}
136
+
137
+
138
+	/**
139
+	 * @return EE_Message_Repository
140
+	 */
141
+	public function get_message_repository()
142
+	{
143
+		return $this->_message_repository;
144
+	}
145
+
146
+
147
+	/**
148
+	 * This does the following things:
149
+	 * 1. Checks if there is a lock on generation (prevents race conditions).  If there is a lock then exits (return
150
+	 * false).
151
+	 * 2. If no lock, sets lock, then retrieves a batch of non-generated EE_Message objects and adds to queue
152
+	 * 3. Returns bool.  True = batch ready.  False = no batch ready (or nothing available for generation).
153
+	 * Note: Callers should make sure they release the lock otherwise batch generation will be prevented from
154
+	 * continuing. The lock is on a transient that is set to expire after one hour as a fallback in case locks are not
155
+	 * removed.
156
+	 *
157
+	 * @return bool  true if successfully retrieved batch, false no batch ready.
158
+	 */
159
+	public function get_batch_to_generate()
160
+	{
161
+		if ($this->is_locked(EE_Messages_Queue::action_generating)) {
162
+			return false;
163
+		}
164
+
165
+		// lock batch generation to prevent race conditions.
166
+		$this->lock_queue(EE_Messages_Queue::action_generating);
167
+
168
+		$query_args = array(
169
+			// key 0 = where conditions
170
+			0          => array('STS_ID' => EEM_Message::status_incomplete),
171
+			'order_by' => $this->_get_priority_orderby(),
172
+			'limit'    => $this->_batch_count,
173
+		);
174
+		$messages   = EEM_Message::instance()->get_all($query_args);
175
+
176
+		if (! $messages) {
177
+			return false; // nothing to generate
178
+		}
179
+
180
+		foreach ($messages as $message) {
181
+			if ($message instanceof EE_Message) {
182
+				$data = $message->all_extra_meta_array();
183
+				$this->add($message, $data);
184
+			}
185
+		}
186
+		return true;
187
+	}
188
+
189
+
190
+	/**
191
+	 * This does the following things:
192
+	 * 1. Checks if there is a lock on sending (prevents race conditions).  If there is a lock then exits (return
193
+	 * false).
194
+	 * 2. Grabs the allowed number of messages to send for the rate_limit.  If cannot send any more messages, then
195
+	 * return false.
196
+	 * 2. If no lock, sets lock, then retrieves a batch of EE_Message objects, adds to queue and triggers execution.
197
+	 * 3. On success or unsuccessful send, sets status appropriately.
198
+	 * 4. Saves messages via the queue
199
+	 * 5. Releases lock.
200
+	 *
201
+	 * @return bool  true on success, false if something preventing sending (i.e. lock set).  Note: true does not
202
+	 *               necessarily mean that all messages were successfully sent.  It just means that this method
203
+	 *               successfully completed. On true, client may want to call $this->count_STS_in_queue(
204
+	 *               EEM_Message::status_failed ) to see if any failed EE_Message objects.  Each failed message object
205
+	 *               will also have a saved error message on it to assist with notifying user.
206
+	 */
207
+	public function get_to_send_batch_and_send()
208
+	{
209
+		$rate_limit = $this->get_rate_limit();
210
+		if ($rate_limit < 1
211
+			|| $this->is_locked(EE_Messages_Queue::action_sending)) {
212
+			return false;
213
+		}
214
+
215
+		$this->lock_queue(EE_Messages_Queue::action_sending);
216
+
217
+		$batch = $this->_batch_count < $rate_limit ? $this->_batch_count : $rate_limit;
218
+
219
+		$query_args = array(
220
+			// key 0 = where conditions
221
+			0          => array('STS_ID' => array('IN', EEM_Message::instance()->stati_indicating_to_send())),
222
+			'order_by' => $this->_get_priority_orderby(),
223
+			'limit'    => $batch,
224
+		);
225
+
226
+		$messages_to_send = EEM_Message::instance()->get_all($query_args);
227
+
228
+
229
+		// any to send?
230
+		if (! $messages_to_send) {
231
+			$this->unlock_queue(EE_Messages_Queue::action_sending);
232
+			return false;
233
+		}
234
+
235
+		$queue_count = 0;
236
+
237
+		// add to queue.
238
+		foreach ($messages_to_send as $message) {
239
+			if ($message instanceof EE_Message) {
240
+				$queue_count++;
241
+				$this->add($message);
242
+			}
243
+		}
244
+
245
+		// send messages  (this also updates the rate limit)
246
+		$this->execute();
247
+
248
+		// release lock
249
+		$this->unlock_queue(EE_Messages_Queue::action_sending);
250
+		// update rate limit
251
+		$this->set_rate_limit($queue_count);
252
+		return true;
253
+	}
254
+
255
+
256
+	/**
257
+	 * Locks the queue so that no other queues can call the "batch" methods.
258
+	 *
259
+	 * @param   string $type The type of queue being locked.
260
+	 */
261
+	public function lock_queue($type = EE_Messages_Queue::action_generating)
262
+	{
263
+		update_option($this->_get_lock_key($type), $this->_get_lock_expiry($type));
264
+	}
265
+
266
+
267
+	/**
268
+	 * Unlocks the queue so that batch methods can be used.
269
+	 *
270
+	 * @param   string $type The type of queue being unlocked.
271
+	 */
272
+	public function unlock_queue($type = EE_Messages_Queue::action_generating)
273
+	{
274
+		delete_option($this->_get_lock_key($type));
275
+	}
276
+
277
+
278
+	/**
279
+	 * Retrieve the key used for the lock transient.
280
+	 *
281
+	 * @param string $type The type of lock.
282
+	 * @return string
283
+	 */
284
+	protected function _get_lock_key($type = EE_Messages_Queue::action_generating)
285
+	{
286
+		return '_ee_lock_' . $type;
287
+	}
288
+
289
+
290
+	/**
291
+	 * Retrieve the expiry time for the lock transient.
292
+	 *
293
+	 * @param string $type The type of lock
294
+	 * @return int   time to expiry in seconds.
295
+	 */
296
+	protected function _get_lock_expiry($type = EE_Messages_Queue::action_generating)
297
+	{
298
+		return time() + (int) apply_filters('FHEE__EE_Messages_Queue__lock_expiry', HOUR_IN_SECONDS, $type);
299
+	}
300
+
301
+
302
+	/**
303
+	 * Returns the key used for rate limit transient.
304
+	 *
305
+	 * @return string
306
+	 */
307
+	protected function _get_rate_limit_key()
308
+	{
309
+		return '_ee_rate_limit';
310
+	}
311
+
312
+
313
+	/**
314
+	 * Returns the rate limit expiry time.
315
+	 *
316
+	 * @return int
317
+	 */
318
+	protected function _get_rate_limit_expiry()
319
+	{
320
+		return time() + (int) apply_filters('FHEE__EE_Messages_Queue__rate_limit_expiry', HOUR_IN_SECONDS);
321
+	}
322
+
323
+
324
+	/**
325
+	 * Returns the default rate limit for sending messages.
326
+	 *
327
+	 * @return int
328
+	 */
329
+	protected function _default_rate_limit()
330
+	{
331
+		return (int) apply_filters('FHEE__EE_Messages_Queue___rate_limit', 200);
332
+	}
333
+
334
+
335
+	/**
336
+	 * Return the orderby array for priority.
337
+	 *
338
+	 * @return array
339
+	 */
340
+	protected function _get_priority_orderby()
341
+	{
342
+		return array(
343
+			'MSG_priority' => 'ASC',
344
+			'MSG_modified' => 'DESC',
345
+		);
346
+	}
347
+
348
+
349
+	/**
350
+	 * Returns whether batch methods are "locked" or not, and if models an currently be used to query the database.
351
+	 * Return true when batch methods should not be used; returns false when they can be.
352
+	 *
353
+	 * @param  string $type The type of lock being checked for.
354
+	 * @return bool
355
+	 */
356
+	public function is_locked($type = EE_Messages_Queue::action_generating)
357
+	{
358
+		if (! EE_Maintenance_Mode::instance()->models_can_query()) {
359
+			return true;
360
+		}
361
+		$lock = (int) get_option($this->_get_lock_key($type), 0);
362
+		/**
363
+		 * This filters the default is_locked behaviour.
364
+		 */
365
+		$is_locked = filter_var(
366
+			apply_filters(
367
+				'FHEE__EE_Messages_Queue__is_locked',
368
+				$lock > time(),
369
+				$this
370
+			),
371
+			FILTER_VALIDATE_BOOLEAN
372
+		);
373
+
374
+		/**
375
+		 * @see usage of this filter in EE_Messages_Queue::initiate_request_by_priority() method.
376
+		 *            Also implemented here because messages processed on the same request should not have any locks applied.
377
+		 */
378
+		if (apply_filters('FHEE__EE_Messages_Processor__initiate_request_by_priority__do_immediate_processing', false)
379
+			|| EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request
380
+		) {
381
+			$is_locked = false;
382
+		}
383
+
384
+
385
+		return $is_locked;
386
+	}
387
+
388
+
389
+	/**
390
+	 * Retrieves the rate limit that may be cached as a transient.
391
+	 * If the rate limit is not set, then this sets the default rate limit and expiry and returns it.
392
+	 *
393
+	 * @param bool $return_expiry  If true then return the expiry time not the rate_limit.
394
+	 * @return int
395
+	 */
396
+	protected function get_rate_limit($return_expiry = false)
397
+	{
398
+		$stored_rate_info = get_option($this->_get_rate_limit_key(), array());
399
+		$rate_limit = isset($stored_rate_info[0])
400
+			? (int) $stored_rate_info[0]
401
+			: 0;
402
+		$expiry = isset($stored_rate_info[1])
403
+			? (int) $stored_rate_info[1]
404
+			: 0;
405
+		// set the default for tracking?
406
+		if (empty($stored_rate_info) || time() > $expiry) {
407
+			$expiry = $this->_get_rate_limit_expiry();
408
+			$rate_limit = $this->_default_rate_limit();
409
+			update_option($this->_get_rate_limit_key(), array($rate_limit, $expiry));
410
+		}
411
+		return $return_expiry ? $expiry : $rate_limit;
412
+	}
413
+
414
+
415
+	/**
416
+	 * This updates existing rate limit with the new limit which is the old minus the batch.
417
+	 *
418
+	 * @param int $batch_completed This sets the new rate limit based on the given batch that was completed.
419
+	 */
420
+	protected function set_rate_limit($batch_completed)
421
+	{
422
+		// first get the most up to date rate limit (in case its expired and reset)
423
+		$rate_limit = $this->get_rate_limit();
424
+		$expiry = $this->get_rate_limit(true);
425
+		$new_limit  = $rate_limit - $batch_completed;
426
+		// updating the transient option directly to avoid resetting the expiry.
427
+
428
+		update_option($this->_get_rate_limit_key(), array($new_limit, $expiry));
429
+	}
430
+
431
+
432
+	/**
433
+	 * This method checks the queue for ANY EE_Message objects with a priority matching the given priority passed in.
434
+	 * If that exists, then we immediately initiate a non-blocking request to do the requested action type.
435
+	 * Note: Keep in mind that there is the possibility that the request will not execute if there is already another
436
+	 * request running on a queue for the given task.
437
+	 *
438
+	 * @param string $task     This indicates what type of request is going to be initiated.
439
+	 * @param int    $priority This indicates the priority that triggers initiating the request.
440
+	 */
441
+	public function initiate_request_by_priority($task = 'generate', $priority = EEM_Message::priority_high)
442
+	{
443
+		// determine what status is matched with the priority as part of the trigger conditions.
444
+		$status = $task == 'generate'
445
+			? EEM_Message::status_incomplete
446
+			: EEM_Message::instance()->stati_indicating_to_send();
447
+		// always make sure we save because either this will get executed immediately on a separate request
448
+		// or remains in the queue for the regularly scheduled queue batch.
449
+		$this->save();
450
+		/**
451
+		 * This filter/option allows users to override processing of messages on separate requests and instead have everything
452
+		 * happen on the same request.  If this is utilized remember:
453
+		 * - message priorities don't matter
454
+		 * - existing unprocessed messages in the queue will not get processed unless manually triggered.
455
+		 * - things will be perceived to take longer to happen for end users (i.e. registrations) because of the additional
456
+		 *   processing happening on the same request.
457
+		 * - any race condition protection (locks) are removed because they don't apply when things are processed on
458
+		 *   the same request.
459
+		 */
460
+		if (apply_filters('FHEE__EE_Messages_Processor__initiate_request_by_priority__do_immediate_processing', false)
461
+			|| EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request
462
+		) {
463
+			$messages_processor = EE_Registry::instance()->load_lib('Messages_Processor');
464
+			if ($messages_processor instanceof EE_Messages_Processor) {
465
+				return $messages_processor->process_immediately_from_queue($this);
466
+			}
467
+			// if we get here then that means the messages processor couldn't be loaded so messages will just remain
468
+			// queued for manual triggering by end user.
469
+		}
470
+
471
+		if ($this->_message_repository->count_by_priority_and_status($priority, $status)) {
472
+			EE_Messages_Scheduler::initiate_scheduled_non_blocking_request($task);
473
+		}
474
+	}
475
+
476
+
477
+	/**
478
+	 *  Loops through the EE_Message objects in the _queue and calls the messenger send methods for each message.
479
+	 *
480
+	 * @param   bool     $save                    Used to indicate whether to save the message queue after sending
481
+	 *                                            (default will save).
482
+	 * @param   mixed    $sending_messenger       (optional) When the sending messenger is different than
483
+	 *                                            what is on the EE_Message object in the queue.
484
+	 *                                            For instance, showing the browser view of an email message,
485
+	 *                                            or giving a pdf generated view of an html document.
486
+	 *                                            This should be an instance of EE_messenger but if you call this
487
+	 *                                            method
488
+	 *                                            intending it to be a sending messenger but a valid one could not be
489
+	 *                                            retrieved then send in an instance of EE_Error that contains the
490
+	 *                                            related error message.
491
+	 * @param   bool|int $by_priority             When set, this indicates that only messages
492
+	 *                                            matching the given priority should be executed.
493
+	 * @return int        Number of messages sent.  Note, 0 does not mean that no messages were processed.
494
+	 *                                            Also, if the messenger is an request type messenger (or a preview),
495
+	 *                                            its entirely possible that the messenger will exit before
496
+	 */
497
+	public function execute($save = true, $sending_messenger = null, $by_priority = false)
498
+	{
499
+		$messages_sent   = 0;
500
+		$this->_did_hook = array();
501
+		$this->_message_repository->rewind();
502
+
503
+		while ($this->_message_repository->valid()) {
504
+			$error_messages = array();
505
+			/** @type EE_Message $message */
506
+			$message = $this->_message_repository->current();
507
+			// only process things that are queued for sending
508
+			if (! in_array($message->STS_ID(), EEM_Message::instance()->stati_indicating_to_send())) {
509
+				$this->_message_repository->next();
510
+				continue;
511
+			}
512
+			// if $by_priority is set and does not match then continue;
513
+			if ($by_priority && $by_priority != $message->priority()) {
514
+				$this->_message_repository->next();
515
+				continue;
516
+			}
517
+			// error checking
518
+			if (! $message->valid_messenger()) {
519
+				$error_messages[] = sprintf(
520
+					__('The %s messenger is not active at time of sending.', 'event_espresso'),
521
+					$message->messenger()
522
+				);
523
+			}
524
+			if (! $message->valid_message_type()) {
525
+				$error_messages[] = sprintf(
526
+					__('The %s message type is not active at the time of sending.', 'event_espresso'),
527
+					$message->message_type()
528
+				);
529
+			}
530
+			// if there was supposed to be a sending messenger for this message, but it was invalid/inactive,
531
+			// then it will instead be an EE_Error object, so let's check for that
532
+			if ($sending_messenger instanceof EE_Error) {
533
+				$error_messages[] = $sending_messenger->getMessage();
534
+			}
535
+			// if there are no errors, then let's process the message
536
+			if (empty($error_messages)) {
537
+				if ($save) {
538
+					$message->set_messenger_is_executing();
539
+				}
540
+				if ($this->_process_message($message, $sending_messenger)) {
541
+					$messages_sent++;
542
+				}
543
+			}
544
+			$this->_set_error_message($message, $error_messages);
545
+			// add modified time
546
+			$message->set_modified(time());
547
+			// we save each message after its processed to make sure its status persists in case PHP times-out or runs
548
+			// out of memory. @see https://events.codebasehq.com/projects/event-espresso/tickets/10281
549
+			if ($save) {
550
+				$message->save();
551
+			}
552
+
553
+			$this->_message_repository->next();
554
+		}
555
+		if ($save) {
556
+			$this->save(true);
557
+		}
558
+		return $messages_sent;
559
+	}
560
+
561
+
562
+	/**
563
+	 * _process_message
564
+	 *
565
+	 * @param EE_Message $message
566
+	 * @param mixed      $sending_messenger (optional)
567
+	 * @return bool
568
+	 */
569
+	protected function _process_message(EE_Message $message, $sending_messenger = null)
570
+	{
571
+		// these *should* have been validated in the execute() method above
572
+		$messenger    = $message->messenger_object();
573
+		$message_type = $message->message_type_object();
574
+		// do actions for sending messenger if it differs from generating messenger and swap values.
575
+		if ($sending_messenger instanceof EE_messenger
576
+			&& $messenger instanceof EE_messenger
577
+			&& $sending_messenger->name != $messenger->name
578
+		) {
579
+			$messenger->do_secondary_messenger_hooks($sending_messenger->name);
580
+			$messenger = $sending_messenger;
581
+		}
582
+		// send using messenger, but double check objects
583
+		if ($messenger instanceof EE_messenger && $message_type instanceof EE_message_type) {
584
+			// set hook for message type (but only if not using another messenger to send).
585
+			if (! isset($this->_did_hook[ $message_type->name ])) {
586
+				$message_type->do_messenger_hooks($messenger);
587
+				$this->_did_hook[ $message_type->name ] = 1;
588
+			}
589
+			// if preview then use preview method
590
+			return $this->_message_repository->is_preview()
591
+				? $this->_do_preview($message, $messenger, $message_type, $this->_message_repository->is_test_send())
592
+				: $this->_do_send($message, $messenger, $message_type);
593
+		}
594
+		return false;
595
+	}
596
+
597
+
598
+	/**
599
+	 * The intention of this method is to count how many EE_Message objects
600
+	 * are in the queue with a given status.
601
+	 * Example usage:
602
+	 * After a caller calls the "EE_Message_Queue::execute()" method, the caller can check if there were any failed
603
+	 * sends by calling $queue->count_STS_in_queue( EEM_Message_Queue::status_failed ).
604
+	 *
605
+	 * @param array|string $status Stati to check for in queue
606
+	 * @return int  Count of EE_Message's matching the given status.
607
+	 */
608
+	public function count_STS_in_queue($status)
609
+	{
610
+		$count  = 0;
611
+		$status = is_array($status) ? $status : array($status);
612
+		$this->_message_repository->rewind();
613
+		foreach ($this->_message_repository as $message) {
614
+			if (in_array($message->STS_ID(), $status)) {
615
+				$count++;
616
+			}
617
+		}
618
+		return $count;
619
+	}
620
+
621
+
622
+	/**
623
+	 * Executes the get_preview method on the provided messenger.
624
+	 *
625
+	 * @param EE_Message      $message
626
+	 * @param EE_messenger    $messenger
627
+	 * @param EE_message_type $message_type
628
+	 * @param                 $test_send
629
+	 * @return bool   true means all went well, false means, not so much.
630
+	 */
631
+	protected function _do_preview(
632
+		EE_Message $message,
633
+		EE_messenger $messenger,
634
+		EE_message_type $message_type,
635
+		$test_send
636
+	) {
637
+		if ($preview = $messenger->get_preview($message, $message_type, $test_send)) {
638
+			if (! $test_send) {
639
+				$message->set_content($preview);
640
+			}
641
+			$message->set_STS_ID(EEM_Message::status_sent);
642
+			return true;
643
+		} else {
644
+			$message->set_STS_ID(EEM_Message::status_failed);
645
+			return false;
646
+		}
647
+	}
648
+
649
+
650
+	/**
651
+	 * Executes the send method on the provided messenger
652
+	 * EE_Messengers are expected to:
653
+	 * - return true if the send was successful.
654
+	 * - return false if the send was unsuccessful but can be tried again.
655
+	 * - throw an Exception if the send was unsuccessful and cannot be tried again.
656
+	 *
657
+	 * @param EE_Message      $message
658
+	 * @param EE_messenger    $messenger
659
+	 * @param EE_message_type $message_type
660
+	 * @return bool true means all went well, false means, not so much.
661
+	 */
662
+	protected function _do_send(EE_Message $message, EE_messenger $messenger, EE_message_type $message_type)
663
+	{
664
+		try {
665
+			if ($messenger->send_message($message, $message_type)) {
666
+				$message->set_STS_ID(EEM_Message::status_sent);
667
+				return true;
668
+			} else {
669
+				$message->set_STS_ID(EEM_Message::status_retry);
670
+				return false;
671
+			}
672
+		} catch (SendMessageException $e) {
673
+			$message->set_STS_ID(EEM_Message::status_failed);
674
+			$message->set_error_message($e->getMessage());
675
+			return false;
676
+		}
677
+	}
678
+
679
+
680
+	/**
681
+	 * This sets any necessary error messages on the message object and its status to failed.
682
+	 *
683
+	 * @param EE_Message $message
684
+	 * @param array      $error_messages the response from the messenger.
685
+	 */
686
+	protected function _set_error_message(EE_Message $message, $error_messages)
687
+	{
688
+		$error_messages = (array) $error_messages;
689
+		if (in_array($message->STS_ID(), EEM_Message::instance()->stati_indicating_failed_sending())) {
690
+			$notices          = EE_Error::has_notices();
691
+			$error_messages[] = __(
692
+				'Messenger and Message Type were valid and active, but the messenger send method failed.',
693
+				'event_espresso'
694
+			);
695
+			if ($notices === 1) {
696
+				$notices           = EE_Error::get_vanilla_notices();
697
+				$notices['errors'] = isset($notices['errors']) ? $notices['errors'] : array();
698
+				$error_messages[]  = implode("\n", $notices['errors']);
699
+			}
700
+		}
701
+		if (count($error_messages) > 0) {
702
+			$msg = __('Message was not executed successfully.', 'event_espresso');
703
+			$msg = $msg . "\n" . implode("\n", $error_messages);
704
+			$message->set_error_message($msg);
705
+		}
706
+	}
707 707
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -171,9 +171,9 @@  discard block
 block discarded – undo
171 171
             'order_by' => $this->_get_priority_orderby(),
172 172
             'limit'    => $this->_batch_count,
173 173
         );
174
-        $messages   = EEM_Message::instance()->get_all($query_args);
174
+        $messages = EEM_Message::instance()->get_all($query_args);
175 175
 
176
-        if (! $messages) {
176
+        if ( ! $messages) {
177 177
             return false; // nothing to generate
178 178
         }
179 179
 
@@ -227,7 +227,7 @@  discard block
 block discarded – undo
227 227
 
228 228
 
229 229
         // any to send?
230
-        if (! $messages_to_send) {
230
+        if ( ! $messages_to_send) {
231 231
             $this->unlock_queue(EE_Messages_Queue::action_sending);
232 232
             return false;
233 233
         }
@@ -283,7 +283,7 @@  discard block
 block discarded – undo
283 283
      */
284 284
     protected function _get_lock_key($type = EE_Messages_Queue::action_generating)
285 285
     {
286
-        return '_ee_lock_' . $type;
286
+        return '_ee_lock_'.$type;
287 287
     }
288 288
 
289 289
 
@@ -355,7 +355,7 @@  discard block
 block discarded – undo
355 355
      */
356 356
     public function is_locked($type = EE_Messages_Queue::action_generating)
357 357
     {
358
-        if (! EE_Maintenance_Mode::instance()->models_can_query()) {
358
+        if ( ! EE_Maintenance_Mode::instance()->models_can_query()) {
359 359
             return true;
360 360
         }
361 361
         $lock = (int) get_option($this->_get_lock_key($type), 0);
@@ -505,7 +505,7 @@  discard block
 block discarded – undo
505 505
             /** @type EE_Message $message */
506 506
             $message = $this->_message_repository->current();
507 507
             // only process things that are queued for sending
508
-            if (! in_array($message->STS_ID(), EEM_Message::instance()->stati_indicating_to_send())) {
508
+            if ( ! in_array($message->STS_ID(), EEM_Message::instance()->stati_indicating_to_send())) {
509 509
                 $this->_message_repository->next();
510 510
                 continue;
511 511
             }
@@ -515,13 +515,13 @@  discard block
 block discarded – undo
515 515
                 continue;
516 516
             }
517 517
             // error checking
518
-            if (! $message->valid_messenger()) {
518
+            if ( ! $message->valid_messenger()) {
519 519
                 $error_messages[] = sprintf(
520 520
                     __('The %s messenger is not active at time of sending.', 'event_espresso'),
521 521
                     $message->messenger()
522 522
                 );
523 523
             }
524
-            if (! $message->valid_message_type()) {
524
+            if ( ! $message->valid_message_type()) {
525 525
                 $error_messages[] = sprintf(
526 526
                     __('The %s message type is not active at the time of sending.', 'event_espresso'),
527 527
                     $message->message_type()
@@ -582,9 +582,9 @@  discard block
 block discarded – undo
582 582
         // send using messenger, but double check objects
583 583
         if ($messenger instanceof EE_messenger && $message_type instanceof EE_message_type) {
584 584
             // set hook for message type (but only if not using another messenger to send).
585
-            if (! isset($this->_did_hook[ $message_type->name ])) {
585
+            if ( ! isset($this->_did_hook[$message_type->name])) {
586 586
                 $message_type->do_messenger_hooks($messenger);
587
-                $this->_did_hook[ $message_type->name ] = 1;
587
+                $this->_did_hook[$message_type->name] = 1;
588 588
             }
589 589
             // if preview then use preview method
590 590
             return $this->_message_repository->is_preview()
@@ -635,7 +635,7 @@  discard block
 block discarded – undo
635 635
         $test_send
636 636
     ) {
637 637
         if ($preview = $messenger->get_preview($message, $message_type, $test_send)) {
638
-            if (! $test_send) {
638
+            if ( ! $test_send) {
639 639
                 $message->set_content($preview);
640 640
             }
641 641
             $message->set_STS_ID(EEM_Message::status_sent);
@@ -700,7 +700,7 @@  discard block
 block discarded – undo
700 700
         }
701 701
         if (count($error_messages) > 0) {
702 702
             $msg = __('Message was not executed successfully.', 'event_espresso');
703
-            $msg = $msg . "\n" . implode("\n", $error_messages);
703
+            $msg = $msg."\n".implode("\n", $error_messages);
704 704
             $message->set_error_message($msg);
705 705
         }
706 706
     }
Please login to merge, or discard this patch.
payment_methods/Paypal_Express/EEG_Paypal_Express.gateway.php 2 patches
Indentation   +666 added lines, -666 removed lines patch added patch discarded remove patch
@@ -11,674 +11,674 @@
 block discarded – undo
11 11
  */
12 12
 // Quickfix to address https://events.codebasehq.com/projects/event-espresso/tickets/11089 ASAP
13 13
 if (! function_exists('mb_strcut')) {
14
-    /**
15
-     * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
16
-     * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
17
-     * @param $string
18
-     * @param $start
19
-     * @param $length
20
-     * @return bool|string
21
-     */
22
-    function mb_strcut($string, $start, $length = null)
23
-    {
24
-        return mb_substr($string, $start, $length);
25
-    }
14
+	/**
15
+	 * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
16
+	 * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
17
+	 * @param $string
18
+	 * @param $start
19
+	 * @param $length
20
+	 * @return bool|string
21
+	 */
22
+	function mb_strcut($string, $start, $length = null)
23
+	{
24
+		return mb_substr($string, $start, $length);
25
+	}
26 26
 }
27 27
 class EEG_Paypal_Express extends EE_Offsite_Gateway
28 28
 {
29 29
 
30
-    /**
31
-     * Merchant API Username.
32
-     *
33
-     * @var string
34
-     */
35
-    protected $_api_username;
36
-
37
-    /**
38
-     * Merchant API Password.
39
-     *
40
-     * @var string
41
-     */
42
-    protected $_api_password;
43
-
44
-    /**
45
-     * API Signature.
46
-     *
47
-     * @var string
48
-     */
49
-    protected $_api_signature;
50
-
51
-    /**
52
-     * Request Shipping address on PP checkout page.
53
-     *
54
-     * @var string
55
-     */
56
-    protected $_request_shipping_addr;
57
-
58
-    /**
59
-     * Business/personal logo.
60
-     *
61
-     * @var string
62
-     */
63
-    protected $_image_url;
64
-
65
-    /**
66
-     * gateway URL variable
67
-     *
68
-     * @var string
69
-     */
70
-    protected $_base_gateway_url = '';
71
-
72
-
73
-
74
-    /**
75
-     * EEG_Paypal_Express constructor.
76
-     */
77
-    public function __construct()
78
-    {
79
-        $this->_currencies_supported = array(
80
-            'USD',
81
-            'AUD',
82
-            'BRL',
83
-            'CAD',
84
-            'CZK',
85
-            'DKK',
86
-            'EUR',
87
-            'HKD',
88
-            'HUF',
89
-            'ILS',
90
-            'JPY',
91
-            'MYR',
92
-            'MXN',
93
-            'NOK',
94
-            'NZD',
95
-            'PHP',
96
-            'PLN',
97
-            'GBP',
98
-            'RUB',
99
-            'SGD',
100
-            'SEK',
101
-            'CHF',
102
-            'TWD',
103
-            'THB',
104
-            'TRY',
105
-            'INR',
106
-        );
107
-        parent::__construct();
108
-    }
109
-
110
-
111
-
112
-    /**
113
-     * Sets the gateway URL variable based on whether debug mode is enabled or not.
114
-     *
115
-     * @param array $settings_array
116
-     */
117
-    public function set_settings($settings_array)
118
-    {
119
-        parent::set_settings($settings_array);
120
-        // Redirect URL.
121
-        $this->_base_gateway_url = $this->_debug_mode
122
-            ? 'https://api-3t.sandbox.paypal.com/nvp'
123
-            : 'https://api-3t.paypal.com/nvp';
124
-    }
125
-
126
-
127
-
128
-    /**
129
-     * @param EEI_Payment $payment
130
-     * @param array       $billing_info
131
-     * @param string      $return_url
132
-     * @param string      $notify_url
133
-     * @param string      $cancel_url
134
-     * @return \EE_Payment|\EEI_Payment
135
-     * @throws \EE_Error
136
-     */
137
-    public function set_redirection_info(
138
-        $payment,
139
-        $billing_info = array(),
140
-        $return_url = null,
141
-        $notify_url = null,
142
-        $cancel_url = null
143
-    ) {
144
-        if (! $payment instanceof EEI_Payment) {
145
-            $payment->set_gateway_response(
146
-                esc_html__(
147
-                    'Error. No associated payment was found.',
148
-                    'event_espresso'
149
-                )
150
-            );
151
-            $payment->set_status($this->_pay_model->failed_status());
152
-            return $payment;
153
-        }
154
-        $transaction = $payment->transaction();
155
-        if (! $transaction instanceof EEI_Transaction) {
156
-            $payment->set_gateway_response(
157
-                esc_html__(
158
-                    'Could not process this payment because it has no associated transaction.',
159
-                    'event_espresso'
160
-                )
161
-            );
162
-            $payment->set_status($this->_pay_model->failed_status());
163
-            return $payment;
164
-        }
165
-        $gateway_formatter = $this->_get_gateway_formatter();
166
-        $order_description = mb_strcut($gateway_formatter->formatOrderDescription($payment), 0, 127);
167
-        $primary_registration = $transaction->primary_registration();
168
-        $primary_attendee = $primary_registration instanceof EE_Registration
169
-            ? $primary_registration->attendee()
170
-            : false;
171
-        $locale = explode('-', get_bloginfo('language'));
172
-        // Gather request parameters.
173
-        $token_request_dtls = array(
174
-            'METHOD'                         => 'SetExpressCheckout',
175
-            'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
176
-            'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
177
-            'PAYMENTREQUEST_0_DESC'          => $order_description,
178
-            'RETURNURL'                      => $return_url,
179
-            'CANCELURL'                      => $cancel_url,
180
-            'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
181
-            // Buyer does not need to create a PayPal account to check out.
182
-            // This is referred to as PayPal Account Optional.
183
-            'SOLUTIONTYPE'                   => 'Sole',
184
-            // Locale of the pages displayed by PayPal during Express Checkout.
185
-            'LOCALECODE'                     => $locale[1]
186
-        );
187
-        // Show itemized list.
188
-        $itemized_list = $this->itemize_list($payment, $transaction);
189
-        $token_request_dtls = array_merge($token_request_dtls, $itemized_list);
190
-        // Automatically filling out shipping and contact information.
191
-        if ($this->_request_shipping_addr && $primary_attendee instanceof EEI_Attendee) {
192
-            // If you do not pass the shipping address, PayPal obtains it from the buyer's account profile.
193
-            $token_request_dtls['NOSHIPPING'] = '2';
194
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET'] = $primary_attendee->address();
195
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET2'] = $primary_attendee->address2();
196
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOCITY'] = $primary_attendee->city();
197
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTATE'] = $primary_attendee->state_abbrev();
198
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] = $primary_attendee->country_ID();
199
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
200
-            $token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
201
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
202
-        } elseif (! $this->_request_shipping_addr) {
203
-            // Do not request shipping details on the PP Checkout page.
204
-            $token_request_dtls['NOSHIPPING'] = '1';
205
-            $token_request_dtls['REQCONFIRMSHIPPING'] = '0';
206
-        }
207
-        // Used a business/personal logo on the PayPal page.
208
-        if (! empty($this->_image_url)) {
209
-            $token_request_dtls['LOGOIMG'] = $this->_image_url;
210
-        }
211
-        $token_request_dtls = apply_filters(
212
-            'FHEE__EEG_Paypal_Express__set_redirection_info__arguments',
213
-            $token_request_dtls,
214
-            $this
215
-        );
216
-        // Request PayPal token.
217
-        $token_request_response = $this->_ppExpress_request($token_request_dtls, 'Payment Token', $payment);
218
-        $token_rstatus = $this->_ppExpress_check_response($token_request_response);
219
-        $response_args = (isset($token_rstatus['args']) && is_array($token_rstatus['args']))
220
-            ? $token_rstatus['args']
221
-            : array();
222
-        if ($token_rstatus['status']) {
223
-            // We got the Token so we may continue with the payment and redirect the client.
224
-            $payment->set_details($response_args);
225
-            $gateway_url = $this->_debug_mode ? 'https://www.sandbox.paypal.com' : 'https://www.paypal.com';
226
-            $payment->set_redirect_url(
227
-                $gateway_url
228
-                . '/checkoutnow?useraction=commit&cmd=_express-checkout&token='
229
-                . $response_args['TOKEN']
230
-            );
231
-        } else {
232
-            if (isset($response_args['L_ERRORCODE'])) {
233
-                $payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
234
-            } else {
235
-                $payment->set_gateway_response(
236
-                    esc_html__(
237
-                        'Error occurred while trying to setup the Express Checkout.',
238
-                        'event_espresso'
239
-                    )
240
-                );
241
-            }
242
-            $payment->set_details($response_args);
243
-            $payment->set_status($this->_pay_model->failed_status());
244
-        }
245
-        return $payment;
246
-    }
247
-
248
-
249
-
250
-    /**
251
-     * @param array           $update_info {
252
-     * @type string           $gateway_txn_id
253
-     * @type string status an EEMI_Payment status
254
-     *                                     }
255
-     * @param EEI_Transaction $transaction
256
-     * @return EEI_Payment
257
-     */
258
-    public function handle_payment_update($update_info, $transaction)
259
-    {
260
-        $payment = $transaction instanceof EEI_Transaction ? $transaction->last_payment() : null;
261
-        if ($payment instanceof EEI_Payment) {
262
-            $this->log(array('Return from Authorization' => $update_info), $payment);
263
-            $transaction = $payment->transaction();
264
-            if (! $transaction instanceof EEI_Transaction) {
265
-                $payment->set_gateway_response(
266
-                    esc_html__(
267
-                        'Could not process this payment because it has no associated transaction.',
268
-                        'event_espresso'
269
-                    )
270
-                );
271
-                $payment->set_status($this->_pay_model->failed_status());
272
-                return $payment;
273
-            }
274
-            $primary_registrant = $transaction->primary_registration();
275
-            $payment_details = $payment->details();
276
-            // Check if we still have the token.
277
-            if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
278
-                $payment->set_status($this->_pay_model->failed_status());
279
-                return $payment;
280
-            }
281
-            $cdetails_request_dtls = array(
282
-                'METHOD' => 'GetExpressCheckoutDetails',
283
-                'TOKEN'  => $payment_details['TOKEN'],
284
-            );
285
-            // Request Customer Details.
286
-            $cdetails_request_response = $this->_ppExpress_request(
287
-                $cdetails_request_dtls,
288
-                'Customer Details',
289
-                $payment
290
-            );
291
-            $cdetails_rstatus = $this->_ppExpress_check_response($cdetails_request_response);
292
-            $cdata_response_args = (isset($cdetails_rstatus['args']) && is_array($cdetails_rstatus['args']))
293
-                ? $cdetails_rstatus['args']
294
-                : array();
295
-            if ($cdetails_rstatus['status']) {
296
-                // We got the PayerID so now we can Complete the transaction.
297
-                $docheckout_request_dtls = array(
298
-                    'METHOD'                         => 'DoExpressCheckoutPayment',
299
-                    'PAYERID'                        => $cdata_response_args['PAYERID'],
300
-                    'TOKEN'                          => $payment_details['TOKEN'],
301
-                    'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
302
-                    'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
303
-                    'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
304
-                );
305
-                 // Include itemized list.
306
-                $itemized_list = $this->itemize_list(
307
-                    $payment,
308
-                    $transaction,
309
-                    $cdata_response_args
310
-                );
311
-                $docheckout_request_dtls = array_merge($docheckout_request_dtls, $itemized_list);
312
-                // Payment Checkout/Capture.
313
-                $docheckout_request_response = $this->_ppExpress_request(
314
-                    $docheckout_request_dtls,
315
-                    'Do Payment',
316
-                    $payment
317
-                );
318
-                $docheckout_rstatus = $this->_ppExpress_check_response($docheckout_request_response);
319
-                $docheckout_response_args = (isset($docheckout_rstatus['args']) && is_array($docheckout_rstatus['args']))
320
-                    ? $docheckout_rstatus['args']
321
-                    : array();
322
-                if ($docheckout_rstatus['status']) {
323
-                    // All is well, payment approved.
324
-                    $primary_registration_code = $primary_registrant instanceof EE_Registration ?
325
-                        $primary_registrant->reg_code()
326
-                        : '';
327
-                    $payment->set_extra_accntng($primary_registration_code);
328
-                    $payment->set_amount(isset($docheckout_response_args['PAYMENTINFO_0_AMT'])
329
-                        ? (float) $docheckout_response_args['PAYMENTINFO_0_AMT']
330
-                        : 0);
331
-                    $payment->set_txn_id_chq_nmbr(isset($docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID'])
332
-                        ? $docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID']
333
-                        : null);
334
-                    $payment->set_details($cdata_response_args);
335
-                    $payment->set_gateway_response(isset($docheckout_response_args['PAYMENTINFO_0_ACK'])
336
-                        ? $docheckout_response_args['PAYMENTINFO_0_ACK']
337
-                        : '');
338
-                    $payment->set_status($this->_pay_model->approved_status());
339
-                } else {
340
-                    if (isset($docheckout_response_args['L_ERRORCODE'])) {
341
-                        $payment->set_gateway_response(
342
-                            $docheckout_response_args['L_ERRORCODE']
343
-                            . '; '
344
-                            . $docheckout_response_args['L_SHORTMESSAGE']
345
-                        );
346
-                    } else {
347
-                        $payment->set_gateway_response(
348
-                            esc_html__(
349
-                                'Error occurred while trying to Capture the funds.',
350
-                                'event_espresso'
351
-                            )
352
-                        );
353
-                    }
354
-                    $payment->set_details($docheckout_response_args);
355
-                    $payment->set_status($this->_pay_model->declined_status());
356
-                }
357
-            } else {
358
-                if (isset($cdata_response_args['L_ERRORCODE'])) {
359
-                    $payment->set_gateway_response(
360
-                        $cdata_response_args['L_ERRORCODE']
361
-                        . '; '
362
-                        . $cdata_response_args['L_SHORTMESSAGE']
363
-                    );
364
-                } else {
365
-                    $payment->set_gateway_response(
366
-                        esc_html__(
367
-                            'Error occurred while trying to get payment Details from PayPal.',
368
-                            'event_espresso'
369
-                        )
370
-                    );
371
-                }
372
-                $payment->set_details($cdata_response_args);
373
-                $payment->set_status($this->_pay_model->failed_status());
374
-            }
375
-        } else {
376
-            $payment->set_gateway_response(
377
-                esc_html__(
378
-                    'Error occurred while trying to process the payment.',
379
-                    'event_espresso'
380
-                )
381
-            );
382
-            $payment->set_status($this->_pay_model->failed_status());
383
-        }
384
-        return $payment;
385
-    }
386
-
387
-
388
-
389
-    /**
390
-     *  Make a list of items that are in the giver transaction.
391
-     *
392
-     * @param EEI_Payment     $payment
393
-     * @param EEI_Transaction $transaction
394
-     * @param array           $request_response_args Data from a previous communication with PP.
395
-     * @return array
396
-     */
397
-    public function itemize_list(EEI_Payment $payment, EEI_Transaction $transaction, $request_response_args = array())
398
-    {
399
-        $itemized_list = array();
400
-        $gateway_formatter = $this->_get_gateway_formatter();
401
-        // If we have data from a previous communication with PP (on this transaction) we may use that for our list...
402
-        if (! empty($request_response_args)
403
-            && array_key_exists('L_PAYMENTREQUEST_0_AMT0', $request_response_args)
404
-            && array_key_exists('PAYMENTREQUEST_0_ITEMAMT', $request_response_args)
405
-        ) {
406
-            foreach ($request_response_args as $arg_key => $arg_val) {
407
-                if (strpos($arg_key, 'PAYMENTREQUEST_') !== false
408
-                    && strpos($arg_key, 'NOTIFYURL') === false
409
-                ) {
410
-                    $itemized_list[ $arg_key ] = $arg_val;
411
-                }
412
-            }
413
-            // If we got only a few Items then something is not right.
414
-            if (count($itemized_list) > 2) {
415
-                return $itemized_list;
416
-            } else {
417
-                if (WP_DEBUG) {
418
-                    throw new EE_Error(
419
-                        sprintf(
420
-                            esc_html__(
421
-                                // @codingStandardsIgnoreStart
422
-                                'Unable to continue with the checkout because a proper purchase list could not be generated. The purchased list we could have sent was %1$s',
423
-                                // @codingStandardsIgnoreEnd
424
-                                'event_espresso'
425
-                            ),
426
-                            wp_json_encode($itemized_list)
427
-                        )
428
-                    );
429
-                }
430
-                // Reset the list and log an error, maybe allow to try and generate a new list (below).
431
-                $itemized_list = array();
432
-                $this->log(
433
-                    array(
434
-                        esc_html__(
435
-                            'Could not generate a proper item list with:',
436
-                            'event_espresso'
437
-                        ) => $request_response_args
438
-                    ),
439
-                    $payment
440
-                );
441
-            }
442
-        }
443
-        // ...otherwise we generate a new list for this transaction.
444
-        if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) {
445
-            $item_num = 0;
446
-            $itemized_sum = 0;
447
-            $total_line_items = $transaction->total_line_item();
448
-            // Go through each item in the list.
449
-            foreach ($total_line_items->get_items() as $line_item) {
450
-                if ($line_item instanceof EE_Line_Item) {
451
-                    // PayPal doesn't like line items with 0.00 amount, so we may skip those.
452
-                    if (EEH_Money::compare_floats($line_item->total(), '0.00', '==')) {
453
-                        continue;
454
-                    }
455
-                    $unit_price = $line_item->unit_price();
456
-                    $line_item_quantity = $line_item->quantity();
457
-                    // This is a discount.
458
-                    if ($line_item->is_percent()) {
459
-                        $unit_price = $line_item->total();
460
-                        $line_item_quantity = 1;
461
-                    }
462
-                    // Item Name.
463
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
464
-                        $gateway_formatter->formatLineItemName($line_item, $payment),
465
-                        0,
466
-                        127
467
-                    );
468
-                    // Item description.
469
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
470
-                        $gateway_formatter->formatLineItemDesc($line_item, $payment),
471
-                        0,
472
-                        127
473
-                    );
474
-                    // Cost of individual item.
475
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
476
-                    // Item Number.
477
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
478
-                    // Item quantity.
479
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
480
-                    // Digital item is sold.
481
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
482
-                    $itemized_sum += $line_item->total();
483
-                    ++$item_num;
484
-                }
485
-            }
486
-            // Item's sales S/H and tax amount.
487
-            $itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $total_line_items->get_items_total();
488
-            $itemized_list['PAYMENTREQUEST_0_TAXAMT'] = $total_line_items->get_total_tax();
489
-            $itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
490
-            $itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
491
-            $itemized_sum_diff_from_txn_total = round(
492
-                $transaction->total() - $itemized_sum - $total_line_items->get_total_tax(),
493
-                2
494
-            );
495
-            // If we were not able to recognize some item like promotion, surcharge or cancellation,
496
-            // add the difference as an extra line item.
497
-            if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
498
-                // Item Name.
499
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
500
-                    esc_html__(
501
-                        'Other (promotion/surcharge/cancellation)',
502
-                        'event_espresso'
503
-                    ),
504
-                    0,
505
-                    127
506
-                );
507
-                // Item description.
508
-                $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
509
-                // Cost of individual item.
510
-                $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
511
-                    $itemized_sum_diff_from_txn_total
512
-                );
513
-                // Item Number.
514
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
515
-                // Item quantity.
516
-                $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
517
-                // Digital item is sold.
518
-                $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
519
-                $item_num++;
520
-            }
521
-        } else {
522
-            // Just one Item.
523
-            // Item Name.
524
-            $itemized_list['L_PAYMENTREQUEST_0_NAME0'] = mb_strcut(
525
-                $gateway_formatter->formatPartialPaymentLineItemName($payment),
526
-                0,
527
-                127
528
-            );
529
-            // Item description.
530
-            $itemized_list['L_PAYMENTREQUEST_0_DESC0'] = mb_strcut(
531
-                $gateway_formatter->formatPartialPaymentLineItemDesc($payment),
532
-                0,
533
-                127
534
-            );
535
-            // Cost of individual item.
536
-            $itemized_list['L_PAYMENTREQUEST_0_AMT0'] = $gateway_formatter->formatCurrency($payment->amount());
537
-            // Item Number.
538
-            $itemized_list['L_PAYMENTREQUEST_0_NUMBER0'] = 1;
539
-            // Item quantity.
540
-            $itemized_list['L_PAYMENTREQUEST_0_QTY0'] = 1;
541
-            // Digital item is sold.
542
-            $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Physical';
543
-            // Item's sales S/H and tax amount.
544
-            $itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $gateway_formatter->formatCurrency($payment->amount());
545
-            $itemized_list['PAYMENTREQUEST_0_TAXAMT'] = '0';
546
-            $itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
547
-            $itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
548
-        }
549
-        return $itemized_list;
550
-    }
551
-
552
-
553
-
554
-    /**
555
-     *  Make the Express checkout request.
556
-     *
557
-     * @param array       $request_params
558
-     * @param string      $request_text
559
-     * @param EEI_Payment $payment
560
-     * @return mixed
561
-     */
562
-    public function _ppExpress_request($request_params, $request_text, $payment)
563
-    {
564
-        $request_dtls = array(
565
-            'VERSION' => '204.0',
566
-            'USER' => urlencode($this->_api_username),
567
-            'PWD' => urlencode($this->_api_password),
568
-            'SIGNATURE' => urlencode($this->_api_signature),
569
-            // EE will blow up if you change this
570
-            'BUTTONSOURCE' => 'EventEspresso_SP',
571
-        );
572
-        $dtls = array_merge($request_dtls, $request_params);
573
-        $this->_log_clean_request($dtls, $payment, $request_text . ' Request');
574
-        // Request Customer Details.
575
-        $request_response = wp_remote_post(
576
-            $this->_base_gateway_url,
577
-            array(
578
-                'method'      => 'POST',
579
-                'timeout'     => 45,
580
-                'httpversion' => '1.1',
581
-                'cookies'     => array(),
582
-                'headers'     => array(),
583
-                'body'        => http_build_query($dtls, '', '&'),
584
-            )
585
-        );
586
-        // Log the response.
587
-        $this->log(array($request_text . ' Response' => $request_response), $payment);
588
-        return $request_response;
589
-    }
590
-
591
-
592
-
593
-    /**
594
-     *  Check the response status.
595
-     *
596
-     * @param mixed $request_response
597
-     * @return array
598
-     */
599
-    public function _ppExpress_check_response($request_response)
600
-    {
601
-        if (is_wp_error($request_response) || empty($request_response['body'])) {
602
-            // If we got here then there was an error in this request.
603
-            return array('status' => false, 'args' => $request_response);
604
-        }
605
-        $response_args = array();
606
-        parse_str(urldecode($request_response['body']), $response_args);
607
-        if (! isset($response_args['ACK'])) {
608
-            return array('status' => false, 'args' => $request_response);
609
-        }
610
-        if ((
611
-                isset($response_args['PAYERID'])
612
-                || isset($response_args['TOKEN'])
613
-                || isset($response_args['PAYMENTINFO_0_TRANSACTIONID'])
614
-                || (isset($response_args['PAYMENTSTATUS']) && $response_args['PAYMENTSTATUS'] === 'Completed')
615
-            )
616
-            && in_array($response_args['ACK'], array('Success', 'SuccessWithWarning'), true)
617
-        ) {
618
-            // Response status OK, return response parameters for further processing.
619
-            return array('status' => true, 'args' => $response_args);
620
-        }
621
-        $errors = $this->_get_errors($response_args);
622
-        return array('status' => false, 'args' => $errors);
623
-    }
624
-
625
-
626
-
627
-    /**
628
-     *  Log a "Cleared" request.
629
-     *
630
-     * @param array       $request
631
-     * @param EEI_Payment $payment
632
-     * @param string      $info
633
-     * @return void
634
-     */
635
-    private function _log_clean_request($request, $payment, $info)
636
-    {
637
-        $cleaned_request_data = $request;
638
-        unset($cleaned_request_data['PWD'], $cleaned_request_data['USER'], $cleaned_request_data['SIGNATURE']);
639
-        $this->log(array($info => $cleaned_request_data), $payment);
640
-    }
641
-
642
-
643
-
644
-    /**
645
-     *  Get error from the response data.
646
-     *
647
-     * @param array $data_array
648
-     * @return array
649
-     */
650
-    private function _get_errors($data_array)
651
-    {
652
-        $errors = array();
653
-        $n = 0;
654
-        while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
655
-            $l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
656
-                ? $data_array[ "L_ERRORCODE{$n}" ]
657
-                : '';
658
-            $l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
659
-                ? $data_array[ "L_SEVERITYCODE{$n}" ]
660
-                : '';
661
-            $l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
662
-                ? $data_array[ "L_SHORTMESSAGE{$n}" ]
663
-                : '';
664
-            $l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
665
-                ? $data_array[ "L_LONGMESSAGE{$n}" ]
666
-                : '';
667
-            if ($n === 0) {
668
-                $errors = array(
669
-                    'L_ERRORCODE'    => $l_error_code,
670
-                    'L_SHORTMESSAGE' => $l_short_message,
671
-                    'L_LONGMESSAGE'  => $l_long_message,
672
-                    'L_SEVERITYCODE' => $l_severity_code,
673
-                );
674
-            } else {
675
-                $errors['L_ERRORCODE'] .= ', ' . $l_error_code;
676
-                $errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
677
-                $errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
678
-                $errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
679
-            }
680
-            $n++;
681
-        }
682
-        return $errors;
683
-    }
30
+	/**
31
+	 * Merchant API Username.
32
+	 *
33
+	 * @var string
34
+	 */
35
+	protected $_api_username;
36
+
37
+	/**
38
+	 * Merchant API Password.
39
+	 *
40
+	 * @var string
41
+	 */
42
+	protected $_api_password;
43
+
44
+	/**
45
+	 * API Signature.
46
+	 *
47
+	 * @var string
48
+	 */
49
+	protected $_api_signature;
50
+
51
+	/**
52
+	 * Request Shipping address on PP checkout page.
53
+	 *
54
+	 * @var string
55
+	 */
56
+	protected $_request_shipping_addr;
57
+
58
+	/**
59
+	 * Business/personal logo.
60
+	 *
61
+	 * @var string
62
+	 */
63
+	protected $_image_url;
64
+
65
+	/**
66
+	 * gateway URL variable
67
+	 *
68
+	 * @var string
69
+	 */
70
+	protected $_base_gateway_url = '';
71
+
72
+
73
+
74
+	/**
75
+	 * EEG_Paypal_Express constructor.
76
+	 */
77
+	public function __construct()
78
+	{
79
+		$this->_currencies_supported = array(
80
+			'USD',
81
+			'AUD',
82
+			'BRL',
83
+			'CAD',
84
+			'CZK',
85
+			'DKK',
86
+			'EUR',
87
+			'HKD',
88
+			'HUF',
89
+			'ILS',
90
+			'JPY',
91
+			'MYR',
92
+			'MXN',
93
+			'NOK',
94
+			'NZD',
95
+			'PHP',
96
+			'PLN',
97
+			'GBP',
98
+			'RUB',
99
+			'SGD',
100
+			'SEK',
101
+			'CHF',
102
+			'TWD',
103
+			'THB',
104
+			'TRY',
105
+			'INR',
106
+		);
107
+		parent::__construct();
108
+	}
109
+
110
+
111
+
112
+	/**
113
+	 * Sets the gateway URL variable based on whether debug mode is enabled or not.
114
+	 *
115
+	 * @param array $settings_array
116
+	 */
117
+	public function set_settings($settings_array)
118
+	{
119
+		parent::set_settings($settings_array);
120
+		// Redirect URL.
121
+		$this->_base_gateway_url = $this->_debug_mode
122
+			? 'https://api-3t.sandbox.paypal.com/nvp'
123
+			: 'https://api-3t.paypal.com/nvp';
124
+	}
125
+
126
+
127
+
128
+	/**
129
+	 * @param EEI_Payment $payment
130
+	 * @param array       $billing_info
131
+	 * @param string      $return_url
132
+	 * @param string      $notify_url
133
+	 * @param string      $cancel_url
134
+	 * @return \EE_Payment|\EEI_Payment
135
+	 * @throws \EE_Error
136
+	 */
137
+	public function set_redirection_info(
138
+		$payment,
139
+		$billing_info = array(),
140
+		$return_url = null,
141
+		$notify_url = null,
142
+		$cancel_url = null
143
+	) {
144
+		if (! $payment instanceof EEI_Payment) {
145
+			$payment->set_gateway_response(
146
+				esc_html__(
147
+					'Error. No associated payment was found.',
148
+					'event_espresso'
149
+				)
150
+			);
151
+			$payment->set_status($this->_pay_model->failed_status());
152
+			return $payment;
153
+		}
154
+		$transaction = $payment->transaction();
155
+		if (! $transaction instanceof EEI_Transaction) {
156
+			$payment->set_gateway_response(
157
+				esc_html__(
158
+					'Could not process this payment because it has no associated transaction.',
159
+					'event_espresso'
160
+				)
161
+			);
162
+			$payment->set_status($this->_pay_model->failed_status());
163
+			return $payment;
164
+		}
165
+		$gateway_formatter = $this->_get_gateway_formatter();
166
+		$order_description = mb_strcut($gateway_formatter->formatOrderDescription($payment), 0, 127);
167
+		$primary_registration = $transaction->primary_registration();
168
+		$primary_attendee = $primary_registration instanceof EE_Registration
169
+			? $primary_registration->attendee()
170
+			: false;
171
+		$locale = explode('-', get_bloginfo('language'));
172
+		// Gather request parameters.
173
+		$token_request_dtls = array(
174
+			'METHOD'                         => 'SetExpressCheckout',
175
+			'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
176
+			'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
177
+			'PAYMENTREQUEST_0_DESC'          => $order_description,
178
+			'RETURNURL'                      => $return_url,
179
+			'CANCELURL'                      => $cancel_url,
180
+			'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
181
+			// Buyer does not need to create a PayPal account to check out.
182
+			// This is referred to as PayPal Account Optional.
183
+			'SOLUTIONTYPE'                   => 'Sole',
184
+			// Locale of the pages displayed by PayPal during Express Checkout.
185
+			'LOCALECODE'                     => $locale[1]
186
+		);
187
+		// Show itemized list.
188
+		$itemized_list = $this->itemize_list($payment, $transaction);
189
+		$token_request_dtls = array_merge($token_request_dtls, $itemized_list);
190
+		// Automatically filling out shipping and contact information.
191
+		if ($this->_request_shipping_addr && $primary_attendee instanceof EEI_Attendee) {
192
+			// If you do not pass the shipping address, PayPal obtains it from the buyer's account profile.
193
+			$token_request_dtls['NOSHIPPING'] = '2';
194
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET'] = $primary_attendee->address();
195
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET2'] = $primary_attendee->address2();
196
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOCITY'] = $primary_attendee->city();
197
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTATE'] = $primary_attendee->state_abbrev();
198
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] = $primary_attendee->country_ID();
199
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
200
+			$token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
201
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
202
+		} elseif (! $this->_request_shipping_addr) {
203
+			// Do not request shipping details on the PP Checkout page.
204
+			$token_request_dtls['NOSHIPPING'] = '1';
205
+			$token_request_dtls['REQCONFIRMSHIPPING'] = '0';
206
+		}
207
+		// Used a business/personal logo on the PayPal page.
208
+		if (! empty($this->_image_url)) {
209
+			$token_request_dtls['LOGOIMG'] = $this->_image_url;
210
+		}
211
+		$token_request_dtls = apply_filters(
212
+			'FHEE__EEG_Paypal_Express__set_redirection_info__arguments',
213
+			$token_request_dtls,
214
+			$this
215
+		);
216
+		// Request PayPal token.
217
+		$token_request_response = $this->_ppExpress_request($token_request_dtls, 'Payment Token', $payment);
218
+		$token_rstatus = $this->_ppExpress_check_response($token_request_response);
219
+		$response_args = (isset($token_rstatus['args']) && is_array($token_rstatus['args']))
220
+			? $token_rstatus['args']
221
+			: array();
222
+		if ($token_rstatus['status']) {
223
+			// We got the Token so we may continue with the payment and redirect the client.
224
+			$payment->set_details($response_args);
225
+			$gateway_url = $this->_debug_mode ? 'https://www.sandbox.paypal.com' : 'https://www.paypal.com';
226
+			$payment->set_redirect_url(
227
+				$gateway_url
228
+				. '/checkoutnow?useraction=commit&cmd=_express-checkout&token='
229
+				. $response_args['TOKEN']
230
+			);
231
+		} else {
232
+			if (isset($response_args['L_ERRORCODE'])) {
233
+				$payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
234
+			} else {
235
+				$payment->set_gateway_response(
236
+					esc_html__(
237
+						'Error occurred while trying to setup the Express Checkout.',
238
+						'event_espresso'
239
+					)
240
+				);
241
+			}
242
+			$payment->set_details($response_args);
243
+			$payment->set_status($this->_pay_model->failed_status());
244
+		}
245
+		return $payment;
246
+	}
247
+
248
+
249
+
250
+	/**
251
+	 * @param array           $update_info {
252
+	 * @type string           $gateway_txn_id
253
+	 * @type string status an EEMI_Payment status
254
+	 *                                     }
255
+	 * @param EEI_Transaction $transaction
256
+	 * @return EEI_Payment
257
+	 */
258
+	public function handle_payment_update($update_info, $transaction)
259
+	{
260
+		$payment = $transaction instanceof EEI_Transaction ? $transaction->last_payment() : null;
261
+		if ($payment instanceof EEI_Payment) {
262
+			$this->log(array('Return from Authorization' => $update_info), $payment);
263
+			$transaction = $payment->transaction();
264
+			if (! $transaction instanceof EEI_Transaction) {
265
+				$payment->set_gateway_response(
266
+					esc_html__(
267
+						'Could not process this payment because it has no associated transaction.',
268
+						'event_espresso'
269
+					)
270
+				);
271
+				$payment->set_status($this->_pay_model->failed_status());
272
+				return $payment;
273
+			}
274
+			$primary_registrant = $transaction->primary_registration();
275
+			$payment_details = $payment->details();
276
+			// Check if we still have the token.
277
+			if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
278
+				$payment->set_status($this->_pay_model->failed_status());
279
+				return $payment;
280
+			}
281
+			$cdetails_request_dtls = array(
282
+				'METHOD' => 'GetExpressCheckoutDetails',
283
+				'TOKEN'  => $payment_details['TOKEN'],
284
+			);
285
+			// Request Customer Details.
286
+			$cdetails_request_response = $this->_ppExpress_request(
287
+				$cdetails_request_dtls,
288
+				'Customer Details',
289
+				$payment
290
+			);
291
+			$cdetails_rstatus = $this->_ppExpress_check_response($cdetails_request_response);
292
+			$cdata_response_args = (isset($cdetails_rstatus['args']) && is_array($cdetails_rstatus['args']))
293
+				? $cdetails_rstatus['args']
294
+				: array();
295
+			if ($cdetails_rstatus['status']) {
296
+				// We got the PayerID so now we can Complete the transaction.
297
+				$docheckout_request_dtls = array(
298
+					'METHOD'                         => 'DoExpressCheckoutPayment',
299
+					'PAYERID'                        => $cdata_response_args['PAYERID'],
300
+					'TOKEN'                          => $payment_details['TOKEN'],
301
+					'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
302
+					'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
303
+					'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
304
+				);
305
+				 // Include itemized list.
306
+				$itemized_list = $this->itemize_list(
307
+					$payment,
308
+					$transaction,
309
+					$cdata_response_args
310
+				);
311
+				$docheckout_request_dtls = array_merge($docheckout_request_dtls, $itemized_list);
312
+				// Payment Checkout/Capture.
313
+				$docheckout_request_response = $this->_ppExpress_request(
314
+					$docheckout_request_dtls,
315
+					'Do Payment',
316
+					$payment
317
+				);
318
+				$docheckout_rstatus = $this->_ppExpress_check_response($docheckout_request_response);
319
+				$docheckout_response_args = (isset($docheckout_rstatus['args']) && is_array($docheckout_rstatus['args']))
320
+					? $docheckout_rstatus['args']
321
+					: array();
322
+				if ($docheckout_rstatus['status']) {
323
+					// All is well, payment approved.
324
+					$primary_registration_code = $primary_registrant instanceof EE_Registration ?
325
+						$primary_registrant->reg_code()
326
+						: '';
327
+					$payment->set_extra_accntng($primary_registration_code);
328
+					$payment->set_amount(isset($docheckout_response_args['PAYMENTINFO_0_AMT'])
329
+						? (float) $docheckout_response_args['PAYMENTINFO_0_AMT']
330
+						: 0);
331
+					$payment->set_txn_id_chq_nmbr(isset($docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID'])
332
+						? $docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID']
333
+						: null);
334
+					$payment->set_details($cdata_response_args);
335
+					$payment->set_gateway_response(isset($docheckout_response_args['PAYMENTINFO_0_ACK'])
336
+						? $docheckout_response_args['PAYMENTINFO_0_ACK']
337
+						: '');
338
+					$payment->set_status($this->_pay_model->approved_status());
339
+				} else {
340
+					if (isset($docheckout_response_args['L_ERRORCODE'])) {
341
+						$payment->set_gateway_response(
342
+							$docheckout_response_args['L_ERRORCODE']
343
+							. '; '
344
+							. $docheckout_response_args['L_SHORTMESSAGE']
345
+						);
346
+					} else {
347
+						$payment->set_gateway_response(
348
+							esc_html__(
349
+								'Error occurred while trying to Capture the funds.',
350
+								'event_espresso'
351
+							)
352
+						);
353
+					}
354
+					$payment->set_details($docheckout_response_args);
355
+					$payment->set_status($this->_pay_model->declined_status());
356
+				}
357
+			} else {
358
+				if (isset($cdata_response_args['L_ERRORCODE'])) {
359
+					$payment->set_gateway_response(
360
+						$cdata_response_args['L_ERRORCODE']
361
+						. '; '
362
+						. $cdata_response_args['L_SHORTMESSAGE']
363
+					);
364
+				} else {
365
+					$payment->set_gateway_response(
366
+						esc_html__(
367
+							'Error occurred while trying to get payment Details from PayPal.',
368
+							'event_espresso'
369
+						)
370
+					);
371
+				}
372
+				$payment->set_details($cdata_response_args);
373
+				$payment->set_status($this->_pay_model->failed_status());
374
+			}
375
+		} else {
376
+			$payment->set_gateway_response(
377
+				esc_html__(
378
+					'Error occurred while trying to process the payment.',
379
+					'event_espresso'
380
+				)
381
+			);
382
+			$payment->set_status($this->_pay_model->failed_status());
383
+		}
384
+		return $payment;
385
+	}
386
+
387
+
388
+
389
+	/**
390
+	 *  Make a list of items that are in the giver transaction.
391
+	 *
392
+	 * @param EEI_Payment     $payment
393
+	 * @param EEI_Transaction $transaction
394
+	 * @param array           $request_response_args Data from a previous communication with PP.
395
+	 * @return array
396
+	 */
397
+	public function itemize_list(EEI_Payment $payment, EEI_Transaction $transaction, $request_response_args = array())
398
+	{
399
+		$itemized_list = array();
400
+		$gateway_formatter = $this->_get_gateway_formatter();
401
+		// If we have data from a previous communication with PP (on this transaction) we may use that for our list...
402
+		if (! empty($request_response_args)
403
+			&& array_key_exists('L_PAYMENTREQUEST_0_AMT0', $request_response_args)
404
+			&& array_key_exists('PAYMENTREQUEST_0_ITEMAMT', $request_response_args)
405
+		) {
406
+			foreach ($request_response_args as $arg_key => $arg_val) {
407
+				if (strpos($arg_key, 'PAYMENTREQUEST_') !== false
408
+					&& strpos($arg_key, 'NOTIFYURL') === false
409
+				) {
410
+					$itemized_list[ $arg_key ] = $arg_val;
411
+				}
412
+			}
413
+			// If we got only a few Items then something is not right.
414
+			if (count($itemized_list) > 2) {
415
+				return $itemized_list;
416
+			} else {
417
+				if (WP_DEBUG) {
418
+					throw new EE_Error(
419
+						sprintf(
420
+							esc_html__(
421
+								// @codingStandardsIgnoreStart
422
+								'Unable to continue with the checkout because a proper purchase list could not be generated. The purchased list we could have sent was %1$s',
423
+								// @codingStandardsIgnoreEnd
424
+								'event_espresso'
425
+							),
426
+							wp_json_encode($itemized_list)
427
+						)
428
+					);
429
+				}
430
+				// Reset the list and log an error, maybe allow to try and generate a new list (below).
431
+				$itemized_list = array();
432
+				$this->log(
433
+					array(
434
+						esc_html__(
435
+							'Could not generate a proper item list with:',
436
+							'event_espresso'
437
+						) => $request_response_args
438
+					),
439
+					$payment
440
+				);
441
+			}
442
+		}
443
+		// ...otherwise we generate a new list for this transaction.
444
+		if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) {
445
+			$item_num = 0;
446
+			$itemized_sum = 0;
447
+			$total_line_items = $transaction->total_line_item();
448
+			// Go through each item in the list.
449
+			foreach ($total_line_items->get_items() as $line_item) {
450
+				if ($line_item instanceof EE_Line_Item) {
451
+					// PayPal doesn't like line items with 0.00 amount, so we may skip those.
452
+					if (EEH_Money::compare_floats($line_item->total(), '0.00', '==')) {
453
+						continue;
454
+					}
455
+					$unit_price = $line_item->unit_price();
456
+					$line_item_quantity = $line_item->quantity();
457
+					// This is a discount.
458
+					if ($line_item->is_percent()) {
459
+						$unit_price = $line_item->total();
460
+						$line_item_quantity = 1;
461
+					}
462
+					// Item Name.
463
+					$itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
464
+						$gateway_formatter->formatLineItemName($line_item, $payment),
465
+						0,
466
+						127
467
+					);
468
+					// Item description.
469
+					$itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
470
+						$gateway_formatter->formatLineItemDesc($line_item, $payment),
471
+						0,
472
+						127
473
+					);
474
+					// Cost of individual item.
475
+					$itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
476
+					// Item Number.
477
+					$itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
478
+					// Item quantity.
479
+					$itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
480
+					// Digital item is sold.
481
+					$itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
482
+					$itemized_sum += $line_item->total();
483
+					++$item_num;
484
+				}
485
+			}
486
+			// Item's sales S/H and tax amount.
487
+			$itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $total_line_items->get_items_total();
488
+			$itemized_list['PAYMENTREQUEST_0_TAXAMT'] = $total_line_items->get_total_tax();
489
+			$itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
490
+			$itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
491
+			$itemized_sum_diff_from_txn_total = round(
492
+				$transaction->total() - $itemized_sum - $total_line_items->get_total_tax(),
493
+				2
494
+			);
495
+			// If we were not able to recognize some item like promotion, surcharge or cancellation,
496
+			// add the difference as an extra line item.
497
+			if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
498
+				// Item Name.
499
+				$itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
500
+					esc_html__(
501
+						'Other (promotion/surcharge/cancellation)',
502
+						'event_espresso'
503
+					),
504
+					0,
505
+					127
506
+				);
507
+				// Item description.
508
+				$itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
509
+				// Cost of individual item.
510
+				$itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
511
+					$itemized_sum_diff_from_txn_total
512
+				);
513
+				// Item Number.
514
+				$itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
515
+				// Item quantity.
516
+				$itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
517
+				// Digital item is sold.
518
+				$itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
519
+				$item_num++;
520
+			}
521
+		} else {
522
+			// Just one Item.
523
+			// Item Name.
524
+			$itemized_list['L_PAYMENTREQUEST_0_NAME0'] = mb_strcut(
525
+				$gateway_formatter->formatPartialPaymentLineItemName($payment),
526
+				0,
527
+				127
528
+			);
529
+			// Item description.
530
+			$itemized_list['L_PAYMENTREQUEST_0_DESC0'] = mb_strcut(
531
+				$gateway_formatter->formatPartialPaymentLineItemDesc($payment),
532
+				0,
533
+				127
534
+			);
535
+			// Cost of individual item.
536
+			$itemized_list['L_PAYMENTREQUEST_0_AMT0'] = $gateway_formatter->formatCurrency($payment->amount());
537
+			// Item Number.
538
+			$itemized_list['L_PAYMENTREQUEST_0_NUMBER0'] = 1;
539
+			// Item quantity.
540
+			$itemized_list['L_PAYMENTREQUEST_0_QTY0'] = 1;
541
+			// Digital item is sold.
542
+			$itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Physical';
543
+			// Item's sales S/H and tax amount.
544
+			$itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $gateway_formatter->formatCurrency($payment->amount());
545
+			$itemized_list['PAYMENTREQUEST_0_TAXAMT'] = '0';
546
+			$itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
547
+			$itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
548
+		}
549
+		return $itemized_list;
550
+	}
551
+
552
+
553
+
554
+	/**
555
+	 *  Make the Express checkout request.
556
+	 *
557
+	 * @param array       $request_params
558
+	 * @param string      $request_text
559
+	 * @param EEI_Payment $payment
560
+	 * @return mixed
561
+	 */
562
+	public function _ppExpress_request($request_params, $request_text, $payment)
563
+	{
564
+		$request_dtls = array(
565
+			'VERSION' => '204.0',
566
+			'USER' => urlencode($this->_api_username),
567
+			'PWD' => urlencode($this->_api_password),
568
+			'SIGNATURE' => urlencode($this->_api_signature),
569
+			// EE will blow up if you change this
570
+			'BUTTONSOURCE' => 'EventEspresso_SP',
571
+		);
572
+		$dtls = array_merge($request_dtls, $request_params);
573
+		$this->_log_clean_request($dtls, $payment, $request_text . ' Request');
574
+		// Request Customer Details.
575
+		$request_response = wp_remote_post(
576
+			$this->_base_gateway_url,
577
+			array(
578
+				'method'      => 'POST',
579
+				'timeout'     => 45,
580
+				'httpversion' => '1.1',
581
+				'cookies'     => array(),
582
+				'headers'     => array(),
583
+				'body'        => http_build_query($dtls, '', '&'),
584
+			)
585
+		);
586
+		// Log the response.
587
+		$this->log(array($request_text . ' Response' => $request_response), $payment);
588
+		return $request_response;
589
+	}
590
+
591
+
592
+
593
+	/**
594
+	 *  Check the response status.
595
+	 *
596
+	 * @param mixed $request_response
597
+	 * @return array
598
+	 */
599
+	public function _ppExpress_check_response($request_response)
600
+	{
601
+		if (is_wp_error($request_response) || empty($request_response['body'])) {
602
+			// If we got here then there was an error in this request.
603
+			return array('status' => false, 'args' => $request_response);
604
+		}
605
+		$response_args = array();
606
+		parse_str(urldecode($request_response['body']), $response_args);
607
+		if (! isset($response_args['ACK'])) {
608
+			return array('status' => false, 'args' => $request_response);
609
+		}
610
+		if ((
611
+				isset($response_args['PAYERID'])
612
+				|| isset($response_args['TOKEN'])
613
+				|| isset($response_args['PAYMENTINFO_0_TRANSACTIONID'])
614
+				|| (isset($response_args['PAYMENTSTATUS']) && $response_args['PAYMENTSTATUS'] === 'Completed')
615
+			)
616
+			&& in_array($response_args['ACK'], array('Success', 'SuccessWithWarning'), true)
617
+		) {
618
+			// Response status OK, return response parameters for further processing.
619
+			return array('status' => true, 'args' => $response_args);
620
+		}
621
+		$errors = $this->_get_errors($response_args);
622
+		return array('status' => false, 'args' => $errors);
623
+	}
624
+
625
+
626
+
627
+	/**
628
+	 *  Log a "Cleared" request.
629
+	 *
630
+	 * @param array       $request
631
+	 * @param EEI_Payment $payment
632
+	 * @param string      $info
633
+	 * @return void
634
+	 */
635
+	private function _log_clean_request($request, $payment, $info)
636
+	{
637
+		$cleaned_request_data = $request;
638
+		unset($cleaned_request_data['PWD'], $cleaned_request_data['USER'], $cleaned_request_data['SIGNATURE']);
639
+		$this->log(array($info => $cleaned_request_data), $payment);
640
+	}
641
+
642
+
643
+
644
+	/**
645
+	 *  Get error from the response data.
646
+	 *
647
+	 * @param array $data_array
648
+	 * @return array
649
+	 */
650
+	private function _get_errors($data_array)
651
+	{
652
+		$errors = array();
653
+		$n = 0;
654
+		while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
655
+			$l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
656
+				? $data_array[ "L_ERRORCODE{$n}" ]
657
+				: '';
658
+			$l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
659
+				? $data_array[ "L_SEVERITYCODE{$n}" ]
660
+				: '';
661
+			$l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
662
+				? $data_array[ "L_SHORTMESSAGE{$n}" ]
663
+				: '';
664
+			$l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
665
+				? $data_array[ "L_LONGMESSAGE{$n}" ]
666
+				: '';
667
+			if ($n === 0) {
668
+				$errors = array(
669
+					'L_ERRORCODE'    => $l_error_code,
670
+					'L_SHORTMESSAGE' => $l_short_message,
671
+					'L_LONGMESSAGE'  => $l_long_message,
672
+					'L_SEVERITYCODE' => $l_severity_code,
673
+				);
674
+			} else {
675
+				$errors['L_ERRORCODE'] .= ', ' . $l_error_code;
676
+				$errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
677
+				$errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
678
+				$errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
679
+			}
680
+			$n++;
681
+		}
682
+		return $errors;
683
+	}
684 684
 }
Please login to merge, or discard this patch.
Spacing   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
  * ----------------------------------------------
11 11
  */
12 12
 // Quickfix to address https://events.codebasehq.com/projects/event-espresso/tickets/11089 ASAP
13
-if (! function_exists('mb_strcut')) {
13
+if ( ! function_exists('mb_strcut')) {
14 14
     /**
15 15
      * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
16 16
      * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
@@ -141,7 +141,7 @@  discard block
 block discarded – undo
141 141
         $notify_url = null,
142 142
         $cancel_url = null
143 143
     ) {
144
-        if (! $payment instanceof EEI_Payment) {
144
+        if ( ! $payment instanceof EEI_Payment) {
145 145
             $payment->set_gateway_response(
146 146
                 esc_html__(
147 147
                     'Error. No associated payment was found.',
@@ -152,7 +152,7 @@  discard block
 block discarded – undo
152 152
             return $payment;
153 153
         }
154 154
         $transaction = $payment->transaction();
155
-        if (! $transaction instanceof EEI_Transaction) {
155
+        if ( ! $transaction instanceof EEI_Transaction) {
156 156
             $payment->set_gateway_response(
157 157
                 esc_html__(
158 158
                     'Could not process this payment because it has no associated transaction.',
@@ -199,13 +199,13 @@  discard block
 block discarded – undo
199 199
             $token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
200 200
             $token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
201 201
             $token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
202
-        } elseif (! $this->_request_shipping_addr) {
202
+        } elseif ( ! $this->_request_shipping_addr) {
203 203
             // Do not request shipping details on the PP Checkout page.
204 204
             $token_request_dtls['NOSHIPPING'] = '1';
205 205
             $token_request_dtls['REQCONFIRMSHIPPING'] = '0';
206 206
         }
207 207
         // Used a business/personal logo on the PayPal page.
208
-        if (! empty($this->_image_url)) {
208
+        if ( ! empty($this->_image_url)) {
209 209
             $token_request_dtls['LOGOIMG'] = $this->_image_url;
210 210
         }
211 211
         $token_request_dtls = apply_filters(
@@ -230,7 +230,7 @@  discard block
 block discarded – undo
230 230
             );
231 231
         } else {
232 232
             if (isset($response_args['L_ERRORCODE'])) {
233
-                $payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
233
+                $payment->set_gateway_response($response_args['L_ERRORCODE'].'; '.$response_args['L_SHORTMESSAGE']);
234 234
             } else {
235 235
                 $payment->set_gateway_response(
236 236
                     esc_html__(
@@ -261,7 +261,7 @@  discard block
 block discarded – undo
261 261
         if ($payment instanceof EEI_Payment) {
262 262
             $this->log(array('Return from Authorization' => $update_info), $payment);
263 263
             $transaction = $payment->transaction();
264
-            if (! $transaction instanceof EEI_Transaction) {
264
+            if ( ! $transaction instanceof EEI_Transaction) {
265 265
                 $payment->set_gateway_response(
266 266
                     esc_html__(
267 267
                         'Could not process this payment because it has no associated transaction.',
@@ -274,7 +274,7 @@  discard block
 block discarded – undo
274 274
             $primary_registrant = $transaction->primary_registration();
275 275
             $payment_details = $payment->details();
276 276
             // Check if we still have the token.
277
-            if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
277
+            if ( ! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
278 278
                 $payment->set_status($this->_pay_model->failed_status());
279 279
                 return $payment;
280 280
             }
@@ -399,7 +399,7 @@  discard block
 block discarded – undo
399 399
         $itemized_list = array();
400 400
         $gateway_formatter = $this->_get_gateway_formatter();
401 401
         // If we have data from a previous communication with PP (on this transaction) we may use that for our list...
402
-        if (! empty($request_response_args)
402
+        if ( ! empty($request_response_args)
403 403
             && array_key_exists('L_PAYMENTREQUEST_0_AMT0', $request_response_args)
404 404
             && array_key_exists('PAYMENTREQUEST_0_ITEMAMT', $request_response_args)
405 405
         ) {
@@ -407,7 +407,7 @@  discard block
 block discarded – undo
407 407
                 if (strpos($arg_key, 'PAYMENTREQUEST_') !== false
408 408
                     && strpos($arg_key, 'NOTIFYURL') === false
409 409
                 ) {
410
-                    $itemized_list[ $arg_key ] = $arg_val;
410
+                    $itemized_list[$arg_key] = $arg_val;
411 411
                 }
412 412
             }
413 413
             // If we got only a few Items then something is not right.
@@ -460,25 +460,25 @@  discard block
 block discarded – undo
460 460
                         $line_item_quantity = 1;
461 461
                     }
462 462
                     // Item Name.
463
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
463
+                    $itemized_list['L_PAYMENTREQUEST_0_NAME'.$item_num] = mb_strcut(
464 464
                         $gateway_formatter->formatLineItemName($line_item, $payment),
465 465
                         0,
466 466
                         127
467 467
                     );
468 468
                     // Item description.
469
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
469
+                    $itemized_list['L_PAYMENTREQUEST_0_DESC'.$item_num] = mb_strcut(
470 470
                         $gateway_formatter->formatLineItemDesc($line_item, $payment),
471 471
                         0,
472 472
                         127
473 473
                     );
474 474
                     // Cost of individual item.
475
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
475
+                    $itemized_list['L_PAYMENTREQUEST_0_AMT'.$item_num] = $gateway_formatter->formatCurrency($unit_price);
476 476
                     // Item Number.
477
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
477
+                    $itemized_list['L_PAYMENTREQUEST_0_NUMBER'.$item_num] = $item_num + 1;
478 478
                     // Item quantity.
479
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
479
+                    $itemized_list['L_PAYMENTREQUEST_0_QTY'.$item_num] = $line_item_quantity;
480 480
                     // Digital item is sold.
481
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
481
+                    $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY'.$item_num] = 'Physical';
482 482
                     $itemized_sum += $line_item->total();
483 483
                     ++$item_num;
484 484
                 }
@@ -496,7 +496,7 @@  discard block
 block discarded – undo
496 496
             // add the difference as an extra line item.
497 497
             if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
498 498
                 // Item Name.
499
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
499
+                $itemized_list['L_PAYMENTREQUEST_0_NAME'.$item_num] = mb_strcut(
500 500
                     esc_html__(
501 501
                         'Other (promotion/surcharge/cancellation)',
502 502
                         'event_espresso'
@@ -505,17 +505,17 @@  discard block
 block discarded – undo
505 505
                     127
506 506
                 );
507 507
                 // Item description.
508
-                $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
508
+                $itemized_list['L_PAYMENTREQUEST_0_DESC'.$item_num] = '';
509 509
                 // Cost of individual item.
510
-                $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
510
+                $itemized_list['L_PAYMENTREQUEST_0_AMT'.$item_num] = $gateway_formatter->formatCurrency(
511 511
                     $itemized_sum_diff_from_txn_total
512 512
                 );
513 513
                 // Item Number.
514
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
514
+                $itemized_list['L_PAYMENTREQUEST_0_NUMBER'.$item_num] = $item_num + 1;
515 515
                 // Item quantity.
516
-                $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
516
+                $itemized_list['L_PAYMENTREQUEST_0_QTY'.$item_num] = 1;
517 517
                 // Digital item is sold.
518
-                $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
518
+                $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY'.$item_num] = 'Physical';
519 519
                 $item_num++;
520 520
             }
521 521
         } else {
@@ -570,7 +570,7 @@  discard block
 block discarded – undo
570 570
             'BUTTONSOURCE' => 'EventEspresso_SP',
571 571
         );
572 572
         $dtls = array_merge($request_dtls, $request_params);
573
-        $this->_log_clean_request($dtls, $payment, $request_text . ' Request');
573
+        $this->_log_clean_request($dtls, $payment, $request_text.' Request');
574 574
         // Request Customer Details.
575 575
         $request_response = wp_remote_post(
576 576
             $this->_base_gateway_url,
@@ -584,7 +584,7 @@  discard block
 block discarded – undo
584 584
             )
585 585
         );
586 586
         // Log the response.
587
-        $this->log(array($request_text . ' Response' => $request_response), $payment);
587
+        $this->log(array($request_text.' Response' => $request_response), $payment);
588 588
         return $request_response;
589 589
     }
590 590
 
@@ -604,7 +604,7 @@  discard block
 block discarded – undo
604 604
         }
605 605
         $response_args = array();
606 606
         parse_str(urldecode($request_response['body']), $response_args);
607
-        if (! isset($response_args['ACK'])) {
607
+        if ( ! isset($response_args['ACK'])) {
608 608
             return array('status' => false, 'args' => $request_response);
609 609
         }
610 610
         if ((
@@ -651,18 +651,18 @@  discard block
 block discarded – undo
651 651
     {
652 652
         $errors = array();
653 653
         $n = 0;
654
-        while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
655
-            $l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
656
-                ? $data_array[ "L_ERRORCODE{$n}" ]
654
+        while (isset($data_array["L_ERRORCODE{$n}"])) {
655
+            $l_error_code = isset($data_array["L_ERRORCODE{$n}"])
656
+                ? $data_array["L_ERRORCODE{$n}"]
657 657
                 : '';
658
-            $l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
659
-                ? $data_array[ "L_SEVERITYCODE{$n}" ]
658
+            $l_severity_code = isset($data_array["L_SEVERITYCODE{$n}"])
659
+                ? $data_array["L_SEVERITYCODE{$n}"]
660 660
                 : '';
661
-            $l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
662
-                ? $data_array[ "L_SHORTMESSAGE{$n}" ]
661
+            $l_short_message = isset($data_array["L_SHORTMESSAGE{$n}"])
662
+                ? $data_array["L_SHORTMESSAGE{$n}"]
663 663
                 : '';
664
-            $l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
665
-                ? $data_array[ "L_LONGMESSAGE{$n}" ]
664
+            $l_long_message = isset($data_array["L_LONGMESSAGE{$n}"])
665
+                ? $data_array["L_LONGMESSAGE{$n}"]
666 666
                 : '';
667 667
             if ($n === 0) {
668 668
                 $errors = array(
@@ -672,10 +672,10 @@  discard block
 block discarded – undo
672 672
                     'L_SEVERITYCODE' => $l_severity_code,
673 673
                 );
674 674
             } else {
675
-                $errors['L_ERRORCODE'] .= ', ' . $l_error_code;
676
-                $errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
677
-                $errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
678
-                $errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
675
+                $errors['L_ERRORCODE'] .= ', '.$l_error_code;
676
+                $errors['L_SHORTMESSAGE'] .= ', '.$l_short_message;
677
+                $errors['L_LONGMESSAGE'] .= ', '.$l_long_message;
678
+                $errors['L_SEVERITYCODE'] .= ', '.$l_severity_code;
679 679
             }
680 680
             $n++;
681 681
         }
Please login to merge, or discard this patch.
core/data_migration_scripts/4_1_0_stages/EE_DMS_4_1_0_events.dmsstage.php 2 patches
Indentation   +634 added lines, -639 removed lines patch added patch discarded remove patch
@@ -84,8 +84,6 @@  discard block
 block discarded – undo
84 84
   KEY `submitted` (`submitted`),
85 85
   KEY `likes` (`likes`)
86 86
 ) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8$$
87
-
88
-
89 87
  *
90 88
  * 4.1 Event model:
91 89
  * $this->_tables = array(
@@ -124,7 +122,6 @@  discard block
 block discarded – undo
124 122
                 'EVT_donations'=>new EE_Boolean_Field('EVT_donations', __("Accept Donations?", "event_espresso"), false, false)
125 123
 
126 124
             ));
127
-
128 125
  *
129 126
  * 3.1's start end table
130 127
  *
@@ -137,8 +134,6 @@  discard block
 block discarded – undo
137 134
   PRIMARY KEY (`id`),
138 135
   KEY `event_id` (`event_id`)
139 136
 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8$$
140
-
141
-
142 137
  *
143 138
  * and 4.1 Datetime model's tables and fields:
144 139
  * $this->_tables = array(
@@ -160,172 +155,172 @@  discard block
 block discarded – undo
160 155
  */
161 156
 class EE_DMS_4_1_0_events extends EE_Data_Migration_Script_Stage
162 157
 {
163
-    private $_old_table;
164
-    private $_old_start_end_table;
165
-    private $_new_table;
166
-    private $_new_meta_table;
167
-    private $_new_datetime_table;
168
-
169
-
170
-
171
-    /**
172
-     * Just initializes the status of the migration
173
-     * @throws EE_Error
174
-     */
175
-    public function __construct()
176
-    {
177
-        global $wpdb;
178
-        $this->_old_table = $wpdb->prefix."events_detail";
179
-        $this->_old_start_end_table = $wpdb->prefix."events_start_end";
180
-        $this->_new_table = $wpdb->prefix."posts";
181
-        $this->_new_meta_table = $wpdb->prefix."esp_event_meta";
182
-        $this->_new_datetime_table = $wpdb->prefix."esp_datetime";
183
-        $this->_pretty_name = __("Events", "event_espresso");
184
-        parent::__construct();
185
-    }
186
-
187
-
188
-
189
-    /**
190
-     * Counts the records to migrate; the public version may cache it
191
-     * @return int
192
-     */
193
-    public function _count_records_to_migrate()
194
-    {
195
-        global $wpdb;
196
-        $count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->_old_table . ' WHERE event_status !="D"');
197
-        return intval($count);
198
-    }
199
-
200
-
201
-
202
-    /**
203
-     * IMPORTANT: if an error is encountered, or everything is finished, this stage should update its status property accordingly.
204
-     * Note: it should not alter the count of items migrated. That is done in the public function that calls this.
205
-     * IMPORTANT: The count of items migrated should ONLY be less than $num_items_to_migrate when it's the last migration step, otherwise it
206
-     * should always return $num_items_to_migrate. (Eg, if we're migrating attendees rows from the database, and $num_items_to_migrate is set to 50,
207
-     * then we SHOULD actually migrate 50 rows,but at very least we MUST report/return 50 items migrated)
208
-     * @param int $num_items_to_migrate
209
-     * @return int number of items ACTUALLY migrated
210
-     */
211
-    protected function _migration_step($num_items_to_migrate = 50)
212
-    {
213
-        global $wpdb;
214
-        // because the migration of each event can be a LOT more work, make each step smaller
215
-        $num_items_to_migrate = max(1, $num_items_to_migrate/5);
216
-        $events = $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_table WHERE event_status!='D' LIMIT %d,%d", $this->count_records_migrated(), $num_items_to_migrate), ARRAY_A);
217
-        $items_migrated_this_step = 0;
218
-
219
-        foreach ($events as $event_row) {
220
-            $guid = null;
221
-            // insert new 4.1 Attendee object using $wpdb
222
-            $post_id = $this->_insert_cpt($event_row);
223
-            if ($post_id) {
224
-                $this->get_migration_script()->set_mapping($this->_old_table, $event_row['id'], $this->_new_table, $post_id);
225
-                $meta_id = $this->_insert_event_meta($event_row, $post_id);
226
-                if ($meta_id) {
227
-                    $this->get_migration_script()->set_mapping($this->_old_table, $event_row['id'], $this->_new_meta_table, $meta_id);
228
-                }
229
-                $this->_convert_start_end_times($event_row, $post_id);
230
-                $event_meta = maybe_unserialize($event_row['event_meta']);
231
-                $guid = isset($event_meta['event_thumbnail_url']) ? $event_meta['event_thumbnail_url'] : null;
232
-                $this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $post_id, $this);
233
-
234
-                // maybe create a venue from info on the event?
235
-                $new_venue_id = $this->_maybe_create_venue($event_row);
236
-                if ($new_venue_id) {
237
-                    $this->_insert_new_venue_to_event($post_id, $new_venue_id);
238
-                }
239
-                $this->_add_post_metas($event_row, $post_id);
240
-            }
241
-            $items_migrated_this_step++;
242
-            if ($guid) {
243
-                // if we had to check for an image attachment
244
-                // then let's call it a day (avoid timing out, because this took a long time)
245
-                break;
246
-            }
247
-        }
248
-        if ($this->count_records_migrated() + $items_migrated_this_step >= $this->count_records_to_migrate()) {
249
-            $this->set_status(EE_Data_Migration_Manager::status_completed);
250
-        }
251
-        return $items_migrated_this_step;
252
-    }
253
-
254
-    /**
255
-     * Stores any extra 3.1 "event_meta" column things as post meta
256
-     * @param array $old_event
257
-     * @param int $post_id
258
-     * @return void
259
-     */
260
-    private function _add_post_metas($old_event, $post_id)
261
-    {
262
-        $event_meta = maybe_unserialize($old_event['event_meta']);
263
-        if (! $event_meta || ! is_array($event_meta)) {
264
-            return;
265
-        }
266
-        unset($event_meta['date_submitted']);// factored into CPT
267
-        unset($event_meta['additional_attendee_reg_info']);// factored into event meta table
268
-        unset($event_meta['default_payment_status']);// dido
269
-        unset($event_meta['event_thumbnail_url']);// used to find post featured image
270
-        foreach ($event_meta as $meta_key => $meta_value) {
271
-            if ($meta_key) {// if the meta key is just an empty string, ignore it
272
-                $success = add_post_meta($post_id, $meta_key, $meta_value, true);
273
-                if (! $success) {
274
-                    $this->add_error(sprintf(__("Could not add post meta for CPT with ID #%d. Meta key: '%s',meta value:'%d' for 3.1 event: %s", "event_espresso"), $post_id, $meta_key, $meta_value, implode(",", $old_event)));
275
-                }
276
-            }
277
-        }
278
-        if ($old_event['alt_email']) {
279
-            add_post_meta($post_id, 'alt_email', $old_event['alt_email']);
280
-        }
281
-        if ($old_event['recurrence_id']) {
282
-            add_post_meta($post_id, 'recurrence_id', $old_event['recurrence_id']);
283
-        }
284
-    }
285
-
286
-
287
-
288
-    /**
289
-     * Finds a unique slug for this event, given its name (we could have simply used
290
-     * the old unique_identifier column, but it added a long string of seemingly random characters onto the end
291
-     * and really wasn't that pretty for a slug, so we decided we'd make our own slug again)
292
-     * @param string $event_name (the name of the event for reading by humans)
293
-     * @param string $old_identifier the old EE3 identifier (a long unique string)
294
-     * @param string $new_post_status a post status
295
-     * @return string
296
-     */
297
-    private function _find_unique_slug($event_name, $old_identifier = '', $new_post_status = 'publish')
298
-    {
299
-        $count = 0;
300
-        $original_name = $event_name ? sanitize_title($event_name) : $old_identifier;
301
-        return wp_unique_post_slug($original_name, 0, $new_post_status, 'espresso_events', 0);
302
-    }
303
-
304
-    /**
305
-     * returns whether or not there is a post that has this same slug (post_title)
306
-     * @global wpdb $wpdb
307
-     * @param string $slug
308
-     * @return boolean
309
-     */
310
-    private function _other_post_exists_with_that_slug($slug)
311
-    {
312
-        global $wpdb;
313
-        $query = $wpdb->prepare("SELECT COUNT(ID) FROM {$this->_new_table} WHERE event_status != 'D' AND post_name = %s", $slug);
314
-        $count = $wpdb->get_var($query);
315
-        return (boolean) intval($count);
316
-    }
317
-
318
-
319
-
320
-    /**
321
-     * @param $old_event
322
-     * @return int
323
-     */
324
-    private function _insert_cpt($old_event)
325
-    {
326
-        global $wpdb;
327
-        // convert 3.1 event status to 4.1 CPT status
328
-        // for reference, 3.1 event stati available for setting are:
158
+	private $_old_table;
159
+	private $_old_start_end_table;
160
+	private $_new_table;
161
+	private $_new_meta_table;
162
+	private $_new_datetime_table;
163
+
164
+
165
+
166
+	/**
167
+	 * Just initializes the status of the migration
168
+	 * @throws EE_Error
169
+	 */
170
+	public function __construct()
171
+	{
172
+		global $wpdb;
173
+		$this->_old_table = $wpdb->prefix."events_detail";
174
+		$this->_old_start_end_table = $wpdb->prefix."events_start_end";
175
+		$this->_new_table = $wpdb->prefix."posts";
176
+		$this->_new_meta_table = $wpdb->prefix."esp_event_meta";
177
+		$this->_new_datetime_table = $wpdb->prefix."esp_datetime";
178
+		$this->_pretty_name = __("Events", "event_espresso");
179
+		parent::__construct();
180
+	}
181
+
182
+
183
+
184
+	/**
185
+	 * Counts the records to migrate; the public version may cache it
186
+	 * @return int
187
+	 */
188
+	public function _count_records_to_migrate()
189
+	{
190
+		global $wpdb;
191
+		$count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->_old_table . ' WHERE event_status !="D"');
192
+		return intval($count);
193
+	}
194
+
195
+
196
+
197
+	/**
198
+	 * IMPORTANT: if an error is encountered, or everything is finished, this stage should update its status property accordingly.
199
+	 * Note: it should not alter the count of items migrated. That is done in the public function that calls this.
200
+	 * IMPORTANT: The count of items migrated should ONLY be less than $num_items_to_migrate when it's the last migration step, otherwise it
201
+	 * should always return $num_items_to_migrate. (Eg, if we're migrating attendees rows from the database, and $num_items_to_migrate is set to 50,
202
+	 * then we SHOULD actually migrate 50 rows,but at very least we MUST report/return 50 items migrated)
203
+	 * @param int $num_items_to_migrate
204
+	 * @return int number of items ACTUALLY migrated
205
+	 */
206
+	protected function _migration_step($num_items_to_migrate = 50)
207
+	{
208
+		global $wpdb;
209
+		// because the migration of each event can be a LOT more work, make each step smaller
210
+		$num_items_to_migrate = max(1, $num_items_to_migrate/5);
211
+		$events = $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_table WHERE event_status!='D' LIMIT %d,%d", $this->count_records_migrated(), $num_items_to_migrate), ARRAY_A);
212
+		$items_migrated_this_step = 0;
213
+
214
+		foreach ($events as $event_row) {
215
+			$guid = null;
216
+			// insert new 4.1 Attendee object using $wpdb
217
+			$post_id = $this->_insert_cpt($event_row);
218
+			if ($post_id) {
219
+				$this->get_migration_script()->set_mapping($this->_old_table, $event_row['id'], $this->_new_table, $post_id);
220
+				$meta_id = $this->_insert_event_meta($event_row, $post_id);
221
+				if ($meta_id) {
222
+					$this->get_migration_script()->set_mapping($this->_old_table, $event_row['id'], $this->_new_meta_table, $meta_id);
223
+				}
224
+				$this->_convert_start_end_times($event_row, $post_id);
225
+				$event_meta = maybe_unserialize($event_row['event_meta']);
226
+				$guid = isset($event_meta['event_thumbnail_url']) ? $event_meta['event_thumbnail_url'] : null;
227
+				$this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $post_id, $this);
228
+
229
+				// maybe create a venue from info on the event?
230
+				$new_venue_id = $this->_maybe_create_venue($event_row);
231
+				if ($new_venue_id) {
232
+					$this->_insert_new_venue_to_event($post_id, $new_venue_id);
233
+				}
234
+				$this->_add_post_metas($event_row, $post_id);
235
+			}
236
+			$items_migrated_this_step++;
237
+			if ($guid) {
238
+				// if we had to check for an image attachment
239
+				// then let's call it a day (avoid timing out, because this took a long time)
240
+				break;
241
+			}
242
+		}
243
+		if ($this->count_records_migrated() + $items_migrated_this_step >= $this->count_records_to_migrate()) {
244
+			$this->set_status(EE_Data_Migration_Manager::status_completed);
245
+		}
246
+		return $items_migrated_this_step;
247
+	}
248
+
249
+	/**
250
+	 * Stores any extra 3.1 "event_meta" column things as post meta
251
+	 * @param array $old_event
252
+	 * @param int $post_id
253
+	 * @return void
254
+	 */
255
+	private function _add_post_metas($old_event, $post_id)
256
+	{
257
+		$event_meta = maybe_unserialize($old_event['event_meta']);
258
+		if (! $event_meta || ! is_array($event_meta)) {
259
+			return;
260
+		}
261
+		unset($event_meta['date_submitted']);// factored into CPT
262
+		unset($event_meta['additional_attendee_reg_info']);// factored into event meta table
263
+		unset($event_meta['default_payment_status']);// dido
264
+		unset($event_meta['event_thumbnail_url']);// used to find post featured image
265
+		foreach ($event_meta as $meta_key => $meta_value) {
266
+			if ($meta_key) {// if the meta key is just an empty string, ignore it
267
+				$success = add_post_meta($post_id, $meta_key, $meta_value, true);
268
+				if (! $success) {
269
+					$this->add_error(sprintf(__("Could not add post meta for CPT with ID #%d. Meta key: '%s',meta value:'%d' for 3.1 event: %s", "event_espresso"), $post_id, $meta_key, $meta_value, implode(",", $old_event)));
270
+				}
271
+			}
272
+		}
273
+		if ($old_event['alt_email']) {
274
+			add_post_meta($post_id, 'alt_email', $old_event['alt_email']);
275
+		}
276
+		if ($old_event['recurrence_id']) {
277
+			add_post_meta($post_id, 'recurrence_id', $old_event['recurrence_id']);
278
+		}
279
+	}
280
+
281
+
282
+
283
+	/**
284
+	 * Finds a unique slug for this event, given its name (we could have simply used
285
+	 * the old unique_identifier column, but it added a long string of seemingly random characters onto the end
286
+	 * and really wasn't that pretty for a slug, so we decided we'd make our own slug again)
287
+	 * @param string $event_name (the name of the event for reading by humans)
288
+	 * @param string $old_identifier the old EE3 identifier (a long unique string)
289
+	 * @param string $new_post_status a post status
290
+	 * @return string
291
+	 */
292
+	private function _find_unique_slug($event_name, $old_identifier = '', $new_post_status = 'publish')
293
+	{
294
+		$count = 0;
295
+		$original_name = $event_name ? sanitize_title($event_name) : $old_identifier;
296
+		return wp_unique_post_slug($original_name, 0, $new_post_status, 'espresso_events', 0);
297
+	}
298
+
299
+	/**
300
+	 * returns whether or not there is a post that has this same slug (post_title)
301
+	 * @global wpdb $wpdb
302
+	 * @param string $slug
303
+	 * @return boolean
304
+	 */
305
+	private function _other_post_exists_with_that_slug($slug)
306
+	{
307
+		global $wpdb;
308
+		$query = $wpdb->prepare("SELECT COUNT(ID) FROM {$this->_new_table} WHERE event_status != 'D' AND post_name = %s", $slug);
309
+		$count = $wpdb->get_var($query);
310
+		return (boolean) intval($count);
311
+	}
312
+
313
+
314
+
315
+	/**
316
+	 * @param $old_event
317
+	 * @return int
318
+	 */
319
+	private function _insert_cpt($old_event)
320
+	{
321
+		global $wpdb;
322
+		// convert 3.1 event status to 4.1 CPT status
323
+		// for reference, 3.1 event stati available for setting are:
329 324
 //      $status = array(array('id' => 'A', 'text' => __('Public', 'event_espresso')), array('id' => 'S', 'text' => __('Waitlist', 'event_espresso')), array('id' => 'O', 'text' => __('Ongoing', 'event_espresso')), array('id' => 'R', 'text' => __('Draft', 'event_espresso')), array('id' => 'D', 'text' => __('Deleted', 'event_espresso')));
330 325
 //      and the json api uses the following to convert from 3.1 to 4.0
331 326
 //      'S'=>'secondary/waitlist',
@@ -339,486 +334,486 @@  discard block
 block discarded – undo
339 334
 //      4.1 Event Post stati are the normal post statis
340 335
 //      (publish,future,draft,pending,private,trash,auto-draft,inherit)
341 336
 //      and 3 custom ones: cancelled,postponed,sold_out
342
-        $status_conversions = array(
343
-            'R'=>'draft',
344
-            'X'=>'draft',// 4.1 doesn't have a "not approved for publishing" status. this is what posts are set to that aren't approved
345
-            'P'=>'pending',
346
-            'IA'=>'draft',// draft and in the past
337
+		$status_conversions = array(
338
+			'R'=>'draft',
339
+			'X'=>'draft',// 4.1 doesn't have a "not approved for publishing" status. this is what posts are set to that aren't approved
340
+			'P'=>'pending',
341
+			'IA'=>'draft',// draft and in the past
347 342
 // IA=inactive in 3.1: events were switched to this when they expired. in 4.1 that's just calculated
348
-            'O'=>'publish',// @todo: will be an event type later; if this is the status, set the end date WAAAY later; and add term for 'ongoing'
349
-            'A'=>'publish',
350
-            'S'=>'draft',// @todo: is it ok to just mark secondary/waitlist events as DRAFTS?
351
-            'D'=>'trash',
352
-        );
353
-        $post_status = $status_conversions[ $old_event['event_status'] ];
354
-        // check if we've sold out
355
-        if (intval($old_event['reg_limit']) <= self::count_registrations($old_event['id'])) {
356
-            $post_status = 'sold_out';
357
-        }
343
+			'O'=>'publish',// @todo: will be an event type later; if this is the status, set the end date WAAAY later; and add term for 'ongoing'
344
+			'A'=>'publish',
345
+			'S'=>'draft',// @todo: is it ok to just mark secondary/waitlist events as DRAFTS?
346
+			'D'=>'trash',
347
+		);
348
+		$post_status = $status_conversions[ $old_event['event_status'] ];
349
+		// check if we've sold out
350
+		if (intval($old_event['reg_limit']) <= self::count_registrations($old_event['id'])) {
351
+			$post_status = 'sold_out';
352
+		}
358 353
 //      FYI postponed and cancelled don't exist in 3.1
359
-        $cols_n_values = array(
360
-            'post_title'=>stripslashes($old_event['event_name']),// EVT_name
361
-            'post_content'=>stripslashes($old_event['event_desc']),// EVT_desc
362
-            'post_name'=>$this->_find_unique_slug($old_event['event_name'], $old_event['event_identifier'], $post_status),// EVT_slug
363
-            'post_date'=>$old_event['submitted'],// EVT_created NOT
364
-            'post_date_gmt'=>get_gmt_from_date($old_event['submitted']),
365
-            'post_excerpt'=>'',// EVT_short_desc
366
-            'post_modified'=>$old_event['submitted'],// EVT_modified
367
-            'post_modified_gmt'=>get_gmt_from_date($old_event['submitted']),
368
-            'post_author'=>$old_event['wp_user'],// EVT_wp_user
369
-            'post_parent'=>0,// parent maybe get this from some REM field?
370
-            'menu_order'=>0,// EVT_order
371
-            'post_type'=>'espresso_events',// post_type
372
-            'post_status'=>$post_status,// status
373
-        );
374
-        $cols_n_values_with_no_invalid_text = array();
375
-        foreach ($cols_n_values as $col => $value) {
376
-            $value_sans_invalid_chars = $wpdb->strip_invalid_text_for_column($this->_new_table, $col, $value);
377
-            if (! is_wp_error($value_sans_invalid_chars)) {
378
-                $cols_n_values_with_no_invalid_text[ $col ] = $value_sans_invalid_chars;
379
-            } else {
380
-                // otherwise leave it as-is. It will blow everything up and stop the migration
381
-                $cols_n_values_with_no_invalid_text[ $col ] = $value;
382
-            }
383
-        }
384
-        $cols_n_values = $cols_n_values_with_no_invalid_text;
385
-        $datatypes = array(
386
-            '%s',// EVT_name
387
-            '%s',// EVT_desc
388
-            '%s',// EVT_slug
389
-            '%s',// EVT_created
390
-            '%s',
391
-            '%s',// EVT_short_desc
392
-            '%s',// EVT_modified
393
-            '%s',
394
-            '%s',// EVT_wp_user
395
-            '%d',// post_parent
396
-            '%d',// EVT_order
397
-            '%s',// post_type
398
-            '%s',// status
399
-        );
400
-        $success = $wpdb->insert(
401
-            $this->_new_table,
402
-            $cols_n_values,
403
-            $datatypes
404
-        );
405
-        if (! $success) {
406
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_table, $cols_n_values, $datatypes));
407
-            return 0;
408
-        }
409
-        return $wpdb->insert_id;
410
-    }
411
-
412
-    /**
413
-     * Counts all the registrations for the event in the 3.1 DB. (takes into account attendee rows which represent various registrations)
414
-     * @global wpdb $wpdb
415
-     * @param int $event_id
416
-     * @return int
417
-     */
418
-    public static function count_registrations($event_id)
419
-    {
420
-        global $wpdb;
421
-        $count = $wpdb->get_var($wpdb->prepare("SELECT sum(quantity) FROM {$wpdb->prefix}events_attendee WHERE event_id=%d", $event_id));
422
-        return intval($count);
423
-    }
424
-
425
-
426
-
427
-    /**
428
-     * @param $old_event
429
-     * @param $new_cpt_id
430
-     * @return int
431
-     */
432
-    private function _insert_event_meta($old_event, $new_cpt_id)
433
-    {
434
-        global $wpdb;
435
-        $event_meta = maybe_unserialize($old_event['event_meta']);
354
+		$cols_n_values = array(
355
+			'post_title'=>stripslashes($old_event['event_name']),// EVT_name
356
+			'post_content'=>stripslashes($old_event['event_desc']),// EVT_desc
357
+			'post_name'=>$this->_find_unique_slug($old_event['event_name'], $old_event['event_identifier'], $post_status),// EVT_slug
358
+			'post_date'=>$old_event['submitted'],// EVT_created NOT
359
+			'post_date_gmt'=>get_gmt_from_date($old_event['submitted']),
360
+			'post_excerpt'=>'',// EVT_short_desc
361
+			'post_modified'=>$old_event['submitted'],// EVT_modified
362
+			'post_modified_gmt'=>get_gmt_from_date($old_event['submitted']),
363
+			'post_author'=>$old_event['wp_user'],// EVT_wp_user
364
+			'post_parent'=>0,// parent maybe get this from some REM field?
365
+			'menu_order'=>0,// EVT_order
366
+			'post_type'=>'espresso_events',// post_type
367
+			'post_status'=>$post_status,// status
368
+		);
369
+		$cols_n_values_with_no_invalid_text = array();
370
+		foreach ($cols_n_values as $col => $value) {
371
+			$value_sans_invalid_chars = $wpdb->strip_invalid_text_for_column($this->_new_table, $col, $value);
372
+			if (! is_wp_error($value_sans_invalid_chars)) {
373
+				$cols_n_values_with_no_invalid_text[ $col ] = $value_sans_invalid_chars;
374
+			} else {
375
+				// otherwise leave it as-is. It will blow everything up and stop the migration
376
+				$cols_n_values_with_no_invalid_text[ $col ] = $value;
377
+			}
378
+		}
379
+		$cols_n_values = $cols_n_values_with_no_invalid_text;
380
+		$datatypes = array(
381
+			'%s',// EVT_name
382
+			'%s',// EVT_desc
383
+			'%s',// EVT_slug
384
+			'%s',// EVT_created
385
+			'%s',
386
+			'%s',// EVT_short_desc
387
+			'%s',// EVT_modified
388
+			'%s',
389
+			'%s',// EVT_wp_user
390
+			'%d',// post_parent
391
+			'%d',// EVT_order
392
+			'%s',// post_type
393
+			'%s',// status
394
+		);
395
+		$success = $wpdb->insert(
396
+			$this->_new_table,
397
+			$cols_n_values,
398
+			$datatypes
399
+		);
400
+		if (! $success) {
401
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_table, $cols_n_values, $datatypes));
402
+			return 0;
403
+		}
404
+		return $wpdb->insert_id;
405
+	}
406
+
407
+	/**
408
+	 * Counts all the registrations for the event in the 3.1 DB. (takes into account attendee rows which represent various registrations)
409
+	 * @global wpdb $wpdb
410
+	 * @param int $event_id
411
+	 * @return int
412
+	 */
413
+	public static function count_registrations($event_id)
414
+	{
415
+		global $wpdb;
416
+		$count = $wpdb->get_var($wpdb->prepare("SELECT sum(quantity) FROM {$wpdb->prefix}events_attendee WHERE event_id=%d", $event_id));
417
+		return intval($count);
418
+	}
419
+
420
+
421
+
422
+	/**
423
+	 * @param $old_event
424
+	 * @param $new_cpt_id
425
+	 * @return int
426
+	 */
427
+	private function _insert_event_meta($old_event, $new_cpt_id)
428
+	{
429
+		global $wpdb;
430
+		$event_meta = maybe_unserialize($old_event['event_meta']);
436 431
 //      for reference, 3.1 'default_payment_status' are: $default_payment_status = array(
437 432
 //  array('id' => "", 'text' => 'No Change'),
438 433
 //  array('id' => 'Incomplete', 'text' => 'Incomplete'),
439 434
 //  array('id' => 'Pending', 'text' => 'Pending'),
440 435
 //  //array('id' => 'Completed', 'text' => 'Completed')
441 436
 // );
442
-        $default_reg_status = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID(isset($event_meta['default_payment_status']) ? $event_meta['default_payment_status'] : '', intval($old_event['require_pre_approval']));
443
-        $cols_n_values = array(
444
-            'EVT_ID'=>$new_cpt_id,// EVT_ID_fk
445
-            'EVT_display_desc'=> 'Y' == $old_event['display_desc'],
446
-            'EVT_display_ticket_selector'=> 'Y'== $old_event['display_reg_form'],
447
-            'EVT_visible_on'=> $this->get_migration_script()->convert_date_string_to_utc($this, $old_event, current_time('mysql'), $old_event['timezone_string']),// don't use the old 'visible_on', as it wasn't ever used
448
-            'EVT_additional_limit'=> $old_event['allow_multiple'] == 'N' ? 1 : $old_event['additional_limit'],
449
-            'EVT_default_registration_status' => $default_reg_status,
450
-            'EVT_member_only'=>$old_event['member_only'],
451
-            'EVT_phone'=> $old_event['phone'],
452
-            'EVT_allow_overflow' => 'Y' == $old_event['allow_overflow'],
453
-            'EVT_timezone_string'=> $old_event['timezone_string'],
454
-            'EVT_external_URL'=>$old_event['externalURL'],
455
-            'EVT_donations'=>false// doesnt exist in 3.1
456
-
457
-        );
458
-        $datatypes = array(
459
-            '%s',// EVT_ID
460
-            '%d',// EVT_display_desc
461
-            '%d',// EVT_display_ticket_selector
462
-            '%s',// EVT_visible_on
463
-            '%d',// EVT_additional_limit
464
-            '%s',// EVT_default_registration_status
465
-            '%d',// EVT_member_only
466
-            '%s',// EVT_phone
467
-            '%d',// EVT_allow_overflow
468
-            '%s',// EVT_timezone_string
469
-            '%s',// EVT_external_URL
470
-            '%d',// EVT_donations
471
-        );
472
-        $success = $wpdb->insert(
473
-            $this->_new_meta_table,
474
-            $cols_n_values,
475
-            $datatypes
476
-        );
477
-        if (! $success) {
478
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $cols_n_values, $datatypes));
479
-            return 0;
480
-        }
481
-        return $wpdb->insert_id;
482
-    }
483
-
484
-
485
-
486
-    /**
487
-     * @param $old_event
488
-     * @return int
489
-     */
490
-    private function _maybe_create_venue($old_event)
491
-    {
492
-        if ($old_event['address'] ||
493
-                $old_event['address2'] ||
494
-                $old_event['city'] ||
495
-                $old_event['state'] ||
496
-                $old_event['zip'] ||
497
-                $old_event['venue_title'] ||
498
-                $old_event['venue_url'] ||
499
-                $old_event['venue_image'] ||
500
-                $old_event['venue_phone'] ||
501
-                $old_event['virtual_url'] ||
502
-                $old_event['virtual_phone']
503
-                ) {
504
-            $old_id = $this->_duplicate_venue_exists($old_event);
505
-            if ($old_id) {
506
-                return $old_id;
507
-            }
508
-            $new_id = $this->_insert_venue_into_posts($old_event);
509
-            if ($new_id) {
510
-                $this->_insert_venue_into_meta_table($new_id, $old_event);
511
-                $guid = isset($old_event['venue_image']) ? $old_event['venue_image']  : null;
512
-                $this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $new_id, $this);
513
-            }
514
-            // we don't bother recording the conversion from old events to venues as that
515
-            // will complicate finding the conversion from old venues to new events
516
-            return $new_id;
517
-        } else {
518
-            return 0;
519
-        }
520
-    }
521
-
522
-    /**
523
-     * Assuming there is venue data on this event, check if there is a duplicate venue already in the system for it.
524
-     * If so, return it. Otherwise return NULL.
525
-     * @param array $old_event
526
-     * @return int duplicate venue id
527
-     */
528
-    private function _duplicate_venue_exists($old_event)
529
-    {
530
-        global $wpdb;
531
-        $conditions = array(
532
-            'VNU_address' => $old_event ['address'],
533
-            'VNU_address2' => $old_event['address2'],
534
-            'VNU_city' => $old_event['city'],
535
-            'VNU_zip' => $old_event['zip'],
536
-            'post_title'=> $this->_get_venue_title_for_event($old_event),
537
-            'VNU_phone'=>$old_event['venue_phone'],// VNU_phone
538
-            'VNU_url'=>$old_event['venue_url'],// VNU_url
539
-            'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone
540
-            'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url
541
-        );
542
-        $sql_conditions = array();
543
-        foreach ($conditions as $column => $value) {
544
-            $sql_conditions [] = $wpdb->prepare("$column = %s", $value);
545
-        }
546
-        $query = "SELECT VNU_ID
437
+		$default_reg_status = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID(isset($event_meta['default_payment_status']) ? $event_meta['default_payment_status'] : '', intval($old_event['require_pre_approval']));
438
+		$cols_n_values = array(
439
+			'EVT_ID'=>$new_cpt_id,// EVT_ID_fk
440
+			'EVT_display_desc'=> 'Y' == $old_event['display_desc'],
441
+			'EVT_display_ticket_selector'=> 'Y'== $old_event['display_reg_form'],
442
+			'EVT_visible_on'=> $this->get_migration_script()->convert_date_string_to_utc($this, $old_event, current_time('mysql'), $old_event['timezone_string']),// don't use the old 'visible_on', as it wasn't ever used
443
+			'EVT_additional_limit'=> $old_event['allow_multiple'] == 'N' ? 1 : $old_event['additional_limit'],
444
+			'EVT_default_registration_status' => $default_reg_status,
445
+			'EVT_member_only'=>$old_event['member_only'],
446
+			'EVT_phone'=> $old_event['phone'],
447
+			'EVT_allow_overflow' => 'Y' == $old_event['allow_overflow'],
448
+			'EVT_timezone_string'=> $old_event['timezone_string'],
449
+			'EVT_external_URL'=>$old_event['externalURL'],
450
+			'EVT_donations'=>false// doesnt exist in 3.1
451
+
452
+		);
453
+		$datatypes = array(
454
+			'%s',// EVT_ID
455
+			'%d',// EVT_display_desc
456
+			'%d',// EVT_display_ticket_selector
457
+			'%s',// EVT_visible_on
458
+			'%d',// EVT_additional_limit
459
+			'%s',// EVT_default_registration_status
460
+			'%d',// EVT_member_only
461
+			'%s',// EVT_phone
462
+			'%d',// EVT_allow_overflow
463
+			'%s',// EVT_timezone_string
464
+			'%s',// EVT_external_URL
465
+			'%d',// EVT_donations
466
+		);
467
+		$success = $wpdb->insert(
468
+			$this->_new_meta_table,
469
+			$cols_n_values,
470
+			$datatypes
471
+		);
472
+		if (! $success) {
473
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $cols_n_values, $datatypes));
474
+			return 0;
475
+		}
476
+		return $wpdb->insert_id;
477
+	}
478
+
479
+
480
+
481
+	/**
482
+	 * @param $old_event
483
+	 * @return int
484
+	 */
485
+	private function _maybe_create_venue($old_event)
486
+	{
487
+		if ($old_event['address'] ||
488
+				$old_event['address2'] ||
489
+				$old_event['city'] ||
490
+				$old_event['state'] ||
491
+				$old_event['zip'] ||
492
+				$old_event['venue_title'] ||
493
+				$old_event['venue_url'] ||
494
+				$old_event['venue_image'] ||
495
+				$old_event['venue_phone'] ||
496
+				$old_event['virtual_url'] ||
497
+				$old_event['virtual_phone']
498
+				) {
499
+			$old_id = $this->_duplicate_venue_exists($old_event);
500
+			if ($old_id) {
501
+				return $old_id;
502
+			}
503
+			$new_id = $this->_insert_venue_into_posts($old_event);
504
+			if ($new_id) {
505
+				$this->_insert_venue_into_meta_table($new_id, $old_event);
506
+				$guid = isset($old_event['venue_image']) ? $old_event['venue_image']  : null;
507
+				$this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $new_id, $this);
508
+			}
509
+			// we don't bother recording the conversion from old events to venues as that
510
+			// will complicate finding the conversion from old venues to new events
511
+			return $new_id;
512
+		} else {
513
+			return 0;
514
+		}
515
+	}
516
+
517
+	/**
518
+	 * Assuming there is venue data on this event, check if there is a duplicate venue already in the system for it.
519
+	 * If so, return it. Otherwise return NULL.
520
+	 * @param array $old_event
521
+	 * @return int duplicate venue id
522
+	 */
523
+	private function _duplicate_venue_exists($old_event)
524
+	{
525
+		global $wpdb;
526
+		$conditions = array(
527
+			'VNU_address' => $old_event ['address'],
528
+			'VNU_address2' => $old_event['address2'],
529
+			'VNU_city' => $old_event['city'],
530
+			'VNU_zip' => $old_event['zip'],
531
+			'post_title'=> $this->_get_venue_title_for_event($old_event),
532
+			'VNU_phone'=>$old_event['venue_phone'],// VNU_phone
533
+			'VNU_url'=>$old_event['venue_url'],// VNU_url
534
+			'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone
535
+			'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url
536
+		);
537
+		$sql_conditions = array();
538
+		foreach ($conditions as $column => $value) {
539
+			$sql_conditions [] = $wpdb->prepare("$column = %s", $value);
540
+		}
541
+		$query = "SELECT VNU_ID
547 542
 					FROM
548 543
 		{$wpdb->posts} as p INNER JOIN
549 544
 		{$wpdb->prefix}esp_venue_meta as v ON p.ID = v.VNU_ID
550 545
 			WHERE " . implode(" AND ", $sql_conditions) . " LIMIT 1";
551
-        $id = $wpdb->get_var($query);
552
-        return $id;
553
-    }
554
-
555
-    /**
556
-     * Gets teh venue's title or makes one up if there is none
557
-     * @param array $event_data_array keys are events_details columns and values are their values
558
-     * @return string
559
-     */
560
-    protected function _get_venue_title_for_event($event_data_array)
561
-    {
562
-        return $event_data_array['venue_title'] ? stripslashes($event_data_array['venue_title']) : stripslashes(sprintf(__('Venue of %s', 'event_espresso'), $event_data_array['event_name']));
563
-    }
564
-
565
-    /**
566
-     * Inserts the CPT
567
-     *
568
-     * @param array $old_event keys are cols, values are col values
569
-     * @return int
570
-     */
571
-    private function _insert_venue_into_posts($old_event)
572
-    {
573
-        global $wpdb;
574
-        $insertion_array = array(
575
-                    'post_title'=> $this->_get_venue_title_for_event($old_event),// VNU_name
576
-                    'post_content'=>'',// VNU_desc
577
-                    'post_name'=> $this->_find_unique_slug($old_event['venue_title'], sanitize_title('venue-of-' . $old_event['event_name'])),// VNU_identifier
578
-                    'post_date'=>current_time('mysql'),// VNU_created
579
-                    'post_date_gmt'=>get_gmt_from_date(current_time('mysql')),
580
-                    'post_excerpt'=>'',// VNU_short_desc arbitrary only 50 characters
581
-                    'post_modified'=>current_time('mysql'),// VNU_modified
582
-                    'post_modified_gmt'=>get_gmt_from_date(current_time('mysql')),
583
-                    'post_author'=>$old_event['wp_user'],// VNU_wp_user
584
-                    'post_parent'=>0,// parent
585
-                    'menu_order'=>0,// VNU_order
586
-                    'post_type'=>'espresso_venues'// post_type
587
-                );
588
-        $datatypes_array = array(
589
-                    '%s',// VNU_name
590
-                    '%s',// VNU_desc
591
-                    '%s',// VNU_identifier
592
-                    '%s',// VNU_created
593
-                    '%s',
594
-                    '%s',// VNU_short_desc
595
-                    '%s',// VNU_modified
596
-                    '%s',
597
-                    '%d',// VNU_wp_user
598
-                    '%d',// parent
599
-                    '%d',// VNU_order
600
-                    '%s',// post_type
601
-                );
602
-        $success = $wpdb->insert(
603
-            $wpdb->posts,
604
-            $insertion_array,
605
-            $datatypes_array
606
-        );
607
-        if (! $success) {
608
-            $this->add_error(
609
-                $this->get_migration_script()->_create_error_message_for_db_insertion(
610
-                    $this->_old_table,
611
-                    $old_event,
612
-                    $this->_new_table,
613
-                    $insertion_array,
614
-                    $datatypes_array
615
-                )
616
-            );
617
-            return 0;
618
-        }
619
-        return $wpdb->insert_id;
620
-    }
621
-
622
-    /**
623
-     * Inserts into the venue_meta table
624
-     * @param int $cpt_id
625
-     * @param array $old_event
626
-     * @return int
627
-     */
628
-    private function _insert_venue_into_meta_table($cpt_id, $old_event)
629
-    {
630
-        global $wpdb;
631
-
632
-        // assume the country is the same as the organization's old settings
633
-        $country_iso = $this->get_migration_script()->get_default_country_iso();
634
-        // find the state from the venue, or the organization, or just guess california
635
-        if (! $old_event['state']) {
636
-            $old_org_options = get_option('events_organization_settings');
637
-            $state_name = stripslashes($old_org_options['organization_state']);
638
-        } else {
639
-            $state_name = $old_event['state'];
640
-        }
641
-        if (! $state_name) {
642
-            $state_name = 'CA';
643
-        }
644
-        // get a state ID with the same name, if possible
645
-        try {
646
-            $state = $this->get_migration_script()->get_or_create_state($state_name, $country_iso);
647
-            $state_id = $state['STA_ID'];
648
-        } catch (EE_Error $e) {
649
-            $this->add_error($e->getMessage());
650
-            $state_id = 0;
651
-        }
652
-        // now insert into meta table
653
-        $insertion_array = array(
654
-            'VNU_ID'=>$cpt_id,// VNU_ID_fk
655
-            'VNU_address'=>stripslashes($old_event['address']),// VNU_address
656
-            'VNU_address2'=>stripslashes($old_event['address2']),// VNU_address2
657
-            'VNU_city'=>stripslashes($old_event['city']),// VNU_city
658
-            'STA_ID'=>$state_id,// STA_ID
659
-            'CNT_ISO'=>$country_iso,// CNT_ISO
660
-            'VNU_zip'=>$old_event['zip'],// VNU_zip
661
-            'VNU_phone'=>$old_event['venue_phone'],// VNU_phone
662
-            'VNU_capacity'=>-1,// VNU_capacity
663
-            'VNU_url'=>$old_event['venue_url'],// VNU_url
664
-            'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone
665
-            'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url
666
-            'VNU_google_map_link'=>'',// VNU_google_map_link
667
-            'VNU_enable_for_gmap'=>true // VNU_enable_for_gmap
668
-        );
669
-        $datatypes = array(
670
-            '%d',// VNU_ID_fk
671
-            '%s',// VNU_address
672
-            '%s',// VNU_address2
673
-            '%s',// VNU_city
674
-            '%d',// STA_ID
675
-            '%s',// CNT_ISO
676
-            '%s',// VNU_zip
677
-            '%s',// VNU_phone
678
-            '%d',// VNU_capacity
679
-            '%s',// VNU_url
680
-            '%s',// VNU_virtual_phone
681
-            '%s',// VNU_virtual_url
682
-            '%s',// VNU_google_map_link
683
-            '%d',// VNU_enable_for_gmap
684
-        );
685
-        $success = $wpdb->insert($wpdb->prefix."esp_venue_meta", $insertion_array, $datatypes);
686
-        if (! $success) {
687
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $insertion_array, $datatypes));
688
-            return 0;
689
-        }
690
-        return $wpdb->insert_id;
691
-    }
692
-
693
-
694
-
695
-    /**
696
-     * @param $new_event_id
697
-     * @param $new_venue_id
698
-     * @return int
699
-     */
700
-    private function _insert_new_venue_to_event($new_event_id, $new_venue_id)
701
-    {
702
-        global $wpdb;
703
-        if (! $new_event_id) {
704
-            $this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $new_event_id));
705
-            return 0;
706
-        }
707
-        if (! $new_venue_id) {
708
-            $this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $new_venue_id));
709
-            return 0;
710
-        }
711
-        $cols_n_values = array(
712
-            'EVT_ID'=>$new_event_id,
713
-            'VNU_ID'=>$new_venue_id,
714
-            'EVV_primary'=>true
715
-        );
716
-        $datatypes = array(
717
-            '%d',// EVT_ID
718
-            '%d',// VNU_ID
719
-            '%d',// EVT_primary
720
-        );
721
-        $success = $wpdb->insert($wpdb->prefix."esp_event_venue", $cols_n_values, $datatypes);
722
-        if (! $success) {
723
-            $this->add_error(
724
-                $this->get_migration_script()->_create_error_message_for_db_insertion(
725
-                    $this->_old_table,
726
-                    array(),
727
-                    $this->_new_table,
728
-                    $cols_n_values,
729
-                    $datatypes
730
-                )
731
-            );
732
-            return 0;
733
-        }
734
-        return $wpdb->insert_id;
735
-    }
736
-    /**
737
-     * Converts all the 3.1 start-end times for the event to 4.1 datetimes
738
-     * @global wpdb $wpdb
739
-     * @param array $old_event results of get_results(...,ARRAY_A)
740
-     * @param int $new_cpt_id new post ID
741
-     * @return void (if there are errors though, adds them to the stage's error list
742
-     */
743
-    private function _convert_start_end_times($old_event, $new_cpt_id)
744
-    {
745
-        $start_end_times = $this->_get_old_start_end_times($old_event['id']);
746
-        foreach ($start_end_times as $start_end_time) {
747
-            $datetime_id = $this->_insert_new_datetime($start_end_time, $old_event, $new_cpt_id);
748
-            if ($datetime_id) {
749
-                $this->get_migration_script()->set_mapping($this->_old_start_end_table, $start_end_time['id'], $this->_new_datetime_table, $datetime_id);
750
-            }
751
-        }
752
-    }
753
-    /**
754
-     * Queries the 3.1 wp_events_start_end table to get all the start and end times for the event
755
-     * @global wpdb $wpdb
756
-     * @param int $old_event_id
757
-     * @return array
758
-     */
759
-    private function _get_old_start_end_times($old_event_id)
760
-    {
761
-        global $wpdb;
762
-        return $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_start_end_table WHERE event_id=%d", $old_event_id), ARRAY_A);
763
-    }
764
-    /**
765
-     * Inserts a 4.1 datetime given the 3.1 start_end db row and event_details row
766
-     * @param array $start_end_time_row
767
-     * @param array $old_event_row
768
-     * @param int $new_cpt_id
769
-     * @return int ID of new datetime
770
-     */
771
-    private function _insert_new_datetime($start_end_time_row, $old_event_row, $new_cpt_id)
772
-    {
773
-        global $wpdb;
774
-        $start_date = $old_event_row['start_date'];
775
-        $start_time = $this->get_migration_script()->convertTimeFromAMPM($start_end_time_row['start_time']);
776
-        $end_date = $old_event_row['end_date'];
777
-        $end_time = $this->get_migration_script()->convertTimeFromAMPM($start_end_time_row['end_time']);
778
-        $existing_datetimes = $this->_count_other_datetimes_exist_for_new_event($new_cpt_id);
779
-        $start_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$start_date $start_time:00", $old_event_row['timezone_string']);
780
-        $end_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$end_date $end_time:00", $old_event_row['timezone_string']);
781
-        $cols_n_values = array(
782
-            'EVT_ID'=>$new_cpt_id,// EVT_ID
783
-            'DTT_EVT_start'=>$start_datetime_utc,// DTT_EVT_start
784
-            'DTT_EVT_end'=> $end_datetime_utc,// DTT_EVT_end
785
-            'DTT_reg_limit'=>intval($start_end_time_row['reg_limit']) ? $start_end_time_row['reg_limit'] : $old_event_row['reg_limit'],// DTT_reg_limit
786
-            'DTT_sold'=>0,// note: we will increment this as registrations are added during the migration
546
+		$id = $wpdb->get_var($query);
547
+		return $id;
548
+	}
549
+
550
+	/**
551
+	 * Gets teh venue's title or makes one up if there is none
552
+	 * @param array $event_data_array keys are events_details columns and values are their values
553
+	 * @return string
554
+	 */
555
+	protected function _get_venue_title_for_event($event_data_array)
556
+	{
557
+		return $event_data_array['venue_title'] ? stripslashes($event_data_array['venue_title']) : stripslashes(sprintf(__('Venue of %s', 'event_espresso'), $event_data_array['event_name']));
558
+	}
559
+
560
+	/**
561
+	 * Inserts the CPT
562
+	 *
563
+	 * @param array $old_event keys are cols, values are col values
564
+	 * @return int
565
+	 */
566
+	private function _insert_venue_into_posts($old_event)
567
+	{
568
+		global $wpdb;
569
+		$insertion_array = array(
570
+					'post_title'=> $this->_get_venue_title_for_event($old_event),// VNU_name
571
+					'post_content'=>'',// VNU_desc
572
+					'post_name'=> $this->_find_unique_slug($old_event['venue_title'], sanitize_title('venue-of-' . $old_event['event_name'])),// VNU_identifier
573
+					'post_date'=>current_time('mysql'),// VNU_created
574
+					'post_date_gmt'=>get_gmt_from_date(current_time('mysql')),
575
+					'post_excerpt'=>'',// VNU_short_desc arbitrary only 50 characters
576
+					'post_modified'=>current_time('mysql'),// VNU_modified
577
+					'post_modified_gmt'=>get_gmt_from_date(current_time('mysql')),
578
+					'post_author'=>$old_event['wp_user'],// VNU_wp_user
579
+					'post_parent'=>0,// parent
580
+					'menu_order'=>0,// VNU_order
581
+					'post_type'=>'espresso_venues'// post_type
582
+				);
583
+		$datatypes_array = array(
584
+					'%s',// VNU_name
585
+					'%s',// VNU_desc
586
+					'%s',// VNU_identifier
587
+					'%s',// VNU_created
588
+					'%s',
589
+					'%s',// VNU_short_desc
590
+					'%s',// VNU_modified
591
+					'%s',
592
+					'%d',// VNU_wp_user
593
+					'%d',// parent
594
+					'%d',// VNU_order
595
+					'%s',// post_type
596
+				);
597
+		$success = $wpdb->insert(
598
+			$wpdb->posts,
599
+			$insertion_array,
600
+			$datatypes_array
601
+		);
602
+		if (! $success) {
603
+			$this->add_error(
604
+				$this->get_migration_script()->_create_error_message_for_db_insertion(
605
+					$this->_old_table,
606
+					$old_event,
607
+					$this->_new_table,
608
+					$insertion_array,
609
+					$datatypes_array
610
+				)
611
+			);
612
+			return 0;
613
+		}
614
+		return $wpdb->insert_id;
615
+	}
616
+
617
+	/**
618
+	 * Inserts into the venue_meta table
619
+	 * @param int $cpt_id
620
+	 * @param array $old_event
621
+	 * @return int
622
+	 */
623
+	private function _insert_venue_into_meta_table($cpt_id, $old_event)
624
+	{
625
+		global $wpdb;
626
+
627
+		// assume the country is the same as the organization's old settings
628
+		$country_iso = $this->get_migration_script()->get_default_country_iso();
629
+		// find the state from the venue, or the organization, or just guess california
630
+		if (! $old_event['state']) {
631
+			$old_org_options = get_option('events_organization_settings');
632
+			$state_name = stripslashes($old_org_options['organization_state']);
633
+		} else {
634
+			$state_name = $old_event['state'];
635
+		}
636
+		if (! $state_name) {
637
+			$state_name = 'CA';
638
+		}
639
+		// get a state ID with the same name, if possible
640
+		try {
641
+			$state = $this->get_migration_script()->get_or_create_state($state_name, $country_iso);
642
+			$state_id = $state['STA_ID'];
643
+		} catch (EE_Error $e) {
644
+			$this->add_error($e->getMessage());
645
+			$state_id = 0;
646
+		}
647
+		// now insert into meta table
648
+		$insertion_array = array(
649
+			'VNU_ID'=>$cpt_id,// VNU_ID_fk
650
+			'VNU_address'=>stripslashes($old_event['address']),// VNU_address
651
+			'VNU_address2'=>stripslashes($old_event['address2']),// VNU_address2
652
+			'VNU_city'=>stripslashes($old_event['city']),// VNU_city
653
+			'STA_ID'=>$state_id,// STA_ID
654
+			'CNT_ISO'=>$country_iso,// CNT_ISO
655
+			'VNU_zip'=>$old_event['zip'],// VNU_zip
656
+			'VNU_phone'=>$old_event['venue_phone'],// VNU_phone
657
+			'VNU_capacity'=>-1,// VNU_capacity
658
+			'VNU_url'=>$old_event['venue_url'],// VNU_url
659
+			'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone
660
+			'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url
661
+			'VNU_google_map_link'=>'',// VNU_google_map_link
662
+			'VNU_enable_for_gmap'=>true // VNU_enable_for_gmap
663
+		);
664
+		$datatypes = array(
665
+			'%d',// VNU_ID_fk
666
+			'%s',// VNU_address
667
+			'%s',// VNU_address2
668
+			'%s',// VNU_city
669
+			'%d',// STA_ID
670
+			'%s',// CNT_ISO
671
+			'%s',// VNU_zip
672
+			'%s',// VNU_phone
673
+			'%d',// VNU_capacity
674
+			'%s',// VNU_url
675
+			'%s',// VNU_virtual_phone
676
+			'%s',// VNU_virtual_url
677
+			'%s',// VNU_google_map_link
678
+			'%d',// VNU_enable_for_gmap
679
+		);
680
+		$success = $wpdb->insert($wpdb->prefix."esp_venue_meta", $insertion_array, $datatypes);
681
+		if (! $success) {
682
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $insertion_array, $datatypes));
683
+			return 0;
684
+		}
685
+		return $wpdb->insert_id;
686
+	}
687
+
688
+
689
+
690
+	/**
691
+	 * @param $new_event_id
692
+	 * @param $new_venue_id
693
+	 * @return int
694
+	 */
695
+	private function _insert_new_venue_to_event($new_event_id, $new_venue_id)
696
+	{
697
+		global $wpdb;
698
+		if (! $new_event_id) {
699
+			$this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $new_event_id));
700
+			return 0;
701
+		}
702
+		if (! $new_venue_id) {
703
+			$this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $new_venue_id));
704
+			return 0;
705
+		}
706
+		$cols_n_values = array(
707
+			'EVT_ID'=>$new_event_id,
708
+			'VNU_ID'=>$new_venue_id,
709
+			'EVV_primary'=>true
710
+		);
711
+		$datatypes = array(
712
+			'%d',// EVT_ID
713
+			'%d',// VNU_ID
714
+			'%d',// EVT_primary
715
+		);
716
+		$success = $wpdb->insert($wpdb->prefix."esp_event_venue", $cols_n_values, $datatypes);
717
+		if (! $success) {
718
+			$this->add_error(
719
+				$this->get_migration_script()->_create_error_message_for_db_insertion(
720
+					$this->_old_table,
721
+					array(),
722
+					$this->_new_table,
723
+					$cols_n_values,
724
+					$datatypes
725
+				)
726
+			);
727
+			return 0;
728
+		}
729
+		return $wpdb->insert_id;
730
+	}
731
+	/**
732
+	 * Converts all the 3.1 start-end times for the event to 4.1 datetimes
733
+	 * @global wpdb $wpdb
734
+	 * @param array $old_event results of get_results(...,ARRAY_A)
735
+	 * @param int $new_cpt_id new post ID
736
+	 * @return void (if there are errors though, adds them to the stage's error list
737
+	 */
738
+	private function _convert_start_end_times($old_event, $new_cpt_id)
739
+	{
740
+		$start_end_times = $this->_get_old_start_end_times($old_event['id']);
741
+		foreach ($start_end_times as $start_end_time) {
742
+			$datetime_id = $this->_insert_new_datetime($start_end_time, $old_event, $new_cpt_id);
743
+			if ($datetime_id) {
744
+				$this->get_migration_script()->set_mapping($this->_old_start_end_table, $start_end_time['id'], $this->_new_datetime_table, $datetime_id);
745
+			}
746
+		}
747
+	}
748
+	/**
749
+	 * Queries the 3.1 wp_events_start_end table to get all the start and end times for the event
750
+	 * @global wpdb $wpdb
751
+	 * @param int $old_event_id
752
+	 * @return array
753
+	 */
754
+	private function _get_old_start_end_times($old_event_id)
755
+	{
756
+		global $wpdb;
757
+		return $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_start_end_table WHERE event_id=%d", $old_event_id), ARRAY_A);
758
+	}
759
+	/**
760
+	 * Inserts a 4.1 datetime given the 3.1 start_end db row and event_details row
761
+	 * @param array $start_end_time_row
762
+	 * @param array $old_event_row
763
+	 * @param int $new_cpt_id
764
+	 * @return int ID of new datetime
765
+	 */
766
+	private function _insert_new_datetime($start_end_time_row, $old_event_row, $new_cpt_id)
767
+	{
768
+		global $wpdb;
769
+		$start_date = $old_event_row['start_date'];
770
+		$start_time = $this->get_migration_script()->convertTimeFromAMPM($start_end_time_row['start_time']);
771
+		$end_date = $old_event_row['end_date'];
772
+		$end_time = $this->get_migration_script()->convertTimeFromAMPM($start_end_time_row['end_time']);
773
+		$existing_datetimes = $this->_count_other_datetimes_exist_for_new_event($new_cpt_id);
774
+		$start_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$start_date $start_time:00", $old_event_row['timezone_string']);
775
+		$end_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$end_date $end_time:00", $old_event_row['timezone_string']);
776
+		$cols_n_values = array(
777
+			'EVT_ID'=>$new_cpt_id,// EVT_ID
778
+			'DTT_EVT_start'=>$start_datetime_utc,// DTT_EVT_start
779
+			'DTT_EVT_end'=> $end_datetime_utc,// DTT_EVT_end
780
+			'DTT_reg_limit'=>intval($start_end_time_row['reg_limit']) ? $start_end_time_row['reg_limit'] : $old_event_row['reg_limit'],// DTT_reg_limit
781
+			'DTT_sold'=>0,// note: we will increment this as registrations are added during the migration
787 782
 //          'DTT_is_primary'=> 0 == $existing_datetimes ,//DTT_is_primary... if count==0, then we'll call it the 'primary'
788
-            'DTT_order'=> $existing_datetimes,// DTT_order, just give it the same order as the count of how many datetimes already exist
789
-            'DTT_parent'=>0,
790
-            'DTT_deleted'=>false
791
-        );
792
-        $datatypes = array(
793
-            '%d',// EVT_Id
794
-            '%s',// DTT_EVT_start
795
-            '%s',// DTT_EVT_end
796
-            '%d',// DTT_reg_limit
797
-            '%d',// DTT_sold
783
+			'DTT_order'=> $existing_datetimes,// DTT_order, just give it the same order as the count of how many datetimes already exist
784
+			'DTT_parent'=>0,
785
+			'DTT_deleted'=>false
786
+		);
787
+		$datatypes = array(
788
+			'%d',// EVT_Id
789
+			'%s',// DTT_EVT_start
790
+			'%s',// DTT_EVT_end
791
+			'%d',// DTT_reg_limit
792
+			'%d',// DTT_sold
798 793
 //          '%d',//DTT_is_primary
799
-            '%d',// DTT_order
800
-            '%d',// DTT_parent
801
-            '%d',// DTT_deleted
802
-        );
803
-        $success = $wpdb->insert($this->_new_datetime_table, $cols_n_values, $datatypes);
804
-        if (! $success) {
805
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_start_end_table, array_merge($old_event_row, $start_end_time_row), $this->_new_datetime_table, $cols_n_values, $datatypes));
806
-            return 0;
807
-        }
808
-        return $wpdb->insert_id;
809
-    }
810
-
811
-    /**
812
-     * Checks if there's a 4.1 datetime for this event already. This is mostly only handy
813
-     * when deciding whether a datetime we're about ot insert should be the 'primary' or not
814
-     * @global wpdb $wpdb
815
-     * @param int $cpt_event_id
816
-     * @return int
817
-     */
818
-    private function _count_other_datetimes_exist_for_new_event($cpt_event_id)
819
-    {
820
-        global $wpdb;
821
-        $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $this->_new_datetime_table WHERE EVT_ID=%d", $cpt_event_id));
822
-        return intval($count);
823
-    }
794
+			'%d',// DTT_order
795
+			'%d',// DTT_parent
796
+			'%d',// DTT_deleted
797
+		);
798
+		$success = $wpdb->insert($this->_new_datetime_table, $cols_n_values, $datatypes);
799
+		if (! $success) {
800
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_start_end_table, array_merge($old_event_row, $start_end_time_row), $this->_new_datetime_table, $cols_n_values, $datatypes));
801
+			return 0;
802
+		}
803
+		return $wpdb->insert_id;
804
+	}
805
+
806
+	/**
807
+	 * Checks if there's a 4.1 datetime for this event already. This is mostly only handy
808
+	 * when deciding whether a datetime we're about ot insert should be the 'primary' or not
809
+	 * @global wpdb $wpdb
810
+	 * @param int $cpt_event_id
811
+	 * @return int
812
+	 */
813
+	private function _count_other_datetimes_exist_for_new_event($cpt_event_id)
814
+	{
815
+		global $wpdb;
816
+		$count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $this->_new_datetime_table WHERE EVT_ID=%d", $cpt_event_id));
817
+		return intval($count);
818
+	}
824 819
 }
Please login to merge, or discard this patch.
Spacing   +132 added lines, -132 removed lines patch added patch discarded remove patch
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
     public function _count_records_to_migrate()
194 194
     {
195 195
         global $wpdb;
196
-        $count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->_old_table . ' WHERE event_status !="D"');
196
+        $count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->_old_table.' WHERE event_status !="D"');
197 197
         return intval($count);
198 198
     }
199 199
 
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
     {
213 213
         global $wpdb;
214 214
         // because the migration of each event can be a LOT more work, make each step smaller
215
-        $num_items_to_migrate = max(1, $num_items_to_migrate/5);
215
+        $num_items_to_migrate = max(1, $num_items_to_migrate / 5);
216 216
         $events = $wpdb->get_results($wpdb->prepare("SELECT * FROM $this->_old_table WHERE event_status!='D' LIMIT %d,%d", $this->count_records_migrated(), $num_items_to_migrate), ARRAY_A);
217 217
         $items_migrated_this_step = 0;
218 218
 
@@ -260,17 +260,17 @@  discard block
 block discarded – undo
260 260
     private function _add_post_metas($old_event, $post_id)
261 261
     {
262 262
         $event_meta = maybe_unserialize($old_event['event_meta']);
263
-        if (! $event_meta || ! is_array($event_meta)) {
263
+        if ( ! $event_meta || ! is_array($event_meta)) {
264 264
             return;
265 265
         }
266
-        unset($event_meta['date_submitted']);// factored into CPT
267
-        unset($event_meta['additional_attendee_reg_info']);// factored into event meta table
268
-        unset($event_meta['default_payment_status']);// dido
269
-        unset($event_meta['event_thumbnail_url']);// used to find post featured image
266
+        unset($event_meta['date_submitted']); // factored into CPT
267
+        unset($event_meta['additional_attendee_reg_info']); // factored into event meta table
268
+        unset($event_meta['default_payment_status']); // dido
269
+        unset($event_meta['event_thumbnail_url']); // used to find post featured image
270 270
         foreach ($event_meta as $meta_key => $meta_value) {
271 271
             if ($meta_key) {// if the meta key is just an empty string, ignore it
272 272
                 $success = add_post_meta($post_id, $meta_key, $meta_value, true);
273
-                if (! $success) {
273
+                if ( ! $success) {
274 274
                     $this->add_error(sprintf(__("Could not add post meta for CPT with ID #%d. Meta key: '%s',meta value:'%d' for 3.1 event: %s", "event_espresso"), $post_id, $meta_key, $meta_value, implode(",", $old_event)));
275 275
                 }
276 276
             }
@@ -341,68 +341,68 @@  discard block
 block discarded – undo
341 341
 //      and 3 custom ones: cancelled,postponed,sold_out
342 342
         $status_conversions = array(
343 343
             'R'=>'draft',
344
-            'X'=>'draft',// 4.1 doesn't have a "not approved for publishing" status. this is what posts are set to that aren't approved
344
+            'X'=>'draft', // 4.1 doesn't have a "not approved for publishing" status. this is what posts are set to that aren't approved
345 345
             'P'=>'pending',
346
-            'IA'=>'draft',// draft and in the past
346
+            'IA'=>'draft', // draft and in the past
347 347
 // IA=inactive in 3.1: events were switched to this when they expired. in 4.1 that's just calculated
348
-            'O'=>'publish',// @todo: will be an event type later; if this is the status, set the end date WAAAY later; and add term for 'ongoing'
348
+            'O'=>'publish', // @todo: will be an event type later; if this is the status, set the end date WAAAY later; and add term for 'ongoing'
349 349
             'A'=>'publish',
350
-            'S'=>'draft',// @todo: is it ok to just mark secondary/waitlist events as DRAFTS?
350
+            'S'=>'draft', // @todo: is it ok to just mark secondary/waitlist events as DRAFTS?
351 351
             'D'=>'trash',
352 352
         );
353
-        $post_status = $status_conversions[ $old_event['event_status'] ];
353
+        $post_status = $status_conversions[$old_event['event_status']];
354 354
         // check if we've sold out
355 355
         if (intval($old_event['reg_limit']) <= self::count_registrations($old_event['id'])) {
356 356
             $post_status = 'sold_out';
357 357
         }
358 358
 //      FYI postponed and cancelled don't exist in 3.1
359 359
         $cols_n_values = array(
360
-            'post_title'=>stripslashes($old_event['event_name']),// EVT_name
361
-            'post_content'=>stripslashes($old_event['event_desc']),// EVT_desc
362
-            'post_name'=>$this->_find_unique_slug($old_event['event_name'], $old_event['event_identifier'], $post_status),// EVT_slug
363
-            'post_date'=>$old_event['submitted'],// EVT_created NOT
360
+            'post_title'=>stripslashes($old_event['event_name']), // EVT_name
361
+            'post_content'=>stripslashes($old_event['event_desc']), // EVT_desc
362
+            'post_name'=>$this->_find_unique_slug($old_event['event_name'], $old_event['event_identifier'], $post_status), // EVT_slug
363
+            'post_date'=>$old_event['submitted'], // EVT_created NOT
364 364
             'post_date_gmt'=>get_gmt_from_date($old_event['submitted']),
365
-            'post_excerpt'=>'',// EVT_short_desc
366
-            'post_modified'=>$old_event['submitted'],// EVT_modified
365
+            'post_excerpt'=>'', // EVT_short_desc
366
+            'post_modified'=>$old_event['submitted'], // EVT_modified
367 367
             'post_modified_gmt'=>get_gmt_from_date($old_event['submitted']),
368
-            'post_author'=>$old_event['wp_user'],// EVT_wp_user
369
-            'post_parent'=>0,// parent maybe get this from some REM field?
370
-            'menu_order'=>0,// EVT_order
371
-            'post_type'=>'espresso_events',// post_type
372
-            'post_status'=>$post_status,// status
368
+            'post_author'=>$old_event['wp_user'], // EVT_wp_user
369
+            'post_parent'=>0, // parent maybe get this from some REM field?
370
+            'menu_order'=>0, // EVT_order
371
+            'post_type'=>'espresso_events', // post_type
372
+            'post_status'=>$post_status, // status
373 373
         );
374 374
         $cols_n_values_with_no_invalid_text = array();
375 375
         foreach ($cols_n_values as $col => $value) {
376 376
             $value_sans_invalid_chars = $wpdb->strip_invalid_text_for_column($this->_new_table, $col, $value);
377
-            if (! is_wp_error($value_sans_invalid_chars)) {
378
-                $cols_n_values_with_no_invalid_text[ $col ] = $value_sans_invalid_chars;
377
+            if ( ! is_wp_error($value_sans_invalid_chars)) {
378
+                $cols_n_values_with_no_invalid_text[$col] = $value_sans_invalid_chars;
379 379
             } else {
380 380
                 // otherwise leave it as-is. It will blow everything up and stop the migration
381
-                $cols_n_values_with_no_invalid_text[ $col ] = $value;
381
+                $cols_n_values_with_no_invalid_text[$col] = $value;
382 382
             }
383 383
         }
384 384
         $cols_n_values = $cols_n_values_with_no_invalid_text;
385 385
         $datatypes = array(
386
-            '%s',// EVT_name
387
-            '%s',// EVT_desc
388
-            '%s',// EVT_slug
389
-            '%s',// EVT_created
386
+            '%s', // EVT_name
387
+            '%s', // EVT_desc
388
+            '%s', // EVT_slug
389
+            '%s', // EVT_created
390 390
             '%s',
391
-            '%s',// EVT_short_desc
392
-            '%s',// EVT_modified
391
+            '%s', // EVT_short_desc
392
+            '%s', // EVT_modified
393 393
             '%s',
394
-            '%s',// EVT_wp_user
395
-            '%d',// post_parent
396
-            '%d',// EVT_order
397
-            '%s',// post_type
398
-            '%s',// status
394
+            '%s', // EVT_wp_user
395
+            '%d', // post_parent
396
+            '%d', // EVT_order
397
+            '%s', // post_type
398
+            '%s', // status
399 399
         );
400 400
         $success = $wpdb->insert(
401 401
             $this->_new_table,
402 402
             $cols_n_values,
403 403
             $datatypes
404 404
         );
405
-        if (! $success) {
405
+        if ( ! $success) {
406 406
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_table, $cols_n_values, $datatypes));
407 407
             return 0;
408 408
         }
@@ -441,10 +441,10 @@  discard block
 block discarded – undo
441 441
 // );
442 442
         $default_reg_status = $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID(isset($event_meta['default_payment_status']) ? $event_meta['default_payment_status'] : '', intval($old_event['require_pre_approval']));
443 443
         $cols_n_values = array(
444
-            'EVT_ID'=>$new_cpt_id,// EVT_ID_fk
444
+            'EVT_ID'=>$new_cpt_id, // EVT_ID_fk
445 445
             'EVT_display_desc'=> 'Y' == $old_event['display_desc'],
446
-            'EVT_display_ticket_selector'=> 'Y'== $old_event['display_reg_form'],
447
-            'EVT_visible_on'=> $this->get_migration_script()->convert_date_string_to_utc($this, $old_event, current_time('mysql'), $old_event['timezone_string']),// don't use the old 'visible_on', as it wasn't ever used
446
+            'EVT_display_ticket_selector'=> 'Y' == $old_event['display_reg_form'],
447
+            'EVT_visible_on'=> $this->get_migration_script()->convert_date_string_to_utc($this, $old_event, current_time('mysql'), $old_event['timezone_string']), // don't use the old 'visible_on', as it wasn't ever used
448 448
             'EVT_additional_limit'=> $old_event['allow_multiple'] == 'N' ? 1 : $old_event['additional_limit'],
449 449
             'EVT_default_registration_status' => $default_reg_status,
450 450
             'EVT_member_only'=>$old_event['member_only'],
@@ -456,25 +456,25 @@  discard block
 block discarded – undo
456 456
 
457 457
         );
458 458
         $datatypes = array(
459
-            '%s',// EVT_ID
460
-            '%d',// EVT_display_desc
461
-            '%d',// EVT_display_ticket_selector
462
-            '%s',// EVT_visible_on
463
-            '%d',// EVT_additional_limit
464
-            '%s',// EVT_default_registration_status
465
-            '%d',// EVT_member_only
466
-            '%s',// EVT_phone
467
-            '%d',// EVT_allow_overflow
468
-            '%s',// EVT_timezone_string
469
-            '%s',// EVT_external_URL
470
-            '%d',// EVT_donations
459
+            '%s', // EVT_ID
460
+            '%d', // EVT_display_desc
461
+            '%d', // EVT_display_ticket_selector
462
+            '%s', // EVT_visible_on
463
+            '%d', // EVT_additional_limit
464
+            '%s', // EVT_default_registration_status
465
+            '%d', // EVT_member_only
466
+            '%s', // EVT_phone
467
+            '%d', // EVT_allow_overflow
468
+            '%s', // EVT_timezone_string
469
+            '%s', // EVT_external_URL
470
+            '%d', // EVT_donations
471 471
         );
472 472
         $success = $wpdb->insert(
473 473
             $this->_new_meta_table,
474 474
             $cols_n_values,
475 475
             $datatypes
476 476
         );
477
-        if (! $success) {
477
+        if ( ! $success) {
478 478
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $cols_n_values, $datatypes));
479 479
             return 0;
480 480
         }
@@ -508,7 +508,7 @@  discard block
 block discarded – undo
508 508
             $new_id = $this->_insert_venue_into_posts($old_event);
509 509
             if ($new_id) {
510 510
                 $this->_insert_venue_into_meta_table($new_id, $old_event);
511
-                $guid = isset($old_event['venue_image']) ? $old_event['venue_image']  : null;
511
+                $guid = isset($old_event['venue_image']) ? $old_event['venue_image'] : null;
512 512
                 $this->get_migration_script()->convert_image_url_to_attachment_and_attach_to_post($guid, $new_id, $this);
513 513
             }
514 514
             // we don't bother recording the conversion from old events to venues as that
@@ -534,10 +534,10 @@  discard block
 block discarded – undo
534 534
             'VNU_city' => $old_event['city'],
535 535
             'VNU_zip' => $old_event['zip'],
536 536
             'post_title'=> $this->_get_venue_title_for_event($old_event),
537
-            'VNU_phone'=>$old_event['venue_phone'],// VNU_phone
538
-            'VNU_url'=>$old_event['venue_url'],// VNU_url
539
-            'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone
540
-            'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url
537
+            'VNU_phone'=>$old_event['venue_phone'], // VNU_phone
538
+            'VNU_url'=>$old_event['venue_url'], // VNU_url
539
+            'VNU_virtual_phone'=>$old_event['virtual_phone'], // VNU_virtual_phone
540
+            'VNU_virtual_url'=>$old_event['virtual_url'], // VNU_virtual_url
541 541
         );
542 542
         $sql_conditions = array();
543 543
         foreach ($conditions as $column => $value) {
@@ -547,7 +547,7 @@  discard block
 block discarded – undo
547 547
 					FROM
548 548
 		{$wpdb->posts} as p INNER JOIN
549 549
 		{$wpdb->prefix}esp_venue_meta as v ON p.ID = v.VNU_ID
550
-			WHERE " . implode(" AND ", $sql_conditions) . " LIMIT 1";
550
+			WHERE ".implode(" AND ", $sql_conditions)." LIMIT 1";
551 551
         $id = $wpdb->get_var($query);
552 552
         return $id;
553 553
     }
@@ -572,39 +572,39 @@  discard block
 block discarded – undo
572 572
     {
573 573
         global $wpdb;
574 574
         $insertion_array = array(
575
-                    'post_title'=> $this->_get_venue_title_for_event($old_event),// VNU_name
576
-                    'post_content'=>'',// VNU_desc
577
-                    'post_name'=> $this->_find_unique_slug($old_event['venue_title'], sanitize_title('venue-of-' . $old_event['event_name'])),// VNU_identifier
578
-                    'post_date'=>current_time('mysql'),// VNU_created
575
+                    'post_title'=> $this->_get_venue_title_for_event($old_event), // VNU_name
576
+                    'post_content'=>'', // VNU_desc
577
+                    'post_name'=> $this->_find_unique_slug($old_event['venue_title'], sanitize_title('venue-of-'.$old_event['event_name'])), // VNU_identifier
578
+                    'post_date'=>current_time('mysql'), // VNU_created
579 579
                     'post_date_gmt'=>get_gmt_from_date(current_time('mysql')),
580
-                    'post_excerpt'=>'',// VNU_short_desc arbitrary only 50 characters
581
-                    'post_modified'=>current_time('mysql'),// VNU_modified
580
+                    'post_excerpt'=>'', // VNU_short_desc arbitrary only 50 characters
581
+                    'post_modified'=>current_time('mysql'), // VNU_modified
582 582
                     'post_modified_gmt'=>get_gmt_from_date(current_time('mysql')),
583
-                    'post_author'=>$old_event['wp_user'],// VNU_wp_user
584
-                    'post_parent'=>0,// parent
585
-                    'menu_order'=>0,// VNU_order
583
+                    'post_author'=>$old_event['wp_user'], // VNU_wp_user
584
+                    'post_parent'=>0, // parent
585
+                    'menu_order'=>0, // VNU_order
586 586
                     'post_type'=>'espresso_venues'// post_type
587 587
                 );
588 588
         $datatypes_array = array(
589
-                    '%s',// VNU_name
590
-                    '%s',// VNU_desc
591
-                    '%s',// VNU_identifier
592
-                    '%s',// VNU_created
589
+                    '%s', // VNU_name
590
+                    '%s', // VNU_desc
591
+                    '%s', // VNU_identifier
592
+                    '%s', // VNU_created
593 593
                     '%s',
594
-                    '%s',// VNU_short_desc
595
-                    '%s',// VNU_modified
594
+                    '%s', // VNU_short_desc
595
+                    '%s', // VNU_modified
596 596
                     '%s',
597
-                    '%d',// VNU_wp_user
598
-                    '%d',// parent
599
-                    '%d',// VNU_order
600
-                    '%s',// post_type
597
+                    '%d', // VNU_wp_user
598
+                    '%d', // parent
599
+                    '%d', // VNU_order
600
+                    '%s', // post_type
601 601
                 );
602 602
         $success = $wpdb->insert(
603 603
             $wpdb->posts,
604 604
             $insertion_array,
605 605
             $datatypes_array
606 606
         );
607
-        if (! $success) {
607
+        if ( ! $success) {
608 608
             $this->add_error(
609 609
                 $this->get_migration_script()->_create_error_message_for_db_insertion(
610 610
                     $this->_old_table,
@@ -632,13 +632,13 @@  discard block
 block discarded – undo
632 632
         // assume the country is the same as the organization's old settings
633 633
         $country_iso = $this->get_migration_script()->get_default_country_iso();
634 634
         // find the state from the venue, or the organization, or just guess california
635
-        if (! $old_event['state']) {
635
+        if ( ! $old_event['state']) {
636 636
             $old_org_options = get_option('events_organization_settings');
637 637
             $state_name = stripslashes($old_org_options['organization_state']);
638 638
         } else {
639 639
             $state_name = $old_event['state'];
640 640
         }
641
-        if (! $state_name) {
641
+        if ( ! $state_name) {
642 642
             $state_name = 'CA';
643 643
         }
644 644
         // get a state ID with the same name, if possible
@@ -651,39 +651,39 @@  discard block
 block discarded – undo
651 651
         }
652 652
         // now insert into meta table
653 653
         $insertion_array = array(
654
-            'VNU_ID'=>$cpt_id,// VNU_ID_fk
655
-            'VNU_address'=>stripslashes($old_event['address']),// VNU_address
656
-            'VNU_address2'=>stripslashes($old_event['address2']),// VNU_address2
657
-            'VNU_city'=>stripslashes($old_event['city']),// VNU_city
658
-            'STA_ID'=>$state_id,// STA_ID
659
-            'CNT_ISO'=>$country_iso,// CNT_ISO
660
-            'VNU_zip'=>$old_event['zip'],// VNU_zip
661
-            'VNU_phone'=>$old_event['venue_phone'],// VNU_phone
662
-            'VNU_capacity'=>-1,// VNU_capacity
663
-            'VNU_url'=>$old_event['venue_url'],// VNU_url
664
-            'VNU_virtual_phone'=>$old_event['virtual_phone'],// VNU_virtual_phone
665
-            'VNU_virtual_url'=>$old_event['virtual_url'],// VNU_virtual_url
666
-            'VNU_google_map_link'=>'',// VNU_google_map_link
654
+            'VNU_ID'=>$cpt_id, // VNU_ID_fk
655
+            'VNU_address'=>stripslashes($old_event['address']), // VNU_address
656
+            'VNU_address2'=>stripslashes($old_event['address2']), // VNU_address2
657
+            'VNU_city'=>stripslashes($old_event['city']), // VNU_city
658
+            'STA_ID'=>$state_id, // STA_ID
659
+            'CNT_ISO'=>$country_iso, // CNT_ISO
660
+            'VNU_zip'=>$old_event['zip'], // VNU_zip
661
+            'VNU_phone'=>$old_event['venue_phone'], // VNU_phone
662
+            'VNU_capacity'=>-1, // VNU_capacity
663
+            'VNU_url'=>$old_event['venue_url'], // VNU_url
664
+            'VNU_virtual_phone'=>$old_event['virtual_phone'], // VNU_virtual_phone
665
+            'VNU_virtual_url'=>$old_event['virtual_url'], // VNU_virtual_url
666
+            'VNU_google_map_link'=>'', // VNU_google_map_link
667 667
             'VNU_enable_for_gmap'=>true // VNU_enable_for_gmap
668 668
         );
669 669
         $datatypes = array(
670
-            '%d',// VNU_ID_fk
671
-            '%s',// VNU_address
672
-            '%s',// VNU_address2
673
-            '%s',// VNU_city
674
-            '%d',// STA_ID
675
-            '%s',// CNT_ISO
676
-            '%s',// VNU_zip
677
-            '%s',// VNU_phone
678
-            '%d',// VNU_capacity
679
-            '%s',// VNU_url
680
-            '%s',// VNU_virtual_phone
681
-            '%s',// VNU_virtual_url
682
-            '%s',// VNU_google_map_link
683
-            '%d',// VNU_enable_for_gmap
670
+            '%d', // VNU_ID_fk
671
+            '%s', // VNU_address
672
+            '%s', // VNU_address2
673
+            '%s', // VNU_city
674
+            '%d', // STA_ID
675
+            '%s', // CNT_ISO
676
+            '%s', // VNU_zip
677
+            '%s', // VNU_phone
678
+            '%d', // VNU_capacity
679
+            '%s', // VNU_url
680
+            '%s', // VNU_virtual_phone
681
+            '%s', // VNU_virtual_url
682
+            '%s', // VNU_google_map_link
683
+            '%d', // VNU_enable_for_gmap
684 684
         );
685 685
         $success = $wpdb->insert($wpdb->prefix."esp_venue_meta", $insertion_array, $datatypes);
686
-        if (! $success) {
686
+        if ( ! $success) {
687 687
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event, $this->_new_meta_table, $insertion_array, $datatypes));
688 688
             return 0;
689 689
         }
@@ -700,11 +700,11 @@  discard block
 block discarded – undo
700 700
     private function _insert_new_venue_to_event($new_event_id, $new_venue_id)
701 701
     {
702 702
         global $wpdb;
703
-        if (! $new_event_id) {
703
+        if ( ! $new_event_id) {
704 704
             $this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $new_event_id));
705 705
             return 0;
706 706
         }
707
-        if (! $new_venue_id) {
707
+        if ( ! $new_venue_id) {
708 708
             $this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $new_venue_id));
709 709
             return 0;
710 710
         }
@@ -714,12 +714,12 @@  discard block
 block discarded – undo
714 714
             'EVV_primary'=>true
715 715
         );
716 716
         $datatypes = array(
717
-            '%d',// EVT_ID
718
-            '%d',// VNU_ID
719
-            '%d',// EVT_primary
717
+            '%d', // EVT_ID
718
+            '%d', // VNU_ID
719
+            '%d', // EVT_primary
720 720
         );
721 721
         $success = $wpdb->insert($wpdb->prefix."esp_event_venue", $cols_n_values, $datatypes);
722
-        if (! $success) {
722
+        if ( ! $success) {
723 723
             $this->add_error(
724 724
                 $this->get_migration_script()->_create_error_message_for_db_insertion(
725 725
                     $this->_old_table,
@@ -779,29 +779,29 @@  discard block
 block discarded – undo
779 779
         $start_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$start_date $start_time:00", $old_event_row['timezone_string']);
780 780
         $end_datetime_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $start_end_time_row, "$end_date $end_time:00", $old_event_row['timezone_string']);
781 781
         $cols_n_values = array(
782
-            'EVT_ID'=>$new_cpt_id,// EVT_ID
783
-            'DTT_EVT_start'=>$start_datetime_utc,// DTT_EVT_start
784
-            'DTT_EVT_end'=> $end_datetime_utc,// DTT_EVT_end
785
-            'DTT_reg_limit'=>intval($start_end_time_row['reg_limit']) ? $start_end_time_row['reg_limit'] : $old_event_row['reg_limit'],// DTT_reg_limit
786
-            'DTT_sold'=>0,// note: we will increment this as registrations are added during the migration
782
+            'EVT_ID'=>$new_cpt_id, // EVT_ID
783
+            'DTT_EVT_start'=>$start_datetime_utc, // DTT_EVT_start
784
+            'DTT_EVT_end'=> $end_datetime_utc, // DTT_EVT_end
785
+            'DTT_reg_limit'=>intval($start_end_time_row['reg_limit']) ? $start_end_time_row['reg_limit'] : $old_event_row['reg_limit'], // DTT_reg_limit
786
+            'DTT_sold'=>0, // note: we will increment this as registrations are added during the migration
787 787
 //          'DTT_is_primary'=> 0 == $existing_datetimes ,//DTT_is_primary... if count==0, then we'll call it the 'primary'
788
-            'DTT_order'=> $existing_datetimes,// DTT_order, just give it the same order as the count of how many datetimes already exist
788
+            'DTT_order'=> $existing_datetimes, // DTT_order, just give it the same order as the count of how many datetimes already exist
789 789
             'DTT_parent'=>0,
790 790
             'DTT_deleted'=>false
791 791
         );
792 792
         $datatypes = array(
793
-            '%d',// EVT_Id
794
-            '%s',// DTT_EVT_start
795
-            '%s',// DTT_EVT_end
796
-            '%d',// DTT_reg_limit
797
-            '%d',// DTT_sold
793
+            '%d', // EVT_Id
794
+            '%s', // DTT_EVT_start
795
+            '%s', // DTT_EVT_end
796
+            '%d', // DTT_reg_limit
797
+            '%d', // DTT_sold
798 798
 //          '%d',//DTT_is_primary
799
-            '%d',// DTT_order
800
-            '%d',// DTT_parent
801
-            '%d',// DTT_deleted
799
+            '%d', // DTT_order
800
+            '%d', // DTT_parent
801
+            '%d', // DTT_deleted
802 802
         );
803 803
         $success = $wpdb->insert($this->_new_datetime_table, $cols_n_values, $datatypes);
804
-        if (! $success) {
804
+        if ( ! $success) {
805 805
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_start_end_table, array_merge($old_event_row, $start_end_time_row), $this->_new_datetime_table, $cols_n_values, $datatypes));
806 806
             return 0;
807 807
         }
Please login to merge, or discard this patch.
core/data_migration_scripts/4_1_0_stages/EE_DMS_4_1_0_checkins.dmsstage.php 2 patches
Indentation   +116 added lines, -116 removed lines patch added patch discarded remove patch
@@ -26,132 +26,132 @@
 block discarded – undo
26 26
 
27 27
 class EE_DMS_4_1_0_checkins extends EE_Data_Migration_Script_Stage_Table
28 28
 {
29
-    private $_new_table;
30
-    public function __construct()
31
-    {
32
-        global $wpdb;
33
-        $this->_pretty_name = __("Checkins", "event_espresso");
34
-        $this->_old_table = $wpdb->prefix."events_attendee";
35
-        $this->_extra_where_sql = 'AS att
29
+	private $_new_table;
30
+	public function __construct()
31
+	{
32
+		global $wpdb;
33
+		$this->_pretty_name = __("Checkins", "event_espresso");
34
+		$this->_old_table = $wpdb->prefix."events_attendee";
35
+		$this->_extra_where_sql = 'AS att
36 36
             INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id=e.id
37 37
             WHERE e.event_status!="D"';
38
-        $this->_new_table = $wpdb->prefix."esp_checkin";
39
-        parent::__construct();
40
-    }
41
-    protected function _migrate_old_row($old_row)
42
-    {
43
-        global $wpdb;
44
-        $new_reg_table = $wpdb->prefix."esp_registration";
38
+		$this->_new_table = $wpdb->prefix."esp_checkin";
39
+		parent::__construct();
40
+	}
41
+	protected function _migrate_old_row($old_row)
42
+	{
43
+		global $wpdb;
44
+		$new_reg_table = $wpdb->prefix."esp_registration";
45 45
 
46
-        $num_to_checkin_at_this_time = max(array(intval($old_row['checked_in_quantity']),intval($old_row['checked_in']))) ;
46
+		$num_to_checkin_at_this_time = max(array(intval($old_row['checked_in_quantity']),intval($old_row['checked_in']))) ;
47 47
 
48
-        $new_registrations_for_attendee = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $new_reg_table);
49
-        if (! $new_registrations_for_attendee) {
50
-            $new_registrations_for_attendee = array();
51
-        }
52
-        $new_datetime = $this->_try_to_find_datetime($old_row);
48
+		$new_registrations_for_attendee = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $new_reg_table);
49
+		if (! $new_registrations_for_attendee) {
50
+			$new_registrations_for_attendee = array();
51
+		}
52
+		$new_datetime = $this->_try_to_find_datetime($old_row);
53 53
 
54
-        // make sure registrations array is numerically indexed starting at 0 (it probably already is)
55
-        $new_registrations_for_attendee = array_values($new_registrations_for_attendee);
56
-        $new_checkin_ids = array();
57
-        for ($i = 0; $i<abs($num_to_checkin_at_this_time); $i++) {
58
-            $new_reg_id = $new_registrations_for_attendee[ $i ];
59
-            if (! $new_reg_id) {
60
-                $this->add_error(sprintf(
61
-                    __('It appears we wanted to check-in more registrations than actually exist. The old attendee record (%1$s) indicated we should check-in %2$d registrations, but there are only %3$d registrations for that attendee (%4$s)', "event_espresso"),
62
-                    $this->_json_encode($old_row),
63
-                    abs($num_to_checkin_at_this_time),
64
-                    count($new_registrations_for_attendee),
65
-                    $this->_json_encode($new_registrations_for_attendee)
66
-                ));
67
-                break;
68
-            }
69
-            $new_last_checkin_record = $wpdb->get_row($wpdb->prepare("SELECT * FROM $this->_new_table WHERE REG_ID = %d ORDER BY CHK_ID DESC LIMIT 1", $new_reg_id));
70
-            if (! $new_last_checkin_record) {
71
-                $is_checked_in = false;
72
-            } else {
73
-                $is_checked_in = intval($new_last_checkin_record['CHK_in']);
74
-            }
75
-            $new_id = $this->_insert_checkin_record($new_reg_id, $new_datetime);
76
-            if ($new_id) {
77
-                $new_checkin_ids[]= $new_id;
78
-            }
79
-        }
80
-        if ($new_checkin_ids) {
81
-            $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_table, $new_checkin_ids);
82
-        }
83
-    }
54
+		// make sure registrations array is numerically indexed starting at 0 (it probably already is)
55
+		$new_registrations_for_attendee = array_values($new_registrations_for_attendee);
56
+		$new_checkin_ids = array();
57
+		for ($i = 0; $i<abs($num_to_checkin_at_this_time); $i++) {
58
+			$new_reg_id = $new_registrations_for_attendee[ $i ];
59
+			if (! $new_reg_id) {
60
+				$this->add_error(sprintf(
61
+					__('It appears we wanted to check-in more registrations than actually exist. The old attendee record (%1$s) indicated we should check-in %2$d registrations, but there are only %3$d registrations for that attendee (%4$s)', "event_espresso"),
62
+					$this->_json_encode($old_row),
63
+					abs($num_to_checkin_at_this_time),
64
+					count($new_registrations_for_attendee),
65
+					$this->_json_encode($new_registrations_for_attendee)
66
+				));
67
+				break;
68
+			}
69
+			$new_last_checkin_record = $wpdb->get_row($wpdb->prepare("SELECT * FROM $this->_new_table WHERE REG_ID = %d ORDER BY CHK_ID DESC LIMIT 1", $new_reg_id));
70
+			if (! $new_last_checkin_record) {
71
+				$is_checked_in = false;
72
+			} else {
73
+				$is_checked_in = intval($new_last_checkin_record['CHK_in']);
74
+			}
75
+			$new_id = $this->_insert_checkin_record($new_reg_id, $new_datetime);
76
+			if ($new_id) {
77
+				$new_checkin_ids[]= $new_id;
78
+			}
79
+		}
80
+		if ($new_checkin_ids) {
81
+			$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_table, $new_checkin_ids);
82
+		}
83
+	}
84 84
 
85 85
 
86
-    /**
87
-     * Tries to find the new datetime the Check-in was for, based on the attendee row
88
-     * (because we know the attendee was for an event as a specific time, and we know
89
-     * the event's OLD ID...)
90
-     * @global type $wpdb
91
-     * @param array $old_attendee_row
92
-     * @return array row of datetime from DB
93
-     */
94
-    private function _try_to_find_datetime($old_attendee)
95
-    {
96
-        global $wpdb;
86
+	/**
87
+	 * Tries to find the new datetime the Check-in was for, based on the attendee row
88
+	 * (because we know the attendee was for an event as a specific time, and we know
89
+	 * the event's OLD ID...)
90
+	 * @global type $wpdb
91
+	 * @param array $old_attendee_row
92
+	 * @return array row of datetime from DB
93
+	 */
94
+	private function _try_to_find_datetime($old_attendee)
95
+	{
96
+		global $wpdb;
97 97
 
98
-        $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_attendee['event_id'], $wpdb->posts);
99
-        if (! $new_event_id) {
100
-            $this->add_error(sprintf(__("Could nto find new event ID with old event id '%d', on attendee row %s; and because of that couldnt find the correct datetime for Check-in", "event_espresso"), $old_attendee['event_id'], $this->_json_encode($old_attendee)));
101
-            return 0;
102
-        }
103
-        $old_att_start_date = $old_attendee['start_date'];
104
-        $old_att_start_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
105
-        $old_att_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_start_date $old_att_start_time:00");
98
+		$new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_attendee['event_id'], $wpdb->posts);
99
+		if (! $new_event_id) {
100
+			$this->add_error(sprintf(__("Could nto find new event ID with old event id '%d', on attendee row %s; and because of that couldnt find the correct datetime for Check-in", "event_espresso"), $old_attendee['event_id'], $this->_json_encode($old_attendee)));
101
+			return 0;
102
+		}
103
+		$old_att_start_date = $old_attendee['start_date'];
104
+		$old_att_start_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
105
+		$old_att_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_start_date $old_att_start_time:00");
106 106
 
107
-        $datetime_table = $wpdb->prefix."esp_datetime";
108
-        // add all conditions to an array from which we can SHIFT conditions off in order to widen our search
109
-        // the most important condition should be last, as it will be array_shift'ed off last
110
-        $conditions = array(
111
-            $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match?
112
-            $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match?
113
-        );
114
-        // start running queries, widening search each time by removing a condition
115
-        $datetime_found = null;
116
-        do {
117
-            $full_query = "SELECT * FROM $datetime_table WHERE ".implode(" AND ", $conditions)." LIMIT 1";
118
-            $datetime_found = $wpdb->get_row($full_query, ARRAY_A);
119
-            array_shift($conditions);
120
-        } while (! $datetime_found && $conditions);
121
-        return $datetime_found;
122
-    }
107
+		$datetime_table = $wpdb->prefix."esp_datetime";
108
+		// add all conditions to an array from which we can SHIFT conditions off in order to widen our search
109
+		// the most important condition should be last, as it will be array_shift'ed off last
110
+		$conditions = array(
111
+			$wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match?
112
+			$wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match?
113
+		);
114
+		// start running queries, widening search each time by removing a condition
115
+		$datetime_found = null;
116
+		do {
117
+			$full_query = "SELECT * FROM $datetime_table WHERE ".implode(" AND ", $conditions)." LIMIT 1";
118
+			$datetime_found = $wpdb->get_row($full_query, ARRAY_A);
119
+			array_shift($conditions);
120
+		} while (! $datetime_found && $conditions);
121
+		return $datetime_found;
122
+	}
123 123
 
124
-    /**
125
-     * Adds a new Check-in/checkout record according for $new_reg_id,$new_datetime_id,$checking_in, and $timestmap
126
-     * @param int $new_reg_id
127
-     * @param int $new_datetime_id
128
-     * @param string $timestamp mysql datetime
129
-     * @return int new Check-in id
130
-     */
131
-    private function _insert_checkin_record($new_reg_id, $new_datetime)
132
-    {
133
-        global $wpdb;
124
+	/**
125
+	 * Adds a new Check-in/checkout record according for $new_reg_id,$new_datetime_id,$checking_in, and $timestmap
126
+	 * @param int $new_reg_id
127
+	 * @param int $new_datetime_id
128
+	 * @param string $timestamp mysql datetime
129
+	 * @return int new Check-in id
130
+	 */
131
+	private function _insert_checkin_record($new_reg_id, $new_datetime)
132
+	{
133
+		global $wpdb;
134 134
 
135 135
 
136
-        // ok we can actually do what we set out to do: add a checkin/checkout record
137
-        $cols_n_values = array(
138
-            'REG_ID'=>$new_reg_id,
139
-            'DTT_ID'=>$new_datetime['DTT_ID'],
140
-            'CHK_in'=>true,
141
-            'CHK_timestamp'=>$new_datetime['DTT_EVT_start']
142
-        );
143
-        $datatypes = array(
144
-            '%d',// REG_ID
145
-            '%d',// DTT_ID
146
-            '%d',// CHK_in
147
-            '%s',// CHK_timestamp
148
-        );
149
-        $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes);
150
-        if (! $success) {
151
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_checkin, $this->_new_table, $cols_n_values, $datatypes));
152
-            return 0;
153
-        }
154
-        $new_id = $wpdb->insert_id;
155
-        return $new_id;
156
-    }
136
+		// ok we can actually do what we set out to do: add a checkin/checkout record
137
+		$cols_n_values = array(
138
+			'REG_ID'=>$new_reg_id,
139
+			'DTT_ID'=>$new_datetime['DTT_ID'],
140
+			'CHK_in'=>true,
141
+			'CHK_timestamp'=>$new_datetime['DTT_EVT_start']
142
+		);
143
+		$datatypes = array(
144
+			'%d',// REG_ID
145
+			'%d',// DTT_ID
146
+			'%d',// CHK_in
147
+			'%s',// CHK_timestamp
148
+		);
149
+		$success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes);
150
+		if (! $success) {
151
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_checkin, $this->_new_table, $cols_n_values, $datatypes));
152
+			return 0;
153
+		}
154
+		$new_id = $wpdb->insert_id;
155
+		return $new_id;
156
+	}
157 157
 }
Please login to merge, or discard this patch.
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -33,7 +33,7 @@  discard block
 block discarded – undo
33 33
         $this->_pretty_name = __("Checkins", "event_espresso");
34 34
         $this->_old_table = $wpdb->prefix."events_attendee";
35 35
         $this->_extra_where_sql = 'AS att
36
-            INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id=e.id
36
+            INNER JOIN ' . $wpdb->prefix.'events_detail AS e ON att.event_id=e.id
37 37
             WHERE e.event_status!="D"';
38 38
         $this->_new_table = $wpdb->prefix."esp_checkin";
39 39
         parent::__construct();
@@ -43,10 +43,10 @@  discard block
 block discarded – undo
43 43
         global $wpdb;
44 44
         $new_reg_table = $wpdb->prefix."esp_registration";
45 45
 
46
-        $num_to_checkin_at_this_time = max(array(intval($old_row['checked_in_quantity']),intval($old_row['checked_in']))) ;
46
+        $num_to_checkin_at_this_time = max(array(intval($old_row['checked_in_quantity']), intval($old_row['checked_in'])));
47 47
 
48 48
         $new_registrations_for_attendee = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $new_reg_table);
49
-        if (! $new_registrations_for_attendee) {
49
+        if ( ! $new_registrations_for_attendee) {
50 50
             $new_registrations_for_attendee = array();
51 51
         }
52 52
         $new_datetime = $this->_try_to_find_datetime($old_row);
@@ -54,9 +54,9 @@  discard block
 block discarded – undo
54 54
         // make sure registrations array is numerically indexed starting at 0 (it probably already is)
55 55
         $new_registrations_for_attendee = array_values($new_registrations_for_attendee);
56 56
         $new_checkin_ids = array();
57
-        for ($i = 0; $i<abs($num_to_checkin_at_this_time); $i++) {
58
-            $new_reg_id = $new_registrations_for_attendee[ $i ];
59
-            if (! $new_reg_id) {
57
+        for ($i = 0; $i < abs($num_to_checkin_at_this_time); $i++) {
58
+            $new_reg_id = $new_registrations_for_attendee[$i];
59
+            if ( ! $new_reg_id) {
60 60
                 $this->add_error(sprintf(
61 61
                     __('It appears we wanted to check-in more registrations than actually exist. The old attendee record (%1$s) indicated we should check-in %2$d registrations, but there are only %3$d registrations for that attendee (%4$s)', "event_espresso"),
62 62
                     $this->_json_encode($old_row),
@@ -67,14 +67,14 @@  discard block
 block discarded – undo
67 67
                 break;
68 68
             }
69 69
             $new_last_checkin_record = $wpdb->get_row($wpdb->prepare("SELECT * FROM $this->_new_table WHERE REG_ID = %d ORDER BY CHK_ID DESC LIMIT 1", $new_reg_id));
70
-            if (! $new_last_checkin_record) {
70
+            if ( ! $new_last_checkin_record) {
71 71
                 $is_checked_in = false;
72 72
             } else {
73 73
                 $is_checked_in = intval($new_last_checkin_record['CHK_in']);
74 74
             }
75 75
             $new_id = $this->_insert_checkin_record($new_reg_id, $new_datetime);
76 76
             if ($new_id) {
77
-                $new_checkin_ids[]= $new_id;
77
+                $new_checkin_ids[] = $new_id;
78 78
             }
79 79
         }
80 80
         if ($new_checkin_ids) {
@@ -96,7 +96,7 @@  discard block
 block discarded – undo
96 96
         global $wpdb;
97 97
 
98 98
         $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_attendee['event_id'], $wpdb->posts);
99
-        if (! $new_event_id) {
99
+        if ( ! $new_event_id) {
100 100
             $this->add_error(sprintf(__("Could nto find new event ID with old event id '%d', on attendee row %s; and because of that couldnt find the correct datetime for Check-in", "event_espresso"), $old_attendee['event_id'], $this->_json_encode($old_attendee)));
101 101
             return 0;
102 102
         }
@@ -108,8 +108,8 @@  discard block
 block discarded – undo
108 108
         // add all conditions to an array from which we can SHIFT conditions off in order to widen our search
109 109
         // the most important condition should be last, as it will be array_shift'ed off last
110 110
         $conditions = array(
111
-            $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match?
112
-            $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match?
111
+            $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime), // times match?
112
+            $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id), // events match?
113 113
         );
114 114
         // start running queries, widening search each time by removing a condition
115 115
         $datetime_found = null;
@@ -117,7 +117,7 @@  discard block
 block discarded – undo
117 117
             $full_query = "SELECT * FROM $datetime_table WHERE ".implode(" AND ", $conditions)." LIMIT 1";
118 118
             $datetime_found = $wpdb->get_row($full_query, ARRAY_A);
119 119
             array_shift($conditions);
120
-        } while (! $datetime_found && $conditions);
120
+        }while ( ! $datetime_found && $conditions);
121 121
         return $datetime_found;
122 122
     }
123 123
 
@@ -141,13 +141,13 @@  discard block
 block discarded – undo
141 141
             'CHK_timestamp'=>$new_datetime['DTT_EVT_start']
142 142
         );
143 143
         $datatypes = array(
144
-            '%d',// REG_ID
145
-            '%d',// DTT_ID
146
-            '%d',// CHK_in
147
-            '%s',// CHK_timestamp
144
+            '%d', // REG_ID
145
+            '%d', // DTT_ID
146
+            '%d', // CHK_in
147
+            '%s', // CHK_timestamp
148 148
         );
149 149
         $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes);
150
-        if (! $success) {
150
+        if ( ! $success) {
151 151
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_checkin, $this->_new_table, $cols_n_values, $datatypes));
152 152
             return 0;
153 153
         }
Please login to merge, or discard this patch.
data_migration_scripts/4_1_0_stages/EE_DMS_4_1_0_line_items.dmsstage.php 2 patches
Indentation   +156 added lines, -156 removed lines patch added patch discarded remove patch
@@ -38,171 +38,171 @@
 block discarded – undo
38 38
  */
39 39
 class EE_DMS_4_1_0_line_items extends EE_Data_Migration_Script_Stage_Table
40 40
 {
41
-    private $_new_line_table;
42
-    private $_new_transaction_table;
43
-    private $_new_reg_table;
44
-    public function __construct()
45
-    {
46
-        global $wpdb;
47
-        $this->_pretty_name = __("Line Items", "event_espresso");
48
-        $this->_old_table = $wpdb->prefix."events_attendee";
49
-        $this->_extra_where_sql = ' AS att
41
+	private $_new_line_table;
42
+	private $_new_transaction_table;
43
+	private $_new_reg_table;
44
+	public function __construct()
45
+	{
46
+		global $wpdb;
47
+		$this->_pretty_name = __("Line Items", "event_espresso");
48
+		$this->_old_table = $wpdb->prefix."events_attendee";
49
+		$this->_extra_where_sql = ' AS att
50 50
             INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id=e.id
51 51
             WHERE e.event_status!="D"';
52
-        $this->_new_transaction_table = $wpdb->prefix."esp_transaction";
53
-        $this->_new_line_table = $wpdb->prefix."esp_line_item";
54
-        $this->_new_reg_table = $wpdb->prefix."esp_registration";
55
-        parent::__construct();
56
-    }
52
+		$this->_new_transaction_table = $wpdb->prefix."esp_transaction";
53
+		$this->_new_line_table = $wpdb->prefix."esp_line_item";
54
+		$this->_new_reg_table = $wpdb->prefix."esp_registration";
55
+		parent::__construct();
56
+	}
57 57
     
58
-    protected function _migrate_old_row($old_row)
59
-    {
60
-        // insert line items if its a primary id
61
-        if (intval($old_row['is_primary'])) {
62
-            $txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $this->_new_transaction_table);
63
-            if (! $txn_id) {
64
-                $this->add_error(sprintf(__("Could not find the transaction for the 3.1 attendee %d from row %s", "event_espresso"), $old_row['id'], $this->_json_encode($old_row)));
65
-                return;
66
-            }
67
-            $txn = $this->_get_txn($txn_id);
68
-            $new_line_items = $this->_insert_new_line_items($txn, $old_row);
69
-            $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_line_table, $new_line_items);
70
-        }
71
-    }
58
+	protected function _migrate_old_row($old_row)
59
+	{
60
+		// insert line items if its a primary id
61
+		if (intval($old_row['is_primary'])) {
62
+			$txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $this->_new_transaction_table);
63
+			if (! $txn_id) {
64
+				$this->add_error(sprintf(__("Could not find the transaction for the 3.1 attendee %d from row %s", "event_espresso"), $old_row['id'], $this->_json_encode($old_row)));
65
+				return;
66
+			}
67
+			$txn = $this->_get_txn($txn_id);
68
+			$new_line_items = $this->_insert_new_line_items($txn, $old_row);
69
+			$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_line_table, $new_line_items);
70
+		}
71
+	}
72 72
     
73
-    private function _get_txn($txn_id)
74
-    {
75
-        global $wpdb;
76
-        $txn = $wpdb->get_row($wpdb->prepare("SELECT * FROM $this->_new_transaction_table WHERE TXN_ID=%d", $txn_id), ARRAY_A);
77
-        return $txn;
78
-    }
73
+	private function _get_txn($txn_id)
74
+	{
75
+		global $wpdb;
76
+		$txn = $wpdb->get_row($wpdb->prepare("SELECT * FROM $this->_new_transaction_table WHERE TXN_ID=%d", $txn_id), ARRAY_A);
77
+		return $txn;
78
+	}
79 79
     
80
-    /**
81
-     * In 4.1, we'd normally need more info than just the registrations to make the line items. Ie, we'd need
82
-     * the transaction, and tax prices at the time of registration. (And probably promotions and other price factors).
83
-     * But seeing how these are REGs created from 3.1 attendee data, which have
84
-     * @param array $transaction
85
-     * @return array new line item ids
86
-     */
87
-    private function _insert_new_line_items($transaction, $old_attendee)
88
-    {
89
-        global $wpdb;
90
-        $regs_on_this_transaction = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".$this->_new_reg_table." WHERE TXN_ID=%d", $transaction['TXN_ID']), ARRAY_A);
91
-        $new_line_item_ids = array();
92
-        // create a totla line item
93
-        $total_line_item_id = $this->_insert_new_line_item(array(
94
-            'LIN_code'=>'total',
95
-            'TXN_ID'=>$transaction['TXN_ID'],
96
-            'LIN_name'=>  __("Total", "event_espresso"),
97
-            'LIN_total'=>$transaction['TXN_total'],
98
-            'LIN_type'=>'total',
99
-            'OBJ_ID'=>$transaction['TXN_ID'],
100
-            'OBJ_type'=>'Transaction'
101
-        ), $old_attendee);
102
-        $new_line_item_ids[] = $total_line_item_id;
103
-        // create a subtotal line item
104
-        $reg_total = 0;
105
-        foreach ($regs_on_this_transaction as $new_reg) {
106
-            $reg_total += floatval($new_reg['REG_final_price']);
107
-        }
108
-        $subtotal_line_item_id = $this->_insert_new_line_item(array(
109
-            'LIN_code'=>'sub-total',
110
-            'TXN_ID'=>$transaction['TXN_ID'],
111
-            'LIN_name'=>  __("Subtotal", "event_espresso"),
112
-            'LIN_total'=>$reg_total,
113
-            'LIN_parent'=>$total_line_item_id,
114
-            'LIN_type'=>'sub-total',
115
-        ), $old_attendee);
116
-        $new_line_item_ids[] = $subtotal_line_item_id;
117
-        // group REGs by TKT_ID
118
-        $regs_by_tkt = array();
119
-        foreach ($regs_on_this_transaction as $new_reg) {
120
-            $regs_by_tkt[ $new_reg['TKT_ID'] ][] = $new_reg;
121
-        }
80
+	/**
81
+	 * In 4.1, we'd normally need more info than just the registrations to make the line items. Ie, we'd need
82
+	 * the transaction, and tax prices at the time of registration. (And probably promotions and other price factors).
83
+	 * But seeing how these are REGs created from 3.1 attendee data, which have
84
+	 * @param array $transaction
85
+	 * @return array new line item ids
86
+	 */
87
+	private function _insert_new_line_items($transaction, $old_attendee)
88
+	{
89
+		global $wpdb;
90
+		$regs_on_this_transaction = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".$this->_new_reg_table." WHERE TXN_ID=%d", $transaction['TXN_ID']), ARRAY_A);
91
+		$new_line_item_ids = array();
92
+		// create a totla line item
93
+		$total_line_item_id = $this->_insert_new_line_item(array(
94
+			'LIN_code'=>'total',
95
+			'TXN_ID'=>$transaction['TXN_ID'],
96
+			'LIN_name'=>  __("Total", "event_espresso"),
97
+			'LIN_total'=>$transaction['TXN_total'],
98
+			'LIN_type'=>'total',
99
+			'OBJ_ID'=>$transaction['TXN_ID'],
100
+			'OBJ_type'=>'Transaction'
101
+		), $old_attendee);
102
+		$new_line_item_ids[] = $total_line_item_id;
103
+		// create a subtotal line item
104
+		$reg_total = 0;
105
+		foreach ($regs_on_this_transaction as $new_reg) {
106
+			$reg_total += floatval($new_reg['REG_final_price']);
107
+		}
108
+		$subtotal_line_item_id = $this->_insert_new_line_item(array(
109
+			'LIN_code'=>'sub-total',
110
+			'TXN_ID'=>$transaction['TXN_ID'],
111
+			'LIN_name'=>  __("Subtotal", "event_espresso"),
112
+			'LIN_total'=>$reg_total,
113
+			'LIN_parent'=>$total_line_item_id,
114
+			'LIN_type'=>'sub-total',
115
+		), $old_attendee);
116
+		$new_line_item_ids[] = $subtotal_line_item_id;
117
+		// group REGs by TKT_ID
118
+		$regs_by_tkt = array();
119
+		foreach ($regs_on_this_transaction as $new_reg) {
120
+			$regs_by_tkt[ $new_reg['TKT_ID'] ][] = $new_reg;
121
+		}
122 122
         
123
-        // create individual line items
123
+		// create individual line items
124 124
         
125
-        foreach ($regs_by_tkt as $ticket_id => $regs) {
126
-            $count = count($regs);
127
-            $line_total = 0;
128
-            foreach ($regs as $new_reg) {
129
-                $line_total += $new_reg['REG_final_price'];
130
-            }
131
-            $a_reg = reset($regs);
132
-            $new_ticket = $this->_get_new_ticket_row($a_reg['TKT_ID']);
133
-            $reg_line_item_id = $this->_insert_new_line_item(array(
134
-                'LIN_code'=> md5('Ticket' . $ticket_id . time()),
135
-                'TXN_ID'=>$transaction['TXN_ID'],
136
-                'LIN_name'=>$new_ticket['TKT_name'],
137
-                'LIN_unit_price'=>$a_reg['REG_final_price'],
138
-                'LIN_is_taxable'=>false,
139
-                'LIN_total'=>$line_total,
140
-                'LIN_quantity'=>$count,
141
-                'LIN_parent'=>$subtotal_line_item_id,
142
-                'OBJ_ID'=>$ticket_id,
143
-                'OBJ_type'=>'Ticket'
144
-            ), $old_attendee);
145
-            $new_line_item_ids[] = $reg_line_item_id;
146
-        }
125
+		foreach ($regs_by_tkt as $ticket_id => $regs) {
126
+			$count = count($regs);
127
+			$line_total = 0;
128
+			foreach ($regs as $new_reg) {
129
+				$line_total += $new_reg['REG_final_price'];
130
+			}
131
+			$a_reg = reset($regs);
132
+			$new_ticket = $this->_get_new_ticket_row($a_reg['TKT_ID']);
133
+			$reg_line_item_id = $this->_insert_new_line_item(array(
134
+				'LIN_code'=> md5('Ticket' . $ticket_id . time()),
135
+				'TXN_ID'=>$transaction['TXN_ID'],
136
+				'LIN_name'=>$new_ticket['TKT_name'],
137
+				'LIN_unit_price'=>$a_reg['REG_final_price'],
138
+				'LIN_is_taxable'=>false,
139
+				'LIN_total'=>$line_total,
140
+				'LIN_quantity'=>$count,
141
+				'LIN_parent'=>$subtotal_line_item_id,
142
+				'OBJ_ID'=>$ticket_id,
143
+				'OBJ_type'=>'Ticket'
144
+			), $old_attendee);
145
+			$new_line_item_ids[] = $reg_line_item_id;
146
+		}
147 147
         
148 148
             
149 149
         
150
-        return $new_line_item_ids;
151
-    }
152
-    /**
153
-     * Gets the full ticket by ID
154
-     * @global type $wpdb
155
-     * @param type $new_ticket_id
156
-     * @return array
157
-     */
158
-    private function _get_new_ticket_row($new_ticket_id)
159
-    {
160
-        global $wpdb;
161
-        $ticket_row = $wpdb->get_row($wpdb->prepare("SELECT * FROM ".$wpdb->prefix."esp_ticket WHERE TKT_ID=%d", $new_ticket_id), ARRAY_A);
162
-        return $ticket_row;
163
-    }
150
+		return $new_line_item_ids;
151
+	}
152
+	/**
153
+	 * Gets the full ticket by ID
154
+	 * @global type $wpdb
155
+	 * @param type $new_ticket_id
156
+	 * @return array
157
+	 */
158
+	private function _get_new_ticket_row($new_ticket_id)
159
+	{
160
+		global $wpdb;
161
+		$ticket_row = $wpdb->get_row($wpdb->prepare("SELECT * FROM ".$wpdb->prefix."esp_ticket WHERE TKT_ID=%d", $new_ticket_id), ARRAY_A);
162
+		return $ticket_row;
163
+	}
164 164
     
165
-    private function _insert_new_line_item($cols_n_values, $old_attendee)
166
-    {
167
-        global $wpdb;
168
-        $default_cols_n_values = array(
169
-            'LIN_code'=>'',
170
-            'TXN_ID'=>0,
171
-            'LIN_name'=>'',
172
-            'LIN_desc'=>'',
173
-            'LIN_unit_price'=>0,
174
-            'LIN_percent'=>0,
175
-            'LIN_is_taxable'=>false,
176
-            'LIN_order'=>0,
177
-            'LIN_total'=>0,
178
-            'LIN_quantity'=>null,
179
-            'LIN_parent'=>0,
180
-            'LIN_type'=>'line-item',
181
-            'OBJ_ID'=>null,
182
-            'OBJ_type'=>null
183
-        );
184
-        $cols_n_values = array_merge($default_cols_n_values, $cols_n_values);
185
-            $datatypes = array(
186
-                '%s',// LIN_code
187
-                '%d',// TXN_ID
188
-                '%s',// LIN_name
189
-                '%s',// LIN_desc
190
-                '%f',// LIN_unit_price
191
-                '%f',// LIN_percent
192
-                '%d',// LIN_is_taxable
193
-                '%d',// LIN_order
194
-                '%f',// LIN_total
195
-                '%d',// LIN_quantity
196
-                '%d',// LIN_parent
197
-                '%s',// LIN_type
198
-                '%d',// OBJ_ID
199
-                '%s',// OBJ_type
200
-            );
201
-            $success = $wpdb->insert($this->_new_line_table, $cols_n_values, $datatypes);
202
-        if (! $success) {
203
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_reg_table, $cols_n_values, $datatypes));
204
-            return 0;
205
-        }
206
-            return $wpdb->insert_id;
207
-    }
165
+	private function _insert_new_line_item($cols_n_values, $old_attendee)
166
+	{
167
+		global $wpdb;
168
+		$default_cols_n_values = array(
169
+			'LIN_code'=>'',
170
+			'TXN_ID'=>0,
171
+			'LIN_name'=>'',
172
+			'LIN_desc'=>'',
173
+			'LIN_unit_price'=>0,
174
+			'LIN_percent'=>0,
175
+			'LIN_is_taxable'=>false,
176
+			'LIN_order'=>0,
177
+			'LIN_total'=>0,
178
+			'LIN_quantity'=>null,
179
+			'LIN_parent'=>0,
180
+			'LIN_type'=>'line-item',
181
+			'OBJ_ID'=>null,
182
+			'OBJ_type'=>null
183
+		);
184
+		$cols_n_values = array_merge($default_cols_n_values, $cols_n_values);
185
+			$datatypes = array(
186
+				'%s',// LIN_code
187
+				'%d',// TXN_ID
188
+				'%s',// LIN_name
189
+				'%s',// LIN_desc
190
+				'%f',// LIN_unit_price
191
+				'%f',// LIN_percent
192
+				'%d',// LIN_is_taxable
193
+				'%d',// LIN_order
194
+				'%f',// LIN_total
195
+				'%d',// LIN_quantity
196
+				'%d',// LIN_parent
197
+				'%s',// LIN_type
198
+				'%d',// OBJ_ID
199
+				'%s',// OBJ_type
200
+			);
201
+			$success = $wpdb->insert($this->_new_line_table, $cols_n_values, $datatypes);
202
+		if (! $success) {
203
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_reg_table, $cols_n_values, $datatypes));
204
+			return 0;
205
+		}
206
+			return $wpdb->insert_id;
207
+	}
208 208
 }
Please login to merge, or discard this patch.
Spacing   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -47,7 +47,7 @@  discard block
 block discarded – undo
47 47
         $this->_pretty_name = __("Line Items", "event_espresso");
48 48
         $this->_old_table = $wpdb->prefix."events_attendee";
49 49
         $this->_extra_where_sql = ' AS att
50
-            INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id=e.id
50
+            INNER JOIN ' . $wpdb->prefix.'events_detail AS e ON att.event_id=e.id
51 51
             WHERE e.event_status!="D"';
52 52
         $this->_new_transaction_table = $wpdb->prefix."esp_transaction";
53 53
         $this->_new_line_table = $wpdb->prefix."esp_line_item";
@@ -60,7 +60,7 @@  discard block
 block discarded – undo
60 60
         // insert line items if its a primary id
61 61
         if (intval($old_row['is_primary'])) {
62 62
             $txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, $old_row['id'], $this->_new_transaction_table);
63
-            if (! $txn_id) {
63
+            if ( ! $txn_id) {
64 64
                 $this->add_error(sprintf(__("Could not find the transaction for the 3.1 attendee %d from row %s", "event_espresso"), $old_row['id'], $this->_json_encode($old_row)));
65 65
                 return;
66 66
             }
@@ -117,7 +117,7 @@  discard block
 block discarded – undo
117 117
         // group REGs by TKT_ID
118 118
         $regs_by_tkt = array();
119 119
         foreach ($regs_on_this_transaction as $new_reg) {
120
-            $regs_by_tkt[ $new_reg['TKT_ID'] ][] = $new_reg;
120
+            $regs_by_tkt[$new_reg['TKT_ID']][] = $new_reg;
121 121
         }
122 122
         
123 123
         // create individual line items
@@ -131,7 +131,7 @@  discard block
 block discarded – undo
131 131
             $a_reg = reset($regs);
132 132
             $new_ticket = $this->_get_new_ticket_row($a_reg['TKT_ID']);
133 133
             $reg_line_item_id = $this->_insert_new_line_item(array(
134
-                'LIN_code'=> md5('Ticket' . $ticket_id . time()),
134
+                'LIN_code'=> md5('Ticket'.$ticket_id.time()),
135 135
                 'TXN_ID'=>$transaction['TXN_ID'],
136 136
                 'LIN_name'=>$new_ticket['TKT_name'],
137 137
                 'LIN_unit_price'=>$a_reg['REG_final_price'],
@@ -183,23 +183,23 @@  discard block
 block discarded – undo
183 183
         );
184 184
         $cols_n_values = array_merge($default_cols_n_values, $cols_n_values);
185 185
             $datatypes = array(
186
-                '%s',// LIN_code
187
-                '%d',// TXN_ID
188
-                '%s',// LIN_name
189
-                '%s',// LIN_desc
190
-                '%f',// LIN_unit_price
191
-                '%f',// LIN_percent
192
-                '%d',// LIN_is_taxable
193
-                '%d',// LIN_order
194
-                '%f',// LIN_total
195
-                '%d',// LIN_quantity
196
-                '%d',// LIN_parent
197
-                '%s',// LIN_type
198
-                '%d',// OBJ_ID
199
-                '%s',// OBJ_type
186
+                '%s', // LIN_code
187
+                '%d', // TXN_ID
188
+                '%s', // LIN_name
189
+                '%s', // LIN_desc
190
+                '%f', // LIN_unit_price
191
+                '%f', // LIN_percent
192
+                '%d', // LIN_is_taxable
193
+                '%d', // LIN_order
194
+                '%f', // LIN_total
195
+                '%d', // LIN_quantity
196
+                '%d', // LIN_parent
197
+                '%s', // LIN_type
198
+                '%d', // OBJ_ID
199
+                '%s', // OBJ_type
200 200
             );
201 201
             $success = $wpdb->insert($this->_new_line_table, $cols_n_values, $datatypes);
202
-        if (! $success) {
202
+        if ( ! $success) {
203 203
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_reg_table, $cols_n_values, $datatypes));
204 204
             return 0;
205 205
         }
Please login to merge, or discard this patch.
core/data_migration_scripts/4_1_0_stages/EE_DMS_4_1_0_prices.dmsstage.php 2 patches
Indentation   +291 added lines, -291 removed lines patch added patch discarded remove patch
@@ -87,56 +87,56 @@  discard block
 block discarded – undo
87 87
  */
88 88
 class EE_DMS_4_1_0_prices extends EE_Data_Migration_Script_Stage_Table
89 89
 {
90
-    private $_new_price_table;
91
-    private $_new_ticket_table;
92
-    private $_new_ticket_price_table;
93
-    private $_new_datetime_ticket_table;
94
-    /**
95
-     * A count of all the different tickets created, used for setting the new ones' TKT_Order
96
-     * @var int
97
-     */
98
-    private $_ticket_count = 0;
99
-    const price_type_base = 1;
100
-    const price_type_member_discount = 3;
101
-    const price_type_percent_surcharge = 4;
102
-    const price_type_flat_surcharge = 5;
90
+	private $_new_price_table;
91
+	private $_new_ticket_table;
92
+	private $_new_ticket_price_table;
93
+	private $_new_datetime_ticket_table;
94
+	/**
95
+	 * A count of all the different tickets created, used for setting the new ones' TKT_Order
96
+	 * @var int
97
+	 */
98
+	private $_ticket_count = 0;
99
+	const price_type_base = 1;
100
+	const price_type_member_discount = 3;
101
+	const price_type_percent_surcharge = 4;
102
+	const price_type_flat_surcharge = 5;
103 103
 
104
-    public function __construct()
105
-    {
106
-        global $wpdb;
107
-        $this->_pretty_name = __("Prices", "event_espresso");
108
-        $this->_old_table = $wpdb->prefix."events_prices";
109
-        $this->_extra_where_sql = ' AS p 
104
+	public function __construct()
105
+	{
106
+		global $wpdb;
107
+		$this->_pretty_name = __("Prices", "event_espresso");
108
+		$this->_old_table = $wpdb->prefix."events_prices";
109
+		$this->_extra_where_sql = ' AS p 
110 110
             INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON p.event_id=e.id
111 111
             WHERE e.event_status!="D"';
112
-        $this->_new_price_table = $wpdb->prefix."esp_price";
113
-        $this->_new_ticket_table = $wpdb->prefix."esp_ticket";
114
-        $this->_new_ticket_price_table = $wpdb->prefix."esp_ticket_price";
115
-        $this->_new_datetime_ticket_table = $wpdb->prefix."esp_datetime_ticket";
116
-        parent::__construct();
117
-    }
118
-    protected function _migrate_old_row($old_row)
119
-    {
120
-        // create the base price
121
-        $new_price_id = $this->_insert_new_price($old_row);
122
-        // create the member discount if there is any
123
-        // commented-out because we may actually NOT be supporting this in 4.1
112
+		$this->_new_price_table = $wpdb->prefix."esp_price";
113
+		$this->_new_ticket_table = $wpdb->prefix."esp_ticket";
114
+		$this->_new_ticket_price_table = $wpdb->prefix."esp_ticket_price";
115
+		$this->_new_datetime_ticket_table = $wpdb->prefix."esp_datetime_ticket";
116
+		parent::__construct();
117
+	}
118
+	protected function _migrate_old_row($old_row)
119
+	{
120
+		// create the base price
121
+		$new_price_id = $this->_insert_new_price($old_row);
122
+		// create the member discount if there is any
123
+		// commented-out because we may actually NOT be supporting this in 4.1
124 124
 //      if($old_row['event_cost'] != $old_row['member_price']){
125 125
 //          $member_price_discount_id = $this->_insert_new_member_price($old_row);
126 126
 //      }else{
127 127
 //          $member_price_discount_id = 0;
128 128
 //      }
129
-        // create the surcharge if there is any
130
-        if (floatval($old_row['surcharge']) >= 0.01) {
131
-            $surcharge_price_id = $this->_insert_new_surcharge_price($old_row);
132
-            $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id,$surcharge_price_id));
133
-        } else {
134
-            $surcharge_price_id = 0;
135
-            $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id));
136
-        }
137
-        // associate the ticket to all datetimes for event (ie, this ONE ticket grants access to ALL datetimes, not just one of the attendee's choice.
138
-        // if the latter were the case, then we'd create a separate ticket for each datetime and ahve their association be one-to-one)
139
-        // create ticket
129
+		// create the surcharge if there is any
130
+		if (floatval($old_row['surcharge']) >= 0.01) {
131
+			$surcharge_price_id = $this->_insert_new_surcharge_price($old_row);
132
+			$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id,$surcharge_price_id));
133
+		} else {
134
+			$surcharge_price_id = 0;
135
+			$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id));
136
+		}
137
+		// associate the ticket to all datetimes for event (ie, this ONE ticket grants access to ALL datetimes, not just one of the attendee's choice.
138
+		// if the latter were the case, then we'd create a separate ticket for each datetime and ahve their association be one-to-one)
139
+		// create ticket
140 140
 //      $ticket_id = $this->_insert_new_ticket($old_row);
141 141
 //      if($ticket_id){
142 142
 //          $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_ticket_table, $ticket_id);
@@ -148,62 +148,62 @@  discard block
 block discarded – undo
148 148
 //              $this->_insert_datetime_ticket_relation($new_datetime_id, $ticket_id);
149 149
 //          }
150 150
 //      }
151
-        // create a ticket for each old price -old datetime combo
152
-        $tickets_for_old_price = array();
153
-        foreach ($this->_get_datetime_ids_for_old_event_id($old_row['event_id']) as $new_datetime_id) {
154
-            $ticket_id = $this->_insert_new_ticket($old_row);
155
-            $tickets_for_old_price[] = $ticket_id;
156
-            // associate to old prices
157
-            $this->_insert_ticket_price_relation($ticket_id, $new_price_id);
158
-            $this->_insert_ticket_price_relation($ticket_id, $surcharge_price_id);
159
-            $this->_insert_datetime_ticket_relation($new_datetime_id, $ticket_id);
160
-        }
161
-        $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_ticket_table, $tickets_for_old_price);
162
-    }
163
-    /**
164
-     * Creates a 4.1 price base type
165
-     * @global type $wpdb
166
-     * @param type $old_price
167
-     * @return int
168
-     */
169
-    private function _insert_new_price($old_price)
170
-    {
171
-        global $wpdb;
172
-        $cols_n_values = array(
173
-            'PRT_ID'=>self::price_type_base,
174
-            'PRC_amount'=>floatval($old_price['event_cost']),
175
-            'PRC_name'=>$old_price['price_type'],
176
-            'PRC_is_default'=>false,
177
-            'PRC_overrides'=>false,
178
-            'PRC_order'=>0,
179
-            'PRC_deleted'=>false,
180
-            'PRC_parent'=>null
151
+		// create a ticket for each old price -old datetime combo
152
+		$tickets_for_old_price = array();
153
+		foreach ($this->_get_datetime_ids_for_old_event_id($old_row['event_id']) as $new_datetime_id) {
154
+			$ticket_id = $this->_insert_new_ticket($old_row);
155
+			$tickets_for_old_price[] = $ticket_id;
156
+			// associate to old prices
157
+			$this->_insert_ticket_price_relation($ticket_id, $new_price_id);
158
+			$this->_insert_ticket_price_relation($ticket_id, $surcharge_price_id);
159
+			$this->_insert_datetime_ticket_relation($new_datetime_id, $ticket_id);
160
+		}
161
+		$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_ticket_table, $tickets_for_old_price);
162
+	}
163
+	/**
164
+	 * Creates a 4.1 price base type
165
+	 * @global type $wpdb
166
+	 * @param type $old_price
167
+	 * @return int
168
+	 */
169
+	private function _insert_new_price($old_price)
170
+	{
171
+		global $wpdb;
172
+		$cols_n_values = array(
173
+			'PRT_ID'=>self::price_type_base,
174
+			'PRC_amount'=>floatval($old_price['event_cost']),
175
+			'PRC_name'=>$old_price['price_type'],
176
+			'PRC_is_default'=>false,
177
+			'PRC_overrides'=>false,
178
+			'PRC_order'=>0,
179
+			'PRC_deleted'=>false,
180
+			'PRC_parent'=>null
181 181
 
182
-        );
183
-        $datatypes = array(
184
-            '%d',// PRT_ID
185
-            '%f',// PRT_amount
186
-            '%s',// PRC_name
187
-            '%d',// PRC_is_default
188
-            '%d',// PRC_overrides
189
-            '%d',// PRC_order
190
-            '%d',// PRC_deleted
191
-            '%d',// PRC_parent
192
-        );
193
-        $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes);
194
-        if (! $success) {
195
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes));
196
-            return 0;
197
-        }
198
-        $new_id = $wpdb->insert_id;
199
-        return $new_id;
200
-    }
201
-    /**
202
-     * Creates a 4.1 member price discount
203
-     * @global type $wpdb
204
-     * @param type $old_price
205
-     * @return int
206
-     */
182
+		);
183
+		$datatypes = array(
184
+			'%d',// PRT_ID
185
+			'%f',// PRT_amount
186
+			'%s',// PRC_name
187
+			'%d',// PRC_is_default
188
+			'%d',// PRC_overrides
189
+			'%d',// PRC_order
190
+			'%d',// PRC_deleted
191
+			'%d',// PRC_parent
192
+		);
193
+		$success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes);
194
+		if (! $success) {
195
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes));
196
+			return 0;
197
+		}
198
+		$new_id = $wpdb->insert_id;
199
+		return $new_id;
200
+	}
201
+	/**
202
+	 * Creates a 4.1 member price discount
203
+	 * @global type $wpdb
204
+	 * @param type $old_price
205
+	 * @return int
206
+	 */
207 207
 //  private function _insert_new_member_price($old_price){
208 208
 //      $discount_amount = floatval($old_price['event_cost']) - floatval($old_price['member_price']);
209 209
 //      global $wpdb;
@@ -236,207 +236,207 @@  discard block
 block discarded – undo
236 236
 //      $new_id = $wpdb->insert_id;
237 237
 //      return $new_id;
238 238
 //  }
239
-    /**
240
-     * Creates a 4.1 member price discount
241
-     * @global type $wpdb
242
-     * @param type $old_price
243
-     * @return int
244
-     */
245
-    private function _insert_new_surcharge_price($old_price)
246
-    {
239
+	/**
240
+	 * Creates a 4.1 member price discount
241
+	 * @global type $wpdb
242
+	 * @param type $old_price
243
+	 * @return int
244
+	 */
245
+	private function _insert_new_surcharge_price($old_price)
246
+	{
247 247
 
248
-        if ($old_price['surcharge_type'] == 'flat_rate') {
249
-            $price_type = self::price_type_flat_surcharge;
250
-        } else {
251
-            $price_type = self::price_type_percent_surcharge;
252
-        }
253
-        global $wpdb;
254
-        $cols_n_values = array(
255
-            'PRT_ID'=>$price_type,
256
-            'PRC_amount'=>floatval($old_price['surcharge']),
257
-            'PRC_name'=>  __("Surcharge", "event_espresso"),
258
-            'PRC_is_default'=>false,
259
-            'PRC_overrides'=>false,
260
-            'PRC_order'=>20,
261
-            'PRC_deleted'=>false,
262
-            'PRC_parent'=>null
248
+		if ($old_price['surcharge_type'] == 'flat_rate') {
249
+			$price_type = self::price_type_flat_surcharge;
250
+		} else {
251
+			$price_type = self::price_type_percent_surcharge;
252
+		}
253
+		global $wpdb;
254
+		$cols_n_values = array(
255
+			'PRT_ID'=>$price_type,
256
+			'PRC_amount'=>floatval($old_price['surcharge']),
257
+			'PRC_name'=>  __("Surcharge", "event_espresso"),
258
+			'PRC_is_default'=>false,
259
+			'PRC_overrides'=>false,
260
+			'PRC_order'=>20,
261
+			'PRC_deleted'=>false,
262
+			'PRC_parent'=>null
263 263
 
264
-        );
265
-        $datatypes = array(
266
-            '%d',// PRT_ID
267
-            '%f',// PRT_amount
268
-            '%s',// PRC_name
269
-            '%d',// PRC_is_default
270
-            '%d',// PRC_overrides
271
-            '%d',// PRC_order
272
-            '%d',// PRC_deleted
273
-            '%d',// PRC_parent
274
-        );
275
-        $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes);
276
-        if (! $success) {
277
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes));
278
-            return 0;
279
-        }
280
-        $new_id = $wpdb->insert_id;
281
-        return $new_id;
282
-    }
283
-    /**
284
-     * Inserts a 4.1 ticket based off the 3.1 price, and the price IDs we've already made from the 3.1 price
285
-     * @param $old_price_row array where keys are columns
286
-     * @param $new_base_price_id int
287
-     * @param $new_member_discount_id int
288
-     * @param $new_surcharge_id int
289
-     * @return int new ticket id
290
-     */
291
-    private function _insert_new_ticket($old_price_row)
292
-    {
293
-        global $wpdb;
294
-        $event_row = $this->_get_event_row($old_price_row['event_id']);
295
-        if ($old_price_row['surcharge_type'] == 'flat_rate') {
296
-            $final_ticket_price = floatval($old_price_row['event_cost']) + floatval($old_price_row['surcharge']);
297
-        } else {// percent surcharge
298
-            $final_ticket_price = floatval($old_price_row['event_cost']) * (1 + floatval($old_price_row['surcharge'])/100);
299
-        }
300
-        $start_date = $event_row['registration_start']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_startT']);
301
-        $start_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $start_date, $event_row['timezone_string']);
302
-        $end_date = $event_row['registration_end']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_endT']);
303
-        $end_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $end_date, $event_row['timezone_string']);
304
-        $cols_n_values = array(
305
-            'TTM_ID'=>0,
306
-            'TKT_name'=>$old_price_row['price_type'],
307
-            'TKT_description'=>'',
308
-            'TKT_start_date'=>$start_date_utc,
309
-            'TKT_end_date'=>$end_date_utc,
310
-            'TKT_min'=>0,
311
-            'TKT_max'=>-1,
312
-            'TKT_price'=>$final_ticket_price,
313
-            'TKT_sold'=> 0,// note: this will get calculated as we actually add registrations during the migration
314
-            'TKT_qty'=> -1,
315
-            'TKT_uses'=> 1,
316
-            'TKT_taxable'=>false,// so by default, old prices are NOT taxable. This way they don't suddenly have a sudden spike in prices
317
-            'TKT_is_default'=>false,
318
-            'TKT_order'=>$this->_get_ticket_count(),
319
-            'TKT_row'=>0,// doesn't matter because UI reset this on first save anyways
320
-            'TKT_deleted'=>false,
321
-            'TKT_parent'=>0
264
+		);
265
+		$datatypes = array(
266
+			'%d',// PRT_ID
267
+			'%f',// PRT_amount
268
+			'%s',// PRC_name
269
+			'%d',// PRC_is_default
270
+			'%d',// PRC_overrides
271
+			'%d',// PRC_order
272
+			'%d',// PRC_deleted
273
+			'%d',// PRC_parent
274
+		);
275
+		$success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes);
276
+		if (! $success) {
277
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes));
278
+			return 0;
279
+		}
280
+		$new_id = $wpdb->insert_id;
281
+		return $new_id;
282
+	}
283
+	/**
284
+	 * Inserts a 4.1 ticket based off the 3.1 price, and the price IDs we've already made from the 3.1 price
285
+	 * @param $old_price_row array where keys are columns
286
+	 * @param $new_base_price_id int
287
+	 * @param $new_member_discount_id int
288
+	 * @param $new_surcharge_id int
289
+	 * @return int new ticket id
290
+	 */
291
+	private function _insert_new_ticket($old_price_row)
292
+	{
293
+		global $wpdb;
294
+		$event_row = $this->_get_event_row($old_price_row['event_id']);
295
+		if ($old_price_row['surcharge_type'] == 'flat_rate') {
296
+			$final_ticket_price = floatval($old_price_row['event_cost']) + floatval($old_price_row['surcharge']);
297
+		} else {// percent surcharge
298
+			$final_ticket_price = floatval($old_price_row['event_cost']) * (1 + floatval($old_price_row['surcharge'])/100);
299
+		}
300
+		$start_date = $event_row['registration_start']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_startT']);
301
+		$start_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $start_date, $event_row['timezone_string']);
302
+		$end_date = $event_row['registration_end']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_endT']);
303
+		$end_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $end_date, $event_row['timezone_string']);
304
+		$cols_n_values = array(
305
+			'TTM_ID'=>0,
306
+			'TKT_name'=>$old_price_row['price_type'],
307
+			'TKT_description'=>'',
308
+			'TKT_start_date'=>$start_date_utc,
309
+			'TKT_end_date'=>$end_date_utc,
310
+			'TKT_min'=>0,
311
+			'TKT_max'=>-1,
312
+			'TKT_price'=>$final_ticket_price,
313
+			'TKT_sold'=> 0,// note: this will get calculated as we actually add registrations during the migration
314
+			'TKT_qty'=> -1,
315
+			'TKT_uses'=> 1,
316
+			'TKT_taxable'=>false,// so by default, old prices are NOT taxable. This way they don't suddenly have a sudden spike in prices
317
+			'TKT_is_default'=>false,
318
+			'TKT_order'=>$this->_get_ticket_count(),
319
+			'TKT_row'=>0,// doesn't matter because UI reset this on first save anyways
320
+			'TKT_deleted'=>false,
321
+			'TKT_parent'=>0
322 322
 
323
-        );
324
-        $datatypes = array(
325
-            '%d',// TTM_ID
326
-            '%s',// TKT_name
327
-            '%s',// TKT_description
328
-            '%s',// TKT_start_date
329
-            '%s',// TKT_end_date
330
-            '%d',// TKT_min
331
-            '%d',// TKT_max
332
-            '%f',// TKT_price
333
-            '%d',// TKT_sold
334
-            '%d',// TKT_qty
335
-            '%d',// TKT_uses
336
-            '%d',// TKT_taxable
337
-            '%d',// TKT_is_default
338
-            '%d',// TKT_order
339
-            '%d',// TKT_row
340
-            '%d',// TKT_deleted
341
-            '%d',// TKT_parent
342
-        );
343
-        $success = $wpdb->insert($this->_new_ticket_table, $cols_n_values, $datatypes);
344
-        if (! $success) {
345
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price_row, $this->_new_ticket_table, $cols_n_values, $datatypes));
346
-            return 0;
347
-        }
348
-        $new_id = $wpdb->insert_id;
349
-        return $new_id;
350
-    }
323
+		);
324
+		$datatypes = array(
325
+			'%d',// TTM_ID
326
+			'%s',// TKT_name
327
+			'%s',// TKT_description
328
+			'%s',// TKT_start_date
329
+			'%s',// TKT_end_date
330
+			'%d',// TKT_min
331
+			'%d',// TKT_max
332
+			'%f',// TKT_price
333
+			'%d',// TKT_sold
334
+			'%d',// TKT_qty
335
+			'%d',// TKT_uses
336
+			'%d',// TKT_taxable
337
+			'%d',// TKT_is_default
338
+			'%d',// TKT_order
339
+			'%d',// TKT_row
340
+			'%d',// TKT_deleted
341
+			'%d',// TKT_parent
342
+		);
343
+		$success = $wpdb->insert($this->_new_ticket_table, $cols_n_values, $datatypes);
344
+		if (! $success) {
345
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price_row, $this->_new_ticket_table, $cols_n_values, $datatypes));
346
+			return 0;
347
+		}
348
+		$new_id = $wpdb->insert_id;
349
+		return $new_id;
350
+	}
351 351
 
352
-    /**
353
-     * Adds a join between a ticket and a price
354
-     * @global type $wpdb
355
-     * @param type $new_ticket_id
356
-     * @param type $new_price_id
357
-     * @return int
358
-     */
359
-    private function _insert_ticket_price_relation($new_ticket_id, $new_price_id)
360
-    {
361
-        global $wpdb;
362
-        $cols_n_values = array(
363
-            'TKT_ID'=>$new_ticket_id,
364
-            'PRC_ID'=>$new_price_id,
365
-        );
366
-        $datatypes = array(
367
-            '%d',// TKT_ID
368
-            '%d',// PRC_ID
369
-        );
370
-        $success = $wpdb->insert($this->_new_ticket_price_table, $cols_n_values, $datatypes);
371
-        if (! $success) {
372
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'price id'=>$new_price_id), $this->_new_ticket_price_table, $cols_n_values, $datatypes));
373
-            return 0;
374
-        }
375
-        $new_id = $wpdb->insert_id;
376
-        return $new_id;
377
-    }
352
+	/**
353
+	 * Adds a join between a ticket and a price
354
+	 * @global type $wpdb
355
+	 * @param type $new_ticket_id
356
+	 * @param type $new_price_id
357
+	 * @return int
358
+	 */
359
+	private function _insert_ticket_price_relation($new_ticket_id, $new_price_id)
360
+	{
361
+		global $wpdb;
362
+		$cols_n_values = array(
363
+			'TKT_ID'=>$new_ticket_id,
364
+			'PRC_ID'=>$new_price_id,
365
+		);
366
+		$datatypes = array(
367
+			'%d',// TKT_ID
368
+			'%d',// PRC_ID
369
+		);
370
+		$success = $wpdb->insert($this->_new_ticket_price_table, $cols_n_values, $datatypes);
371
+		if (! $success) {
372
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'price id'=>$new_price_id), $this->_new_ticket_price_table, $cols_n_values, $datatypes));
373
+			return 0;
374
+		}
375
+		$new_id = $wpdb->insert_id;
376
+		return $new_id;
377
+	}
378 378
 
379
-    /**
380
-     * Adds a join between a ticket and a datetime
381
-     * @global type $wpdb
382
-     * @param type $new_ticket_id
383
-     * @param type $new_price_id
384
-     * @return int
385
-     */
386
-    private function _insert_datetime_ticket_relation($new_datetime_id, $new_ticket_id)
387
-    {
388
-        global $wpdb;
389
-        $cols_n_values = array(
390
-            'TKT_ID'=>$new_ticket_id,
391
-            'DTT_ID'=>$new_datetime_id,
392
-        );
393
-        $datatypes = array(
394
-            '%d',// TKT_ID
395
-            '%d',// DTT_ID
396
-        );
397
-        $success = $wpdb->insert($this->_new_datetime_ticket_table, $cols_n_values, $datatypes);
398
-        if (! $success) {
399
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'datetime id'=>$new_datetime_id), $this->_new_datetime_ticket_table, $cols_n_values, $datatypes));
400
-            return 0;
401
-        }
402
-        $new_id = $wpdb->insert_id;
403
-        return $new_id;
404
-    }
379
+	/**
380
+	 * Adds a join between a ticket and a datetime
381
+	 * @global type $wpdb
382
+	 * @param type $new_ticket_id
383
+	 * @param type $new_price_id
384
+	 * @return int
385
+	 */
386
+	private function _insert_datetime_ticket_relation($new_datetime_id, $new_ticket_id)
387
+	{
388
+		global $wpdb;
389
+		$cols_n_values = array(
390
+			'TKT_ID'=>$new_ticket_id,
391
+			'DTT_ID'=>$new_datetime_id,
392
+		);
393
+		$datatypes = array(
394
+			'%d',// TKT_ID
395
+			'%d',// DTT_ID
396
+		);
397
+		$success = $wpdb->insert($this->_new_datetime_ticket_table, $cols_n_values, $datatypes);
398
+		if (! $success) {
399
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'datetime id'=>$new_datetime_id), $this->_new_datetime_ticket_table, $cols_n_values, $datatypes));
400
+			return 0;
401
+		}
402
+		$new_id = $wpdb->insert_id;
403
+		return $new_id;
404
+	}
405 405
 
406
-    /**
407
-     * Simply gets the 3.1 event row data
408
-     * @global type $wpdb
409
-     * @param type $event_id
410
-     * @return array
411
-     */
412
-    private function _get_event_row($event_id)
413
-    {
414
-        global $wpdb;
415
-        $old_event_table = $wpdb->prefix."events_detail";
416
-        return $wpdb->get_row($wpdb->prepare("SELECT * FROM $old_event_table WHERE id=%d", $event_id), ARRAY_A);
417
-    }
418
-    /**
419
-     * Gets a higher ticket count than last time it was called (and is persisted between HTTP requests).
420
-     * Yes we COULD run a query joining events->datetimes->ticket_datetimes->tickets, but this should work fine too
421
-     * @return int
422
-     */
423
-    private function _get_ticket_count()
424
-    {
425
-        return $this->_ticket_count++;
426
-    }
406
+	/**
407
+	 * Simply gets the 3.1 event row data
408
+	 * @global type $wpdb
409
+	 * @param type $event_id
410
+	 * @return array
411
+	 */
412
+	private function _get_event_row($event_id)
413
+	{
414
+		global $wpdb;
415
+		$old_event_table = $wpdb->prefix."events_detail";
416
+		return $wpdb->get_row($wpdb->prepare("SELECT * FROM $old_event_table WHERE id=%d", $event_id), ARRAY_A);
417
+	}
418
+	/**
419
+	 * Gets a higher ticket count than last time it was called (and is persisted between HTTP requests).
420
+	 * Yes we COULD run a query joining events->datetimes->ticket_datetimes->tickets, but this should work fine too
421
+	 * @return int
422
+	 */
423
+	private function _get_ticket_count()
424
+	{
425
+		return $this->_ticket_count++;
426
+	}
427 427
 
428
-    /**
429
-     * Using the 3.1 event id, gets the 4.1 datetimes for it
430
-     * @param int $old_event_id
431
-     * @return array where values are datetime ids
432
-     */
433
-    private function _get_datetime_ids_for_old_event_id($old_event_id)
434
-    {
435
-        global $wpdb;
436
-        $new_cpt_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_event_id, $wpdb->posts);
437
-        $datetime_ids = $wpdb->get_col($wpdb->prepare("SELECT DTT_ID FROM {$wpdb->prefix}esp_datetime WHERE EVT_ID=%d", $new_cpt_id));
438
-        return $datetime_ids;
439
-    }
428
+	/**
429
+	 * Using the 3.1 event id, gets the 4.1 datetimes for it
430
+	 * @param int $old_event_id
431
+	 * @return array where values are datetime ids
432
+	 */
433
+	private function _get_datetime_ids_for_old_event_id($old_event_id)
434
+	{
435
+		global $wpdb;
436
+		$new_cpt_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_event_id, $wpdb->posts);
437
+		$datetime_ids = $wpdb->get_col($wpdb->prepare("SELECT DTT_ID FROM {$wpdb->prefix}esp_datetime WHERE EVT_ID=%d", $new_cpt_id));
438
+		return $datetime_ids;
439
+	}
440 440
 }
441 441
 // @todo: tell users that in 3.1 the limit was on registration PER event,in 4.1 it's limit PER TICKET... SO, if they sell 2 different types of tickets
442 442
 //
Please login to merge, or discard this patch.
Spacing   +50 added lines, -50 removed lines patch added patch discarded remove patch
@@ -107,7 +107,7 @@  discard block
 block discarded – undo
107 107
         $this->_pretty_name = __("Prices", "event_espresso");
108 108
         $this->_old_table = $wpdb->prefix."events_prices";
109 109
         $this->_extra_where_sql = ' AS p 
110
-            INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON p.event_id=e.id
110
+            INNER JOIN ' . $wpdb->prefix.'events_detail AS e ON p.event_id=e.id
111 111
             WHERE e.event_status!="D"';
112 112
         $this->_new_price_table = $wpdb->prefix."esp_price";
113 113
         $this->_new_ticket_table = $wpdb->prefix."esp_ticket";
@@ -129,7 +129,7 @@  discard block
 block discarded – undo
129 129
         // create the surcharge if there is any
130 130
         if (floatval($old_row['surcharge']) >= 0.01) {
131 131
             $surcharge_price_id = $this->_insert_new_surcharge_price($old_row);
132
-            $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id,$surcharge_price_id));
132
+            $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id, $surcharge_price_id));
133 133
         } else {
134 134
             $surcharge_price_id = 0;
135 135
             $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_price_table, array($new_price_id));
@@ -181,17 +181,17 @@  discard block
 block discarded – undo
181 181
 
182 182
         );
183 183
         $datatypes = array(
184
-            '%d',// PRT_ID
185
-            '%f',// PRT_amount
186
-            '%s',// PRC_name
187
-            '%d',// PRC_is_default
188
-            '%d',// PRC_overrides
189
-            '%d',// PRC_order
190
-            '%d',// PRC_deleted
191
-            '%d',// PRC_parent
184
+            '%d', // PRT_ID
185
+            '%f', // PRT_amount
186
+            '%s', // PRC_name
187
+            '%d', // PRC_is_default
188
+            '%d', // PRC_overrides
189
+            '%d', // PRC_order
190
+            '%d', // PRC_deleted
191
+            '%d', // PRC_parent
192 192
         );
193 193
         $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes);
194
-        if (! $success) {
194
+        if ( ! $success) {
195 195
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes));
196 196
             return 0;
197 197
         }
@@ -263,17 +263,17 @@  discard block
 block discarded – undo
263 263
 
264 264
         );
265 265
         $datatypes = array(
266
-            '%d',// PRT_ID
267
-            '%f',// PRT_amount
268
-            '%s',// PRC_name
269
-            '%d',// PRC_is_default
270
-            '%d',// PRC_overrides
271
-            '%d',// PRC_order
272
-            '%d',// PRC_deleted
273
-            '%d',// PRC_parent
266
+            '%d', // PRT_ID
267
+            '%f', // PRT_amount
268
+            '%s', // PRC_name
269
+            '%d', // PRC_is_default
270
+            '%d', // PRC_overrides
271
+            '%d', // PRC_order
272
+            '%d', // PRC_deleted
273
+            '%d', // PRC_parent
274 274
         );
275 275
         $success = $wpdb->insert($this->_new_price_table, $cols_n_values, $datatypes);
276
-        if (! $success) {
276
+        if ( ! $success) {
277 277
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price, $this->_new_price_table, $cols_n_values, $datatypes));
278 278
             return 0;
279 279
         }
@@ -295,7 +295,7 @@  discard block
 block discarded – undo
295 295
         if ($old_price_row['surcharge_type'] == 'flat_rate') {
296 296
             $final_ticket_price = floatval($old_price_row['event_cost']) + floatval($old_price_row['surcharge']);
297 297
         } else {// percent surcharge
298
-            $final_ticket_price = floatval($old_price_row['event_cost']) * (1 + floatval($old_price_row['surcharge'])/100);
298
+            $final_ticket_price = floatval($old_price_row['event_cost']) * (1 + floatval($old_price_row['surcharge']) / 100);
299 299
         }
300 300
         $start_date = $event_row['registration_start']." ".$this->get_migration_script()->convertTimeFromAMPM($event_row['registration_startT']);
301 301
         $start_date_utc = $this->get_migration_script()->convert_date_string_to_utc($this, $old_price_row, $start_date, $event_row['timezone_string']);
@@ -310,38 +310,38 @@  discard block
 block discarded – undo
310 310
             'TKT_min'=>0,
311 311
             'TKT_max'=>-1,
312 312
             'TKT_price'=>$final_ticket_price,
313
-            'TKT_sold'=> 0,// note: this will get calculated as we actually add registrations during the migration
313
+            'TKT_sold'=> 0, // note: this will get calculated as we actually add registrations during the migration
314 314
             'TKT_qty'=> -1,
315 315
             'TKT_uses'=> 1,
316
-            'TKT_taxable'=>false,// so by default, old prices are NOT taxable. This way they don't suddenly have a sudden spike in prices
316
+            'TKT_taxable'=>false, // so by default, old prices are NOT taxable. This way they don't suddenly have a sudden spike in prices
317 317
             'TKT_is_default'=>false,
318 318
             'TKT_order'=>$this->_get_ticket_count(),
319
-            'TKT_row'=>0,// doesn't matter because UI reset this on first save anyways
319
+            'TKT_row'=>0, // doesn't matter because UI reset this on first save anyways
320 320
             'TKT_deleted'=>false,
321 321
             'TKT_parent'=>0
322 322
 
323 323
         );
324 324
         $datatypes = array(
325
-            '%d',// TTM_ID
326
-            '%s',// TKT_name
327
-            '%s',// TKT_description
328
-            '%s',// TKT_start_date
329
-            '%s',// TKT_end_date
330
-            '%d',// TKT_min
331
-            '%d',// TKT_max
332
-            '%f',// TKT_price
333
-            '%d',// TKT_sold
334
-            '%d',// TKT_qty
335
-            '%d',// TKT_uses
336
-            '%d',// TKT_taxable
337
-            '%d',// TKT_is_default
338
-            '%d',// TKT_order
339
-            '%d',// TKT_row
340
-            '%d',// TKT_deleted
341
-            '%d',// TKT_parent
325
+            '%d', // TTM_ID
326
+            '%s', // TKT_name
327
+            '%s', // TKT_description
328
+            '%s', // TKT_start_date
329
+            '%s', // TKT_end_date
330
+            '%d', // TKT_min
331
+            '%d', // TKT_max
332
+            '%f', // TKT_price
333
+            '%d', // TKT_sold
334
+            '%d', // TKT_qty
335
+            '%d', // TKT_uses
336
+            '%d', // TKT_taxable
337
+            '%d', // TKT_is_default
338
+            '%d', // TKT_order
339
+            '%d', // TKT_row
340
+            '%d', // TKT_deleted
341
+            '%d', // TKT_parent
342 342
         );
343 343
         $success = $wpdb->insert($this->_new_ticket_table, $cols_n_values, $datatypes);
344
-        if (! $success) {
344
+        if ( ! $success) {
345 345
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_price_row, $this->_new_ticket_table, $cols_n_values, $datatypes));
346 346
             return 0;
347 347
         }
@@ -364,12 +364,12 @@  discard block
 block discarded – undo
364 364
             'PRC_ID'=>$new_price_id,
365 365
         );
366 366
         $datatypes = array(
367
-            '%d',// TKT_ID
368
-            '%d',// PRC_ID
367
+            '%d', // TKT_ID
368
+            '%d', // PRC_ID
369 369
         );
370 370
         $success = $wpdb->insert($this->_new_ticket_price_table, $cols_n_values, $datatypes);
371
-        if (! $success) {
372
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'price id'=>$new_price_id), $this->_new_ticket_price_table, $cols_n_values, $datatypes));
371
+        if ( ! $success) {
372
+            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id, 'price id'=>$new_price_id), $this->_new_ticket_price_table, $cols_n_values, $datatypes));
373 373
             return 0;
374 374
         }
375 375
         $new_id = $wpdb->insert_id;
@@ -391,12 +391,12 @@  discard block
 block discarded – undo
391 391
             'DTT_ID'=>$new_datetime_id,
392 392
         );
393 393
         $datatypes = array(
394
-            '%d',// TKT_ID
395
-            '%d',// DTT_ID
394
+            '%d', // TKT_ID
395
+            '%d', // DTT_ID
396 396
         );
397 397
         $success = $wpdb->insert($this->_new_datetime_ticket_table, $cols_n_values, $datatypes);
398
-        if (! $success) {
399
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id,'datetime id'=>$new_datetime_id), $this->_new_datetime_ticket_table, $cols_n_values, $datatypes));
398
+        if ( ! $success) {
399
+            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, array('ticket id'=>$new_ticket_id, 'datetime id'=>$new_datetime_id), $this->_new_datetime_ticket_table, $cols_n_values, $datatypes));
400 400
             return 0;
401 401
         }
402 402
         $new_id = $wpdb->insert_id;
Please login to merge, or discard this patch.
core/data_migration_scripts/4_1_0_stages/EE_DMS_4_1_0_answers.dmsstage.php 2 patches
Indentation   +77 added lines, -77 removed lines patch added patch discarded remove patch
@@ -32,86 +32,86 @@
 block discarded – undo
32 32
 
33 33
 class EE_DMS_4_1_0_answers extends EE_Data_Migration_Script_Stage_Table
34 34
 {
35
-    private $_new_answer_table;
36
-    private $_new_question_table;
37
-    public function __construct()
38
-    {
39
-        global $wpdb;
40
-        $this->_pretty_name = __("Answers", "event_espresso");
41
-        $this->_old_table = $wpdb->prefix."events_answer";
42
-        // join to attendee and then join to events table
43
-        $this->_extra_where_sql = ' AS ans 
35
+	private $_new_answer_table;
36
+	private $_new_question_table;
37
+	public function __construct()
38
+	{
39
+		global $wpdb;
40
+		$this->_pretty_name = __("Answers", "event_espresso");
41
+		$this->_old_table = $wpdb->prefix."events_answer";
42
+		// join to attendee and then join to events table
43
+		$this->_extra_where_sql = ' AS ans 
44 44
             INNER JOIN ' . $wpdb->prefix . 'events_attendee AS att ON ans.attendee_id = att.id
45 45
             INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id = e.id 
46 46
             WHERE e.event_status !="D"';
47
-        $this->_new_answer_table = $wpdb->prefix."esp_answer";
48
-        $this->_new_question_table = $wpdb->prefix."esp_question";
49
-        parent::__construct();
50
-    }
51
-    protected function _migrate_old_row($old_row)
52
-    {
53
-        // get the new REGs for the old answer
54
-        global $wpdb;
55
-        $old_attendee_table = $wpdb->prefix."events_attendee";
56
-        $new_reg_table = $wpdb->prefix."esp_registration";
57
-        $regs = $this->get_migration_script()->get_mapping_new_pk($old_attendee_table, $old_row['attendee_id'], $new_reg_table);
58
-        if (! $regs) {
59
-            $this->add_error(sprintf(__("Could not find new registrations for old attendee %d when creating answer %s", "event_espresso"), $old_row['attendee_id'], $this->_json_encode($old_row)));
60
-            return false;
61
-        }
62
-        // as inefficient as this sounds, we create an answer per REGISTRATION, (even if the registrations use the same attendee)
63
-        foreach ($regs as $new_reg_id) {
64
-            $new_answer_id = $this->_insert_new_answer($old_row, $new_reg_id);
65
-        }
66
-    }
67
-    /**
68
-     * Creates a 4.1 price base type
69
-     * @global type $wpdb
70
-     * @param array $old_price
71
-     * @param int $new_reg_id
72
-     * @return int
73
-     */
74
-    private function _insert_new_answer($old_answer, $new_reg_id)
75
-    {
76
-        global $wpdb;
77
-        $old_question_table = $wpdb->prefix."events_question";
78
-        $new_question_id = $this->get_migration_script()->get_mapping_new_pk($old_question_table, $old_answer['question_id'], $this->_new_question_table);
47
+		$this->_new_answer_table = $wpdb->prefix."esp_answer";
48
+		$this->_new_question_table = $wpdb->prefix."esp_question";
49
+		parent::__construct();
50
+	}
51
+	protected function _migrate_old_row($old_row)
52
+	{
53
+		// get the new REGs for the old answer
54
+		global $wpdb;
55
+		$old_attendee_table = $wpdb->prefix."events_attendee";
56
+		$new_reg_table = $wpdb->prefix."esp_registration";
57
+		$regs = $this->get_migration_script()->get_mapping_new_pk($old_attendee_table, $old_row['attendee_id'], $new_reg_table);
58
+		if (! $regs) {
59
+			$this->add_error(sprintf(__("Could not find new registrations for old attendee %d when creating answer %s", "event_espresso"), $old_row['attendee_id'], $this->_json_encode($old_row)));
60
+			return false;
61
+		}
62
+		// as inefficient as this sounds, we create an answer per REGISTRATION, (even if the registrations use the same attendee)
63
+		foreach ($regs as $new_reg_id) {
64
+			$new_answer_id = $this->_insert_new_answer($old_row, $new_reg_id);
65
+		}
66
+	}
67
+	/**
68
+	 * Creates a 4.1 price base type
69
+	 * @global type $wpdb
70
+	 * @param array $old_price
71
+	 * @param int $new_reg_id
72
+	 * @return int
73
+	 */
74
+	private function _insert_new_answer($old_answer, $new_reg_id)
75
+	{
76
+		global $wpdb;
77
+		$old_question_table = $wpdb->prefix."events_question";
78
+		$new_question_id = $this->get_migration_script()->get_mapping_new_pk($old_question_table, $old_answer['question_id'], $this->_new_question_table);
79 79
 
80
-        $question_type = $this->_get_question_type($new_question_id);
81
-        if (in_array($question_type, array('MULTIPLE'))) {
82
-            $ans_value = serialize(explode(",", stripslashes($old_answer['answer'])));
83
-        } else {
84
-            $ans_value = stripslashes($old_answer['answer']);
85
-        }
86
-        $cols_n_values = array(
87
-            'REG_ID'=>$new_reg_id,
88
-            'QST_ID'=>$new_question_id,
89
-            'ANS_value'=>$ans_value
90
-        );
91
-        $datatypes = array(
92
-            '%d',// REG_ID
93
-            '%d',// QST_ID
94
-            '%s',// ANS_value
95
-        );
96
-        $success = $wpdb->insert($this->_new_answer_table, $cols_n_values, $datatypes);
97
-        if (! $success) {
98
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_answer, $this->_new_answer_table, $cols_n_values, $datatypes));
99
-            return 0;
100
-        }
101
-        $new_id = $wpdb->insert_id;
102
-        return $new_id;
103
-    }
80
+		$question_type = $this->_get_question_type($new_question_id);
81
+		if (in_array($question_type, array('MULTIPLE'))) {
82
+			$ans_value = serialize(explode(",", stripslashes($old_answer['answer'])));
83
+		} else {
84
+			$ans_value = stripslashes($old_answer['answer']);
85
+		}
86
+		$cols_n_values = array(
87
+			'REG_ID'=>$new_reg_id,
88
+			'QST_ID'=>$new_question_id,
89
+			'ANS_value'=>$ans_value
90
+		);
91
+		$datatypes = array(
92
+			'%d',// REG_ID
93
+			'%d',// QST_ID
94
+			'%s',// ANS_value
95
+		);
96
+		$success = $wpdb->insert($this->_new_answer_table, $cols_n_values, $datatypes);
97
+		if (! $success) {
98
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_answer, $this->_new_answer_table, $cols_n_values, $datatypes));
99
+			return 0;
100
+		}
101
+		$new_id = $wpdb->insert_id;
102
+		return $new_id;
103
+	}
104 104
 
105
-    /**
106
-     * Gets the question's type
107
-     * @global type $wpdb
108
-     * @param type $question_id
109
-     * @return string
110
-     */
111
-    private function _get_question_type($question_id)
112
-    {
113
-        global $wpdb;
114
-        $type = $wpdb->get_var($wpdb->prepare("SELECT QST_type FROM ".$this->_new_question_table." WHERE QST_ID=%d LIMIT 1", $question_id));
115
-        return $type;
116
-    }
105
+	/**
106
+	 * Gets the question's type
107
+	 * @global type $wpdb
108
+	 * @param type $question_id
109
+	 * @return string
110
+	 */
111
+	private function _get_question_type($question_id)
112
+	{
113
+		global $wpdb;
114
+		$type = $wpdb->get_var($wpdb->prepare("SELECT QST_type FROM ".$this->_new_question_table." WHERE QST_ID=%d LIMIT 1", $question_id));
115
+		return $type;
116
+	}
117 117
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -41,8 +41,8 @@  discard block
 block discarded – undo
41 41
         $this->_old_table = $wpdb->prefix."events_answer";
42 42
         // join to attendee and then join to events table
43 43
         $this->_extra_where_sql = ' AS ans 
44
-            INNER JOIN ' . $wpdb->prefix . 'events_attendee AS att ON ans.attendee_id = att.id
45
-            INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id = e.id 
44
+            INNER JOIN ' . $wpdb->prefix.'events_attendee AS att ON ans.attendee_id = att.id
45
+            INNER JOIN ' . $wpdb->prefix.'events_detail AS e ON att.event_id = e.id 
46 46
             WHERE e.event_status !="D"';
47 47
         $this->_new_answer_table = $wpdb->prefix."esp_answer";
48 48
         $this->_new_question_table = $wpdb->prefix."esp_question";
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
         $old_attendee_table = $wpdb->prefix."events_attendee";
56 56
         $new_reg_table = $wpdb->prefix."esp_registration";
57 57
         $regs = $this->get_migration_script()->get_mapping_new_pk($old_attendee_table, $old_row['attendee_id'], $new_reg_table);
58
-        if (! $regs) {
58
+        if ( ! $regs) {
59 59
             $this->add_error(sprintf(__("Could not find new registrations for old attendee %d when creating answer %s", "event_espresso"), $old_row['attendee_id'], $this->_json_encode($old_row)));
60 60
             return false;
61 61
         }
@@ -89,12 +89,12 @@  discard block
 block discarded – undo
89 89
             'ANS_value'=>$ans_value
90 90
         );
91 91
         $datatypes = array(
92
-            '%d',// REG_ID
93
-            '%d',// QST_ID
94
-            '%s',// ANS_value
92
+            '%d', // REG_ID
93
+            '%d', // QST_ID
94
+            '%s', // ANS_value
95 95
         );
96 96
         $success = $wpdb->insert($this->_new_answer_table, $cols_n_values, $datatypes);
97
-        if (! $success) {
97
+        if ( ! $success) {
98 98
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_answer, $this->_new_answer_table, $cols_n_values, $datatypes));
99 99
             return 0;
100 100
         }
Please login to merge, or discard this patch.
data_migration_scripts/4_1_0_stages/EE_DMS_4_1_0_attendees.dmsstage.php 2 patches
Indentation   +598 added lines, -602 removed lines patch added patch discarded remove patch
@@ -53,10 +53,6 @@  discard block
 block discarded – undo
53 53
 ENGINE=InnoDB
54 54
 AUTO_INCREMENT=3
55 55
 ;
56
-
57
-
58
-
59
-
60 56
  * 4.1 Attendee tables and fields:
61 57
  * $this->_tables = array(
62 58
             'Attendee_CPT'=> new EE_Primary_Table('posts', 'ID'),
@@ -186,634 +182,634 @@  discard block
 block discarded – undo
186 182
  */
187 183
 class EE_DMS_4_1_0_attendees extends EE_Data_Migration_Script_Stage_Table
188 184
 {
189
-    private $_new_attendee_cpt_table;
190
-    private $_new_attendee_meta_table;
191
-    private $_new_reg_table;
192
-    private $_new_transaction_table;
193
-    private $_new_payment_table;
194
-    private $_new_line_table;
195
-    private $_old_mer_table;
196
-    private $_new_ticket_table;
197
-    private $_new_ticket_datetime_table;
198
-    private $_new_datetime_table;
199
-    private $_new_datetime_ticket_table;
200
-    private $_new_price_table;
201
-    private $_new_ticket_price_table;
202
-    /**
203
-     * Rememebrs whether or not the mer table exists
204
-     * @var boolean
205
-     */
206
-    private $_mer_tables_exist = null;
207
-    public function __construct()
208
-    {
209
-        global $wpdb;
210
-        $this->_pretty_name = __("Attendees", "event_espresso");
211
-        $this->_old_table = $wpdb->prefix."events_attendee";
212
-        $this->_extra_where_sql = 'AS att
185
+	private $_new_attendee_cpt_table;
186
+	private $_new_attendee_meta_table;
187
+	private $_new_reg_table;
188
+	private $_new_transaction_table;
189
+	private $_new_payment_table;
190
+	private $_new_line_table;
191
+	private $_old_mer_table;
192
+	private $_new_ticket_table;
193
+	private $_new_ticket_datetime_table;
194
+	private $_new_datetime_table;
195
+	private $_new_datetime_ticket_table;
196
+	private $_new_price_table;
197
+	private $_new_ticket_price_table;
198
+	/**
199
+	 * Rememebrs whether or not the mer table exists
200
+	 * @var boolean
201
+	 */
202
+	private $_mer_tables_exist = null;
203
+	public function __construct()
204
+	{
205
+		global $wpdb;
206
+		$this->_pretty_name = __("Attendees", "event_espresso");
207
+		$this->_old_table = $wpdb->prefix."events_attendee";
208
+		$this->_extra_where_sql = 'AS att
213 209
             INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id=e.id
214 210
             WHERE e.event_status!="D"';
215
-        $this->_old_mer_table = $wpdb->prefix."events_multi_event_registration_id_group";
216
-        $this->_new_attendee_cpt_table = $wpdb->posts;
217
-        $this->_new_attendee_meta_table = $wpdb->prefix."esp_attendee_meta";
218
-        $this->_new_reg_table = $wpdb->prefix."esp_registration";
219
-        $this->_new_transaction_table = $wpdb->prefix."esp_transaction";
220
-        $this->_new_payment_table = $wpdb->prefix."esp_payment";
221
-        $this->_new_line_table = $wpdb->prefix."esp_line_item";
222
-        $this->_new_ticket_table = $wpdb->prefix."esp_ticket";
223
-        $this->_new_ticket_datetime_table = $wpdb->prefix."esp_datetime_ticket";
224
-        $this->_new_datetime_table = $wpdb->prefix."esp_datetime";
225
-        $this->_new_datetime_ticket_table = $wpdb->prefix."esp_datetime_ticket";
226
-        $this->_new_price_table = $wpdb->prefix."esp_price";
227
-        $this->_new_ticket_price_table = $wpdb->prefix."esp_ticket_price";
228
-        parent::__construct();
229
-    }
211
+		$this->_old_mer_table = $wpdb->prefix."events_multi_event_registration_id_group";
212
+		$this->_new_attendee_cpt_table = $wpdb->posts;
213
+		$this->_new_attendee_meta_table = $wpdb->prefix."esp_attendee_meta";
214
+		$this->_new_reg_table = $wpdb->prefix."esp_registration";
215
+		$this->_new_transaction_table = $wpdb->prefix."esp_transaction";
216
+		$this->_new_payment_table = $wpdb->prefix."esp_payment";
217
+		$this->_new_line_table = $wpdb->prefix."esp_line_item";
218
+		$this->_new_ticket_table = $wpdb->prefix."esp_ticket";
219
+		$this->_new_ticket_datetime_table = $wpdb->prefix."esp_datetime_ticket";
220
+		$this->_new_datetime_table = $wpdb->prefix."esp_datetime";
221
+		$this->_new_datetime_ticket_table = $wpdb->prefix."esp_datetime_ticket";
222
+		$this->_new_price_table = $wpdb->prefix."esp_price";
223
+		$this->_new_ticket_price_table = $wpdb->prefix."esp_ticket_price";
224
+		parent::__construct();
225
+	}
230 226
 
231
-    protected function _migrate_old_row($old_row)
232
-    {
233
-        // first check if there's already a new attendee with similar characteristics
234
-        $new_att_id = $this->_find_attendee_cpt_matching($old_row);
235
-        if (! $new_att_id) {
236
-            $new_att_id = $this->_insert_new_attendee_cpt($old_row);
237
-            if (! $new_att_id) {
238
-                // if we couldnt even make an attendee, abandon all hope
239
-                return false;
240
-            }
241
-            $new_att_meta_id = $this->_insert_attendee_meta_row($old_row, $new_att_id);
242
-            if ($new_att_meta_id) {
243
-                $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_attendee_meta_table, $new_att_meta_id);
244
-            }
245
-        }
246
-        $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_attendee_cpt_table, $new_att_id);
227
+	protected function _migrate_old_row($old_row)
228
+	{
229
+		// first check if there's already a new attendee with similar characteristics
230
+		$new_att_id = $this->_find_attendee_cpt_matching($old_row);
231
+		if (! $new_att_id) {
232
+			$new_att_id = $this->_insert_new_attendee_cpt($old_row);
233
+			if (! $new_att_id) {
234
+				// if we couldnt even make an attendee, abandon all hope
235
+				return false;
236
+			}
237
+			$new_att_meta_id = $this->_insert_attendee_meta_row($old_row, $new_att_id);
238
+			if ($new_att_meta_id) {
239
+				$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_attendee_meta_table, $new_att_meta_id);
240
+			}
241
+		}
242
+		$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_attendee_cpt_table, $new_att_id);
247 243
 
248
-        $txn_id = $this->_insert_new_transaction($old_row);
249
-        if (! $txn_id) {
250
-            // if we couldnt make the transaction, also abandon all hope
251
-            return false;
252
-        }
253
-        $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_transaction_table, $txn_id);
254
-        $pay_id = $this->_insert_new_payment($old_row, $txn_id);
255
-        if ($pay_id) {
256
-            $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_payment_table, $pay_id);
257
-        }
244
+		$txn_id = $this->_insert_new_transaction($old_row);
245
+		if (! $txn_id) {
246
+			// if we couldnt make the transaction, also abandon all hope
247
+			return false;
248
+		}
249
+		$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_transaction_table, $txn_id);
250
+		$pay_id = $this->_insert_new_payment($old_row, $txn_id);
251
+		if ($pay_id) {
252
+			$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_payment_table, $pay_id);
253
+		}
258 254
 
259 255
 
260
-        // even if there was no payment, we can go ahead with adding the reg
261
-        $new_regs = $this->_insert_new_registrations($old_row, $new_att_id, $txn_id);
262
-        if ($new_regs) {
263
-            $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_reg_table, $new_regs);
264
-        }
265
-    }
266
-    /**
267
-     * Checks if there's already an attendee CPT in the db that has the same
268
-     * first and last name, and email. If so, returns its ID as an int.
269
-     * @global type $wpdb
270
-     * @param array $old_attendee
271
-     * @return int
272
-     */
273
-    private function _find_attendee_cpt_matching($old_attendee)
274
-    {
275
-        global $wpdb;
276
-        $existing_attendee_id = $wpdb->get_var($wpdb->prepare("SELECT id FROM ".$this->_new_attendee_cpt_table." AS cpt INNER JOIN ".$this->_new_attendee_meta_table." AS meta ON cpt.ID = meta.ATT_ID WHERE meta.ATT_fname = %s AND meta.ATT_lname = %s AND meta.ATT_email = %s LIMIT 1", $old_attendee['fname'], $old_attendee['lname'], $old_attendee['email']));
277
-        return intval($existing_attendee_id);
278
-    }
279
-    private function _insert_new_attendee_cpt($old_attendee)
280
-    {
281
-        global $wpdb;
282
-        $cols_n_values = array(
283
-            'post_title'=>stripslashes($old_attendee['fname']." ".$old_attendee['lname']),// ATT_full_name
284
-            'post_content'=>'',// ATT_bio
285
-            'post_name'=>sanitize_title($old_attendee['fname']."-".$old_attendee['lname']),// ATT_slug
286
-            'post_date'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),// ATT_created
287
-            'post_excerpt'=>'',// ATT_short_bio
288
-            'post_modified'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),// ATT_modified
289
-            'post_author'=>0,// ATT_author
290
-            'post_parent'=>0,// ATT_parent
291
-            'post_type'=>'espresso_attendees',// post_type
292
-            'post_status'=>'publish'// status
293
-        );
294
-        $datatypes = array(
295
-            '%s',// ATT_full_name
296
-            '%s',// ATT_bio
297
-            '%s',// ATT_slug
298
-            '%s',// ATT_created
299
-            '%s',// ATT_short_bio
300
-            '%s',// ATT_modified
301
-            '%d',// ATT_author
302
-            '%d',// ATT_parent
303
-            '%s',// post_type
304
-            '%s',// status
305
-        );
306
-        $success = $wpdb->insert($this->_new_attendee_cpt_table, $cols_n_values, $datatypes);
307
-        if (! $success) {
308
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_cpt_table, $cols_n_values, $datatypes));
309
-            return 0;
310
-        }
311
-        $new_id = $wpdb->insert_id;
312
-        return $new_id;
313
-    }
256
+		// even if there was no payment, we can go ahead with adding the reg
257
+		$new_regs = $this->_insert_new_registrations($old_row, $new_att_id, $txn_id);
258
+		if ($new_regs) {
259
+			$this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_reg_table, $new_regs);
260
+		}
261
+	}
262
+	/**
263
+	 * Checks if there's already an attendee CPT in the db that has the same
264
+	 * first and last name, and email. If so, returns its ID as an int.
265
+	 * @global type $wpdb
266
+	 * @param array $old_attendee
267
+	 * @return int
268
+	 */
269
+	private function _find_attendee_cpt_matching($old_attendee)
270
+	{
271
+		global $wpdb;
272
+		$existing_attendee_id = $wpdb->get_var($wpdb->prepare("SELECT id FROM ".$this->_new_attendee_cpt_table." AS cpt INNER JOIN ".$this->_new_attendee_meta_table." AS meta ON cpt.ID = meta.ATT_ID WHERE meta.ATT_fname = %s AND meta.ATT_lname = %s AND meta.ATT_email = %s LIMIT 1", $old_attendee['fname'], $old_attendee['lname'], $old_attendee['email']));
273
+		return intval($existing_attendee_id);
274
+	}
275
+	private function _insert_new_attendee_cpt($old_attendee)
276
+	{
277
+		global $wpdb;
278
+		$cols_n_values = array(
279
+			'post_title'=>stripslashes($old_attendee['fname']." ".$old_attendee['lname']),// ATT_full_name
280
+			'post_content'=>'',// ATT_bio
281
+			'post_name'=>sanitize_title($old_attendee['fname']."-".$old_attendee['lname']),// ATT_slug
282
+			'post_date'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),// ATT_created
283
+			'post_excerpt'=>'',// ATT_short_bio
284
+			'post_modified'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),// ATT_modified
285
+			'post_author'=>0,// ATT_author
286
+			'post_parent'=>0,// ATT_parent
287
+			'post_type'=>'espresso_attendees',// post_type
288
+			'post_status'=>'publish'// status
289
+		);
290
+		$datatypes = array(
291
+			'%s',// ATT_full_name
292
+			'%s',// ATT_bio
293
+			'%s',// ATT_slug
294
+			'%s',// ATT_created
295
+			'%s',// ATT_short_bio
296
+			'%s',// ATT_modified
297
+			'%d',// ATT_author
298
+			'%d',// ATT_parent
299
+			'%s',// post_type
300
+			'%s',// status
301
+		);
302
+		$success = $wpdb->insert($this->_new_attendee_cpt_table, $cols_n_values, $datatypes);
303
+		if (! $success) {
304
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_cpt_table, $cols_n_values, $datatypes));
305
+			return 0;
306
+		}
307
+		$new_id = $wpdb->insert_id;
308
+		return $new_id;
309
+	}
314 310
 
315
-    private function _insert_attendee_meta_row($old_attendee, $new_attendee_cpt_id)
316
-    {
317
-        global $wpdb;
318
-        // get the state and country ids from the old row
319
-        try {
320
-            $new_country = $this->get_migration_script()->get_or_create_country(stripslashes($old_attendee['country_id']));
321
-            $new_country_iso = $new_country['CNT_ISO'];
322
-        } catch (EE_Error $exception) {
323
-            $new_country_iso = $this->get_migration_script()->get_default_country_iso();
324
-        }
325
-        try {
326
-            $new_state = $this->get_migration_script()->get_or_create_state(stripslashes($old_attendee['state']), $new_country_iso);
327
-            $new_state_id = $new_state['STA_ID'];
328
-        } catch (EE_Error $exception) {
329
-            $new_state_id = 0;
330
-        }
331
-        $cols_n_values = array(
332
-            'ATT_ID'=>$new_attendee_cpt_id,
333
-            'ATT_fname'=>stripslashes($old_attendee['fname']),
334
-            'ATT_lname'=>stripslashes($old_attendee['lname']),
335
-            'ATT_address'=>stripslashes($old_attendee['address']),
336
-            'ATT_address2'=>stripslashes($old_attendee['address2']),
337
-            'ATT_city'=>stripslashes($old_attendee['city']),
338
-            'STA_ID'=>$new_state_id,
339
-            'CNT_ISO'=>$new_country_iso,
340
-            'ATT_zip'=>stripslashes($old_attendee['zip']),
341
-            'ATT_email'=>stripslashes($old_attendee['email']),
342
-            'ATT_phone'=>stripslashes($old_attendee['phone']),
343
-        );
344
-        $datatypes = array(
345
-            '%d',// ATT_ID
346
-            '%s',// ATT_fname
347
-            '%s',// ATT_lname
348
-            '%s',// ATT_address
349
-            '%s',// ATT_address2
350
-            '%s',// ATT_city
351
-            '%d',// STA_ID
352
-            '%s',// CNT_ISO
353
-            '%s',// ATT_zip
354
-            '%s',// ATT_email
355
-            '%s',// ATT_phone
356
-        );
357
-        $success = $wpdb->insert($this->_new_attendee_meta_table, $cols_n_values, $datatypes);
358
-        if (! $success) {
359
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_meta_table, $cols_n_values, $datatypes));
360
-            return 0;
361
-        }
362
-        $new_id = $wpdb->insert_id;
363
-        return $new_id;
364
-    }
311
+	private function _insert_attendee_meta_row($old_attendee, $new_attendee_cpt_id)
312
+	{
313
+		global $wpdb;
314
+		// get the state and country ids from the old row
315
+		try {
316
+			$new_country = $this->get_migration_script()->get_or_create_country(stripslashes($old_attendee['country_id']));
317
+			$new_country_iso = $new_country['CNT_ISO'];
318
+		} catch (EE_Error $exception) {
319
+			$new_country_iso = $this->get_migration_script()->get_default_country_iso();
320
+		}
321
+		try {
322
+			$new_state = $this->get_migration_script()->get_or_create_state(stripslashes($old_attendee['state']), $new_country_iso);
323
+			$new_state_id = $new_state['STA_ID'];
324
+		} catch (EE_Error $exception) {
325
+			$new_state_id = 0;
326
+		}
327
+		$cols_n_values = array(
328
+			'ATT_ID'=>$new_attendee_cpt_id,
329
+			'ATT_fname'=>stripslashes($old_attendee['fname']),
330
+			'ATT_lname'=>stripslashes($old_attendee['lname']),
331
+			'ATT_address'=>stripslashes($old_attendee['address']),
332
+			'ATT_address2'=>stripslashes($old_attendee['address2']),
333
+			'ATT_city'=>stripslashes($old_attendee['city']),
334
+			'STA_ID'=>$new_state_id,
335
+			'CNT_ISO'=>$new_country_iso,
336
+			'ATT_zip'=>stripslashes($old_attendee['zip']),
337
+			'ATT_email'=>stripslashes($old_attendee['email']),
338
+			'ATT_phone'=>stripslashes($old_attendee['phone']),
339
+		);
340
+		$datatypes = array(
341
+			'%d',// ATT_ID
342
+			'%s',// ATT_fname
343
+			'%s',// ATT_lname
344
+			'%s',// ATT_address
345
+			'%s',// ATT_address2
346
+			'%s',// ATT_city
347
+			'%d',// STA_ID
348
+			'%s',// CNT_ISO
349
+			'%s',// ATT_zip
350
+			'%s',// ATT_email
351
+			'%s',// ATT_phone
352
+		);
353
+		$success = $wpdb->insert($this->_new_attendee_meta_table, $cols_n_values, $datatypes);
354
+		if (! $success) {
355
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_meta_table, $cols_n_values, $datatypes));
356
+			return 0;
357
+		}
358
+		$new_id = $wpdb->insert_id;
359
+		return $new_id;
360
+	}
365 361
 
366
-    /**
367
-     * Note: we don't necessarily create a new transaction for each attendee row.
368
-     * Only if the old attendee 'is_primary' is true; otherwise we find the old attendee row that
369
-     * 'is_primary' and has the same 'txn_id', then we return ITS new transaction id
370
-     * @global type $wpdb
371
-     * @param type $old_attendee
372
-     * @return int new transaction id
373
-     */
374
-    private function _insert_new_transaction($old_attendee)
375
-    {
376
-        global $wpdb;
362
+	/**
363
+	 * Note: we don't necessarily create a new transaction for each attendee row.
364
+	 * Only if the old attendee 'is_primary' is true; otherwise we find the old attendee row that
365
+	 * 'is_primary' and has the same 'txn_id', then we return ITS new transaction id
366
+	 * @global type $wpdb
367
+	 * @param type $old_attendee
368
+	 * @return int new transaction id
369
+	 */
370
+	private function _insert_new_transaction($old_attendee)
371
+	{
372
+		global $wpdb;
377 373
 
378
-        // first: let's check for an existing transaction for this old attendee
379
-        if (intval($old_attendee['is_primary'])) {// primary attendee, so create txn
380
-            $txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, intval($old_attendee['id']), $this->_new_transaction_table);
381
-        } else { // non-primary attendee, so find its primary attendee's transaction
382
-            $primary_attendee_old_id = $wpdb->get_var($wpdb->prepare("SELECT id FROM ".$this->_old_table." WHERE is_primary=1 and registration_id=%s", $old_attendee['registration_id']));
383
-            if (! $primary_attendee_old_id) {
384
-                $primary_attendee = $this->_find_mer_primary_attendee_using_mer_tables($old_attendee['registration_id']);
385
-                $primary_attendee_old_id = is_array($primary_attendee) ? $primary_attendee['id'] : null;
386
-            }
387
-            $txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, intval($primary_attendee_old_id), $this->_new_transaction_table);
388
-            if (! $txn_id) {
389
-                $this->add_error(sprintf(__("Could not find primary attendee's new transaction. Current attendee is: %s, we think the 3.1 primary attendee for it has id %d, but there's no 4.1 transaction for that primary attendee id.", "event_espresso"), $this->_json_encode($old_attendee), $primary_attendee_old_id));
390
-                $txn_id = 0;
391
-            }
392
-        }
393
-        // if there isn't yet a transaction row for this, create one
394
-        // (so even if it was a non-primary attendee with no EE3 primary attendee,
395
-        // it ought to have SOME transaction, so we'll make one)
396
-        if (! $txn_id) {
397
-            // maps 3.1 payment stati onto 4.1 transaction stati
398
-            $txn_status_mapping = array(
399
-                'Completed'=>'TCM',
400
-                'Pending'=>'TIN',
401
-                'Payment Declined'=>'TIN',
402
-                'Incomplete'=>'TIN',
403
-                'Not Completed'=>'TIN',
404
-                'Cancelled'=>'TIN',
405
-                'Declined'=>'TIN'
406
-            );
407
-            $STS_ID = isset($txn_status_mapping[ $old_attendee['payment_status'] ]) ? $txn_status_mapping[ $old_attendee['payment_status'] ] : 'TIN';
408
-            $cols_n_values = array(
409
-                'TXN_timestamp'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),
410
-                'TXN_total'=>floatval($old_attendee['total_cost']),
411
-                'TXN_paid'=>floatval($old_attendee['amount_pd']),
412
-                'STS_ID'=>$STS_ID,
413
-                'TXN_hash_salt'=>$old_attendee['hashSalt']
414
-            );
415
-            $datatypes = array(
416
-                '%s',// TXN_timestamp
417
-                '%f',// TXN_total
418
-                '%f',// TXN_paid
419
-                '%s',// STS_ID
420
-                '%s',// TXN_hash_salt
421
-            );
422
-            $success = $wpdb->insert($this->_new_transaction_table, $cols_n_values, $datatypes);
423
-            if (! $success) {
424
-                $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_transaction_table, $cols_n_values, $datatypes));
425
-                return 0;
426
-            }
427
-            $txn_id = $wpdb->insert_id;
428
-        }
374
+		// first: let's check for an existing transaction for this old attendee
375
+		if (intval($old_attendee['is_primary'])) {// primary attendee, so create txn
376
+			$txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, intval($old_attendee['id']), $this->_new_transaction_table);
377
+		} else { // non-primary attendee, so find its primary attendee's transaction
378
+			$primary_attendee_old_id = $wpdb->get_var($wpdb->prepare("SELECT id FROM ".$this->_old_table." WHERE is_primary=1 and registration_id=%s", $old_attendee['registration_id']));
379
+			if (! $primary_attendee_old_id) {
380
+				$primary_attendee = $this->_find_mer_primary_attendee_using_mer_tables($old_attendee['registration_id']);
381
+				$primary_attendee_old_id = is_array($primary_attendee) ? $primary_attendee['id'] : null;
382
+			}
383
+			$txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, intval($primary_attendee_old_id), $this->_new_transaction_table);
384
+			if (! $txn_id) {
385
+				$this->add_error(sprintf(__("Could not find primary attendee's new transaction. Current attendee is: %s, we think the 3.1 primary attendee for it has id %d, but there's no 4.1 transaction for that primary attendee id.", "event_espresso"), $this->_json_encode($old_attendee), $primary_attendee_old_id));
386
+				$txn_id = 0;
387
+			}
388
+		}
389
+		// if there isn't yet a transaction row for this, create one
390
+		// (so even if it was a non-primary attendee with no EE3 primary attendee,
391
+		// it ought to have SOME transaction, so we'll make one)
392
+		if (! $txn_id) {
393
+			// maps 3.1 payment stati onto 4.1 transaction stati
394
+			$txn_status_mapping = array(
395
+				'Completed'=>'TCM',
396
+				'Pending'=>'TIN',
397
+				'Payment Declined'=>'TIN',
398
+				'Incomplete'=>'TIN',
399
+				'Not Completed'=>'TIN',
400
+				'Cancelled'=>'TIN',
401
+				'Declined'=>'TIN'
402
+			);
403
+			$STS_ID = isset($txn_status_mapping[ $old_attendee['payment_status'] ]) ? $txn_status_mapping[ $old_attendee['payment_status'] ] : 'TIN';
404
+			$cols_n_values = array(
405
+				'TXN_timestamp'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),
406
+				'TXN_total'=>floatval($old_attendee['total_cost']),
407
+				'TXN_paid'=>floatval($old_attendee['amount_pd']),
408
+				'STS_ID'=>$STS_ID,
409
+				'TXN_hash_salt'=>$old_attendee['hashSalt']
410
+			);
411
+			$datatypes = array(
412
+				'%s',// TXN_timestamp
413
+				'%f',// TXN_total
414
+				'%f',// TXN_paid
415
+				'%s',// STS_ID
416
+				'%s',// TXN_hash_salt
417
+			);
418
+			$success = $wpdb->insert($this->_new_transaction_table, $cols_n_values, $datatypes);
419
+			if (! $success) {
420
+				$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_transaction_table, $cols_n_values, $datatypes));
421
+				return 0;
422
+			}
423
+			$txn_id = $wpdb->insert_id;
424
+		}
429 425
 
430
-        return $txn_id;
431
-    }
432
-    /**
433
-     * Detects if the MER tables exist
434
-     * @global type $wpdb
435
-     * @return boolean
436
-     */
437
-    private function _mer_tables_exist()
438
-    {
439
-        if ($this->_mer_tables_exist === null) {
440
-            global $wpdb;
426
+		return $txn_id;
427
+	}
428
+	/**
429
+	 * Detects if the MER tables exist
430
+	 * @global type $wpdb
431
+	 * @return boolean
432
+	 */
433
+	private function _mer_tables_exist()
434
+	{
435
+		if ($this->_mer_tables_exist === null) {
436
+			global $wpdb;
441 437
 
442
-            if ($wpdb->get_var("SHOW TABLES LIKE '{$this->_old_mer_table}'") != $this->_old_mer_table) {
443
-                $this->_mer_tables_exist = false;
444
-            } else {
445
-                $this->_mer_tables_exist = true;
446
-            }
447
-        }
448
-        return $this->_mer_tables_exist;
449
-    }
438
+			if ($wpdb->get_var("SHOW TABLES LIKE '{$this->_old_mer_table}'") != $this->_old_mer_table) {
439
+				$this->_mer_tables_exist = false;
440
+			} else {
441
+				$this->_mer_tables_exist = true;
442
+			}
443
+		}
444
+		return $this->_mer_tables_exist;
445
+	}
450 446
 
451
-    /**
452
-     * Gets the 4.1 registration's status given the 3.1 attendee row. We consider
453
-     * whether the event required pre-approval or not,a dn the 4.1 payment status.
454
-     * @global type $wpdb
455
-     * @param type $old_attendee_row
456
-     * @return string
457
-     */
458
-    private function _get_reg_status_for_old_payment_status($old_attendee_row)
459
-    {
460
-        // need event default reg status and if pre_approval was required
461
-        global $wpdb;
462
-        $event_required_pre_approval = $wpdb->get_var($wpdb->prepare("SELECT require_pre_approval FROM ".$wpdb->prefix."events_detail WHERE id = %d", $old_attendee_row['event_id']));
463
-        return $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID(
464
-            $old_attendee_row['payment_status'],
465
-            intval($event_required_pre_approval) && intval($old_attendee_row['pre_approve'])
466
-        );
467
-    }
468
-    /**
469
-     * Adds however many rgistrations are indicated by the old attendee's QUANTITY field,
470
-     * and returns an array of their IDs
471
-     * @global type $wpdb
472
-     * @param array $old_attendee
473
-     * @param int $new_attendee_id
474
-     * @param int $new_txn_id
475
-     * @return array of new registratio ids
476
-     */
477
-    private function _insert_new_registrations($old_attendee, $new_attendee_id, $new_txn_id)
478
-    {
479
-        global $wpdb;
447
+	/**
448
+	 * Gets the 4.1 registration's status given the 3.1 attendee row. We consider
449
+	 * whether the event required pre-approval or not,a dn the 4.1 payment status.
450
+	 * @global type $wpdb
451
+	 * @param type $old_attendee_row
452
+	 * @return string
453
+	 */
454
+	private function _get_reg_status_for_old_payment_status($old_attendee_row)
455
+	{
456
+		// need event default reg status and if pre_approval was required
457
+		global $wpdb;
458
+		$event_required_pre_approval = $wpdb->get_var($wpdb->prepare("SELECT require_pre_approval FROM ".$wpdb->prefix."events_detail WHERE id = %d", $old_attendee_row['event_id']));
459
+		return $this->get_migration_script()->convert_3_1_payment_status_to_4_1_STS_ID(
460
+			$old_attendee_row['payment_status'],
461
+			intval($event_required_pre_approval) && intval($old_attendee_row['pre_approve'])
462
+		);
463
+	}
464
+	/**
465
+	 * Adds however many rgistrations are indicated by the old attendee's QUANTITY field,
466
+	 * and returns an array of their IDs
467
+	 * @global type $wpdb
468
+	 * @param array $old_attendee
469
+	 * @param int $new_attendee_id
470
+	 * @param int $new_txn_id
471
+	 * @return array of new registratio ids
472
+	 */
473
+	private function _insert_new_registrations($old_attendee, $new_attendee_id, $new_txn_id)
474
+	{
475
+		global $wpdb;
480 476
 
481
-        $STS_ID = $this->_get_reg_status_for_old_payment_status($old_attendee);
482
-        $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix.'events_detail', $old_attendee['event_id'], $wpdb->posts);
483
-        if (! $new_event_id) {
484
-            $this->add_error(sprintf(__("Could not find NEW event CPT ID for old event '%d' on old attendee %s", "event_espresso"), $old_attendee['event_id'], $this->_json_encode($old_attendee)));
485
-        }
477
+		$STS_ID = $this->_get_reg_status_for_old_payment_status($old_attendee);
478
+		$new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix.'events_detail', $old_attendee['event_id'], $wpdb->posts);
479
+		if (! $new_event_id) {
480
+			$this->add_error(sprintf(__("Could not find NEW event CPT ID for old event '%d' on old attendee %s", "event_espresso"), $old_attendee['event_id'], $this->_json_encode($old_attendee)));
481
+		}
486 482
 
487
-        $ticket_id = $this->_try_to_find_new_ticket_id($old_attendee, $new_event_id);
488
-        if (! $ticket_id) {
489
-            $ticket_id = $this->_insert_new_ticket_because_none_found($old_attendee, $new_event_id);
490
-            $this->add_error(sprintf(__('Could not find a ticket for old attendee with id %d for new event %d, so created a new ticket with id %d', 'event_espresso'), $old_attendee['id'], $new_event_id, $ticket_id));
491
-        }
492
-        $regs_on_this_row = intval($old_attendee['quantity']);
493
-        $new_regs = array();
494
-        // 4 cases we need to account for:
495
-        // 1 old attendee_details row with a quantity of X (no mer)
496
-        // Y old attendee_details rows with a quantity of 1 (no mer) joined by their common registration_id
497
-        // Y old attendee_details rows with a quantity of x (because of mer)
498
-        // Y old attendee_details rows with a quantity of 1 (because of mer) joined by wp_events_multi_event_registration_id_group
499
-        for ($count = 1; $count <= $regs_on_this_row; $count++) {
500
-            // sum regs on older rows
501
-            $regs_on_this_event_and_txn = $this->_sum_old_attendees_on_old_txn($old_attendee, true);
502
-            $cols_n_values = array(
503
-                'EVT_ID'=>$new_event_id,
504
-                'ATT_ID'=>$new_attendee_id,
505
-                'TXN_ID'=>$new_txn_id,
506
-                'TKT_ID'=>$ticket_id,
507
-                'STS_ID'=>$STS_ID,
508
-                'REG_date'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),
509
-                'REG_final_price'=>$old_attendee['final_price'],
510
-                'REG_session'=> substr($old_attendee['attendee_session'], 0, 44),
511
-                'REG_code'=>sanitize_key($old_attendee['registration_id']),
512
-                'REG_url_link'=>  sanitize_key($old_attendee['registration_id'].'-'.$count),
513
-                'REG_count'=>$regs_on_this_event_and_txn + $count,
514
-                'REG_group_size'=>$this->_sum_old_attendees_on_old_txn($old_attendee, false),
515
-                'REG_att_is_going'=>true,
516
-                'REG_deleted'=>false
517
-            );
518
-            $datatypes = array(
519
-                '%d',// EVT_ID
520
-                '%d',// ATT_ID
521
-                '%d',// TXN_ID
522
-                '%d',// TKT_ID
523
-                '%s',// STS_ID
524
-                '%s',// REG_date
525
-                '%f',// REG_final_price
526
-                '%s',// REG_session
527
-                '%s',// REG_code
528
-                '%s',// REG_url_link
529
-                '%d',// REG_count
530
-                '%d',// REG_group_size
531
-                '%d',// REG_att_is_going
532
-                '%d',// REG_deleted
533
-            );
534
-            $success = $wpdb->insert($this->_new_reg_table, $cols_n_values, $datatypes);
535
-            if (! $success) {
536
-                $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_reg_table, $cols_n_values, $datatypes));
537
-                return 0;
538
-            }
539
-            $cols_n_values['REG_ID'] = $wpdb->insert_id;
540
-            $new_regs[] = $wpdb->insert_id;
541
-        }
542
-        $this->_add_regs_to_ticket_and_datetimes($ticket_id, count($new_regs), $STS_ID);
543
-        return $new_regs;
544
-    }
483
+		$ticket_id = $this->_try_to_find_new_ticket_id($old_attendee, $new_event_id);
484
+		if (! $ticket_id) {
485
+			$ticket_id = $this->_insert_new_ticket_because_none_found($old_attendee, $new_event_id);
486
+			$this->add_error(sprintf(__('Could not find a ticket for old attendee with id %d for new event %d, so created a new ticket with id %d', 'event_espresso'), $old_attendee['id'], $new_event_id, $ticket_id));
487
+		}
488
+		$regs_on_this_row = intval($old_attendee['quantity']);
489
+		$new_regs = array();
490
+		// 4 cases we need to account for:
491
+		// 1 old attendee_details row with a quantity of X (no mer)
492
+		// Y old attendee_details rows with a quantity of 1 (no mer) joined by their common registration_id
493
+		// Y old attendee_details rows with a quantity of x (because of mer)
494
+		// Y old attendee_details rows with a quantity of 1 (because of mer) joined by wp_events_multi_event_registration_id_group
495
+		for ($count = 1; $count <= $regs_on_this_row; $count++) {
496
+			// sum regs on older rows
497
+			$regs_on_this_event_and_txn = $this->_sum_old_attendees_on_old_txn($old_attendee, true);
498
+			$cols_n_values = array(
499
+				'EVT_ID'=>$new_event_id,
500
+				'ATT_ID'=>$new_attendee_id,
501
+				'TXN_ID'=>$new_txn_id,
502
+				'TKT_ID'=>$ticket_id,
503
+				'STS_ID'=>$STS_ID,
504
+				'REG_date'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),
505
+				'REG_final_price'=>$old_attendee['final_price'],
506
+				'REG_session'=> substr($old_attendee['attendee_session'], 0, 44),
507
+				'REG_code'=>sanitize_key($old_attendee['registration_id']),
508
+				'REG_url_link'=>  sanitize_key($old_attendee['registration_id'].'-'.$count),
509
+				'REG_count'=>$regs_on_this_event_and_txn + $count,
510
+				'REG_group_size'=>$this->_sum_old_attendees_on_old_txn($old_attendee, false),
511
+				'REG_att_is_going'=>true,
512
+				'REG_deleted'=>false
513
+			);
514
+			$datatypes = array(
515
+				'%d',// EVT_ID
516
+				'%d',// ATT_ID
517
+				'%d',// TXN_ID
518
+				'%d',// TKT_ID
519
+				'%s',// STS_ID
520
+				'%s',// REG_date
521
+				'%f',// REG_final_price
522
+				'%s',// REG_session
523
+				'%s',// REG_code
524
+				'%s',// REG_url_link
525
+				'%d',// REG_count
526
+				'%d',// REG_group_size
527
+				'%d',// REG_att_is_going
528
+				'%d',// REG_deleted
529
+			);
530
+			$success = $wpdb->insert($this->_new_reg_table, $cols_n_values, $datatypes);
531
+			if (! $success) {
532
+				$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_reg_table, $cols_n_values, $datatypes));
533
+				return 0;
534
+			}
535
+			$cols_n_values['REG_ID'] = $wpdb->insert_id;
536
+			$new_regs[] = $wpdb->insert_id;
537
+		}
538
+		$this->_add_regs_to_ticket_and_datetimes($ticket_id, count($new_regs), $STS_ID);
539
+		return $new_regs;
540
+	}
545 541
 
546
-    /**
547
-     * Increments the sold values on the ticket and its related datetimes by the amount sold,
548
-     * which should be done directly after adding the rows. Yes this means we're constantly incrementing
549
-     * the sold amounts as we go, and is less efficient than a single big query,
550
-     * but its safer because we KNOW these regs have been added, rather than inferring
551
-     * that they WILL be added (because the attendees stage runs nearly last during
552
-     * the migration script)
553
-     * @param type $new_ticket_id
554
-     * @param type $sold
555
-     * @param type $STS_ID
556
-     * @return boolean whether they were successfully updated or not
557
-     */
558
-    protected function _add_regs_to_ticket_and_datetimes($new_ticket_id, $quantity_sold, $STS_ID)
559
-    {
560
-        if ($STS_ID != 'RAP') {
561
-            return true;
562
-        }
563
-        global $wpdb;
564
-        $success = $wpdb->query($wpdb->prepare("UPDATE {$this->_new_ticket_table} SET TKT_sold=TKT_sold+%d WHERE TKT_ID=%d", $quantity_sold, $new_ticket_id));
565
-        if ($success) {
566
-            // get the ticket's datetimes, and increment them too
567
-            $success_update_dateimtes =  $wpdb->query($wpdb->prepare("UPDATE {$this->_new_ticket_table} TKT
542
+	/**
543
+	 * Increments the sold values on the ticket and its related datetimes by the amount sold,
544
+	 * which should be done directly after adding the rows. Yes this means we're constantly incrementing
545
+	 * the sold amounts as we go, and is less efficient than a single big query,
546
+	 * but its safer because we KNOW these regs have been added, rather than inferring
547
+	 * that they WILL be added (because the attendees stage runs nearly last during
548
+	 * the migration script)
549
+	 * @param type $new_ticket_id
550
+	 * @param type $sold
551
+	 * @param type $STS_ID
552
+	 * @return boolean whether they were successfully updated or not
553
+	 */
554
+	protected function _add_regs_to_ticket_and_datetimes($new_ticket_id, $quantity_sold, $STS_ID)
555
+	{
556
+		if ($STS_ID != 'RAP') {
557
+			return true;
558
+		}
559
+		global $wpdb;
560
+		$success = $wpdb->query($wpdb->prepare("UPDATE {$this->_new_ticket_table} SET TKT_sold=TKT_sold+%d WHERE TKT_ID=%d", $quantity_sold, $new_ticket_id));
561
+		if ($success) {
562
+			// get the ticket's datetimes, and increment them too
563
+			$success_update_dateimtes =  $wpdb->query($wpdb->prepare("UPDATE {$this->_new_ticket_table} TKT
568 564
 				INNER JOIN {$this->_new_ticket_datetime_table} as DTK ON TKT.TKT_ID = DTK.TKT_ID
569 565
 				INNER JOIN {$this->_new_datetime_table} as DTT ON DTK.DTT_ID = DTT.DTT_ID
570 566
 				SET DTT.DTT_sold = DTT.DTT_sold + %d WHERE TKT.TKT_ID = %d", $quantity_sold, $new_ticket_id));
571
-            if (! $success_update_dateimtes) {
572
-                $this->add_error(sprintf(__("Could not update datetimes related to ticket with ID %d's TKT_sold by %d because %s", "event_espresso"), $new_ticket_id, $quantity_sold, $wpdb->last_error));
573
-            }
574
-        } else {
575
-            $this->add_error(sprintf(__("Could not update ticket with ID %d's TKT_sold by %d because %s", "event_espresso"), $new_ticket_id, $quantity_sold, $wpdb->last_error));
576
-        }
577
-        return true;
578
-    }
579
-    /**
580
-     * Makes a best guess at which ticket is the one the attendee purchased.
581
-     * Obviously, the old attendee's event_id narrows it down quite a bit;
582
-     * then the old attendee's orig_price and event_time, and price_option can uniquely identify the ticket
583
-     * however, if we don't find an exact match, see if any of those conditions match;
584
-     * and lastly if none of that works, just use the first ticket for the event we find
585
-     * @param array $old_attendee
586
-     */
587
-    private function _try_to_find_new_ticket_id($old_attendee, $new_event_id)
588
-    {
589
-        global $wpdb;
590
-        $tickets_table = $this->_new_ticket_table;
591
-        $datetime_tickets_table = $this->_new_ticket_datetime_table;
592
-        $datetime_table = $this->_new_datetime_table;
567
+			if (! $success_update_dateimtes) {
568
+				$this->add_error(sprintf(__("Could not update datetimes related to ticket with ID %d's TKT_sold by %d because %s", "event_espresso"), $new_ticket_id, $quantity_sold, $wpdb->last_error));
569
+			}
570
+		} else {
571
+			$this->add_error(sprintf(__("Could not update ticket with ID %d's TKT_sold by %d because %s", "event_espresso"), $new_ticket_id, $quantity_sold, $wpdb->last_error));
572
+		}
573
+		return true;
574
+	}
575
+	/**
576
+	 * Makes a best guess at which ticket is the one the attendee purchased.
577
+	 * Obviously, the old attendee's event_id narrows it down quite a bit;
578
+	 * then the old attendee's orig_price and event_time, and price_option can uniquely identify the ticket
579
+	 * however, if we don't find an exact match, see if any of those conditions match;
580
+	 * and lastly if none of that works, just use the first ticket for the event we find
581
+	 * @param array $old_attendee
582
+	 */
583
+	private function _try_to_find_new_ticket_id($old_attendee, $new_event_id)
584
+	{
585
+		global $wpdb;
586
+		$tickets_table = $this->_new_ticket_table;
587
+		$datetime_tickets_table = $this->_new_ticket_datetime_table;
588
+		$datetime_table = $this->_new_datetime_table;
593 589
 
594
-        $old_att_price_option = $old_attendee['price_option'];
595
-        $old_att_price = floatval($old_attendee['orig_price']);
590
+		$old_att_price_option = $old_attendee['price_option'];
591
+		$old_att_price = floatval($old_attendee['orig_price']);
596 592
 
597
-        $old_att_start_date = $old_attendee['start_date'];
598
-        $old_att_start_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
599
-        $old_att_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_start_date $old_att_start_time:00");
600
-        // add all conditions to an array from which we can SHIFT conditions off in order to widen our search
601
-        // the most important condition should be last, as it will be array_shift'ed off last
602
-        $conditions = array(
603
-            $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match?
604
-            $wpdb->prepare("$tickets_table.TKT_price = %f", $old_att_price),// prices match?
605
-            $wpdb->prepare("$tickets_table.TKT_name = %s", $old_att_price_option),// names match?
606
-            $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match?
607
-        );
608
-        $select_and_join_part = "SELECT $tickets_table.TKT_ID FROM $tickets_table INNER JOIN
593
+		$old_att_start_date = $old_attendee['start_date'];
594
+		$old_att_start_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
595
+		$old_att_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_start_date $old_att_start_time:00");
596
+		// add all conditions to an array from which we can SHIFT conditions off in order to widen our search
597
+		// the most important condition should be last, as it will be array_shift'ed off last
598
+		$conditions = array(
599
+			$wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match?
600
+			$wpdb->prepare("$tickets_table.TKT_price = %f", $old_att_price),// prices match?
601
+			$wpdb->prepare("$tickets_table.TKT_name = %s", $old_att_price_option),// names match?
602
+			$wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match?
603
+		);
604
+		$select_and_join_part = "SELECT $tickets_table.TKT_ID FROM $tickets_table INNER JOIN
609 605
 			$datetime_tickets_table ON $tickets_table.TKT_ID = $datetime_tickets_table.TKT_ID INNER JOIN
610 606
 			$datetime_table ON $datetime_tickets_table.DTT_ID = $datetime_table.DTT_ID";
611
-        // start running queries, widening search each time by removing a condition
612
-        do {
613
-            $full_query = $select_and_join_part." WHERE ".implode(" AND ", $conditions)." LIMIT 1";
614
-            $ticket_id_found = $wpdb->get_var($full_query);
615
-            array_shift($conditions);
616
-        } while (! $ticket_id_found && $conditions);
617
-        return $ticket_id_found;
618
-    }
607
+		// start running queries, widening search each time by removing a condition
608
+		do {
609
+			$full_query = $select_and_join_part." WHERE ".implode(" AND ", $conditions)." LIMIT 1";
610
+			$ticket_id_found = $wpdb->get_var($full_query);
611
+			array_shift($conditions);
612
+		} while (! $ticket_id_found && $conditions);
613
+		return $ticket_id_found;
614
+	}
619 615
 
620
-    /**
621
-     * If we couldn't find a 4.1 ticket for a 3.1 attendee row, this function creates one;
622
-     * and it also tries to find a datetime that works, and a inserts a price, and associates
623
-     * the new ticket to that datetime and price.
624
-     * @return int ticket id
625
-     */
626
-    private function _insert_new_ticket_because_none_found($old_attendee, $new_event_id)
627
-    {
628
-        global $wpdb;
629
-        $old_att_price_option = $old_attendee['price_option'];
630
-        $old_att_price = floatval($old_attendee['orig_price']);
616
+	/**
617
+	 * If we couldn't find a 4.1 ticket for a 3.1 attendee row, this function creates one;
618
+	 * and it also tries to find a datetime that works, and a inserts a price, and associates
619
+	 * the new ticket to that datetime and price.
620
+	 * @return int ticket id
621
+	 */
622
+	private function _insert_new_ticket_because_none_found($old_attendee, $new_event_id)
623
+	{
624
+		global $wpdb;
625
+		$old_att_price_option = $old_attendee['price_option'];
626
+		$old_att_price = floatval($old_attendee['orig_price']);
631 627
 
632
-        $old_att_start_date = $old_attendee['start_date'];
633
-        $old_att_start_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
634
-        $old_att_start_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_start_date $old_att_start_time:00");
628
+		$old_att_start_date = $old_attendee['start_date'];
629
+		$old_att_start_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
630
+		$old_att_start_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_start_date $old_att_start_time:00");
635 631
 
636 632
 
637
-        // insert new datetime unless we find one
638
-        $datetime_id = $wpdb->get_var($wpdb->prepare("SELECT DTT_ID FROM " . $this->_new_datetime_table . " WHERE DTT_EVT_start=%s AND EVT_ID=%d LIMIT 1", $old_att_start_datetime, $new_event_id), ARRAY_A);
639
-        if (! $datetime_id) {
640
-            $old_att_end_date = $old_attendee['start_date'];
641
-            $old_att_end_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
642
-            $old_att_end_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_end_date $old_att_end_time:00");
643
-            $wpdb->insert(
644
-                $this->_new_datetime_table,
645
-                array(
646
-                        'EVT_ID' => $new_event_id,
647
-                        'DTT_EVT_start' => $old_att_start_datetime,
648
-                        'DTT_EVT_end' => $old_att_end_datetime,
649
-                        'DTT_deleted' => true
650
-                    ),
651
-                array(
652
-                        '%d',// EVT_ID
653
-                        '%s',// DTT_EVT_start
654
-                        '%s',// DTT_EVT_end
655
-                        '%d',// DTT_deleted
656
-                    )
657
-            );
658
-            $datetime_id = $wpdb->insert_id;
659
-        }
633
+		// insert new datetime unless we find one
634
+		$datetime_id = $wpdb->get_var($wpdb->prepare("SELECT DTT_ID FROM " . $this->_new_datetime_table . " WHERE DTT_EVT_start=%s AND EVT_ID=%d LIMIT 1", $old_att_start_datetime, $new_event_id), ARRAY_A);
635
+		if (! $datetime_id) {
636
+			$old_att_end_date = $old_attendee['start_date'];
637
+			$old_att_end_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
638
+			$old_att_end_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_end_date $old_att_end_time:00");
639
+			$wpdb->insert(
640
+				$this->_new_datetime_table,
641
+				array(
642
+						'EVT_ID' => $new_event_id,
643
+						'DTT_EVT_start' => $old_att_start_datetime,
644
+						'DTT_EVT_end' => $old_att_end_datetime,
645
+						'DTT_deleted' => true
646
+					),
647
+				array(
648
+						'%d',// EVT_ID
649
+						'%s',// DTT_EVT_start
650
+						'%s',// DTT_EVT_end
651
+						'%d',// DTT_deleted
652
+					)
653
+			);
654
+			$datetime_id = $wpdb->insert_id;
655
+		}
660 656
 
661
-        // insert new ticket
662
-        $success = $wpdb->insert(
663
-            $wpdb->prefix . 'esp_ticket',
664
-            array(
665
-                    'TKT_name' => $old_att_price_option,
666
-                    'TKT_qty' => -1,
667
-                    'TKT_price' => $old_att_price,
668
-                    'TKT_start_date' => $old_att_start_datetime,// we really have no clue what the time should be, but at least it was available when they attended
669
-                    'TKT_end_date' => $old_att_end_datetime,
657
+		// insert new ticket
658
+		$success = $wpdb->insert(
659
+			$wpdb->prefix . 'esp_ticket',
660
+			array(
661
+					'TKT_name' => $old_att_price_option,
662
+					'TKT_qty' => -1,
663
+					'TKT_price' => $old_att_price,
664
+					'TKT_start_date' => $old_att_start_datetime,// we really have no clue what the time should be, but at least it was available when they attended
665
+					'TKT_end_date' => $old_att_end_datetime,
670 666
 
671
-                ),
672
-            array(
673
-                    '%s',// name
674
-                    '%d',// qty
675
-                    '%d',// price
676
-                    '%s',// start_date
677
-                    '%s',// end_date
678
-                )
679
-        );
680
-        $ticket_id = $wpdb->insert_id;
681
-        // associate the ticket with the datetime we found earlier
682
-        $wpdb->insert(
683
-            $this->_new_datetime_ticket_table,
684
-            array(
685
-                    'DTT_ID' => $datetime_id,
686
-                    'TKT_ID' => $ticket_id
687
-                ),
688
-            array(
689
-                    '%d',// DTT_ID
690
-                    '%d',// TKT_ID
691
-                )
692
-        );
693
-        // insert new price
694
-        $wpdb->insert(
695
-            $this->_new_price_table,
696
-            array(
697
-                    'PRC_amount' => $old_att_price,
698
-                    'PRT_ID' => EE_DMS_4_1_0_prices::price_type_base,
699
-                    'PRC_name' => $old_att_price_option,
700
-                    'PRC_deleted' => true
701
-                ),
702
-            array(
703
-                    '%d',// PRC_amount
704
-                    '%d',// PRT_ID
705
-                    '%s',// PRC_name
706
-                    '%d',// PRC_deleted
707
-                )
708
-        );
709
-        $price_id = $wpdb->insert_id;
710
-        // associate the price to the ticket
711
-        $wpdb->insert(
712
-            $this->_new_ticket_price_table,
713
-            array(
714
-                    'TKT_ID' => $ticket_id,
715
-                    'PRC_ID' => $price_id
716
-                ),
717
-            array(
718
-                    '%d',// TKT_ID
719
-                    '%d',// PRC_ID
720
-                )
721
-        );
722
-        return $ticket_id;
723
-    }
724
-    /**
725
-     * Counts all the registrations on this transaction. If $count_only_older is TRUE then returns the number added SO FAR (ie,
726
-     * only considers attendee rows with an ID less than this one's), but if $count_only_older is FALSe returns ALL
727
-     * @global type $wpdb
728
-     * @param array $old_attendee_row
729
-     * @param boolean $count_only_older true if you want the running count (ie, the total up to this row), and false if you want ALL
730
-     * @return int
731
-     */
732
-    private function _sum_old_attendees_on_old_txn($old_attendee_row, $count_only_older = false)
733
-    {
734
-        global $wpdb;
735
-        $count_only_older_sql = $count_only_older ? $wpdb->prepare(" AND id<%d", $old_attendee_row['id']) : '';
736
-        $count = intval($wpdb->get_var($wpdb->prepare("SELECT SUM(quantity) FROM ".$this->_old_table." WHERE registration_id=%s $count_only_older_sql", $old_attendee_row['registration_id'])));
667
+				),
668
+			array(
669
+					'%s',// name
670
+					'%d',// qty
671
+					'%d',// price
672
+					'%s',// start_date
673
+					'%s',// end_date
674
+				)
675
+		);
676
+		$ticket_id = $wpdb->insert_id;
677
+		// associate the ticket with the datetime we found earlier
678
+		$wpdb->insert(
679
+			$this->_new_datetime_ticket_table,
680
+			array(
681
+					'DTT_ID' => $datetime_id,
682
+					'TKT_ID' => $ticket_id
683
+				),
684
+			array(
685
+					'%d',// DTT_ID
686
+					'%d',// TKT_ID
687
+				)
688
+		);
689
+		// insert new price
690
+		$wpdb->insert(
691
+			$this->_new_price_table,
692
+			array(
693
+					'PRC_amount' => $old_att_price,
694
+					'PRT_ID' => EE_DMS_4_1_0_prices::price_type_base,
695
+					'PRC_name' => $old_att_price_option,
696
+					'PRC_deleted' => true
697
+				),
698
+			array(
699
+					'%d',// PRC_amount
700
+					'%d',// PRT_ID
701
+					'%s',// PRC_name
702
+					'%d',// PRC_deleted
703
+				)
704
+		);
705
+		$price_id = $wpdb->insert_id;
706
+		// associate the price to the ticket
707
+		$wpdb->insert(
708
+			$this->_new_ticket_price_table,
709
+			array(
710
+					'TKT_ID' => $ticket_id,
711
+					'PRC_ID' => $price_id
712
+				),
713
+			array(
714
+					'%d',// TKT_ID
715
+					'%d',// PRC_ID
716
+				)
717
+		);
718
+		return $ticket_id;
719
+	}
720
+	/**
721
+	 * Counts all the registrations on this transaction. If $count_only_older is TRUE then returns the number added SO FAR (ie,
722
+	 * only considers attendee rows with an ID less than this one's), but if $count_only_older is FALSe returns ALL
723
+	 * @global type $wpdb
724
+	 * @param array $old_attendee_row
725
+	 * @param boolean $count_only_older true if you want the running count (ie, the total up to this row), and false if you want ALL
726
+	 * @return int
727
+	 */
728
+	private function _sum_old_attendees_on_old_txn($old_attendee_row, $count_only_older = false)
729
+	{
730
+		global $wpdb;
731
+		$count_only_older_sql = $count_only_older ? $wpdb->prepare(" AND id<%d", $old_attendee_row['id']) : '';
732
+		$count = intval($wpdb->get_var($wpdb->prepare("SELECT SUM(quantity) FROM ".$this->_old_table." WHERE registration_id=%s $count_only_older_sql", $old_attendee_row['registration_id'])));
737 733
 
738
-        if ($this->_mer_tables_exist()) {
739
-            // if MER exists, then its a little tricky.
740
-            // when users registered by adding items to the cart, and it was a
741
-            // group registration requiring additional attendee INFO, then the attendee rows
742
-            // DO NOT have the same registration_id (although they probably should have)
743
-            // they are related just like MER attendee rows are related, through the MER group table
744
-            // BUT we want to count all the MER attendee rows for the same registration
745
-            $primary_attendee = $this->_find_mer_primary_attendee_using_mer_tables($old_attendee_row['registration_id']);
734
+		if ($this->_mer_tables_exist()) {
735
+			// if MER exists, then its a little tricky.
736
+			// when users registered by adding items to the cart, and it was a
737
+			// group registration requiring additional attendee INFO, then the attendee rows
738
+			// DO NOT have the same registration_id (although they probably should have)
739
+			// they are related just like MER attendee rows are related, through the MER group table
740
+			// BUT we want to count all the MER attendee rows for the same registration
741
+			$primary_attendee = $this->_find_mer_primary_attendee_using_mer_tables($old_attendee_row['registration_id']);
746 742
 
747
-            $count_using_mer_table = $wpdb->get_var($wpdb->prepare("SELECT SUM(quantity) FROM {$this->_old_table} att INNER JOIN {$this->_old_mer_table} mer ON att.registration_id = mer.registration_id WHERE att.event_id=%d AND mer.primary_registration_id = %s $count_only_older_sql", $old_attendee_row['event_id'], $primary_attendee['registration_id']));
748
-            $count = max($count_using_mer_table, $count);
749
-        }
750
-        return $count;
751
-    }
752
-    private function _insert_new_payment($old_attendee, $new_txn_id)
753
-    {
754
-        global $wpdb;
755
-        // only add a payment for primary attendees
756
-        $old_pay_stati_indicating_no_payment = array('Pending','Incomplete','Not Completed');
757
-        // if this is for a primary 3.1 attendee which WASN'T free and has a completed, cancelled, or declined payment...
758
-        if (intval($old_attendee['is_primary']) && floatval($old_attendee['total_cost']) && ! in_array($old_attendee['payment_status'], $old_pay_stati_indicating_no_payment)) {
759
-            $pay_status_mapping = array(
760
-                'Completed'=>'PAP',
761
-                'Payment Declined'=>'PDC',
762
-                'Cancelled'=>'PCN',
763
-                'Declined'=>'PDC'
764
-            );
765
-            $by_admin = $old_attendee['payment'] == 'Admin';
766
-            $STS_ID = isset($pay_status_mapping[ $old_attendee['payment_status'] ]) ? $pay_status_mapping[ $old_attendee['payment_status'] ] : 'PFL';// IE, if we don't recognize the status, assume payment failed
767
-            $cols_n_values = array(
768
-                'TXN_ID'=>$new_txn_id,
769
-                'STS_ID'=>$STS_ID,
770
-                'PAY_timestamp'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),
771
-                'PAY_method'=>'CART',
772
-                'PAY_amount'=>$old_attendee['amount_pd'],
773
-                'PAY_gateway'=>$old_attendee['txn_type'],
774
-                'PAY_gateway_response'=>'',
775
-                'PAY_txn_id_chq_nmbr'=>substr($old_attendee['txn_id'], 0, 32),
776
-                'PAY_via_admin'=>$by_admin,
777
-                'PAY_details'=>$old_attendee['transaction_details']
743
+			$count_using_mer_table = $wpdb->get_var($wpdb->prepare("SELECT SUM(quantity) FROM {$this->_old_table} att INNER JOIN {$this->_old_mer_table} mer ON att.registration_id = mer.registration_id WHERE att.event_id=%d AND mer.primary_registration_id = %s $count_only_older_sql", $old_attendee_row['event_id'], $primary_attendee['registration_id']));
744
+			$count = max($count_using_mer_table, $count);
745
+		}
746
+		return $count;
747
+	}
748
+	private function _insert_new_payment($old_attendee, $new_txn_id)
749
+	{
750
+		global $wpdb;
751
+		// only add a payment for primary attendees
752
+		$old_pay_stati_indicating_no_payment = array('Pending','Incomplete','Not Completed');
753
+		// if this is for a primary 3.1 attendee which WASN'T free and has a completed, cancelled, or declined payment...
754
+		if (intval($old_attendee['is_primary']) && floatval($old_attendee['total_cost']) && ! in_array($old_attendee['payment_status'], $old_pay_stati_indicating_no_payment)) {
755
+			$pay_status_mapping = array(
756
+				'Completed'=>'PAP',
757
+				'Payment Declined'=>'PDC',
758
+				'Cancelled'=>'PCN',
759
+				'Declined'=>'PDC'
760
+			);
761
+			$by_admin = $old_attendee['payment'] == 'Admin';
762
+			$STS_ID = isset($pay_status_mapping[ $old_attendee['payment_status'] ]) ? $pay_status_mapping[ $old_attendee['payment_status'] ] : 'PFL';// IE, if we don't recognize the status, assume payment failed
763
+			$cols_n_values = array(
764
+				'TXN_ID'=>$new_txn_id,
765
+				'STS_ID'=>$STS_ID,
766
+				'PAY_timestamp'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),
767
+				'PAY_method'=>'CART',
768
+				'PAY_amount'=>$old_attendee['amount_pd'],
769
+				'PAY_gateway'=>$old_attendee['txn_type'],
770
+				'PAY_gateway_response'=>'',
771
+				'PAY_txn_id_chq_nmbr'=>substr($old_attendee['txn_id'], 0, 32),
772
+				'PAY_via_admin'=>$by_admin,
773
+				'PAY_details'=>$old_attendee['transaction_details']
778 774
 
779
-            );
780
-            $datatypes = array(
781
-                '%d',// TXN_Id
782
-                '%s',// STS_ID
783
-                '%s',// PAY_timestamp
784
-                '%s',// PAY_method
785
-                '%f',// PAY_amount
786
-                '%s',// PAY_gateway
787
-                '%s',// PAY_gateway_response
788
-                '%s',// PAY_txn_id_chq_nmbr
789
-                '%d',// PAY_via_admin
790
-                '%s',// PAY_details
791
-            );
792
-            $success = $wpdb->insert($this->_new_payment_table, $cols_n_values, $datatypes);
793
-            if (! $success) {
794
-                $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_cpt_table, $cols_n_values, $datatypes));
795
-                return 0;
796
-            }
797
-            $new_id = $wpdb->insert_id;
798
-            return $new_id;
799
-        } else {
800
-            return 0;
801
-        }
802
-    }
775
+			);
776
+			$datatypes = array(
777
+				'%d',// TXN_Id
778
+				'%s',// STS_ID
779
+				'%s',// PAY_timestamp
780
+				'%s',// PAY_method
781
+				'%f',// PAY_amount
782
+				'%s',// PAY_gateway
783
+				'%s',// PAY_gateway_response
784
+				'%s',// PAY_txn_id_chq_nmbr
785
+				'%d',// PAY_via_admin
786
+				'%s',// PAY_details
787
+			);
788
+			$success = $wpdb->insert($this->_new_payment_table, $cols_n_values, $datatypes);
789
+			if (! $success) {
790
+				$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_cpt_table, $cols_n_values, $datatypes));
791
+				return 0;
792
+			}
793
+			$new_id = $wpdb->insert_id;
794
+			return $new_id;
795
+		} else {
796
+			return 0;
797
+		}
798
+	}
803 799
 
804
-    /**
805
-     * If MER is active, if you want ot fin dthe other registrations on that attendee row
806
-     * @global type $wpdb
807
-     * @param type $old_registration_id
808
-     * @return array
809
-     */
810
-    private function _find_mer_primary_attendee_using_mer_tables($old_registration_id)
811
-    {
812
-        if (! $this->_mer_tables_exist()) {
813
-            return false;
814
-        }
815
-        global $wpdb;
816
-        $old_att_for_primary_reg = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$this->_old_mer_table} AS mer INNER JOIN {$this->_old_table} AS att ON mer.primary_registration_id = att.registration_id WHERE mer.registration_id=%s LIMIT 1", $old_registration_id), ARRAY_A);
817
-        return $old_att_for_primary_reg;
818
-    }
800
+	/**
801
+	 * If MER is active, if you want ot fin dthe other registrations on that attendee row
802
+	 * @global type $wpdb
803
+	 * @param type $old_registration_id
804
+	 * @return array
805
+	 */
806
+	private function _find_mer_primary_attendee_using_mer_tables($old_registration_id)
807
+	{
808
+		if (! $this->_mer_tables_exist()) {
809
+			return false;
810
+		}
811
+		global $wpdb;
812
+		$old_att_for_primary_reg = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$this->_old_mer_table} AS mer INNER JOIN {$this->_old_table} AS att ON mer.primary_registration_id = att.registration_id WHERE mer.registration_id=%s LIMIT 1", $old_registration_id), ARRAY_A);
813
+		return $old_att_for_primary_reg;
814
+	}
819 815
 }
Please login to merge, or discard this patch.
Spacing   +105 added lines, -105 removed lines patch added patch discarded remove patch
@@ -210,7 +210,7 @@  discard block
 block discarded – undo
210 210
         $this->_pretty_name = __("Attendees", "event_espresso");
211 211
         $this->_old_table = $wpdb->prefix."events_attendee";
212 212
         $this->_extra_where_sql = 'AS att
213
-            INNER JOIN ' . $wpdb->prefix . 'events_detail AS e ON att.event_id=e.id
213
+            INNER JOIN ' . $wpdb->prefix.'events_detail AS e ON att.event_id=e.id
214 214
             WHERE e.event_status!="D"';
215 215
         $this->_old_mer_table = $wpdb->prefix."events_multi_event_registration_id_group";
216 216
         $this->_new_attendee_cpt_table = $wpdb->posts;
@@ -232,9 +232,9 @@  discard block
 block discarded – undo
232 232
     {
233 233
         // first check if there's already a new attendee with similar characteristics
234 234
         $new_att_id = $this->_find_attendee_cpt_matching($old_row);
235
-        if (! $new_att_id) {
235
+        if ( ! $new_att_id) {
236 236
             $new_att_id = $this->_insert_new_attendee_cpt($old_row);
237
-            if (! $new_att_id) {
237
+            if ( ! $new_att_id) {
238 238
                 // if we couldnt even make an attendee, abandon all hope
239 239
                 return false;
240 240
             }
@@ -246,7 +246,7 @@  discard block
 block discarded – undo
246 246
         $this->get_migration_script()->set_mapping($this->_old_table, $old_row['id'], $this->_new_attendee_cpt_table, $new_att_id);
247 247
 
248 248
         $txn_id = $this->_insert_new_transaction($old_row);
249
-        if (! $txn_id) {
249
+        if ( ! $txn_id) {
250 250
             // if we couldnt make the transaction, also abandon all hope
251 251
             return false;
252 252
         }
@@ -280,31 +280,31 @@  discard block
 block discarded – undo
280 280
     {
281 281
         global $wpdb;
282 282
         $cols_n_values = array(
283
-            'post_title'=>stripslashes($old_attendee['fname']." ".$old_attendee['lname']),// ATT_full_name
284
-            'post_content'=>'',// ATT_bio
285
-            'post_name'=>sanitize_title($old_attendee['fname']."-".$old_attendee['lname']),// ATT_slug
286
-            'post_date'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),// ATT_created
287
-            'post_excerpt'=>'',// ATT_short_bio
288
-            'post_modified'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),// ATT_modified
289
-            'post_author'=>0,// ATT_author
290
-            'post_parent'=>0,// ATT_parent
291
-            'post_type'=>'espresso_attendees',// post_type
283
+            'post_title'=>stripslashes($old_attendee['fname']." ".$old_attendee['lname']), // ATT_full_name
284
+            'post_content'=>'', // ATT_bio
285
+            'post_name'=>sanitize_title($old_attendee['fname']."-".$old_attendee['lname']), // ATT_slug
286
+            'post_date'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']), // ATT_created
287
+            'post_excerpt'=>'', // ATT_short_bio
288
+            'post_modified'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']), // ATT_modified
289
+            'post_author'=>0, // ATT_author
290
+            'post_parent'=>0, // ATT_parent
291
+            'post_type'=>'espresso_attendees', // post_type
292 292
             'post_status'=>'publish'// status
293 293
         );
294 294
         $datatypes = array(
295
-            '%s',// ATT_full_name
296
-            '%s',// ATT_bio
297
-            '%s',// ATT_slug
298
-            '%s',// ATT_created
299
-            '%s',// ATT_short_bio
300
-            '%s',// ATT_modified
301
-            '%d',// ATT_author
302
-            '%d',// ATT_parent
303
-            '%s',// post_type
304
-            '%s',// status
295
+            '%s', // ATT_full_name
296
+            '%s', // ATT_bio
297
+            '%s', // ATT_slug
298
+            '%s', // ATT_created
299
+            '%s', // ATT_short_bio
300
+            '%s', // ATT_modified
301
+            '%d', // ATT_author
302
+            '%d', // ATT_parent
303
+            '%s', // post_type
304
+            '%s', // status
305 305
         );
306 306
         $success = $wpdb->insert($this->_new_attendee_cpt_table, $cols_n_values, $datatypes);
307
-        if (! $success) {
307
+        if ( ! $success) {
308 308
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_cpt_table, $cols_n_values, $datatypes));
309 309
             return 0;
310 310
         }
@@ -342,20 +342,20 @@  discard block
 block discarded – undo
342 342
             'ATT_phone'=>stripslashes($old_attendee['phone']),
343 343
         );
344 344
         $datatypes = array(
345
-            '%d',// ATT_ID
346
-            '%s',// ATT_fname
347
-            '%s',// ATT_lname
348
-            '%s',// ATT_address
349
-            '%s',// ATT_address2
350
-            '%s',// ATT_city
351
-            '%d',// STA_ID
352
-            '%s',// CNT_ISO
353
-            '%s',// ATT_zip
354
-            '%s',// ATT_email
355
-            '%s',// ATT_phone
345
+            '%d', // ATT_ID
346
+            '%s', // ATT_fname
347
+            '%s', // ATT_lname
348
+            '%s', // ATT_address
349
+            '%s', // ATT_address2
350
+            '%s', // ATT_city
351
+            '%d', // STA_ID
352
+            '%s', // CNT_ISO
353
+            '%s', // ATT_zip
354
+            '%s', // ATT_email
355
+            '%s', // ATT_phone
356 356
         );
357 357
         $success = $wpdb->insert($this->_new_attendee_meta_table, $cols_n_values, $datatypes);
358
-        if (! $success) {
358
+        if ( ! $success) {
359 359
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_meta_table, $cols_n_values, $datatypes));
360 360
             return 0;
361 361
         }
@@ -380,12 +380,12 @@  discard block
 block discarded – undo
380 380
             $txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, intval($old_attendee['id']), $this->_new_transaction_table);
381 381
         } else { // non-primary attendee, so find its primary attendee's transaction
382 382
             $primary_attendee_old_id = $wpdb->get_var($wpdb->prepare("SELECT id FROM ".$this->_old_table." WHERE is_primary=1 and registration_id=%s", $old_attendee['registration_id']));
383
-            if (! $primary_attendee_old_id) {
383
+            if ( ! $primary_attendee_old_id) {
384 384
                 $primary_attendee = $this->_find_mer_primary_attendee_using_mer_tables($old_attendee['registration_id']);
385 385
                 $primary_attendee_old_id = is_array($primary_attendee) ? $primary_attendee['id'] : null;
386 386
             }
387 387
             $txn_id = $this->get_migration_script()->get_mapping_new_pk($this->_old_table, intval($primary_attendee_old_id), $this->_new_transaction_table);
388
-            if (! $txn_id) {
388
+            if ( ! $txn_id) {
389 389
                 $this->add_error(sprintf(__("Could not find primary attendee's new transaction. Current attendee is: %s, we think the 3.1 primary attendee for it has id %d, but there's no 4.1 transaction for that primary attendee id.", "event_espresso"), $this->_json_encode($old_attendee), $primary_attendee_old_id));
390 390
                 $txn_id = 0;
391 391
             }
@@ -393,7 +393,7 @@  discard block
 block discarded – undo
393 393
         // if there isn't yet a transaction row for this, create one
394 394
         // (so even if it was a non-primary attendee with no EE3 primary attendee,
395 395
         // it ought to have SOME transaction, so we'll make one)
396
-        if (! $txn_id) {
396
+        if ( ! $txn_id) {
397 397
             // maps 3.1 payment stati onto 4.1 transaction stati
398 398
             $txn_status_mapping = array(
399 399
                 'Completed'=>'TCM',
@@ -404,7 +404,7 @@  discard block
 block discarded – undo
404 404
                 'Cancelled'=>'TIN',
405 405
                 'Declined'=>'TIN'
406 406
             );
407
-            $STS_ID = isset($txn_status_mapping[ $old_attendee['payment_status'] ]) ? $txn_status_mapping[ $old_attendee['payment_status'] ] : 'TIN';
407
+            $STS_ID = isset($txn_status_mapping[$old_attendee['payment_status']]) ? $txn_status_mapping[$old_attendee['payment_status']] : 'TIN';
408 408
             $cols_n_values = array(
409 409
                 'TXN_timestamp'=>$this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, $old_attendee['date']),
410 410
                 'TXN_total'=>floatval($old_attendee['total_cost']),
@@ -413,14 +413,14 @@  discard block
 block discarded – undo
413 413
                 'TXN_hash_salt'=>$old_attendee['hashSalt']
414 414
             );
415 415
             $datatypes = array(
416
-                '%s',// TXN_timestamp
417
-                '%f',// TXN_total
418
-                '%f',// TXN_paid
419
-                '%s',// STS_ID
420
-                '%s',// TXN_hash_salt
416
+                '%s', // TXN_timestamp
417
+                '%f', // TXN_total
418
+                '%f', // TXN_paid
419
+                '%s', // STS_ID
420
+                '%s', // TXN_hash_salt
421 421
             );
422 422
             $success = $wpdb->insert($this->_new_transaction_table, $cols_n_values, $datatypes);
423
-            if (! $success) {
423
+            if ( ! $success) {
424 424
                 $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_transaction_table, $cols_n_values, $datatypes));
425 425
                 return 0;
426 426
             }
@@ -480,12 +480,12 @@  discard block
 block discarded – undo
480 480
 
481 481
         $STS_ID = $this->_get_reg_status_for_old_payment_status($old_attendee);
482 482
         $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix.'events_detail', $old_attendee['event_id'], $wpdb->posts);
483
-        if (! $new_event_id) {
483
+        if ( ! $new_event_id) {
484 484
             $this->add_error(sprintf(__("Could not find NEW event CPT ID for old event '%d' on old attendee %s", "event_espresso"), $old_attendee['event_id'], $this->_json_encode($old_attendee)));
485 485
         }
486 486
 
487 487
         $ticket_id = $this->_try_to_find_new_ticket_id($old_attendee, $new_event_id);
488
-        if (! $ticket_id) {
488
+        if ( ! $ticket_id) {
489 489
             $ticket_id = $this->_insert_new_ticket_because_none_found($old_attendee, $new_event_id);
490 490
             $this->add_error(sprintf(__('Could not find a ticket for old attendee with id %d for new event %d, so created a new ticket with id %d', 'event_espresso'), $old_attendee['id'], $new_event_id, $ticket_id));
491 491
         }
@@ -516,23 +516,23 @@  discard block
 block discarded – undo
516 516
                 'REG_deleted'=>false
517 517
             );
518 518
             $datatypes = array(
519
-                '%d',// EVT_ID
520
-                '%d',// ATT_ID
521
-                '%d',// TXN_ID
522
-                '%d',// TKT_ID
523
-                '%s',// STS_ID
524
-                '%s',// REG_date
525
-                '%f',// REG_final_price
526
-                '%s',// REG_session
527
-                '%s',// REG_code
528
-                '%s',// REG_url_link
529
-                '%d',// REG_count
530
-                '%d',// REG_group_size
531
-                '%d',// REG_att_is_going
532
-                '%d',// REG_deleted
519
+                '%d', // EVT_ID
520
+                '%d', // ATT_ID
521
+                '%d', // TXN_ID
522
+                '%d', // TKT_ID
523
+                '%s', // STS_ID
524
+                '%s', // REG_date
525
+                '%f', // REG_final_price
526
+                '%s', // REG_session
527
+                '%s', // REG_code
528
+                '%s', // REG_url_link
529
+                '%d', // REG_count
530
+                '%d', // REG_group_size
531
+                '%d', // REG_att_is_going
532
+                '%d', // REG_deleted
533 533
             );
534 534
             $success = $wpdb->insert($this->_new_reg_table, $cols_n_values, $datatypes);
535
-            if (! $success) {
535
+            if ( ! $success) {
536 536
                 $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_reg_table, $cols_n_values, $datatypes));
537 537
                 return 0;
538 538
             }
@@ -564,11 +564,11 @@  discard block
 block discarded – undo
564 564
         $success = $wpdb->query($wpdb->prepare("UPDATE {$this->_new_ticket_table} SET TKT_sold=TKT_sold+%d WHERE TKT_ID=%d", $quantity_sold, $new_ticket_id));
565 565
         if ($success) {
566 566
             // get the ticket's datetimes, and increment them too
567
-            $success_update_dateimtes =  $wpdb->query($wpdb->prepare("UPDATE {$this->_new_ticket_table} TKT
567
+            $success_update_dateimtes = $wpdb->query($wpdb->prepare("UPDATE {$this->_new_ticket_table} TKT
568 568
 				INNER JOIN {$this->_new_ticket_datetime_table} as DTK ON TKT.TKT_ID = DTK.TKT_ID
569 569
 				INNER JOIN {$this->_new_datetime_table} as DTT ON DTK.DTT_ID = DTT.DTT_ID
570 570
 				SET DTT.DTT_sold = DTT.DTT_sold + %d WHERE TKT.TKT_ID = %d", $quantity_sold, $new_ticket_id));
571
-            if (! $success_update_dateimtes) {
571
+            if ( ! $success_update_dateimtes) {
572 572
                 $this->add_error(sprintf(__("Could not update datetimes related to ticket with ID %d's TKT_sold by %d because %s", "event_espresso"), $new_ticket_id, $quantity_sold, $wpdb->last_error));
573 573
             }
574 574
         } else {
@@ -600,10 +600,10 @@  discard block
 block discarded – undo
600 600
         // add all conditions to an array from which we can SHIFT conditions off in order to widen our search
601 601
         // the most important condition should be last, as it will be array_shift'ed off last
602 602
         $conditions = array(
603
-            $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime),// times match?
604
-            $wpdb->prepare("$tickets_table.TKT_price = %f", $old_att_price),// prices match?
605
-            $wpdb->prepare("$tickets_table.TKT_name = %s", $old_att_price_option),// names match?
606
-            $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id),// events match?
603
+            $wpdb->prepare("$datetime_table.DTT_EVT_start = %s", $old_att_datetime), // times match?
604
+            $wpdb->prepare("$tickets_table.TKT_price = %f", $old_att_price), // prices match?
605
+            $wpdb->prepare("$tickets_table.TKT_name = %s", $old_att_price_option), // names match?
606
+            $wpdb->prepare("$datetime_table.EVT_ID = %d", $new_event_id), // events match?
607 607
         );
608 608
         $select_and_join_part = "SELECT $tickets_table.TKT_ID FROM $tickets_table INNER JOIN
609 609
 			$datetime_tickets_table ON $tickets_table.TKT_ID = $datetime_tickets_table.TKT_ID INNER JOIN
@@ -613,7 +613,7 @@  discard block
 block discarded – undo
613 613
             $full_query = $select_and_join_part." WHERE ".implode(" AND ", $conditions)." LIMIT 1";
614 614
             $ticket_id_found = $wpdb->get_var($full_query);
615 615
             array_shift($conditions);
616
-        } while (! $ticket_id_found && $conditions);
616
+        }while ( ! $ticket_id_found && $conditions);
617 617
         return $ticket_id_found;
618 618
     }
619 619
 
@@ -635,8 +635,8 @@  discard block
 block discarded – undo
635 635
 
636 636
 
637 637
         // insert new datetime unless we find one
638
-        $datetime_id = $wpdb->get_var($wpdb->prepare("SELECT DTT_ID FROM " . $this->_new_datetime_table . " WHERE DTT_EVT_start=%s AND EVT_ID=%d LIMIT 1", $old_att_start_datetime, $new_event_id), ARRAY_A);
639
-        if (! $datetime_id) {
638
+        $datetime_id = $wpdb->get_var($wpdb->prepare("SELECT DTT_ID FROM ".$this->_new_datetime_table." WHERE DTT_EVT_start=%s AND EVT_ID=%d LIMIT 1", $old_att_start_datetime, $new_event_id), ARRAY_A);
639
+        if ( ! $datetime_id) {
640 640
             $old_att_end_date = $old_attendee['start_date'];
641 641
             $old_att_end_time = $this->get_migration_script()->convertTimeFromAMPM($old_attendee['event_time']);
642 642
             $old_att_end_datetime = $this->get_migration_script()->convert_date_string_to_utc($this, $old_attendee, "$old_att_end_date $old_att_end_time:00");
@@ -649,10 +649,10 @@  discard block
 block discarded – undo
649 649
                         'DTT_deleted' => true
650 650
                     ),
651 651
                 array(
652
-                        '%d',// EVT_ID
653
-                        '%s',// DTT_EVT_start
654
-                        '%s',// DTT_EVT_end
655
-                        '%d',// DTT_deleted
652
+                        '%d', // EVT_ID
653
+                        '%s', // DTT_EVT_start
654
+                        '%s', // DTT_EVT_end
655
+                        '%d', // DTT_deleted
656 656
                     )
657 657
             );
658 658
             $datetime_id = $wpdb->insert_id;
@@ -660,21 +660,21 @@  discard block
 block discarded – undo
660 660
 
661 661
         // insert new ticket
662 662
         $success = $wpdb->insert(
663
-            $wpdb->prefix . 'esp_ticket',
663
+            $wpdb->prefix.'esp_ticket',
664 664
             array(
665 665
                     'TKT_name' => $old_att_price_option,
666 666
                     'TKT_qty' => -1,
667 667
                     'TKT_price' => $old_att_price,
668
-                    'TKT_start_date' => $old_att_start_datetime,// we really have no clue what the time should be, but at least it was available when they attended
668
+                    'TKT_start_date' => $old_att_start_datetime, // we really have no clue what the time should be, but at least it was available when they attended
669 669
                     'TKT_end_date' => $old_att_end_datetime,
670 670
 
671 671
                 ),
672 672
             array(
673
-                    '%s',// name
674
-                    '%d',// qty
675
-                    '%d',// price
676
-                    '%s',// start_date
677
-                    '%s',// end_date
673
+                    '%s', // name
674
+                    '%d', // qty
675
+                    '%d', // price
676
+                    '%s', // start_date
677
+                    '%s', // end_date
678 678
                 )
679 679
         );
680 680
         $ticket_id = $wpdb->insert_id;
@@ -686,8 +686,8 @@  discard block
 block discarded – undo
686 686
                     'TKT_ID' => $ticket_id
687 687
                 ),
688 688
             array(
689
-                    '%d',// DTT_ID
690
-                    '%d',// TKT_ID
689
+                    '%d', // DTT_ID
690
+                    '%d', // TKT_ID
691 691
                 )
692 692
         );
693 693
         // insert new price
@@ -700,10 +700,10 @@  discard block
 block discarded – undo
700 700
                     'PRC_deleted' => true
701 701
                 ),
702 702
             array(
703
-                    '%d',// PRC_amount
704
-                    '%d',// PRT_ID
705
-                    '%s',// PRC_name
706
-                    '%d',// PRC_deleted
703
+                    '%d', // PRC_amount
704
+                    '%d', // PRT_ID
705
+                    '%s', // PRC_name
706
+                    '%d', // PRC_deleted
707 707
                 )
708 708
         );
709 709
         $price_id = $wpdb->insert_id;
@@ -715,8 +715,8 @@  discard block
 block discarded – undo
715 715
                     'PRC_ID' => $price_id
716 716
                 ),
717 717
             array(
718
-                    '%d',// TKT_ID
719
-                    '%d',// PRC_ID
718
+                    '%d', // TKT_ID
719
+                    '%d', // PRC_ID
720 720
                 )
721 721
         );
722 722
         return $ticket_id;
@@ -753,7 +753,7 @@  discard block
 block discarded – undo
753 753
     {
754 754
         global $wpdb;
755 755
         // only add a payment for primary attendees
756
-        $old_pay_stati_indicating_no_payment = array('Pending','Incomplete','Not Completed');
756
+        $old_pay_stati_indicating_no_payment = array('Pending', 'Incomplete', 'Not Completed');
757 757
         // if this is for a primary 3.1 attendee which WASN'T free and has a completed, cancelled, or declined payment...
758 758
         if (intval($old_attendee['is_primary']) && floatval($old_attendee['total_cost']) && ! in_array($old_attendee['payment_status'], $old_pay_stati_indicating_no_payment)) {
759 759
             $pay_status_mapping = array(
@@ -763,7 +763,7 @@  discard block
 block discarded – undo
763 763
                 'Declined'=>'PDC'
764 764
             );
765 765
             $by_admin = $old_attendee['payment'] == 'Admin';
766
-            $STS_ID = isset($pay_status_mapping[ $old_attendee['payment_status'] ]) ? $pay_status_mapping[ $old_attendee['payment_status'] ] : 'PFL';// IE, if we don't recognize the status, assume payment failed
766
+            $STS_ID = isset($pay_status_mapping[$old_attendee['payment_status']]) ? $pay_status_mapping[$old_attendee['payment_status']] : 'PFL'; // IE, if we don't recognize the status, assume payment failed
767 767
             $cols_n_values = array(
768 768
                 'TXN_ID'=>$new_txn_id,
769 769
                 'STS_ID'=>$STS_ID,
@@ -778,19 +778,19 @@  discard block
 block discarded – undo
778 778
 
779 779
             );
780 780
             $datatypes = array(
781
-                '%d',// TXN_Id
782
-                '%s',// STS_ID
783
-                '%s',// PAY_timestamp
784
-                '%s',// PAY_method
785
-                '%f',// PAY_amount
786
-                '%s',// PAY_gateway
787
-                '%s',// PAY_gateway_response
788
-                '%s',// PAY_txn_id_chq_nmbr
789
-                '%d',// PAY_via_admin
790
-                '%s',// PAY_details
781
+                '%d', // TXN_Id
782
+                '%s', // STS_ID
783
+                '%s', // PAY_timestamp
784
+                '%s', // PAY_method
785
+                '%f', // PAY_amount
786
+                '%s', // PAY_gateway
787
+                '%s', // PAY_gateway_response
788
+                '%s', // PAY_txn_id_chq_nmbr
789
+                '%d', // PAY_via_admin
790
+                '%s', // PAY_details
791 791
             );
792 792
             $success = $wpdb->insert($this->_new_payment_table, $cols_n_values, $datatypes);
793
-            if (! $success) {
793
+            if ( ! $success) {
794 794
                 $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_attendee, $this->_new_attendee_cpt_table, $cols_n_values, $datatypes));
795 795
                 return 0;
796 796
             }
@@ -809,7 +809,7 @@  discard block
 block discarded – undo
809 809
      */
810 810
     private function _find_mer_primary_attendee_using_mer_tables($old_registration_id)
811 811
     {
812
-        if (! $this->_mer_tables_exist()) {
812
+        if ( ! $this->_mer_tables_exist()) {
813 813
             return false;
814 814
         }
815 815
         global $wpdb;
Please login to merge, or discard this patch.
data_migration_scripts/4_1_0_stages/EE_DMS_4_1_0_event_venue.dmsstage.php 2 patches
Indentation   +87 added lines, -90 removed lines patch added patch discarded remove patch
@@ -25,105 +25,102 @@
 block discarded – undo
25 25
 
26 26
             )
27 27
         );
28
-
29
-
30
-
31 28
  *
32 29
  */
33 30
 class EE_DMS_4_1_0_event_venue extends EE_Data_Migration_Script_Stage
34 31
 {
35
-    private $_old_table;
36
-    private $_new_table;
37
-    public function _migration_step($num_items = 50)
38
-    {
32
+	private $_old_table;
33
+	private $_new_table;
34
+	public function _migration_step($num_items = 50)
35
+	{
39 36
         
40
-        global $wpdb;
41
-        $start_at_record = $this->count_records_migrated();
42
-        $rows = $wpdb->get_results(
43
-            $wpdb->prepare(
44
-                "SELECT * FROM $this->_old_table AS ev 
37
+		global $wpdb;
38
+		$start_at_record = $this->count_records_migrated();
39
+		$rows = $wpdb->get_results(
40
+			$wpdb->prepare(
41
+				"SELECT * FROM $this->_old_table AS ev 
45 42
                     INNER JOIN " . $wpdb->prefix . "events_detail AS e ON ev.event_id=e.id
46 43
                     WHERE e.event_status!='D' LIMIT %d,%d",
47
-                $start_at_record,
48
-                $num_items
49
-            ),
50
-            ARRAY_A
51
-        );
52
-        $items_actually_migrated = 0;
53
-        foreach ($rows as $event_venue_rel) {
54
-            $this->_insert_new_event_to_venue_rel($event_venue_rel);
55
-            $items_actually_migrated++;
56
-        }
57
-        if ($this->count_records_migrated() + $items_actually_migrated >= $this->count_records_to_migrate()) {
58
-            $this->set_completed();
59
-        }
60
-        return $items_actually_migrated;
61
-    }
62
-    public function _count_records_to_migrate()
63
-    {
64
-        global $wpdb;
65
-        $count = $wpdb->get_var(
66
-            "SELECT COUNT(ev.id) FROM ".$this->_old_table . " AS ev 
44
+				$start_at_record,
45
+				$num_items
46
+			),
47
+			ARRAY_A
48
+		);
49
+		$items_actually_migrated = 0;
50
+		foreach ($rows as $event_venue_rel) {
51
+			$this->_insert_new_event_to_venue_rel($event_venue_rel);
52
+			$items_actually_migrated++;
53
+		}
54
+		if ($this->count_records_migrated() + $items_actually_migrated >= $this->count_records_to_migrate()) {
55
+			$this->set_completed();
56
+		}
57
+		return $items_actually_migrated;
58
+	}
59
+	public function _count_records_to_migrate()
60
+	{
61
+		global $wpdb;
62
+		$count = $wpdb->get_var(
63
+			"SELECT COUNT(ev.id) FROM ".$this->_old_table . " AS ev 
67 64
             INNER JOIN " . $wpdb->prefix . 'events_detail AS e ON ev.event_id=e.id
68 65
             WHERE e.event_status!="D"'
69
-        );
70
-        return $count;
71
-    }
72
-    public function __construct()
73
-    {
74
-        global $wpdb;
75
-        $this->_old_table = $wpdb->prefix."events_venue_rel";
76
-        $this->_new_table = $wpdb->prefix."esp_event_venue";
77
-        $this->_pretty_name = __("Event to Venue Relations", "event_espresso");
78
-        parent::__construct();
79
-    }
66
+		);
67
+		return $count;
68
+	}
69
+	public function __construct()
70
+	{
71
+		global $wpdb;
72
+		$this->_old_table = $wpdb->prefix."events_venue_rel";
73
+		$this->_new_table = $wpdb->prefix."esp_event_venue";
74
+		$this->_pretty_name = __("Event to Venue Relations", "event_espresso");
75
+		parent::__construct();
76
+	}
80 77
     
81
-    /**
82
-     * Attempts to insert a new question group inthe new format given an old one
83
-     * @global type $wpdb
84
-     * @param array $old_event_venue_rel
85
-     * @return int
86
-     */
87
-    private function _insert_new_event_to_venue_rel($old_event_venue_rel)
88
-    {
89
-        global $wpdb;
90
-        $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_event_venue_rel['event_id'], $wpdb->prefix."posts");
91
-        $new_venue_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_venue", $old_event_venue_rel['venue_id'], $wpdb->prefix."posts");
92
-        if (! $new_event_id) {
93
-            $this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $old_event_venue_rel['event_id']));
94
-            return 0;
95
-        }
96
-        if (! $new_venue_id) {
97
-            $this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $old_event_venue_rel['venue_id']));
98
-            return 0;
99
-        }
100
-        // first ensure there are no other relation entries for this event
101
-        // because although EE4 supports it, EE3 didn't really
102
-        $wpdb->delete(
103
-            $this->_new_table,
104
-            array(
105
-                    'EVT_ID' => $new_event_id,
106
-                ),
107
-            array(
108
-                    '%d',// EVT_ID
109
-                )
110
-        );
78
+	/**
79
+	 * Attempts to insert a new question group inthe new format given an old one
80
+	 * @global type $wpdb
81
+	 * @param array $old_event_venue_rel
82
+	 * @return int
83
+	 */
84
+	private function _insert_new_event_to_venue_rel($old_event_venue_rel)
85
+	{
86
+		global $wpdb;
87
+		$new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_event_venue_rel['event_id'], $wpdb->prefix."posts");
88
+		$new_venue_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_venue", $old_event_venue_rel['venue_id'], $wpdb->prefix."posts");
89
+		if (! $new_event_id) {
90
+			$this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $old_event_venue_rel['event_id']));
91
+			return 0;
92
+		}
93
+		if (! $new_venue_id) {
94
+			$this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $old_event_venue_rel['venue_id']));
95
+			return 0;
96
+		}
97
+		// first ensure there are no other relation entries for this event
98
+		// because although EE4 supports it, EE3 didn't really
99
+		$wpdb->delete(
100
+			$this->_new_table,
101
+			array(
102
+					'EVT_ID' => $new_event_id,
103
+				),
104
+			array(
105
+					'%d',// EVT_ID
106
+				)
107
+		);
111 108
 //      echo "last query". $wpdb->last_query;die;
112
-        $cols_n_values = array(
113
-            'EVT_ID'=>$new_event_id,
114
-            'VNU_ID'=>$new_venue_id,
115
-            'EVV_primary'=>true
116
-        );
117
-        $datatypes = array(
118
-            '%d',// EVT_ID
119
-            '%d',// VNU_ID
120
-            '%d',// EVT_primary
121
-        );
122
-        $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes);
123
-        if (! $success) {
124
-            $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event_venue_rel, $this->_new_table, $cols_n_values, $datatypes));
125
-            return 0;
126
-        }
127
-        return $wpdb->insert_id;
128
-    }
109
+		$cols_n_values = array(
110
+			'EVT_ID'=>$new_event_id,
111
+			'VNU_ID'=>$new_venue_id,
112
+			'EVV_primary'=>true
113
+		);
114
+		$datatypes = array(
115
+			'%d',// EVT_ID
116
+			'%d',// VNU_ID
117
+			'%d',// EVT_primary
118
+		);
119
+		$success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes);
120
+		if (! $success) {
121
+			$this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event_venue_rel, $this->_new_table, $cols_n_values, $datatypes));
122
+			return 0;
123
+		}
124
+		return $wpdb->insert_id;
125
+	}
129 126
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -42,7 +42,7 @@  discard block
 block discarded – undo
42 42
         $rows = $wpdb->get_results(
43 43
             $wpdb->prepare(
44 44
                 "SELECT * FROM $this->_old_table AS ev 
45
-                    INNER JOIN " . $wpdb->prefix . "events_detail AS e ON ev.event_id=e.id
45
+                    INNER JOIN ".$wpdb->prefix."events_detail AS e ON ev.event_id=e.id
46 46
                     WHERE e.event_status!='D' LIMIT %d,%d",
47 47
                 $start_at_record,
48 48
                 $num_items
@@ -63,8 +63,8 @@  discard block
 block discarded – undo
63 63
     {
64 64
         global $wpdb;
65 65
         $count = $wpdb->get_var(
66
-            "SELECT COUNT(ev.id) FROM ".$this->_old_table . " AS ev 
67
-            INNER JOIN " . $wpdb->prefix . 'events_detail AS e ON ev.event_id=e.id
66
+            "SELECT COUNT(ev.id) FROM ".$this->_old_table." AS ev 
67
+            INNER JOIN " . $wpdb->prefix.'events_detail AS e ON ev.event_id=e.id
68 68
             WHERE e.event_status!="D"'
69 69
         );
70 70
         return $count;
@@ -89,11 +89,11 @@  discard block
 block discarded – undo
89 89
         global $wpdb;
90 90
         $new_event_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_detail", $old_event_venue_rel['event_id'], $wpdb->prefix."posts");
91 91
         $new_venue_id = $this->get_migration_script()->get_mapping_new_pk($wpdb->prefix."events_venue", $old_event_venue_rel['venue_id'], $wpdb->prefix."posts");
92
-        if (! $new_event_id) {
92
+        if ( ! $new_event_id) {
93 93
             $this->add_error(sprintf(__("Could not find 4.1 event id for 3.1 event #%d.", "event_espresso"), $old_event_venue_rel['event_id']));
94 94
             return 0;
95 95
         }
96
-        if (! $new_venue_id) {
96
+        if ( ! $new_venue_id) {
97 97
             $this->add_error(sprintf(__("Could not find 4.1 venue id for 3.1 venue #%d.", "event_espresso"), $old_event_venue_rel['venue_id']));
98 98
             return 0;
99 99
         }
@@ -105,7 +105,7 @@  discard block
 block discarded – undo
105 105
                     'EVT_ID' => $new_event_id,
106 106
                 ),
107 107
             array(
108
-                    '%d',// EVT_ID
108
+                    '%d', // EVT_ID
109 109
                 )
110 110
         );
111 111
 //      echo "last query". $wpdb->last_query;die;
@@ -115,12 +115,12 @@  discard block
 block discarded – undo
115 115
             'EVV_primary'=>true
116 116
         );
117 117
         $datatypes = array(
118
-            '%d',// EVT_ID
119
-            '%d',// VNU_ID
120
-            '%d',// EVT_primary
118
+            '%d', // EVT_ID
119
+            '%d', // VNU_ID
120
+            '%d', // EVT_primary
121 121
         );
122 122
         $success = $wpdb->insert($this->_new_table, $cols_n_values, $datatypes);
123
-        if (! $success) {
123
+        if ( ! $success) {
124 124
             $this->add_error($this->get_migration_script()->_create_error_message_for_db_insertion($this->_old_table, $old_event_venue_rel, $this->_new_table, $cols_n_values, $datatypes));
125 125
             return 0;
126 126
         }
Please login to merge, or discard this patch.