Completed
Branch Gutenberg/BUG/fix-editor-asset... (099b99)
by
unknown
29:37 queued 19:20
created
core/libraries/form_sections/form_handlers/SequentialStepFormManager.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
 
204 204
 
205 205
     /**
206
-     * @param $default_form_step
206
+     * @param string $default_form_step
207 207
      * @throws InvalidDataTypeException
208 208
      */
209 209
     protected function setDefaultFormStep($default_form_step)
@@ -242,7 +242,7 @@  discard block
 block discarded – undo
242 242
 
243 243
 
244 244
     /**
245
-     * @return object|SequentialStepFormInterface
245
+     * @return SequentialStepForm
246 246
      * @throws InvalidFormHandlerException
247 247
      */
248 248
     public function getCurrentStep()
Please login to merge, or discard this patch.
Indentation   +583 added lines, -583 removed lines patch added patch discarded remove patch
@@ -29,587 +29,587 @@
 block discarded – undo
29 29
 abstract class SequentialStepFormManager
30 30
 {
31 31
 
32
-    /**
33
-     * a simplified URL with no form related parameters
34
-     * that will be used to build the form's redirect URLs
35
-     *
36
-     * @var string $base_url
37
-     */
38
-    private $base_url = '';
39
-
40
-    /**
41
-     * the key used for the URL param that denotes the current form step
42
-     * defaults to 'ee-form-step'
43
-     *
44
-     * @var string $form_step_url_key
45
-     */
46
-    private $form_step_url_key = '';
47
-
48
-    /**
49
-     * @var string $default_form_step
50
-     */
51
-    private $default_form_step = '';
52
-
53
-    /**
54
-     * @var string $form_action
55
-     */
56
-    private $form_action;
57
-
58
-    /**
59
-     * value of one of the string constant above
60
-     *
61
-     * @var string $form_config
62
-     */
63
-    private $form_config;
64
-
65
-    /**
66
-     * @var string $progress_step_style
67
-     */
68
-    private $progress_step_style = '';
69
-
70
-    /**
71
-     * @var EE_Request $request
72
-     */
73
-    private $request;
74
-
75
-    /**
76
-     * @var Collection $form_steps
77
-     */
78
-    protected $form_steps;
79
-
80
-    /**
81
-     * @var ProgressStepManager $progress_step_manager
82
-     */
83
-    protected $progress_step_manager;
84
-
85
-
86
-    /**
87
-     * @return Collection|null
88
-     */
89
-    abstract protected function getFormStepsCollection();
90
-
91
-    // phpcs:disable PEAR.Functions.ValidDefaultValue.NotAtEnd
92
-    /**
93
-     * StepsManager constructor
94
-     *
95
-     * @param string     $base_url
96
-     * @param string     $default_form_step
97
-     * @param string     $form_action
98
-     * @param string     $form_config
99
-     * @param EE_Request $request
100
-     * @param string     $progress_step_style
101
-     * @throws InvalidDataTypeException
102
-     * @throws InvalidArgumentException
103
-     */
104
-    public function __construct(
105
-        $base_url,
106
-        $default_form_step,
107
-        $form_action = '',
108
-        $form_config = FormHandler::ADD_FORM_TAGS_AND_SUBMIT,
109
-        $progress_step_style = 'number_bubbles',
110
-        EE_Request $request
111
-    ) {
112
-        $this->setBaseUrl($base_url);
113
-        $this->setDefaultFormStep($default_form_step);
114
-        $this->setFormAction($form_action);
115
-        $this->setFormConfig($form_config);
116
-        $this->setProgressStepStyle($progress_step_style);
117
-        $this->request = $request;
118
-    }
119
-
120
-
121
-    /**
122
-     * @return string
123
-     * @throws InvalidFormHandlerException
124
-     */
125
-    public function baseUrl()
126
-    {
127
-        if (strpos($this->base_url, $this->getCurrentStep()->slug()) === false) {
128
-            add_query_arg(
129
-                array($this->form_step_url_key => $this->getCurrentStep()->slug()),
130
-                $this->base_url
131
-            );
132
-        }
133
-        return $this->base_url;
134
-    }
135
-
136
-
137
-    /**
138
-     * @param string $base_url
139
-     * @throws InvalidDataTypeException
140
-     * @throws InvalidArgumentException
141
-     */
142
-    protected function setBaseUrl($base_url)
143
-    {
144
-        if (! is_string($base_url)) {
145
-            throw new InvalidDataTypeException('$base_url', $base_url, 'string');
146
-        }
147
-        if (empty($base_url)) {
148
-            throw new InvalidArgumentException(
149
-                esc_html__('The base URL can not be an empty string.', 'event_espresso')
150
-            );
151
-        }
152
-        $this->base_url = $base_url;
153
-    }
154
-
155
-
156
-    /**
157
-     * @return string
158
-     * @throws InvalidDataTypeException
159
-     */
160
-    public function formStepUrlKey()
161
-    {
162
-        if (empty($this->form_step_url_key)) {
163
-            $this->setFormStepUrlKey();
164
-        }
165
-        return $this->form_step_url_key;
166
-    }
167
-
168
-
169
-    /**
170
-     * @param string $form_step_url_key
171
-     * @throws InvalidDataTypeException
172
-     */
173
-    public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
174
-    {
175
-        if (! is_string($form_step_url_key)) {
176
-            throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
177
-        }
178
-        $this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
179
-    }
180
-
181
-
182
-    /**
183
-     * @return string
184
-     */
185
-    public function defaultFormStep()
186
-    {
187
-        return $this->default_form_step;
188
-    }
189
-
190
-
191
-    /**
192
-     * @param $default_form_step
193
-     * @throws InvalidDataTypeException
194
-     */
195
-    protected function setDefaultFormStep($default_form_step)
196
-    {
197
-        if (! is_string($default_form_step)) {
198
-            throw new InvalidDataTypeException('$default_form_step', $default_form_step, 'string');
199
-        }
200
-        $this->default_form_step = $default_form_step;
201
-    }
202
-
203
-
204
-    /**
205
-     * @return void
206
-     * @throws \EventEspresso\core\exceptions\InvalidIdentifierException
207
-     * @throws InvalidDataTypeException
208
-     */
209
-    protected function setCurrentStepFromRequest()
210
-    {
211
-        $current_step_slug = $this->request()->get($this->formStepUrlKey(), $this->defaultFormStep());
212
-        if (! $this->form_steps->setCurrent($current_step_slug)) {
213
-            throw new InvalidIdentifierException(
214
-                $current_step_slug,
215
-                $this->defaultFormStep(),
216
-                $message = sprintf(
217
-                    esc_html__(
218
-                        'The "%1$s" form step could not be set.',
219
-                        'event_espresso'
220
-                    ),
221
-                    $current_step_slug
222
-                )
223
-            );
224
-        }
225
-    }
226
-
227
-
228
-    /**
229
-     * @return object|SequentialStepFormInterface
230
-     * @throws InvalidFormHandlerException
231
-     */
232
-    public function getCurrentStep()
233
-    {
234
-        if (! $this->form_steps->current() instanceof SequentialStepForm) {
235
-            throw new InvalidFormHandlerException($this->form_steps->current());
236
-        }
237
-        return $this->form_steps->current();
238
-    }
239
-
240
-
241
-    /**
242
-     * @return string
243
-     * @throws InvalidFormHandlerException
244
-     */
245
-    public function formAction()
246
-    {
247
-        if (! is_string($this->form_action) || empty($this->form_action)) {
248
-            $this->form_action = $this->baseUrl();
249
-        }
250
-        return $this->form_action;
251
-    }
252
-
253
-
254
-    /**
255
-     * @param string $form_action
256
-     * @throws InvalidDataTypeException
257
-     */
258
-    public function setFormAction($form_action)
259
-    {
260
-        if (! is_string($form_action)) {
261
-            throw new InvalidDataTypeException('$form_action', $form_action, 'string');
262
-        }
263
-        $this->form_action = $form_action;
264
-    }
265
-
266
-
267
-    /**
268
-     * @param array $form_action_args
269
-     * @throws InvalidDataTypeException
270
-     * @throws InvalidFormHandlerException
271
-     */
272
-    public function addFormActionArgs($form_action_args = array())
273
-    {
274
-        if (! is_array($form_action_args)) {
275
-            throw new InvalidDataTypeException('$form_action_args', $form_action_args, 'array');
276
-        }
277
-        $form_action_args = ! empty($form_action_args)
278
-            ? $form_action_args
279
-            : array($this->formStepUrlKey() => $this->form_steps->current()->slug());
280
-        $this->getCurrentStep()->setFormAction(
281
-            add_query_arg($form_action_args, $this->formAction())
282
-        );
283
-        $this->form_action = $this->getCurrentStep()->formAction();
284
-    }
285
-
286
-
287
-    /**
288
-     * @return string
289
-     */
290
-    public function formConfig()
291
-    {
292
-        return $this->form_config;
293
-    }
294
-
295
-
296
-    /**
297
-     * @param string $form_config
298
-     */
299
-    public function setFormConfig($form_config)
300
-    {
301
-        $this->form_config = $form_config;
302
-    }
303
-
304
-
305
-    /**
306
-     * @return string
307
-     */
308
-    public function progressStepStyle()
309
-    {
310
-        return $this->progress_step_style;
311
-    }
312
-
313
-
314
-    /**
315
-     * @param string $progress_step_style
316
-     */
317
-    public function setProgressStepStyle($progress_step_style)
318
-    {
319
-        $this->progress_step_style = $progress_step_style;
320
-    }
321
-
322
-
323
-    /**
324
-     * @return EE_Request
325
-     */
326
-    public function request()
327
-    {
328
-        return $this->request;
329
-    }
330
-
331
-
332
-    /**
333
-     * @return Collection|null
334
-     * @throws InvalidInterfaceException
335
-     */
336
-    protected function getProgressStepsCollection()
337
-    {
338
-        static $collection = null;
339
-        if (! $collection instanceof ProgressStepCollection) {
340
-            $collection = new ProgressStepCollection();
341
-        }
342
-        return $collection;
343
-    }
344
-
345
-
346
-    /**
347
-     * @param Collection $progress_steps_collection
348
-     * @return ProgressStepManager
349
-     * @throws InvalidInterfaceException
350
-     * @throws InvalidClassException
351
-     * @throws InvalidDataTypeException
352
-     * @throws InvalidEntityException
353
-     * @throws InvalidFormHandlerException
354
-     */
355
-    protected function generateProgressSteps(Collection $progress_steps_collection)
356
-    {
357
-        $current_step = $this->getCurrentStep();
358
-        /** @var SequentialStepForm $form_step */
359
-        foreach ($this->form_steps as $form_step) {
360
-            // is this step active ?
361
-            if (! $form_step->initialize()) {
362
-                continue;
363
-            }
364
-            $progress_steps_collection->add(
365
-                new ProgressStep(
366
-                    $form_step->order(),
367
-                    $form_step->slug(),
368
-                    $form_step->slug(),
369
-                    $form_step->formName()
370
-                ),
371
-                $form_step->slug()
372
-            );
373
-        }
374
-        // set collection pointer back to current step
375
-        $this->form_steps->setCurrentUsingObject($current_step);
376
-        return new ProgressStepManager(
377
-            $this->progressStepStyle(),
378
-            $this->defaultFormStep(),
379
-            $this->formStepUrlKey(),
380
-            $progress_steps_collection
381
-        );
382
-    }
383
-
384
-
385
-    /**
386
-     * @throws InvalidClassException
387
-     * @throws InvalidDataTypeException
388
-     * @throws InvalidEntityException
389
-     * @throws InvalidIdentifierException
390
-     * @throws InvalidInterfaceException
391
-     * @throws InvalidArgumentException
392
-     * @throws InvalidFormHandlerException
393
-     */
394
-    public function buildForm()
395
-    {
396
-        $this->buildCurrentStepFormForDisplay();
397
-    }
398
-
399
-
400
-    /**
401
-     * @param array $form_data
402
-     * @throws InvalidArgumentException
403
-     * @throws InvalidClassException
404
-     * @throws InvalidDataTypeException
405
-     * @throws InvalidEntityException
406
-     * @throws InvalidFormHandlerException
407
-     * @throws InvalidIdentifierException
408
-     * @throws InvalidInterfaceException
409
-     */
410
-    public function processForm($form_data = array())
411
-    {
412
-        $this->buildCurrentStepFormForProcessing();
413
-        $this->processCurrentStepForm($form_data);
414
-    }
415
-
416
-
417
-    /**
418
-     * @throws InvalidClassException
419
-     * @throws InvalidDataTypeException
420
-     * @throws InvalidEntityException
421
-     * @throws InvalidInterfaceException
422
-     * @throws InvalidIdentifierException
423
-     * @throws InvalidArgumentException
424
-     * @throws InvalidFormHandlerException
425
-     */
426
-    public function buildCurrentStepFormForDisplay()
427
-    {
428
-        $form_step = $this->buildCurrentStepForm();
429
-        // no displayable content ? then skip straight to processing
430
-        if (! $form_step->displayable()) {
431
-            $this->addFormActionArgs();
432
-            $form_step->setFormAction($this->formAction());
433
-            wp_safe_redirect($form_step->formAction());
434
-        }
435
-    }
436
-
437
-
438
-    /**
439
-     * @throws InvalidClassException
440
-     * @throws InvalidDataTypeException
441
-     * @throws InvalidEntityException
442
-     * @throws InvalidInterfaceException
443
-     * @throws InvalidIdentifierException
444
-     * @throws InvalidArgumentException
445
-     * @throws InvalidFormHandlerException
446
-     */
447
-    public function buildCurrentStepFormForProcessing()
448
-    {
449
-        $this->buildCurrentStepForm(false);
450
-    }
451
-
452
-
453
-    /**
454
-     * @param bool $for_display
455
-     * @return SequentialStepFormInterface
456
-     * @throws InvalidArgumentException
457
-     * @throws InvalidClassException
458
-     * @throws InvalidDataTypeException
459
-     * @throws InvalidEntityException
460
-     * @throws InvalidFormHandlerException
461
-     * @throws InvalidIdentifierException
462
-     * @throws InvalidInterfaceException
463
-     */
464
-    private function buildCurrentStepForm($for_display = true)
465
-    {
466
-        $this->form_steps = $this->getFormStepsCollection();
467
-        $this->setCurrentStepFromRequest();
468
-        $form_step = $this->getCurrentStep();
469
-        if ($form_step->submitBtnText() === esc_html__('Submit', 'event_espresso')) {
470
-            $form_step->setSubmitBtnText(esc_html__('Next Step', 'event_espresso'));
471
-        }
472
-        if ($for_display && $form_step->displayable()) {
473
-            $this->progress_step_manager = $this->generateProgressSteps(
474
-                $this->getProgressStepsCollection()
475
-            );
476
-            $this->progress_step_manager->setCurrentStep(
477
-                $form_step->slug()
478
-            );
479
-            // mark all previous progress steps as completed
480
-            $this->progress_step_manager->setPreviousStepsCompleted();
481
-            $this->progress_step_manager->enqueueStylesAndScripts();
482
-            $this->addFormActionArgs();
483
-            $form_step->setFormAction($this->formAction());
484
-        } else {
485
-            $form_step->setRedirectUrl($this->baseUrl());
486
-            $form_step->addRedirectArgs(
487
-                array($this->formStepUrlKey() => $this->form_steps->current()->slug())
488
-            );
489
-        }
490
-        $form_step->generate();
491
-        if ($for_display) {
492
-            $form_step->enqueueStylesAndScripts();
493
-        }
494
-        return $form_step;
495
-    }
496
-
497
-
498
-    /**
499
-     * @param bool $return_as_string
500
-     * @return string
501
-     * @throws InvalidFormHandlerException
502
-     */
503
-    public function displayProgressSteps($return_as_string = true)
504
-    {
505
-        $form_step = $this->getCurrentStep();
506
-        if (! $form_step->displayable()) {
507
-            return '';
508
-        }
509
-        $progress_steps = apply_filters(
510
-            'FHEE__EventEspresso_core_libraries_form_sections_form_handlers_SequentialStepFormManager__displayProgressSteps__before_steps',
511
-            ''
512
-        );
513
-        $progress_steps .= $this->progress_step_manager->displaySteps();
514
-        $progress_steps .= apply_filters(
515
-            'FHEE__EventEspresso_core_libraries_form_sections_form_handlers_SequentialStepFormManager__displayProgressSteps__after_steps',
516
-            ''
517
-        );
518
-        if ($return_as_string) {
519
-            return $progress_steps;
520
-        }
521
-        echo $progress_steps;
522
-        return '';
523
-    }
524
-
525
-
526
-    /**
527
-     * @param bool $return_as_string
528
-     * @return string
529
-     * @throws InvalidFormHandlerException
530
-     */
531
-    public function displayCurrentStepForm($return_as_string = true)
532
-    {
533
-        if ($return_as_string) {
534
-            return $this->getCurrentStep()->display();
535
-        }
536
-        echo $this->getCurrentStep()->display();
537
-        return '';
538
-    }
539
-
540
-
541
-    /**
542
-     * @param array $form_data
543
-     * @return void
544
-     * @throws InvalidArgumentException
545
-     * @throws InvalidDataTypeException
546
-     * @throws InvalidFormHandlerException
547
-     */
548
-    public function processCurrentStepForm($form_data = array())
549
-    {
550
-        // grab instance of current step because after calling next() below,
551
-        // any calls to getCurrentStep() will return the "next" step because we advanced
552
-        $current_step = $this->getCurrentStep();
553
-        try {
554
-            // form processing should either throw exceptions or return true
555
-            $current_step->process($form_data);
556
-        } catch (Exception $e) {
557
-            // something went wrong, so...
558
-            // if WP_DEBUG === true, display the Exception and stack trace right now
559
-            new ExceptionStackTraceDisplay($e);
560
-            // else convert the Exception to an EE_Error
561
-            EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__);
562
-            // prevent redirect to next step or other if exception was thrown
563
-            if ($current_step->redirectTo() === SequentialStepForm::REDIRECT_TO_NEXT_STEP
564
-                || $current_step->redirectTo() === SequentialStepForm::REDIRECT_TO_OTHER
565
-            ) {
566
-                $current_step->setRedirectTo(SequentialStepForm::REDIRECT_TO_CURRENT_STEP);
567
-            }
568
-        }
569
-        // save notices to a transient so that when we redirect back
570
-        // to the display portion for this step
571
-        // those notices can be displayed
572
-        EE_Error::get_notices(false, true);
573
-        $this->redirectForm($current_step);
574
-    }
575
-
576
-
577
-    /**
578
-     * handles where to go to next
579
-     *
580
-     * @param SequentialStepFormInterface $current_step
581
-     * @throws InvalidArgumentException
582
-     * @throws InvalidDataTypeException
583
-     * @throws InvalidFormHandlerException
584
-     */
585
-    public function redirectForm(SequentialStepFormInterface $current_step)
586
-    {
587
-        $redirect_step = $current_step;
588
-        switch ($current_step->redirectTo()) {
589
-            case SequentialStepForm::REDIRECT_TO_OTHER:
590
-                // going somewhere else, so just check out now
591
-                wp_safe_redirect($redirect_step->redirectUrl());
592
-                exit();
593
-                break;
594
-            case SequentialStepForm::REDIRECT_TO_PREV_STEP:
595
-                $redirect_step = $this->form_steps->previous();
596
-                break;
597
-            case SequentialStepForm::REDIRECT_TO_NEXT_STEP:
598
-                $this->form_steps->next();
599
-                if ($this->form_steps->valid()) {
600
-                    $redirect_step = $this->form_steps->current();
601
-                }
602
-                break;
603
-            case SequentialStepForm::REDIRECT_TO_CURRENT_STEP:
604
-            default:
605
-                // $redirect_step is already set
606
-        }
607
-        $current_step->setRedirectUrl($this->baseUrl());
608
-        $current_step->addRedirectArgs(
609
-            // use the slug for whatever step we are redirecting too
610
-            array($this->formStepUrlKey() => $redirect_step->slug())
611
-        );
612
-        wp_safe_redirect($current_step->redirectUrl());
613
-        exit();
614
-    }
32
+	/**
33
+	 * a simplified URL with no form related parameters
34
+	 * that will be used to build the form's redirect URLs
35
+	 *
36
+	 * @var string $base_url
37
+	 */
38
+	private $base_url = '';
39
+
40
+	/**
41
+	 * the key used for the URL param that denotes the current form step
42
+	 * defaults to 'ee-form-step'
43
+	 *
44
+	 * @var string $form_step_url_key
45
+	 */
46
+	private $form_step_url_key = '';
47
+
48
+	/**
49
+	 * @var string $default_form_step
50
+	 */
51
+	private $default_form_step = '';
52
+
53
+	/**
54
+	 * @var string $form_action
55
+	 */
56
+	private $form_action;
57
+
58
+	/**
59
+	 * value of one of the string constant above
60
+	 *
61
+	 * @var string $form_config
62
+	 */
63
+	private $form_config;
64
+
65
+	/**
66
+	 * @var string $progress_step_style
67
+	 */
68
+	private $progress_step_style = '';
69
+
70
+	/**
71
+	 * @var EE_Request $request
72
+	 */
73
+	private $request;
74
+
75
+	/**
76
+	 * @var Collection $form_steps
77
+	 */
78
+	protected $form_steps;
79
+
80
+	/**
81
+	 * @var ProgressStepManager $progress_step_manager
82
+	 */
83
+	protected $progress_step_manager;
84
+
85
+
86
+	/**
87
+	 * @return Collection|null
88
+	 */
89
+	abstract protected function getFormStepsCollection();
90
+
91
+	// phpcs:disable PEAR.Functions.ValidDefaultValue.NotAtEnd
92
+	/**
93
+	 * StepsManager constructor
94
+	 *
95
+	 * @param string     $base_url
96
+	 * @param string     $default_form_step
97
+	 * @param string     $form_action
98
+	 * @param string     $form_config
99
+	 * @param EE_Request $request
100
+	 * @param string     $progress_step_style
101
+	 * @throws InvalidDataTypeException
102
+	 * @throws InvalidArgumentException
103
+	 */
104
+	public function __construct(
105
+		$base_url,
106
+		$default_form_step,
107
+		$form_action = '',
108
+		$form_config = FormHandler::ADD_FORM_TAGS_AND_SUBMIT,
109
+		$progress_step_style = 'number_bubbles',
110
+		EE_Request $request
111
+	) {
112
+		$this->setBaseUrl($base_url);
113
+		$this->setDefaultFormStep($default_form_step);
114
+		$this->setFormAction($form_action);
115
+		$this->setFormConfig($form_config);
116
+		$this->setProgressStepStyle($progress_step_style);
117
+		$this->request = $request;
118
+	}
119
+
120
+
121
+	/**
122
+	 * @return string
123
+	 * @throws InvalidFormHandlerException
124
+	 */
125
+	public function baseUrl()
126
+	{
127
+		if (strpos($this->base_url, $this->getCurrentStep()->slug()) === false) {
128
+			add_query_arg(
129
+				array($this->form_step_url_key => $this->getCurrentStep()->slug()),
130
+				$this->base_url
131
+			);
132
+		}
133
+		return $this->base_url;
134
+	}
135
+
136
+
137
+	/**
138
+	 * @param string $base_url
139
+	 * @throws InvalidDataTypeException
140
+	 * @throws InvalidArgumentException
141
+	 */
142
+	protected function setBaseUrl($base_url)
143
+	{
144
+		if (! is_string($base_url)) {
145
+			throw new InvalidDataTypeException('$base_url', $base_url, 'string');
146
+		}
147
+		if (empty($base_url)) {
148
+			throw new InvalidArgumentException(
149
+				esc_html__('The base URL can not be an empty string.', 'event_espresso')
150
+			);
151
+		}
152
+		$this->base_url = $base_url;
153
+	}
154
+
155
+
156
+	/**
157
+	 * @return string
158
+	 * @throws InvalidDataTypeException
159
+	 */
160
+	public function formStepUrlKey()
161
+	{
162
+		if (empty($this->form_step_url_key)) {
163
+			$this->setFormStepUrlKey();
164
+		}
165
+		return $this->form_step_url_key;
166
+	}
167
+
168
+
169
+	/**
170
+	 * @param string $form_step_url_key
171
+	 * @throws InvalidDataTypeException
172
+	 */
173
+	public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
174
+	{
175
+		if (! is_string($form_step_url_key)) {
176
+			throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
177
+		}
178
+		$this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
179
+	}
180
+
181
+
182
+	/**
183
+	 * @return string
184
+	 */
185
+	public function defaultFormStep()
186
+	{
187
+		return $this->default_form_step;
188
+	}
189
+
190
+
191
+	/**
192
+	 * @param $default_form_step
193
+	 * @throws InvalidDataTypeException
194
+	 */
195
+	protected function setDefaultFormStep($default_form_step)
196
+	{
197
+		if (! is_string($default_form_step)) {
198
+			throw new InvalidDataTypeException('$default_form_step', $default_form_step, 'string');
199
+		}
200
+		$this->default_form_step = $default_form_step;
201
+	}
202
+
203
+
204
+	/**
205
+	 * @return void
206
+	 * @throws \EventEspresso\core\exceptions\InvalidIdentifierException
207
+	 * @throws InvalidDataTypeException
208
+	 */
209
+	protected function setCurrentStepFromRequest()
210
+	{
211
+		$current_step_slug = $this->request()->get($this->formStepUrlKey(), $this->defaultFormStep());
212
+		if (! $this->form_steps->setCurrent($current_step_slug)) {
213
+			throw new InvalidIdentifierException(
214
+				$current_step_slug,
215
+				$this->defaultFormStep(),
216
+				$message = sprintf(
217
+					esc_html__(
218
+						'The "%1$s" form step could not be set.',
219
+						'event_espresso'
220
+					),
221
+					$current_step_slug
222
+				)
223
+			);
224
+		}
225
+	}
226
+
227
+
228
+	/**
229
+	 * @return object|SequentialStepFormInterface
230
+	 * @throws InvalidFormHandlerException
231
+	 */
232
+	public function getCurrentStep()
233
+	{
234
+		if (! $this->form_steps->current() instanceof SequentialStepForm) {
235
+			throw new InvalidFormHandlerException($this->form_steps->current());
236
+		}
237
+		return $this->form_steps->current();
238
+	}
239
+
240
+
241
+	/**
242
+	 * @return string
243
+	 * @throws InvalidFormHandlerException
244
+	 */
245
+	public function formAction()
246
+	{
247
+		if (! is_string($this->form_action) || empty($this->form_action)) {
248
+			$this->form_action = $this->baseUrl();
249
+		}
250
+		return $this->form_action;
251
+	}
252
+
253
+
254
+	/**
255
+	 * @param string $form_action
256
+	 * @throws InvalidDataTypeException
257
+	 */
258
+	public function setFormAction($form_action)
259
+	{
260
+		if (! is_string($form_action)) {
261
+			throw new InvalidDataTypeException('$form_action', $form_action, 'string');
262
+		}
263
+		$this->form_action = $form_action;
264
+	}
265
+
266
+
267
+	/**
268
+	 * @param array $form_action_args
269
+	 * @throws InvalidDataTypeException
270
+	 * @throws InvalidFormHandlerException
271
+	 */
272
+	public function addFormActionArgs($form_action_args = array())
273
+	{
274
+		if (! is_array($form_action_args)) {
275
+			throw new InvalidDataTypeException('$form_action_args', $form_action_args, 'array');
276
+		}
277
+		$form_action_args = ! empty($form_action_args)
278
+			? $form_action_args
279
+			: array($this->formStepUrlKey() => $this->form_steps->current()->slug());
280
+		$this->getCurrentStep()->setFormAction(
281
+			add_query_arg($form_action_args, $this->formAction())
282
+		);
283
+		$this->form_action = $this->getCurrentStep()->formAction();
284
+	}
285
+
286
+
287
+	/**
288
+	 * @return string
289
+	 */
290
+	public function formConfig()
291
+	{
292
+		return $this->form_config;
293
+	}
294
+
295
+
296
+	/**
297
+	 * @param string $form_config
298
+	 */
299
+	public function setFormConfig($form_config)
300
+	{
301
+		$this->form_config = $form_config;
302
+	}
303
+
304
+
305
+	/**
306
+	 * @return string
307
+	 */
308
+	public function progressStepStyle()
309
+	{
310
+		return $this->progress_step_style;
311
+	}
312
+
313
+
314
+	/**
315
+	 * @param string $progress_step_style
316
+	 */
317
+	public function setProgressStepStyle($progress_step_style)
318
+	{
319
+		$this->progress_step_style = $progress_step_style;
320
+	}
321
+
322
+
323
+	/**
324
+	 * @return EE_Request
325
+	 */
326
+	public function request()
327
+	{
328
+		return $this->request;
329
+	}
330
+
331
+
332
+	/**
333
+	 * @return Collection|null
334
+	 * @throws InvalidInterfaceException
335
+	 */
336
+	protected function getProgressStepsCollection()
337
+	{
338
+		static $collection = null;
339
+		if (! $collection instanceof ProgressStepCollection) {
340
+			$collection = new ProgressStepCollection();
341
+		}
342
+		return $collection;
343
+	}
344
+
345
+
346
+	/**
347
+	 * @param Collection $progress_steps_collection
348
+	 * @return ProgressStepManager
349
+	 * @throws InvalidInterfaceException
350
+	 * @throws InvalidClassException
351
+	 * @throws InvalidDataTypeException
352
+	 * @throws InvalidEntityException
353
+	 * @throws InvalidFormHandlerException
354
+	 */
355
+	protected function generateProgressSteps(Collection $progress_steps_collection)
356
+	{
357
+		$current_step = $this->getCurrentStep();
358
+		/** @var SequentialStepForm $form_step */
359
+		foreach ($this->form_steps as $form_step) {
360
+			// is this step active ?
361
+			if (! $form_step->initialize()) {
362
+				continue;
363
+			}
364
+			$progress_steps_collection->add(
365
+				new ProgressStep(
366
+					$form_step->order(),
367
+					$form_step->slug(),
368
+					$form_step->slug(),
369
+					$form_step->formName()
370
+				),
371
+				$form_step->slug()
372
+			);
373
+		}
374
+		// set collection pointer back to current step
375
+		$this->form_steps->setCurrentUsingObject($current_step);
376
+		return new ProgressStepManager(
377
+			$this->progressStepStyle(),
378
+			$this->defaultFormStep(),
379
+			$this->formStepUrlKey(),
380
+			$progress_steps_collection
381
+		);
382
+	}
383
+
384
+
385
+	/**
386
+	 * @throws InvalidClassException
387
+	 * @throws InvalidDataTypeException
388
+	 * @throws InvalidEntityException
389
+	 * @throws InvalidIdentifierException
390
+	 * @throws InvalidInterfaceException
391
+	 * @throws InvalidArgumentException
392
+	 * @throws InvalidFormHandlerException
393
+	 */
394
+	public function buildForm()
395
+	{
396
+		$this->buildCurrentStepFormForDisplay();
397
+	}
398
+
399
+
400
+	/**
401
+	 * @param array $form_data
402
+	 * @throws InvalidArgumentException
403
+	 * @throws InvalidClassException
404
+	 * @throws InvalidDataTypeException
405
+	 * @throws InvalidEntityException
406
+	 * @throws InvalidFormHandlerException
407
+	 * @throws InvalidIdentifierException
408
+	 * @throws InvalidInterfaceException
409
+	 */
410
+	public function processForm($form_data = array())
411
+	{
412
+		$this->buildCurrentStepFormForProcessing();
413
+		$this->processCurrentStepForm($form_data);
414
+	}
415
+
416
+
417
+	/**
418
+	 * @throws InvalidClassException
419
+	 * @throws InvalidDataTypeException
420
+	 * @throws InvalidEntityException
421
+	 * @throws InvalidInterfaceException
422
+	 * @throws InvalidIdentifierException
423
+	 * @throws InvalidArgumentException
424
+	 * @throws InvalidFormHandlerException
425
+	 */
426
+	public function buildCurrentStepFormForDisplay()
427
+	{
428
+		$form_step = $this->buildCurrentStepForm();
429
+		// no displayable content ? then skip straight to processing
430
+		if (! $form_step->displayable()) {
431
+			$this->addFormActionArgs();
432
+			$form_step->setFormAction($this->formAction());
433
+			wp_safe_redirect($form_step->formAction());
434
+		}
435
+	}
436
+
437
+
438
+	/**
439
+	 * @throws InvalidClassException
440
+	 * @throws InvalidDataTypeException
441
+	 * @throws InvalidEntityException
442
+	 * @throws InvalidInterfaceException
443
+	 * @throws InvalidIdentifierException
444
+	 * @throws InvalidArgumentException
445
+	 * @throws InvalidFormHandlerException
446
+	 */
447
+	public function buildCurrentStepFormForProcessing()
448
+	{
449
+		$this->buildCurrentStepForm(false);
450
+	}
451
+
452
+
453
+	/**
454
+	 * @param bool $for_display
455
+	 * @return SequentialStepFormInterface
456
+	 * @throws InvalidArgumentException
457
+	 * @throws InvalidClassException
458
+	 * @throws InvalidDataTypeException
459
+	 * @throws InvalidEntityException
460
+	 * @throws InvalidFormHandlerException
461
+	 * @throws InvalidIdentifierException
462
+	 * @throws InvalidInterfaceException
463
+	 */
464
+	private function buildCurrentStepForm($for_display = true)
465
+	{
466
+		$this->form_steps = $this->getFormStepsCollection();
467
+		$this->setCurrentStepFromRequest();
468
+		$form_step = $this->getCurrentStep();
469
+		if ($form_step->submitBtnText() === esc_html__('Submit', 'event_espresso')) {
470
+			$form_step->setSubmitBtnText(esc_html__('Next Step', 'event_espresso'));
471
+		}
472
+		if ($for_display && $form_step->displayable()) {
473
+			$this->progress_step_manager = $this->generateProgressSteps(
474
+				$this->getProgressStepsCollection()
475
+			);
476
+			$this->progress_step_manager->setCurrentStep(
477
+				$form_step->slug()
478
+			);
479
+			// mark all previous progress steps as completed
480
+			$this->progress_step_manager->setPreviousStepsCompleted();
481
+			$this->progress_step_manager->enqueueStylesAndScripts();
482
+			$this->addFormActionArgs();
483
+			$form_step->setFormAction($this->formAction());
484
+		} else {
485
+			$form_step->setRedirectUrl($this->baseUrl());
486
+			$form_step->addRedirectArgs(
487
+				array($this->formStepUrlKey() => $this->form_steps->current()->slug())
488
+			);
489
+		}
490
+		$form_step->generate();
491
+		if ($for_display) {
492
+			$form_step->enqueueStylesAndScripts();
493
+		}
494
+		return $form_step;
495
+	}
496
+
497
+
498
+	/**
499
+	 * @param bool $return_as_string
500
+	 * @return string
501
+	 * @throws InvalidFormHandlerException
502
+	 */
503
+	public function displayProgressSteps($return_as_string = true)
504
+	{
505
+		$form_step = $this->getCurrentStep();
506
+		if (! $form_step->displayable()) {
507
+			return '';
508
+		}
509
+		$progress_steps = apply_filters(
510
+			'FHEE__EventEspresso_core_libraries_form_sections_form_handlers_SequentialStepFormManager__displayProgressSteps__before_steps',
511
+			''
512
+		);
513
+		$progress_steps .= $this->progress_step_manager->displaySteps();
514
+		$progress_steps .= apply_filters(
515
+			'FHEE__EventEspresso_core_libraries_form_sections_form_handlers_SequentialStepFormManager__displayProgressSteps__after_steps',
516
+			''
517
+		);
518
+		if ($return_as_string) {
519
+			return $progress_steps;
520
+		}
521
+		echo $progress_steps;
522
+		return '';
523
+	}
524
+
525
+
526
+	/**
527
+	 * @param bool $return_as_string
528
+	 * @return string
529
+	 * @throws InvalidFormHandlerException
530
+	 */
531
+	public function displayCurrentStepForm($return_as_string = true)
532
+	{
533
+		if ($return_as_string) {
534
+			return $this->getCurrentStep()->display();
535
+		}
536
+		echo $this->getCurrentStep()->display();
537
+		return '';
538
+	}
539
+
540
+
541
+	/**
542
+	 * @param array $form_data
543
+	 * @return void
544
+	 * @throws InvalidArgumentException
545
+	 * @throws InvalidDataTypeException
546
+	 * @throws InvalidFormHandlerException
547
+	 */
548
+	public function processCurrentStepForm($form_data = array())
549
+	{
550
+		// grab instance of current step because after calling next() below,
551
+		// any calls to getCurrentStep() will return the "next" step because we advanced
552
+		$current_step = $this->getCurrentStep();
553
+		try {
554
+			// form processing should either throw exceptions or return true
555
+			$current_step->process($form_data);
556
+		} catch (Exception $e) {
557
+			// something went wrong, so...
558
+			// if WP_DEBUG === true, display the Exception and stack trace right now
559
+			new ExceptionStackTraceDisplay($e);
560
+			// else convert the Exception to an EE_Error
561
+			EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__);
562
+			// prevent redirect to next step or other if exception was thrown
563
+			if ($current_step->redirectTo() === SequentialStepForm::REDIRECT_TO_NEXT_STEP
564
+				|| $current_step->redirectTo() === SequentialStepForm::REDIRECT_TO_OTHER
565
+			) {
566
+				$current_step->setRedirectTo(SequentialStepForm::REDIRECT_TO_CURRENT_STEP);
567
+			}
568
+		}
569
+		// save notices to a transient so that when we redirect back
570
+		// to the display portion for this step
571
+		// those notices can be displayed
572
+		EE_Error::get_notices(false, true);
573
+		$this->redirectForm($current_step);
574
+	}
575
+
576
+
577
+	/**
578
+	 * handles where to go to next
579
+	 *
580
+	 * @param SequentialStepFormInterface $current_step
581
+	 * @throws InvalidArgumentException
582
+	 * @throws InvalidDataTypeException
583
+	 * @throws InvalidFormHandlerException
584
+	 */
585
+	public function redirectForm(SequentialStepFormInterface $current_step)
586
+	{
587
+		$redirect_step = $current_step;
588
+		switch ($current_step->redirectTo()) {
589
+			case SequentialStepForm::REDIRECT_TO_OTHER:
590
+				// going somewhere else, so just check out now
591
+				wp_safe_redirect($redirect_step->redirectUrl());
592
+				exit();
593
+				break;
594
+			case SequentialStepForm::REDIRECT_TO_PREV_STEP:
595
+				$redirect_step = $this->form_steps->previous();
596
+				break;
597
+			case SequentialStepForm::REDIRECT_TO_NEXT_STEP:
598
+				$this->form_steps->next();
599
+				if ($this->form_steps->valid()) {
600
+					$redirect_step = $this->form_steps->current();
601
+				}
602
+				break;
603
+			case SequentialStepForm::REDIRECT_TO_CURRENT_STEP:
604
+			default:
605
+				// $redirect_step is already set
606
+		}
607
+		$current_step->setRedirectUrl($this->baseUrl());
608
+		$current_step->addRedirectArgs(
609
+			// use the slug for whatever step we are redirecting too
610
+			array($this->formStepUrlKey() => $redirect_step->slug())
611
+		);
612
+		wp_safe_redirect($current_step->redirectUrl());
613
+		exit();
614
+	}
615 615
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -141,7 +141,7 @@  discard block
 block discarded – undo
141 141
      */
142 142
     protected function setBaseUrl($base_url)
143 143
     {
144
-        if (! is_string($base_url)) {
144
+        if ( ! is_string($base_url)) {
145 145
             throw new InvalidDataTypeException('$base_url', $base_url, 'string');
146 146
         }
147 147
         if (empty($base_url)) {
@@ -172,7 +172,7 @@  discard block
 block discarded – undo
172 172
      */
173 173
     public function setFormStepUrlKey($form_step_url_key = 'ee-form-step')
174 174
     {
175
-        if (! is_string($form_step_url_key)) {
175
+        if ( ! is_string($form_step_url_key)) {
176 176
             throw new InvalidDataTypeException('$form_step_key', $form_step_url_key, 'string');
177 177
         }
178 178
         $this->form_step_url_key = ! empty($form_step_url_key) ? $form_step_url_key : 'ee-form-step';
@@ -194,7 +194,7 @@  discard block
 block discarded – undo
194 194
      */
195 195
     protected function setDefaultFormStep($default_form_step)
196 196
     {
197
-        if (! is_string($default_form_step)) {
197
+        if ( ! is_string($default_form_step)) {
198 198
             throw new InvalidDataTypeException('$default_form_step', $default_form_step, 'string');
199 199
         }
200 200
         $this->default_form_step = $default_form_step;
@@ -209,7 +209,7 @@  discard block
 block discarded – undo
209 209
     protected function setCurrentStepFromRequest()
210 210
     {
211 211
         $current_step_slug = $this->request()->get($this->formStepUrlKey(), $this->defaultFormStep());
212
-        if (! $this->form_steps->setCurrent($current_step_slug)) {
212
+        if ( ! $this->form_steps->setCurrent($current_step_slug)) {
213 213
             throw new InvalidIdentifierException(
214 214
                 $current_step_slug,
215 215
                 $this->defaultFormStep(),
@@ -231,7 +231,7 @@  discard block
 block discarded – undo
231 231
      */
232 232
     public function getCurrentStep()
233 233
     {
234
-        if (! $this->form_steps->current() instanceof SequentialStepForm) {
234
+        if ( ! $this->form_steps->current() instanceof SequentialStepForm) {
235 235
             throw new InvalidFormHandlerException($this->form_steps->current());
236 236
         }
237 237
         return $this->form_steps->current();
@@ -244,7 +244,7 @@  discard block
 block discarded – undo
244 244
      */
245 245
     public function formAction()
246 246
     {
247
-        if (! is_string($this->form_action) || empty($this->form_action)) {
247
+        if ( ! is_string($this->form_action) || empty($this->form_action)) {
248 248
             $this->form_action = $this->baseUrl();
249 249
         }
250 250
         return $this->form_action;
@@ -257,7 +257,7 @@  discard block
 block discarded – undo
257 257
      */
258 258
     public function setFormAction($form_action)
259 259
     {
260
-        if (! is_string($form_action)) {
260
+        if ( ! is_string($form_action)) {
261 261
             throw new InvalidDataTypeException('$form_action', $form_action, 'string');
262 262
         }
263 263
         $this->form_action = $form_action;
@@ -271,7 +271,7 @@  discard block
 block discarded – undo
271 271
      */
272 272
     public function addFormActionArgs($form_action_args = array())
273 273
     {
274
-        if (! is_array($form_action_args)) {
274
+        if ( ! is_array($form_action_args)) {
275 275
             throw new InvalidDataTypeException('$form_action_args', $form_action_args, 'array');
276 276
         }
277 277
         $form_action_args = ! empty($form_action_args)
@@ -336,7 +336,7 @@  discard block
 block discarded – undo
336 336
     protected function getProgressStepsCollection()
337 337
     {
338 338
         static $collection = null;
339
-        if (! $collection instanceof ProgressStepCollection) {
339
+        if ( ! $collection instanceof ProgressStepCollection) {
340 340
             $collection = new ProgressStepCollection();
341 341
         }
342 342
         return $collection;
@@ -358,7 +358,7 @@  discard block
 block discarded – undo
358 358
         /** @var SequentialStepForm $form_step */
359 359
         foreach ($this->form_steps as $form_step) {
360 360
             // is this step active ?
361
-            if (! $form_step->initialize()) {
361
+            if ( ! $form_step->initialize()) {
362 362
                 continue;
363 363
             }
364 364
             $progress_steps_collection->add(
@@ -427,7 +427,7 @@  discard block
 block discarded – undo
427 427
     {
428 428
         $form_step = $this->buildCurrentStepForm();
429 429
         // no displayable content ? then skip straight to processing
430
-        if (! $form_step->displayable()) {
430
+        if ( ! $form_step->displayable()) {
431 431
             $this->addFormActionArgs();
432 432
             $form_step->setFormAction($this->formAction());
433 433
             wp_safe_redirect($form_step->formAction());
@@ -503,7 +503,7 @@  discard block
 block discarded – undo
503 503
     public function displayProgressSteps($return_as_string = true)
504 504
     {
505 505
         $form_step = $this->getCurrentStep();
506
-        if (! $form_step->displayable()) {
506
+        if ( ! $form_step->displayable()) {
507 507
             return '';
508 508
         }
509 509
         $progress_steps = apply_filters(
Please login to merge, or discard this patch.
acceptance_tests/Helpers/TicketSelector.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@
 block discarded – undo
15 15
     /**
16 16
      * Use to select a quantity from the first ticket for the given event (so this can be used on a event archive page).
17 17
      * @param int|string $event_id
18
-     * @param int|string $quantity
18
+     * @param integer $quantity
19 19
      */
20 20
     public function selectQuantityOfFirstTicketForEventId($event_id, $quantity = 1)
21 21
     {
Please login to merge, or discard this patch.
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -12,23 +12,23 @@
 block discarded – undo
12 12
 trait TicketSelector
13 13
 {
14 14
 
15
-    /**
16
-     * Use to select a quantity from the first ticket for the given event (so this can be used on a event archive page).
17
-     * @param int|string $event_id
18
-     * @param int|string $quantity
19
-     */
20
-    public function selectQuantityOfFirstTicketForEventId($event_id, $quantity = 1)
21
-    {
22
-        $this->actor()->selectOption(TicketSelectorElements::ticketOptionByEventIdSelector($event_id), $quantity);
23
-    }
15
+	/**
16
+	 * Use to select a quantity from the first ticket for the given event (so this can be used on a event archive page).
17
+	 * @param int|string $event_id
18
+	 * @param int|string $quantity
19
+	 */
20
+	public function selectQuantityOfFirstTicketForEventId($event_id, $quantity = 1)
21
+	{
22
+		$this->actor()->selectOption(TicketSelectorElements::ticketOptionByEventIdSelector($event_id), $quantity);
23
+	}
24 24
 
25 25
 
26
-    /**
27
-     * Used to submit the ticket selection for the given event id (so this can be used on an event archive page).
28
-     * @param int|string $event_id
29
-     */
30
-    public function submitTicketSelectionsForEventId($event_id)
31
-    {
32
-        $this->actor()->click(TicketSelectorElements::ticketSelectionSubmitSelectorByEventId($event_id));
33
-    }
26
+	/**
27
+	 * Used to submit the ticket selection for the given event id (so this can be used on an event archive page).
28
+	 * @param int|string $event_id
29
+	 */
30
+	public function submitTicketSelectionsForEventId($event_id)
31
+	{
32
+		$this->actor()->click(TicketSelectorElements::ticketSelectionSubmitSelectorByEventId($event_id));
33
+	}
34 34
 }
35 35
\ No newline at end of file
Please login to merge, or discard this patch.
acceptance_tests/Page/MessagesAdmin.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -103,8 +103,8 @@
 block discarded – undo
103 103
     public static function editMessageTemplateClassByMessageType($message_type_slug, $context = '')
104 104
     {
105 105
         return $context
106
-            ? '.' . $message_type_slug . '-' . $context . '-edit-link'
107
-            : '.' . $message_type_slug . '-edit-link';
106
+            ? '.'.$message_type_slug.'-'.$context.'-edit-link'
107
+            : '.'.$message_type_slug.'-edit-link';
108 108
     }
109 109
 
110 110
 
Please login to merge, or discard this patch.
Indentation   +267 added lines, -267 removed lines patch added patch discarded remove patch
@@ -14,292 +14,292 @@
 block discarded – undo
14 14
 class MessagesAdmin extends CoreAdmin
15 15
 {
16 16
 
17
-    /**
18
-     * Context slug for the admin messages context.
19
-     */
20
-    const ADMIN_CONTEXT_SLUG = 'admin';
17
+	/**
18
+	 * Context slug for the admin messages context.
19
+	 */
20
+	const ADMIN_CONTEXT_SLUG = 'admin';
21 21
 
22
-    /**
23
-     * Context slug for the primary attendee messages context
24
-     */
25
-    const PRIMARY_ATTENDEE_CONTEXT_SLUG = 'primary_attendee';
22
+	/**
23
+	 * Context slug for the primary attendee messages context
24
+	 */
25
+	const PRIMARY_ATTENDEE_CONTEXT_SLUG = 'primary_attendee';
26 26
 
27 27
 
28
-    /**
29
-     * Context slug for the attendee messages context
30
-     */
31
-    const ATTENDEE_CONTEXT_SLUG = 'attendee';
28
+	/**
29
+	 * Context slug for the attendee messages context
30
+	 */
31
+	const ATTENDEE_CONTEXT_SLUG = 'attendee';
32 32
 
33 33
 
34
-    /**
35
-     * Status reference for the EEM_Message::status_sent status.
36
-     */
37
-    const MESSAGE_STATUS_SENT = 'MSN';
34
+	/**
35
+	 * Status reference for the EEM_Message::status_sent status.
36
+	 */
37
+	const MESSAGE_STATUS_SENT = 'MSN';
38 38
 
39 39
 
40
-    /**
41
-     * Message type slug for the Payment Failed message type
42
-     */
43
-    const PAYMENT_FAILED_MESSAGE_TYPE_SLUG = 'payment_failed';
40
+	/**
41
+	 * Message type slug for the Payment Failed message type
42
+	 */
43
+	const PAYMENT_FAILED_MESSAGE_TYPE_SLUG = 'payment_failed';
44 44
 
45 45
 
46
-    /**
47
-     * Message type slug for the Registration Pending Payment message type
48
-     */
49
-    const MESSAGE_TYPE_PENDING_PAYMENT = 'pending_approval';
46
+	/**
47
+	 * Message type slug for the Registration Pending Payment message type
48
+	 */
49
+	const MESSAGE_TYPE_PENDING_PAYMENT = 'pending_approval';
50 50
 
51 51
 
52
-    /**
53
-     * Selector for the Global Messages "Send on same request" field in the Messages Settings tab.
54
-     */
55
-    const GLOBAL_MESSAGES_SETTINGS_ON_REQUEST_SELECTION_SELECTOR =
56
-        '#global_messages_settings-do-messages-on-same-request';
52
+	/**
53
+	 * Selector for the Global Messages "Send on same request" field in the Messages Settings tab.
54
+	 */
55
+	const GLOBAL_MESSAGES_SETTINGS_ON_REQUEST_SELECTION_SELECTOR =
56
+		'#global_messages_settings-do-messages-on-same-request';
57 57
 
58 58
 
59
-    /**
60
-     * Selector for the Global Messages Settings submit button in the Messages Settings tab.
61
-     */
62
-    const GLOBAL_MESSAGES_SETTINGS_SUBMIT_SELECTOR = '#global_messages_settings-update-settings-submit';
59
+	/**
60
+	 * Selector for the Global Messages Settings submit button in the Messages Settings tab.
61
+	 */
62
+	const GLOBAL_MESSAGES_SETTINGS_SUBMIT_SELECTOR = '#global_messages_settings-update-settings-submit';
63 63
 
64 64
 
65
-    /**
66
-     * This is the container where active message types for a messenger are found/dragged to.
67
-     */
68
-    const MESSAGES_SETTINGS_ACTIVE_MESSAGE_TYPES_CONTAINER_SELECTOR = '#active-message-types';
65
+	/**
66
+	 * This is the container where active message types for a messenger are found/dragged to.
67
+	 */
68
+	const MESSAGES_SETTINGS_ACTIVE_MESSAGE_TYPES_CONTAINER_SELECTOR = '#active-message-types';
69 69
 
70 70
 
71
-    /**
72
-     * Locator for the context switcher selector on the Message Template Editor page.
73
-     */
74
-    const MESSAGES_CONTEXT_SWITCHER_SELECTOR = "//form[@id='ee-msg-context-switcher-frm']/select";
71
+	/**
72
+	 * Locator for the context switcher selector on the Message Template Editor page.
73
+	 */
74
+	const MESSAGES_CONTEXT_SWITCHER_SELECTOR = "//form[@id='ee-msg-context-switcher-frm']/select";
75 75
 
76 76
 
77
-    /**
78
-     * Locator for the context switcher submit button in the Message Template Editor page.
79
-     */
80
-    const MESSAGES_CONTEXT_SWITCHER_BUTTON_SELECTOR = "#submit-msg-context-switcher-sbmt";
77
+	/**
78
+	 * Locator for the context switcher submit button in the Message Template Editor page.
79
+	 */
80
+	const MESSAGES_CONTEXT_SWITCHER_BUTTON_SELECTOR = "#submit-msg-context-switcher-sbmt";
81 81
 
82 82
 
83
-    /**
84
-     * Locator for the dialog container used for housing viewed messages in the message activity list table.
85
-     */
86
-    const MESSAGES_LIST_TABLE_VIEW_MESSAGE_DIALOG_CONTAINER_SELECTOR = '.ee-admin-dialog-container-inner-content';
87
-
88
-
89
-    /**
90
-     * Returns the selector for the on/off toggle for context on the message template editor.
91
-     */
92
-    const MESSAGES_CONTEXT_ACTIVE_STATE_TOGGLE =
93
-        "//div[@class='activate_context_on_off_toggle_container']/div[@class='switch']/label";
94
-
95
-
96
-    const SELECTOR_LINK_FINALIZE_PAYMENT_PENDING_PAYMENT_MESSAGE = "//td/p[@class='callout']/a";
97
-
98
-
99
-
100
-    /**
101
-     * @param string $additional_params Any additional request parameters for the generated url should be included as
102
-     *                                  a string.
103
-     * @return string
104
-     */
105
-    public static function messageActivityListTableUrl($additional_params = '')
106
-    {
107
-        return self::adminUrl('espresso_messages', 'default', $additional_params);
108
-    }
109
-
110
-
111
-    /**
112
-     * @param string $additional_params Any additional request parameters for the generated url should be included as
113
-     *                                  a string.
114
-     * @return string
115
-     */
116
-    public static function defaultMessageTemplateListTableUrl($additional_params = '')
117
-    {
118
-        return self::adminUrl('espresso_messages', 'global_mtps', $additional_params);
119
-    }
120
-
121
-
122
-    /**
123
-     * @param string $additional_params Any additional request parameters for the generated url should be included as
124
-     *                                  a string.
125
-     * @return string
126
-     */
127
-    public static function customMessageTemplateListTableUrl($additional_params = '')
128
-    {
129
-        return self::adminUrl('espresso_messages', 'custom_mtps', $additional_params);
130
-    }
131
-
132
-
133
-    /**
134
-     * @return string
135
-     */
136
-    public static function messageSettingsUrl()
137
-    {
138
-        return self::adminUrl('espresso_messages', 'settings');
139
-    }
140
-
141
-
142
-
143
-    public static function draggableSettingsBoxSelectorForMessageTypeAndMessenger(
144
-        $message_type_slug,
145
-        $messenger_slug = 'email'
146
-    ) {
147
-        return "#$message_type_slug-messagetype-$messenger_slug";
148
-    }
149
-
150
-
151
-    /**
152
-     * @param string $message_type_slug
153
-     * @param string $context
154
-     * @return string
155
-     */
156
-    public static function editMessageTemplateClassByMessageType($message_type_slug, $context = '')
157
-    {
158
-        return $context
159
-            ? '.' . $message_type_slug . '-' . $context . '-edit-link'
160
-            : '.' . $message_type_slug . '-edit-link';
161
-    }
162
-
163
-
164
-    /**
165
-     * Selector for (a) specific table cell(s) in the Messages Activity list table for the given parameters.
166
-     *
167
-     * @param        $field
168
-     * @param        $message_type_label
169
-     * @param string $message_status
170
-     * @param string $messenger
171
-     * @param string $context
172
-     * @param string $table_cell_content_for_field
173
-     * @param int    $number_in_set   It's possible that the given parameters could match multiple items in the view.
174
-     *                                This allows you to indicate which item from the set to match.  If this is set to 0
175
-     *                                then all matches for the locator will be returned.
176
-     * @return string
177
-     * @throws \InvalidArgumentException
178
-     */
179
-    public static function messagesActivityListTableCellSelectorFor(
180
-        $field,
181
-        $message_type_label,
182
-        $message_status = self::MESSAGE_STATUS_SENT,
183
-        $messenger = 'Email',
184
-        $context = 'Event Admin',
185
-        $table_cell_content_for_field = '',
186
-        $number_in_set = 1
187
-    ) {
188
-        $selector = "//tbody[@id='the-list']";
189
-        $selector .= "//tr[contains(@class, 'msg-status-$message_status')]"
190
-                     . "//td[contains(@class, 'message_type') and text()='$message_type_label']";
191
-        if ($messenger) {
192
-            $selector .= "/ancestor::tr/td[contains(@class, 'messenger') and text()='$messenger']";
193
-        }
194
-        $selector .= "/ancestor::tr/td[contains(@class, 'column-context') and text()='$context']";
195
-        $selector .= $table_cell_content_for_field
196
-            ? "/ancestor::tr/td[contains(@class, 'column-$field') and text()='$table_cell_content_for_field']"
197
-            : "/ancestor::tr/td[contains(@class, 'column-$field')]";
198
-        return $number_in_set > 0 ? Locator::elementAt($selector, $number_in_set) : $selector;
199
-    }
200
-
201
-
202
-    /**
203
-     * Selector for the Create Custom button found in the message template list table.
204
-     * @param string $message_type_label
205
-     * @param string $messenger_label
206
-     * @return string
207
-     */
208
-    public static function createCustomButtonForMessageTypeAndMessenger($message_type_label, $messenger_label)
209
-    {
210
-        $selector = "//tr/td[contains(@class, 'message_type') and text()='$message_type_label']"
211
-                    . "//ancestor::tr/td[contains(@class, 'messenger') and contains(., '$messenger_label')]"
212
-                    . "//ancestor::tr/td/a[@class='button button-small']";
213
-        return $selector;
214
-    }
215
-
216
-
217
-    /**
218
-     * Note, this could potentially match multiple buttons in the view so the selector is intentionally restricted to
219
-     * the FIRST match (which will be the latest message sent if the table is default sorted).
220
-     *
221
-     * @param string $message_type_label    The visible message type label for the row you want to match
222
-     * @param string $message_status        The status of the message for the row you want to match.
223
-     * @param string $messenger             The visible messenger label for the row you want to match.
224
-     * @param string $context               The visible context label for the row you want to match.
225
-     * @param int    $number_in_set         It's possible that the given parameters could match multiple items in the
226
-     *                                      view. This allows you to indicate which item from the set to match.
227
-     * @return string
228
-     * @throws \InvalidArgumentException
229
-     */
230
-    public static function messagesActivityListTableViewButtonSelectorFor(
231
-        $message_type_label,
232
-        $message_status = self::MESSAGE_STATUS_SENT,
233
-        $messenger = 'Email',
234
-        $context = 'Event Admin',
235
-        $number_in_set = 1
236
-    ) {
237
-        $selector = self::messagesActivityListTableCellSelectorFor(
238
-            'action',
239
-            $message_type_label,
240
-            $message_status,
241
-            $messenger,
242
-            $context,
243
-            '',
244
-            $number_in_set
245
-        );
246
-        $selector .= "/a/span[contains(@class, 'ee-message-action-link-view')"
247
-                     . " and not(contains(@class, 'ee-message-action-link-view_transaction'))]";
248
-        return $selector;
249
-    }
250
-
251
-
252
-    /**
253
-     * Locator for the delete action link for a message item in the message activity list table.
254
-     * Note: The link is not visible by default, so the column would need hovered over for the link to appear.
255
-     *
256
-     * @param        $message_type_label
257
-     * @param string $message_status
258
-     * @param string $messenger
259
-     * @param string $context
260
-     * @param int    $number_in_set
261
-     * @return string
262
-     * @throws \InvalidArgumentException
263
-     */
264
-    public static function messagesActivityListTableDeleteActionSelectorFor(
265
-        $message_type_label,
266
-        $message_status = self::MESSAGE_STATUS_SENT,
267
-        $messenger = 'Email',
268
-        $context = 'Event Admin',
269
-        $number_in_set = 1
270
-    ) {
271
-        $selector = self::messagesActivityListTableCellSelectorFor(
272
-            'to',
273
-            $message_type_label,
274
-            $message_status,
275
-            $messenger,
276
-            $context,
277
-            '',
278
-            $number_in_set
279
-        );
280
-        $selector .= "/div/span[@class='delete']/a";
281
-        return $selector;
282
-    }
283
-
284
-
285
-
286
-    /**
287
-     * Returns the input selector for a given field in the message template editor.
288
-     * Assumes one is already viewing the Message Template Editor.
289
-     * @param string     $field
290
-     * @return string
291
-     */
292
-    public static function messageInputFieldSelectorFor($field)
293
-    {
294
-        return "//div[@id='post-body']//input[@id='$field-content']";
295
-    }
296
-
297
-
298
-    /**
299
-     * Wrapper for self::messageInputFieldSelectorFor('to') that takes care of getting the input for the To field.
300
-     */
301
-    public static function messageTemplateToFieldSelector()
302
-    {
303
-        return self::messageInputFieldSelectorFor('to');
304
-    }
83
+	/**
84
+	 * Locator for the dialog container used for housing viewed messages in the message activity list table.
85
+	 */
86
+	const MESSAGES_LIST_TABLE_VIEW_MESSAGE_DIALOG_CONTAINER_SELECTOR = '.ee-admin-dialog-container-inner-content';
87
+
88
+
89
+	/**
90
+	 * Returns the selector for the on/off toggle for context on the message template editor.
91
+	 */
92
+	const MESSAGES_CONTEXT_ACTIVE_STATE_TOGGLE =
93
+		"//div[@class='activate_context_on_off_toggle_container']/div[@class='switch']/label";
94
+
95
+
96
+	const SELECTOR_LINK_FINALIZE_PAYMENT_PENDING_PAYMENT_MESSAGE = "//td/p[@class='callout']/a";
97
+
98
+
99
+
100
+	/**
101
+	 * @param string $additional_params Any additional request parameters for the generated url should be included as
102
+	 *                                  a string.
103
+	 * @return string
104
+	 */
105
+	public static function messageActivityListTableUrl($additional_params = '')
106
+	{
107
+		return self::adminUrl('espresso_messages', 'default', $additional_params);
108
+	}
109
+
110
+
111
+	/**
112
+	 * @param string $additional_params Any additional request parameters for the generated url should be included as
113
+	 *                                  a string.
114
+	 * @return string
115
+	 */
116
+	public static function defaultMessageTemplateListTableUrl($additional_params = '')
117
+	{
118
+		return self::adminUrl('espresso_messages', 'global_mtps', $additional_params);
119
+	}
120
+
121
+
122
+	/**
123
+	 * @param string $additional_params Any additional request parameters for the generated url should be included as
124
+	 *                                  a string.
125
+	 * @return string
126
+	 */
127
+	public static function customMessageTemplateListTableUrl($additional_params = '')
128
+	{
129
+		return self::adminUrl('espresso_messages', 'custom_mtps', $additional_params);
130
+	}
131
+
132
+
133
+	/**
134
+	 * @return string
135
+	 */
136
+	public static function messageSettingsUrl()
137
+	{
138
+		return self::adminUrl('espresso_messages', 'settings');
139
+	}
140
+
141
+
142
+
143
+	public static function draggableSettingsBoxSelectorForMessageTypeAndMessenger(
144
+		$message_type_slug,
145
+		$messenger_slug = 'email'
146
+	) {
147
+		return "#$message_type_slug-messagetype-$messenger_slug";
148
+	}
149
+
150
+
151
+	/**
152
+	 * @param string $message_type_slug
153
+	 * @param string $context
154
+	 * @return string
155
+	 */
156
+	public static function editMessageTemplateClassByMessageType($message_type_slug, $context = '')
157
+	{
158
+		return $context
159
+			? '.' . $message_type_slug . '-' . $context . '-edit-link'
160
+			: '.' . $message_type_slug . '-edit-link';
161
+	}
162
+
163
+
164
+	/**
165
+	 * Selector for (a) specific table cell(s) in the Messages Activity list table for the given parameters.
166
+	 *
167
+	 * @param        $field
168
+	 * @param        $message_type_label
169
+	 * @param string $message_status
170
+	 * @param string $messenger
171
+	 * @param string $context
172
+	 * @param string $table_cell_content_for_field
173
+	 * @param int    $number_in_set   It's possible that the given parameters could match multiple items in the view.
174
+	 *                                This allows you to indicate which item from the set to match.  If this is set to 0
175
+	 *                                then all matches for the locator will be returned.
176
+	 * @return string
177
+	 * @throws \InvalidArgumentException
178
+	 */
179
+	public static function messagesActivityListTableCellSelectorFor(
180
+		$field,
181
+		$message_type_label,
182
+		$message_status = self::MESSAGE_STATUS_SENT,
183
+		$messenger = 'Email',
184
+		$context = 'Event Admin',
185
+		$table_cell_content_for_field = '',
186
+		$number_in_set = 1
187
+	) {
188
+		$selector = "//tbody[@id='the-list']";
189
+		$selector .= "//tr[contains(@class, 'msg-status-$message_status')]"
190
+					 . "//td[contains(@class, 'message_type') and text()='$message_type_label']";
191
+		if ($messenger) {
192
+			$selector .= "/ancestor::tr/td[contains(@class, 'messenger') and text()='$messenger']";
193
+		}
194
+		$selector .= "/ancestor::tr/td[contains(@class, 'column-context') and text()='$context']";
195
+		$selector .= $table_cell_content_for_field
196
+			? "/ancestor::tr/td[contains(@class, 'column-$field') and text()='$table_cell_content_for_field']"
197
+			: "/ancestor::tr/td[contains(@class, 'column-$field')]";
198
+		return $number_in_set > 0 ? Locator::elementAt($selector, $number_in_set) : $selector;
199
+	}
200
+
201
+
202
+	/**
203
+	 * Selector for the Create Custom button found in the message template list table.
204
+	 * @param string $message_type_label
205
+	 * @param string $messenger_label
206
+	 * @return string
207
+	 */
208
+	public static function createCustomButtonForMessageTypeAndMessenger($message_type_label, $messenger_label)
209
+	{
210
+		$selector = "//tr/td[contains(@class, 'message_type') and text()='$message_type_label']"
211
+					. "//ancestor::tr/td[contains(@class, 'messenger') and contains(., '$messenger_label')]"
212
+					. "//ancestor::tr/td/a[@class='button button-small']";
213
+		return $selector;
214
+	}
215
+
216
+
217
+	/**
218
+	 * Note, this could potentially match multiple buttons in the view so the selector is intentionally restricted to
219
+	 * the FIRST match (which will be the latest message sent if the table is default sorted).
220
+	 *
221
+	 * @param string $message_type_label    The visible message type label for the row you want to match
222
+	 * @param string $message_status        The status of the message for the row you want to match.
223
+	 * @param string $messenger             The visible messenger label for the row you want to match.
224
+	 * @param string $context               The visible context label for the row you want to match.
225
+	 * @param int    $number_in_set         It's possible that the given parameters could match multiple items in the
226
+	 *                                      view. This allows you to indicate which item from the set to match.
227
+	 * @return string
228
+	 * @throws \InvalidArgumentException
229
+	 */
230
+	public static function messagesActivityListTableViewButtonSelectorFor(
231
+		$message_type_label,
232
+		$message_status = self::MESSAGE_STATUS_SENT,
233
+		$messenger = 'Email',
234
+		$context = 'Event Admin',
235
+		$number_in_set = 1
236
+	) {
237
+		$selector = self::messagesActivityListTableCellSelectorFor(
238
+			'action',
239
+			$message_type_label,
240
+			$message_status,
241
+			$messenger,
242
+			$context,
243
+			'',
244
+			$number_in_set
245
+		);
246
+		$selector .= "/a/span[contains(@class, 'ee-message-action-link-view')"
247
+					 . " and not(contains(@class, 'ee-message-action-link-view_transaction'))]";
248
+		return $selector;
249
+	}
250
+
251
+
252
+	/**
253
+	 * Locator for the delete action link for a message item in the message activity list table.
254
+	 * Note: The link is not visible by default, so the column would need hovered over for the link to appear.
255
+	 *
256
+	 * @param        $message_type_label
257
+	 * @param string $message_status
258
+	 * @param string $messenger
259
+	 * @param string $context
260
+	 * @param int    $number_in_set
261
+	 * @return string
262
+	 * @throws \InvalidArgumentException
263
+	 */
264
+	public static function messagesActivityListTableDeleteActionSelectorFor(
265
+		$message_type_label,
266
+		$message_status = self::MESSAGE_STATUS_SENT,
267
+		$messenger = 'Email',
268
+		$context = 'Event Admin',
269
+		$number_in_set = 1
270
+	) {
271
+		$selector = self::messagesActivityListTableCellSelectorFor(
272
+			'to',
273
+			$message_type_label,
274
+			$message_status,
275
+			$messenger,
276
+			$context,
277
+			'',
278
+			$number_in_set
279
+		);
280
+		$selector .= "/div/span[@class='delete']/a";
281
+		return $selector;
282
+	}
283
+
284
+
285
+
286
+	/**
287
+	 * Returns the input selector for a given field in the message template editor.
288
+	 * Assumes one is already viewing the Message Template Editor.
289
+	 * @param string     $field
290
+	 * @return string
291
+	 */
292
+	public static function messageInputFieldSelectorFor($field)
293
+	{
294
+		return "//div[@id='post-body']//input[@id='$field-content']";
295
+	}
296
+
297
+
298
+	/**
299
+	 * Wrapper for self::messageInputFieldSelectorFor('to') that takes care of getting the input for the To field.
300
+	 */
301
+	public static function messageTemplateToFieldSelector()
302
+	{
303
+		return self::messageInputFieldSelectorFor('to');
304
+	}
305 305
 }
306 306
\ No newline at end of file
Please login to merge, or discard this patch.
core/db_models/EEM_Registration.model.php 4 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -467,7 +467,7 @@
 block discarded – undo
467 467
      * @param    int $ATT_ID
468 468
      * @param    int $att_nmbr in case the ATT_ID is the same for multiple registrations (same details used) then the
469 469
      *                         attendee number is required
470
-     * @return        mixed        array on success, FALSE on fail
470
+     * @return        null|EE_Base_Class        array on success, FALSE on fail
471 471
      * @throws EE_Error
472 472
      */
473 473
     public function get_registration_for_transaction_attendee($TXN_ID = 0, $ATT_ID = 0, $att_nmbr = 0)
Please login to merge, or discard this patch.
Unused Use Statements   -1 removed lines patch added patch discarded remove patch
@@ -1,5 +1,4 @@
 block discarded – undo
1 1
 <?php
2
-use EventEspresso\core\exceptions\InvalidIdentifierException;
3 2
 use EventEspresso\core\exceptions\InvalidStatusException;
4 3
 use EventEspresso\core\services\database\TableAnalysis;
5 4
 
Please login to merge, or discard this patch.
Indentation   +866 added lines, -866 removed lines patch added patch discarded remove patch
@@ -13,815 +13,815 @@  discard block
 block discarded – undo
13 13
 class EEM_Registration extends EEM_Soft_Delete_Base
14 14
 {
15 15
 
16
-    /**
17
-     * @var EEM_Registration $_instance
18
-     */
19
-    protected static $_instance;
20
-
21
-    /**
22
-     * Keys are the status IDs for registrations (eg, RAP, RCN, etc), and the values
23
-     * are status codes (eg, approved, cancelled, etc)
24
-     *
25
-     * @var array
26
-     */
27
-    private static $_reg_status;
28
-
29
-    /**
30
-     * The value of REG_count for a primary registrant
31
-     */
32
-    const PRIMARY_REGISTRANT_COUNT = 1;
33
-
34
-    /**
35
-     * Status ID (STS_ID on esp_status table) to indicate an INCOMPLETE registration.
36
-     * Initial status for registrations when they are first created
37
-     * Payments are NOT allowed.
38
-     * Automatically toggled to whatever the default Event registration status is upon completion of the attendee
39
-     * information reg step NO space reserved. Registration is NOT active
40
-     */
41
-    const status_id_incomplete = 'RIC';
42
-
43
-    /**
44
-     * Status ID (STS_ID on esp_status table) to indicate an UNAPPROVED registration.
45
-     * Payments are NOT allowed.
46
-     * Event Admin must manually toggle STS_ID for it to change
47
-     * No space reserved.
48
-     * Registration is active
49
-     */
50
-    const status_id_not_approved = 'RNA';
51
-
52
-    /**
53
-     * Status ID (STS_ID on esp_status table) to indicate registration is PENDING_PAYMENT .
54
-     * Payments are allowed.
55
-     * STS_ID will automatically be toggled to RAP if payment is made in full by the attendee
56
-     * No space reserved.
57
-     * Registration is active
58
-     */
59
-    const status_id_pending_payment = 'RPP';
60
-
61
-    /**
62
-     * Status ID (STS_ID on esp_status table) to indicate registration is on the WAIT_LIST .
63
-     * Payments are allowed.
64
-     * STS_ID will automatically be toggled to RAP if payment is made in full by the attendee
65
-     * No space reserved.
66
-     * Registration is active
67
-     */
68
-    const status_id_wait_list = 'RWL';
69
-
70
-    /**
71
-     * Status ID (STS_ID on esp_status table) to indicate an APPROVED registration.
72
-     * the TXN may or may not be completed ( paid in full )
73
-     * Payments are allowed.
74
-     * A space IS reserved.
75
-     * Registration is active
76
-     */
77
-    const status_id_approved = 'RAP';
78
-
79
-    /**
80
-     * Status ID (STS_ID on esp_status table) to indicate a registration was CANCELLED by the attendee.
81
-     * Payments are NOT allowed.
82
-     * NO space reserved.
83
-     * Registration is NOT active
84
-     */
85
-    const status_id_cancelled = 'RCN';
86
-
87
-    /**
88
-     * Status ID (STS_ID on esp_status table) to indicate a registration was DECLINED by the Event Admin
89
-     * Payments are NOT allowed.
90
-     * No space reserved.
91
-     * Registration is NOT active
92
-     */
93
-    const status_id_declined = 'RDC';
94
-
95
-    /**
96
-     * @var TableAnalysis $table_analysis
97
-     */
98
-    protected $_table_analysis;
99
-
100
-
101
-    /**
102
-     *    private constructor to prevent direct creation
103
-     *
104
-     * @Constructor
105
-     * @access protected
106
-     * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any
107
-     *                         incoming timezone data that gets saved). Note this just sends the timezone info to the
108
-     *                         date time model field objects.  Default is NULL (and will be assumed using the set
109
-     *                         timezone in the 'timezone_string' wp option)
110
-     * @throws EE_Error
111
-     */
112
-    protected function __construct($timezone = null)
113
-    {
114
-        $this->_table_analysis = EE_Registry::instance()->create('TableAnalysis', array(), true);
115
-        $this->singular_item = esc_html__('Registration', 'event_espresso');
116
-        $this->plural_item = esc_html__('Registrations', 'event_espresso');
117
-        $this->_tables = array(
118
-            'Registration' => new EE_Primary_Table('esp_registration', 'REG_ID'),
119
-        );
120
-        $this->_fields = array(
121
-            'Registration' => array(
122
-                'REG_ID' => new EE_Primary_Key_Int_Field(
123
-                    'REG_ID',
124
-                    esc_html__('Registration ID', 'event_espresso')
125
-                ),
126
-                'EVT_ID' => new EE_Foreign_Key_Int_Field(
127
-                    'EVT_ID',
128
-                    esc_html__('Event ID', 'event_espresso'),
129
-                    false,
130
-                    0,
131
-                    'Event'
132
-                ),
133
-                'ATT_ID' => new EE_Foreign_Key_Int_Field(
134
-                    'ATT_ID',
135
-                    esc_html__('Attendee ID', 'event_espresso'),
136
-                    false,
137
-                    0,
138
-                    'Attendee'
139
-                ),
140
-                'TXN_ID' => new EE_Foreign_Key_Int_Field(
141
-                    'TXN_ID',
142
-                    esc_html__('Transaction ID', 'event_espresso'),
143
-                    false,
144
-                    0,
145
-                    'Transaction'
146
-                ),
147
-                'TKT_ID' => new EE_Foreign_Key_Int_Field(
148
-                    'TKT_ID',
149
-                    esc_html__('Ticket ID', 'event_espresso'),
150
-                    false,
151
-                    0,
152
-                    'Ticket'
153
-                ),
154
-                'STS_ID' => new EE_Foreign_Key_String_Field(
155
-                    'STS_ID',
156
-                    esc_html__('Status ID', 'event_espresso'),
157
-                    false,
158
-                    EEM_Registration::status_id_incomplete,
159
-                    'Status'
160
-                ),
161
-                'REG_date' => new EE_Datetime_Field(
162
-                    'REG_date',
163
-                    esc_html__('Time registration occurred', 'event_espresso'),
164
-                    false,
165
-                    EE_Datetime_Field::now,
166
-                    $timezone
167
-                ),
168
-                'REG_final_price' => new EE_Money_Field(
169
-                    'REG_final_price',
170
-                    esc_html__('Registration\'s share of the transaction total', 'event_espresso'),
171
-                    false,
172
-                    0
173
-                ),
174
-                'REG_paid' => new EE_Money_Field(
175
-                    'REG_paid',
176
-                    esc_html__('Amount paid to date towards registration', 'event_espresso'),
177
-                    false,
178
-                    0
179
-                ),
180
-                'REG_session' => new EE_Plain_Text_Field(
181
-                    'REG_session',
182
-                    esc_html__('Session ID of registration', 'event_espresso'),
183
-                    false,
184
-                    ''
185
-                ),
186
-                'REG_code' => new EE_Plain_Text_Field(
187
-                    'REG_code',
188
-                    esc_html__('Unique Code for this registration', 'event_espresso'),
189
-                    false,
190
-                    ''
191
-                ),
192
-                'REG_url_link' => new EE_Plain_Text_Field(
193
-                    'REG_url_link',
194
-                    esc_html__('String to be used in URL for identifying registration', 'event_espresso'),
195
-                    false,
196
-                    ''
197
-                ),
198
-                'REG_count' => new EE_Integer_Field(
199
-                    'REG_count',
200
-                    esc_html__('Count of this registration in the group registration ', 'event_espresso'),
201
-                    true,
202
-                    1
203
-                ),
204
-                'REG_group_size' => new EE_Integer_Field(
205
-                    'REG_group_size',
206
-                    esc_html__('Number of registrations on this group', 'event_espresso'),
207
-                    false,
208
-                    1
209
-                ),
210
-                'REG_att_is_going' => new EE_Boolean_Field(
211
-                    'REG_att_is_going',
212
-                    esc_html__('Flag indicating the registrant plans on attending', 'event_espresso'),
213
-                    false,
214
-                    false
215
-                ),
216
-                'REG_deleted' => new EE_Trashed_Flag_Field(
217
-                    'REG_deleted',
218
-                    esc_html__('Flag indicating if registration has been archived or not.', 'event_espresso'),
219
-                    false,
220
-                    false
221
-                ),
222
-            ),
223
-        );
224
-        $this->_model_relations = array(
225
-            'Event' => new EE_Belongs_To_Relation(),
226
-            'Attendee' => new EE_Belongs_To_Relation(),
227
-            'Transaction' => new EE_Belongs_To_Relation(),
228
-            'Ticket' => new EE_Belongs_To_Relation(),
229
-            'Status' => new EE_Belongs_To_Relation(),
230
-            'Answer' => new EE_Has_Many_Relation(),
231
-            'Checkin' => new EE_Has_Many_Relation(),
232
-            'Registration_Payment' => new EE_Has_Many_Relation(),
233
-            'Payment' => new EE_HABTM_Relation('Registration_Payment'),
234
-            'Message' => new EE_Has_Many_Any_Relation(false)
235
-            // allow deletes even if there are messages in the queue related
236
-        );
237
-        $this->_model_chain_to_wp_user = 'Event';
238
-        parent::__construct($timezone);
239
-    }
240
-
241
-
242
-    /**
243
-     * a list of ALL valid registration statuses currently in use within the system
244
-     * generated by combining the filterable active and inactive reg status arrays
245
-     *
246
-     * @return array
247
-     */
248
-    public static function reg_statuses()
249
-    {
250
-        return array_unique(
251
-            array_merge(
252
-                EEM_Registration::active_reg_statuses(),
253
-                EEM_Registration::inactive_reg_statuses()
254
-            )
255
-        );
256
-    }
257
-
258
-
259
-    /**
260
-     * reg_statuses_that_allow_payment
261
-     * a filterable list of registration statuses that allow a registrant to make a payment
262
-     *
263
-     * @access public
264
-     * @return array
265
-     */
266
-    public static function reg_statuses_that_allow_payment()
267
-    {
268
-        return apply_filters(
269
-            'FHEE__EEM_Registration__reg_statuses_that_allow_payment',
270
-            array(
271
-                EEM_Registration::status_id_approved,
272
-                EEM_Registration::status_id_pending_payment,
273
-            )
274
-        );
275
-    }
276
-
277
-
278
-    /**
279
-     * active_reg_statuses
280
-     * a filterable list of registration statuses that are considered active
281
-     *
282
-     * @access public
283
-     * @return array
284
-     */
285
-    public static function active_reg_statuses()
286
-    {
287
-        return apply_filters(
288
-            'FHEE__EEM_Registration__active_reg_statuses',
289
-            array(
290
-                EEM_Registration::status_id_approved,
291
-                EEM_Registration::status_id_pending_payment,
292
-                EEM_Registration::status_id_wait_list,
293
-                EEM_Registration::status_id_not_approved,
294
-            )
295
-        );
296
-    }
297
-
298
-
299
-    /**
300
-     * inactive_reg_statuses
301
-     * a filterable list of registration statuses that are not considered active
302
-     *
303
-     * @access public
304
-     * @return array
305
-     */
306
-    public static function inactive_reg_statuses()
307
-    {
308
-        return apply_filters(
309
-            'FHEE__EEM_Registration__inactive_reg_statuses',
310
-            array(
311
-                EEM_Registration::status_id_incomplete,
312
-                EEM_Registration::status_id_cancelled,
313
-                EEM_Registration::status_id_declined,
314
-            )
315
-        );
316
-    }
317
-
318
-
319
-    /**
320
-     *    closed_reg_statuses
321
-     *    a filterable list of registration statuses that are considered "closed"
322
-     * meaning they should not be considered in any calculations involving monies owing
323
-     *
324
-     * @access public
325
-     * @return array
326
-     */
327
-    public static function closed_reg_statuses()
328
-    {
329
-        return apply_filters(
330
-            'FHEE__EEM_Registration__closed_reg_statuses',
331
-            array(
332
-                EEM_Registration::status_id_cancelled,
333
-                EEM_Registration::status_id_declined,
334
-                EEM_Registration::status_id_wait_list,
335
-            )
336
-        );
337
-    }
338
-
339
-
340
-    /**
341
-     *        get list of registration statuses
342
-     *
343
-     * @access public
344
-     * @param array $exclude The status ids to exclude from the returned results
345
-     * @param bool $translated If true will return the values as singular localized strings
346
-     * @return array
347
-     * @throws EE_Error
348
-     */
349
-    public static function reg_status_array($exclude = array(), $translated = false)
350
-    {
351
-        EEM_Registration::instance()->_get_registration_status_array($exclude);
352
-        return $translated
353
-            ? EEM_Status::instance()->localized_status(self::$_reg_status, false, 'sentence')
354
-            : self::$_reg_status;
355
-    }
356
-
357
-
358
-    /**
359
-     *    get list of registration statuses
360
-     *
361
-     * @access private
362
-     * @param array $exclude
363
-     * @return void
364
-     * @throws EE_Error
365
-     */
366
-    private function _get_registration_status_array($exclude = array())
367
-    {
368
-        // in the very rare circumstance that we are deleting a model's table's data
369
-        // and the table hasn't actually been created, this could have an error
370
-        /** @type WPDB $wpdb */
371
-        global $wpdb;
372
-        if ($this->_get_table_analysis()->tableExists($wpdb->prefix . 'esp_status')) {
373
-            $results = $wpdb->get_results(
374
-                "SELECT STS_ID, STS_code FROM {$wpdb->prefix}esp_status WHERE STS_type = 'registration'"
375
-            );
376
-            self::$_reg_status = array();
377
-            foreach ($results as $status) {
378
-                if (!in_array($status->STS_ID, $exclude, true)) {
379
-                    self::$_reg_status[ $status->STS_ID ] = $status->STS_code;
380
-                }
381
-            }
382
-        }
383
-    }
384
-
385
-
386
-    /**
387
-     * Gets the injected table analyzer, or throws an exception
388
-     *
389
-     * @return TableAnalysis
390
-     * @throws EE_Error
391
-     */
392
-    protected function _get_table_analysis()
393
-    {
394
-        if ($this->_table_analysis instanceof TableAnalysis) {
395
-            return $this->_table_analysis;
396
-        }
397
-        throw new EE_Error(
398
-            sprintf(
399
-                esc_html__('Table analysis class on class %1$s is not set properly.', 'event_espresso'),
400
-                get_class($this)
401
-            )
402
-        );
403
-    }
404
-
405
-
406
-    /**
407
-     * This returns a wpdb->results array of all registration date month and years matching the incoming query params
408
-     * and grouped by month and year.
409
-     *
410
-     * @param  array $where_params Array of query_params as described in the comments for EEM_Base::get_all()
411
-     * @return array
412
-     * @throws EE_Error
413
-     */
414
-    public function get_reg_months_and_years($where_params)
415
-    {
416
-        $query_params[0] = $where_params;
417
-        $query_params['group_by'] = array('reg_year', 'reg_month');
418
-        $query_params['order_by'] = array('REG_date' => 'DESC');
419
-        $columns_to_select = array(
420
-            'reg_year' => array('YEAR(REG_date)', '%s'),
421
-            'reg_month' => array('MONTHNAME(REG_date)', '%s'),
422
-        );
423
-        return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select);
424
-    }
425
-
426
-
427
-    /**
428
-     * retrieve ALL registrations for a particular Attendee from db
429
-     *
430
-     * @param int $ATT_ID
431
-     * @return EE_Base_Class[]|EE_Registration[]|null
432
-     * @throws EE_Error
433
-     */
434
-    public function get_all_registrations_for_attendee($ATT_ID = 0)
435
-    {
436
-        if (!$ATT_ID) {
437
-            return null;
438
-        }
439
-        return $this->get_all(array(array('ATT_ID' => $ATT_ID)));
440
-    }
441
-
442
-
443
-    /**
444
-     * Gets a registration given their REG_url_link. Yes, this should usually
445
-     * be passed via a GET parameter.
446
-     *
447
-     * @param string $REG_url_link
448
-     * @return EE_Base_Class|EE_Registration|null
449
-     * @throws EE_Error
450
-     */
451
-    public function get_registration_for_reg_url_link($REG_url_link)
452
-    {
453
-        if (!$REG_url_link) {
454
-            return null;
455
-        }
456
-        return $this->get_one(array(array('REG_url_link' => $REG_url_link)));
457
-    }
458
-
459
-
460
-    /**
461
-     *        retrieve registration for a specific transaction attendee from db
462
-     *
463
-     * @access        public
464
-     * @param    int $TXN_ID
465
-     * @param    int $ATT_ID
466
-     * @param    int $att_nmbr in case the ATT_ID is the same for multiple registrations (same details used) then the
467
-     *                         attendee number is required
468
-     * @return        mixed        array on success, FALSE on fail
469
-     * @throws EE_Error
470
-     */
471
-    public function get_registration_for_transaction_attendee($TXN_ID = 0, $ATT_ID = 0, $att_nmbr = 0)
472
-    {
473
-        return $this->get_one(array(
474
-            array(
475
-                'TXN_ID' => $TXN_ID,
476
-                'ATT_ID' => $ATT_ID,
477
-            ),
478
-            'limit' => array(min($att_nmbr - 1, 0), 1),
479
-        ));
480
-    }
481
-
482
-
483
-    /**
484
-     *        get the number of registrations per day  for the Registration Admin page Reports Tab.
485
-     *        (doesn't utilize models because it's a fairly specialized query)
486
-     *
487
-     * @access        public
488
-     * @param $period string which can be passed to php's strtotime function (eg "-1 month")
489
-     * @return stdClass[] with properties regDate and total
490
-     * @throws EE_Error
491
-     */
492
-    public function get_registrations_per_day_report($period = '-1 month')
493
-    {
494
-        $sql_date = $this->convert_datetime_for_query(
495
-            'REG_date',
496
-            date('Y-m-d H:i:s', strtotime($period)),
497
-            'Y-m-d H:i:s',
498
-            'UTC'
499
-        );
500
-        $where = array(
501
-            'REG_date' => array('>=', $sql_date),
502
-            'STS_ID' => array('!=', EEM_Registration::status_id_incomplete),
503
-        );
504
-        if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_day_report')) {
505
-            $where['Event.EVT_wp_user'] = get_current_user_id();
506
-        }
507
-        $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'REG_date');
508
-        $results = $this->_get_all_wpdb_results(
509
-            array(
510
-                $where,
511
-                'group_by' => 'regDate',
512
-                'order_by' => array('REG_date' => 'ASC'),
513
-            ),
514
-            OBJECT,
515
-            array(
516
-                'regDate' => array('DATE(' . $query_interval . ')', '%s'),
517
-                'total' => array('count(REG_ID)', '%d'),
518
-            )
519
-        );
520
-        return $results;
521
-    }
522
-
523
-
524
-    /**
525
-     * Get the number of registrations per day including the count of registrations for each Registration Status.
526
-     * Note: EEM_Registration::status_id_incomplete registrations are excluded from the results.
527
-     *
528
-     * @param string $period
529
-     * @return stdClass[] with properties Registration_REG_date and a column for each registration status as the STS_ID
530
-     * @throws EE_Error
531
-     *                    (i.e. RAP)
532
-     */
533
-    public function get_registrations_per_day_and_per_status_report($period = '-1 month')
534
-    {
535
-        global $wpdb;
536
-        $registration_table = $wpdb->prefix . 'esp_registration';
537
-        $event_table = $wpdb->posts;
538
-        $sql_date = date('Y-m-d H:i:s', strtotime($period));
539
-        // prepare the query interval for displaying offset
540
-        $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'dates.REG_date');
541
-        // inner date query
542
-        $inner_date_query = "SELECT DISTINCT REG_date from {$registration_table} ";
543
-        $inner_where = ' WHERE';
544
-        // exclude events not authored by user if permissions in effect
545
-        if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
546
-            $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID";
547
-            $inner_where .= ' post_author = ' . get_current_user_id() . ' AND';
548
-        }
549
-        $inner_where .= " REG_date >= '{$sql_date}'";
550
-        $inner_date_query .= $inner_where;
551
-        // start main query
552
-        $select = "SELECT DATE({$query_interval}) as Registration_REG_date, ";
553
-        $join = '';
554
-        $join_parts = array();
555
-        $select_parts = array();
556
-        // loop through registration stati to do parts for each status.
557
-        foreach (EEM_Registration::reg_status_array() as $STS_ID => $STS_code) {
558
-            if ($STS_ID === EEM_Registration::status_id_incomplete) {
559
-                continue;
560
-            }
561
-            $select_parts[] = "COUNT({$STS_code}.REG_ID) as {$STS_ID}";
562
-            $join_parts[] = "{$registration_table} AS {$STS_code} ON {$STS_code}.REG_date = dates.REG_date AND {$STS_code}.STS_ID = '{$STS_ID}'";
563
-        }
564
-        // setup the selects
565
-        $select .= implode(', ', $select_parts);
566
-        $select .= " FROM ($inner_date_query) AS dates LEFT JOIN ";
567
-        // setup the joins
568
-        $join .= implode(' LEFT JOIN ', $join_parts);
569
-        // now let's put it all together
570
-        $query = $select . $join . ' GROUP BY Registration_REG_date';
571
-        // and execute it
572
-        return $wpdb->get_results($query, ARRAY_A);
573
-    }
574
-
575
-
576
-    /**
577
-     *        get the number of registrations per event  for the Registration Admin page Reports Tab
578
-     *
579
-     * @access        public
580
-     * @param $period string which can be passed to php's strtotime function (eg "-1 month")
581
-     * @return stdClass[] each with properties event_name, reg_limit, and total
582
-     * @throws EE_Error
583
-     */
584
-    public function get_registrations_per_event_report($period = '-1 month')
585
-    {
586
-        $date_sql = $this->convert_datetime_for_query(
587
-            'REG_date',
588
-            date('Y-m-d H:i:s', strtotime($period)),
589
-            'Y-m-d H:i:s',
590
-            'UTC'
591
-        );
592
-        $where = array(
593
-            'REG_date' => array('>=', $date_sql),
594
-            'STS_ID' => array('!=', EEM_Registration::status_id_incomplete),
595
-        );
596
-        if (!EE_Registry::instance()->CAP->current_user_can(
597
-            'ee_read_others_registrations',
598
-            'reg_per_event_report'
599
-        )
600
-        ) {
601
-            $where['Event.EVT_wp_user'] = get_current_user_id();
602
-        }
603
-        $results = $this->_get_all_wpdb_results(
604
-            array(
605
-            $where,
606
-            'group_by' => 'Event.EVT_name',
607
-            'order_by' => 'Event.EVT_name',
608
-            'limit' => array(0, 24),
609
-            ),
610
-            OBJECT,
611
-            array(
612
-                'event_name' => array('Event_CPT.post_title', '%s'),
613
-                'total' => array('COUNT(REG_ID)', '%s'),
614
-            )
615
-        );
616
-        return $results;
617
-    }
618
-
619
-
620
-    /**
621
-     * Get the number of registrations per event grouped by registration status.
622
-     * Note: EEM_Registration::status_id_incomplete registrations are excluded from the results.
623
-     *
624
-     * @param string $period
625
-     * @return stdClass[] with properties `Registration_Event` and a column for each registration status as the STS_ID
626
-     * @throws EE_Error
627
-     *                    (i.e. RAP)
628
-     */
629
-    public function get_registrations_per_event_and_per_status_report($period = '-1 month')
630
-    {
631
-        global $wpdb;
632
-        $registration_table = $wpdb->prefix . 'esp_registration';
633
-        $event_table = $wpdb->posts;
634
-        $sql_date = date('Y-m-d H:i:s', strtotime($period));
635
-        // inner date query
636
-        $inner_date_query = "SELECT DISTINCT EVT_ID, REG_date from $registration_table ";
637
-        $inner_where = ' WHERE';
638
-        // exclude events not authored by user if permissions in effect
639
-        if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
640
-            $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID";
641
-            $inner_where .= ' post_author = ' . get_current_user_id() . ' AND';
642
-        }
643
-        $inner_where .= " REG_date >= '{$sql_date}'";
644
-        $inner_date_query .= $inner_where;
645
-        // build main query
646
-        $select = 'SELECT Event.post_title as Registration_Event, ';
647
-        $join = '';
648
-        $join_parts = array();
649
-        $select_parts = array();
650
-        // loop through registration stati to do parts for each status.
651
-        foreach (EEM_Registration::reg_status_array() as $STS_ID => $STS_code) {
652
-            if ($STS_ID === EEM_Registration::status_id_incomplete) {
653
-                continue;
654
-            }
655
-            $select_parts[] = "COUNT({$STS_code}.REG_ID) as {$STS_ID}";
656
-            $join_parts[] = "{$registration_table} AS {$STS_code} ON {$STS_code}.EVT_ID = dates.EVT_ID AND {$STS_code}.STS_ID = '{$STS_ID}' AND {$STS_code}.REG_date = dates.REG_date";
657
-        }
658
-        // setup the selects
659
-        $select .= implode(', ', $select_parts);
660
-        $select .= " FROM ($inner_date_query) AS dates LEFT JOIN $event_table as Event ON Event.ID = dates.EVT_ID LEFT JOIN ";
661
-        // setup remaining joins
662
-        $join .= implode(' LEFT JOIN ', $join_parts);
663
-        // now put it all together
664
-        $query = $select . $join . ' GROUP BY Registration_Event';
665
-        // and execute
666
-        return $wpdb->get_results($query, ARRAY_A);
667
-    }
668
-
669
-
670
-    /**
671
-     * Returns the EE_Registration of the primary attendee on the transaction id provided
672
-     *
673
-     * @param int $TXN_ID
674
-     * @return EE_Base_Class|EE_Registration|null
675
-     * @throws EE_Error
676
-     */
677
-    public function get_primary_registration_for_transaction_ID($TXN_ID = 0)
678
-    {
679
-        if (!$TXN_ID) {
680
-            return null;
681
-        }
682
-        return $this->get_one(array(
683
-            array(
684
-                'TXN_ID' => $TXN_ID,
685
-                'REG_count' => EEM_Registration::PRIMARY_REGISTRANT_COUNT,
686
-            ),
687
-        ));
688
-    }
689
-
690
-
691
-    /**
692
-     *        get_event_registration_count
693
-     *
694
-     * @access public
695
-     * @param int $EVT_ID
696
-     * @param boolean $for_incomplete_payments
697
-     * @return int
698
-     * @throws EE_Error
699
-     */
700
-    public function get_event_registration_count($EVT_ID, $for_incomplete_payments = false)
701
-    {
702
-        // we only count approved registrations towards registration limits
703
-        $query_params = array(array('EVT_ID' => $EVT_ID, 'STS_ID' => self::status_id_approved));
704
-        if ($for_incomplete_payments) {
705
-            $query_params[0]['Transaction.STS_ID'] = array('!=', EEM_Transaction::complete_status_code);
706
-        }
707
-        return $this->count($query_params);
708
-    }
709
-
710
-
711
-    /**
712
-     * Deletes all registrations with no transactions. Note that this needs to be very efficient
713
-     * and so it uses wpdb directly
714
-     *
715
-     * @global WPDB $wpdb
716
-     * @return int number deleted
717
-     * @throws EE_Error
718
-     */
719
-    public function delete_registrations_with_no_transaction()
720
-    {
721
-        /** @type WPDB $wpdb */
722
-        global $wpdb;
723
-        return $wpdb->query(
724
-            'DELETE r FROM '
725
-            . $this->table()
726
-            . ' r LEFT JOIN '
727
-            . EEM_Transaction::instance()->table()
728
-            . ' t ON r.TXN_ID = t.TXN_ID WHERE t.TXN_ID IS NULL'
729
-        );
730
-    }
731
-
732
-
733
-    /**
734
-     *  Count registrations checked into (or out of) a datetime
735
-     *
736
-     * @param int $DTT_ID datetime ID
737
-     * @param boolean $checked_in whether to count registrations checked IN or OUT
738
-     * @return int
739
-     * @throws EE_Error
740
-     */
741
-    public function count_registrations_checked_into_datetime($DTT_ID, $checked_in = true)
742
-    {
743
-        global $wpdb;
744
-        // subquery to get latest checkin
745
-        $query = $wpdb->prepare(
746
-            'SELECT '
747
-            . 'COUNT( DISTINCT checkins.REG_ID ) '
748
-            . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN'
749
-            . '( SELECT '
750
-            . 'max( CHK_timestamp ) AS latest_checkin, '
751
-            . 'REG_ID AS REG_ID '
752
-            . 'FROM ' . EEM_Checkin::instance()->table() . ' '
753
-            . 'WHERE DTT_ID=%d '
754
-            . 'GROUP BY REG_ID'
755
-            . ') AS most_recent_checkin_per_reg '
756
-            . 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID '
757
-            . 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin '
758
-            . 'WHERE '
759
-            . 'checkins.CHK_in=%d',
760
-            $DTT_ID,
761
-            $checked_in
762
-        );
763
-        return (int) $wpdb->get_var($query);
764
-    }
765
-
766
-
767
-    /**
768
-     *  Count registrations checked into (or out of) an event.
769
-     *
770
-     * @param int $EVT_ID event ID
771
-     * @param boolean $checked_in whether to count registrations checked IN or OUT
772
-     * @return int
773
-     * @throws EE_Error
774
-     */
775
-    public function count_registrations_checked_into_event($EVT_ID, $checked_in = true)
776
-    {
777
-        global $wpdb;
778
-        // subquery to get latest checkin
779
-        $query = $wpdb->prepare(
780
-            'SELECT '
781
-            . 'COUNT( DISTINCT checkins.REG_ID ) '
782
-            . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN'
783
-            . '( SELECT '
784
-            . 'max( CHK_timestamp ) AS latest_checkin, '
785
-            . 'REG_ID AS REG_ID '
786
-            . 'FROM ' . EEM_Checkin::instance()->table() . ' AS c '
787
-            . 'INNER JOIN ' . EEM_Datetime::instance()->table() . ' AS d '
788
-            . 'ON c.DTT_ID=d.DTT_ID '
789
-            . 'WHERE d.EVT_ID=%d '
790
-            . 'GROUP BY REG_ID'
791
-            . ') AS most_recent_checkin_per_reg '
792
-            . 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID '
793
-            . 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin '
794
-            . 'WHERE '
795
-            . 'checkins.CHK_in=%d',
796
-            $EVT_ID,
797
-            $checked_in
798
-        );
799
-        return (int) $wpdb->get_var($query);
800
-    }
801
-
802
-
803
-    /**
804
-     * The purpose of this method is to retrieve an array of
805
-     * EE_Registration objects that represent the latest registration
806
-     * for each ATT_ID given in the function argument.
807
-     *
808
-     * @param array $attendee_ids
809
-     * @return EE_Base_Class[]|EE_Registration[]
810
-     * @throws EE_Error
811
-     */
812
-    public function get_latest_registration_for_each_of_given_contacts($attendee_ids = array())
813
-    {
814
-        // first do a native wp_query to get the latest REG_ID's matching these attendees.
815
-        global $wpdb;
816
-        $registration_table = $wpdb->prefix . 'esp_registration';
817
-        $attendee_table = $wpdb->posts;
818
-        $attendee_ids = is_array($attendee_ids)
819
-            ? array_map('absint', $attendee_ids)
820
-            : array((int) $attendee_ids);
821
-        $ATT_IDs = implode(',', $attendee_ids);
822
-        // first we do a query to get the registration ids
823
-        // (because a group by before order by causes the order by to be ignored.)
824
-        $registration_id_query = "
16
+	/**
17
+	 * @var EEM_Registration $_instance
18
+	 */
19
+	protected static $_instance;
20
+
21
+	/**
22
+	 * Keys are the status IDs for registrations (eg, RAP, RCN, etc), and the values
23
+	 * are status codes (eg, approved, cancelled, etc)
24
+	 *
25
+	 * @var array
26
+	 */
27
+	private static $_reg_status;
28
+
29
+	/**
30
+	 * The value of REG_count for a primary registrant
31
+	 */
32
+	const PRIMARY_REGISTRANT_COUNT = 1;
33
+
34
+	/**
35
+	 * Status ID (STS_ID on esp_status table) to indicate an INCOMPLETE registration.
36
+	 * Initial status for registrations when they are first created
37
+	 * Payments are NOT allowed.
38
+	 * Automatically toggled to whatever the default Event registration status is upon completion of the attendee
39
+	 * information reg step NO space reserved. Registration is NOT active
40
+	 */
41
+	const status_id_incomplete = 'RIC';
42
+
43
+	/**
44
+	 * Status ID (STS_ID on esp_status table) to indicate an UNAPPROVED registration.
45
+	 * Payments are NOT allowed.
46
+	 * Event Admin must manually toggle STS_ID for it to change
47
+	 * No space reserved.
48
+	 * Registration is active
49
+	 */
50
+	const status_id_not_approved = 'RNA';
51
+
52
+	/**
53
+	 * Status ID (STS_ID on esp_status table) to indicate registration is PENDING_PAYMENT .
54
+	 * Payments are allowed.
55
+	 * STS_ID will automatically be toggled to RAP if payment is made in full by the attendee
56
+	 * No space reserved.
57
+	 * Registration is active
58
+	 */
59
+	const status_id_pending_payment = 'RPP';
60
+
61
+	/**
62
+	 * Status ID (STS_ID on esp_status table) to indicate registration is on the WAIT_LIST .
63
+	 * Payments are allowed.
64
+	 * STS_ID will automatically be toggled to RAP if payment is made in full by the attendee
65
+	 * No space reserved.
66
+	 * Registration is active
67
+	 */
68
+	const status_id_wait_list = 'RWL';
69
+
70
+	/**
71
+	 * Status ID (STS_ID on esp_status table) to indicate an APPROVED registration.
72
+	 * the TXN may or may not be completed ( paid in full )
73
+	 * Payments are allowed.
74
+	 * A space IS reserved.
75
+	 * Registration is active
76
+	 */
77
+	const status_id_approved = 'RAP';
78
+
79
+	/**
80
+	 * Status ID (STS_ID on esp_status table) to indicate a registration was CANCELLED by the attendee.
81
+	 * Payments are NOT allowed.
82
+	 * NO space reserved.
83
+	 * Registration is NOT active
84
+	 */
85
+	const status_id_cancelled = 'RCN';
86
+
87
+	/**
88
+	 * Status ID (STS_ID on esp_status table) to indicate a registration was DECLINED by the Event Admin
89
+	 * Payments are NOT allowed.
90
+	 * No space reserved.
91
+	 * Registration is NOT active
92
+	 */
93
+	const status_id_declined = 'RDC';
94
+
95
+	/**
96
+	 * @var TableAnalysis $table_analysis
97
+	 */
98
+	protected $_table_analysis;
99
+
100
+
101
+	/**
102
+	 *    private constructor to prevent direct creation
103
+	 *
104
+	 * @Constructor
105
+	 * @access protected
106
+	 * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any
107
+	 *                         incoming timezone data that gets saved). Note this just sends the timezone info to the
108
+	 *                         date time model field objects.  Default is NULL (and will be assumed using the set
109
+	 *                         timezone in the 'timezone_string' wp option)
110
+	 * @throws EE_Error
111
+	 */
112
+	protected function __construct($timezone = null)
113
+	{
114
+		$this->_table_analysis = EE_Registry::instance()->create('TableAnalysis', array(), true);
115
+		$this->singular_item = esc_html__('Registration', 'event_espresso');
116
+		$this->plural_item = esc_html__('Registrations', 'event_espresso');
117
+		$this->_tables = array(
118
+			'Registration' => new EE_Primary_Table('esp_registration', 'REG_ID'),
119
+		);
120
+		$this->_fields = array(
121
+			'Registration' => array(
122
+				'REG_ID' => new EE_Primary_Key_Int_Field(
123
+					'REG_ID',
124
+					esc_html__('Registration ID', 'event_espresso')
125
+				),
126
+				'EVT_ID' => new EE_Foreign_Key_Int_Field(
127
+					'EVT_ID',
128
+					esc_html__('Event ID', 'event_espresso'),
129
+					false,
130
+					0,
131
+					'Event'
132
+				),
133
+				'ATT_ID' => new EE_Foreign_Key_Int_Field(
134
+					'ATT_ID',
135
+					esc_html__('Attendee ID', 'event_espresso'),
136
+					false,
137
+					0,
138
+					'Attendee'
139
+				),
140
+				'TXN_ID' => new EE_Foreign_Key_Int_Field(
141
+					'TXN_ID',
142
+					esc_html__('Transaction ID', 'event_espresso'),
143
+					false,
144
+					0,
145
+					'Transaction'
146
+				),
147
+				'TKT_ID' => new EE_Foreign_Key_Int_Field(
148
+					'TKT_ID',
149
+					esc_html__('Ticket ID', 'event_espresso'),
150
+					false,
151
+					0,
152
+					'Ticket'
153
+				),
154
+				'STS_ID' => new EE_Foreign_Key_String_Field(
155
+					'STS_ID',
156
+					esc_html__('Status ID', 'event_espresso'),
157
+					false,
158
+					EEM_Registration::status_id_incomplete,
159
+					'Status'
160
+				),
161
+				'REG_date' => new EE_Datetime_Field(
162
+					'REG_date',
163
+					esc_html__('Time registration occurred', 'event_espresso'),
164
+					false,
165
+					EE_Datetime_Field::now,
166
+					$timezone
167
+				),
168
+				'REG_final_price' => new EE_Money_Field(
169
+					'REG_final_price',
170
+					esc_html__('Registration\'s share of the transaction total', 'event_espresso'),
171
+					false,
172
+					0
173
+				),
174
+				'REG_paid' => new EE_Money_Field(
175
+					'REG_paid',
176
+					esc_html__('Amount paid to date towards registration', 'event_espresso'),
177
+					false,
178
+					0
179
+				),
180
+				'REG_session' => new EE_Plain_Text_Field(
181
+					'REG_session',
182
+					esc_html__('Session ID of registration', 'event_espresso'),
183
+					false,
184
+					''
185
+				),
186
+				'REG_code' => new EE_Plain_Text_Field(
187
+					'REG_code',
188
+					esc_html__('Unique Code for this registration', 'event_espresso'),
189
+					false,
190
+					''
191
+				),
192
+				'REG_url_link' => new EE_Plain_Text_Field(
193
+					'REG_url_link',
194
+					esc_html__('String to be used in URL for identifying registration', 'event_espresso'),
195
+					false,
196
+					''
197
+				),
198
+				'REG_count' => new EE_Integer_Field(
199
+					'REG_count',
200
+					esc_html__('Count of this registration in the group registration ', 'event_espresso'),
201
+					true,
202
+					1
203
+				),
204
+				'REG_group_size' => new EE_Integer_Field(
205
+					'REG_group_size',
206
+					esc_html__('Number of registrations on this group', 'event_espresso'),
207
+					false,
208
+					1
209
+				),
210
+				'REG_att_is_going' => new EE_Boolean_Field(
211
+					'REG_att_is_going',
212
+					esc_html__('Flag indicating the registrant plans on attending', 'event_espresso'),
213
+					false,
214
+					false
215
+				),
216
+				'REG_deleted' => new EE_Trashed_Flag_Field(
217
+					'REG_deleted',
218
+					esc_html__('Flag indicating if registration has been archived or not.', 'event_espresso'),
219
+					false,
220
+					false
221
+				),
222
+			),
223
+		);
224
+		$this->_model_relations = array(
225
+			'Event' => new EE_Belongs_To_Relation(),
226
+			'Attendee' => new EE_Belongs_To_Relation(),
227
+			'Transaction' => new EE_Belongs_To_Relation(),
228
+			'Ticket' => new EE_Belongs_To_Relation(),
229
+			'Status' => new EE_Belongs_To_Relation(),
230
+			'Answer' => new EE_Has_Many_Relation(),
231
+			'Checkin' => new EE_Has_Many_Relation(),
232
+			'Registration_Payment' => new EE_Has_Many_Relation(),
233
+			'Payment' => new EE_HABTM_Relation('Registration_Payment'),
234
+			'Message' => new EE_Has_Many_Any_Relation(false)
235
+			// allow deletes even if there are messages in the queue related
236
+		);
237
+		$this->_model_chain_to_wp_user = 'Event';
238
+		parent::__construct($timezone);
239
+	}
240
+
241
+
242
+	/**
243
+	 * a list of ALL valid registration statuses currently in use within the system
244
+	 * generated by combining the filterable active and inactive reg status arrays
245
+	 *
246
+	 * @return array
247
+	 */
248
+	public static function reg_statuses()
249
+	{
250
+		return array_unique(
251
+			array_merge(
252
+				EEM_Registration::active_reg_statuses(),
253
+				EEM_Registration::inactive_reg_statuses()
254
+			)
255
+		);
256
+	}
257
+
258
+
259
+	/**
260
+	 * reg_statuses_that_allow_payment
261
+	 * a filterable list of registration statuses that allow a registrant to make a payment
262
+	 *
263
+	 * @access public
264
+	 * @return array
265
+	 */
266
+	public static function reg_statuses_that_allow_payment()
267
+	{
268
+		return apply_filters(
269
+			'FHEE__EEM_Registration__reg_statuses_that_allow_payment',
270
+			array(
271
+				EEM_Registration::status_id_approved,
272
+				EEM_Registration::status_id_pending_payment,
273
+			)
274
+		);
275
+	}
276
+
277
+
278
+	/**
279
+	 * active_reg_statuses
280
+	 * a filterable list of registration statuses that are considered active
281
+	 *
282
+	 * @access public
283
+	 * @return array
284
+	 */
285
+	public static function active_reg_statuses()
286
+	{
287
+		return apply_filters(
288
+			'FHEE__EEM_Registration__active_reg_statuses',
289
+			array(
290
+				EEM_Registration::status_id_approved,
291
+				EEM_Registration::status_id_pending_payment,
292
+				EEM_Registration::status_id_wait_list,
293
+				EEM_Registration::status_id_not_approved,
294
+			)
295
+		);
296
+	}
297
+
298
+
299
+	/**
300
+	 * inactive_reg_statuses
301
+	 * a filterable list of registration statuses that are not considered active
302
+	 *
303
+	 * @access public
304
+	 * @return array
305
+	 */
306
+	public static function inactive_reg_statuses()
307
+	{
308
+		return apply_filters(
309
+			'FHEE__EEM_Registration__inactive_reg_statuses',
310
+			array(
311
+				EEM_Registration::status_id_incomplete,
312
+				EEM_Registration::status_id_cancelled,
313
+				EEM_Registration::status_id_declined,
314
+			)
315
+		);
316
+	}
317
+
318
+
319
+	/**
320
+	 *    closed_reg_statuses
321
+	 *    a filterable list of registration statuses that are considered "closed"
322
+	 * meaning they should not be considered in any calculations involving monies owing
323
+	 *
324
+	 * @access public
325
+	 * @return array
326
+	 */
327
+	public static function closed_reg_statuses()
328
+	{
329
+		return apply_filters(
330
+			'FHEE__EEM_Registration__closed_reg_statuses',
331
+			array(
332
+				EEM_Registration::status_id_cancelled,
333
+				EEM_Registration::status_id_declined,
334
+				EEM_Registration::status_id_wait_list,
335
+			)
336
+		);
337
+	}
338
+
339
+
340
+	/**
341
+	 *        get list of registration statuses
342
+	 *
343
+	 * @access public
344
+	 * @param array $exclude The status ids to exclude from the returned results
345
+	 * @param bool $translated If true will return the values as singular localized strings
346
+	 * @return array
347
+	 * @throws EE_Error
348
+	 */
349
+	public static function reg_status_array($exclude = array(), $translated = false)
350
+	{
351
+		EEM_Registration::instance()->_get_registration_status_array($exclude);
352
+		return $translated
353
+			? EEM_Status::instance()->localized_status(self::$_reg_status, false, 'sentence')
354
+			: self::$_reg_status;
355
+	}
356
+
357
+
358
+	/**
359
+	 *    get list of registration statuses
360
+	 *
361
+	 * @access private
362
+	 * @param array $exclude
363
+	 * @return void
364
+	 * @throws EE_Error
365
+	 */
366
+	private function _get_registration_status_array($exclude = array())
367
+	{
368
+		// in the very rare circumstance that we are deleting a model's table's data
369
+		// and the table hasn't actually been created, this could have an error
370
+		/** @type WPDB $wpdb */
371
+		global $wpdb;
372
+		if ($this->_get_table_analysis()->tableExists($wpdb->prefix . 'esp_status')) {
373
+			$results = $wpdb->get_results(
374
+				"SELECT STS_ID, STS_code FROM {$wpdb->prefix}esp_status WHERE STS_type = 'registration'"
375
+			);
376
+			self::$_reg_status = array();
377
+			foreach ($results as $status) {
378
+				if (!in_array($status->STS_ID, $exclude, true)) {
379
+					self::$_reg_status[ $status->STS_ID ] = $status->STS_code;
380
+				}
381
+			}
382
+		}
383
+	}
384
+
385
+
386
+	/**
387
+	 * Gets the injected table analyzer, or throws an exception
388
+	 *
389
+	 * @return TableAnalysis
390
+	 * @throws EE_Error
391
+	 */
392
+	protected function _get_table_analysis()
393
+	{
394
+		if ($this->_table_analysis instanceof TableAnalysis) {
395
+			return $this->_table_analysis;
396
+		}
397
+		throw new EE_Error(
398
+			sprintf(
399
+				esc_html__('Table analysis class on class %1$s is not set properly.', 'event_espresso'),
400
+				get_class($this)
401
+			)
402
+		);
403
+	}
404
+
405
+
406
+	/**
407
+	 * This returns a wpdb->results array of all registration date month and years matching the incoming query params
408
+	 * and grouped by month and year.
409
+	 *
410
+	 * @param  array $where_params Array of query_params as described in the comments for EEM_Base::get_all()
411
+	 * @return array
412
+	 * @throws EE_Error
413
+	 */
414
+	public function get_reg_months_and_years($where_params)
415
+	{
416
+		$query_params[0] = $where_params;
417
+		$query_params['group_by'] = array('reg_year', 'reg_month');
418
+		$query_params['order_by'] = array('REG_date' => 'DESC');
419
+		$columns_to_select = array(
420
+			'reg_year' => array('YEAR(REG_date)', '%s'),
421
+			'reg_month' => array('MONTHNAME(REG_date)', '%s'),
422
+		);
423
+		return $this->_get_all_wpdb_results($query_params, OBJECT, $columns_to_select);
424
+	}
425
+
426
+
427
+	/**
428
+	 * retrieve ALL registrations for a particular Attendee from db
429
+	 *
430
+	 * @param int $ATT_ID
431
+	 * @return EE_Base_Class[]|EE_Registration[]|null
432
+	 * @throws EE_Error
433
+	 */
434
+	public function get_all_registrations_for_attendee($ATT_ID = 0)
435
+	{
436
+		if (!$ATT_ID) {
437
+			return null;
438
+		}
439
+		return $this->get_all(array(array('ATT_ID' => $ATT_ID)));
440
+	}
441
+
442
+
443
+	/**
444
+	 * Gets a registration given their REG_url_link. Yes, this should usually
445
+	 * be passed via a GET parameter.
446
+	 *
447
+	 * @param string $REG_url_link
448
+	 * @return EE_Base_Class|EE_Registration|null
449
+	 * @throws EE_Error
450
+	 */
451
+	public function get_registration_for_reg_url_link($REG_url_link)
452
+	{
453
+		if (!$REG_url_link) {
454
+			return null;
455
+		}
456
+		return $this->get_one(array(array('REG_url_link' => $REG_url_link)));
457
+	}
458
+
459
+
460
+	/**
461
+	 *        retrieve registration for a specific transaction attendee from db
462
+	 *
463
+	 * @access        public
464
+	 * @param    int $TXN_ID
465
+	 * @param    int $ATT_ID
466
+	 * @param    int $att_nmbr in case the ATT_ID is the same for multiple registrations (same details used) then the
467
+	 *                         attendee number is required
468
+	 * @return        mixed        array on success, FALSE on fail
469
+	 * @throws EE_Error
470
+	 */
471
+	public function get_registration_for_transaction_attendee($TXN_ID = 0, $ATT_ID = 0, $att_nmbr = 0)
472
+	{
473
+		return $this->get_one(array(
474
+			array(
475
+				'TXN_ID' => $TXN_ID,
476
+				'ATT_ID' => $ATT_ID,
477
+			),
478
+			'limit' => array(min($att_nmbr - 1, 0), 1),
479
+		));
480
+	}
481
+
482
+
483
+	/**
484
+	 *        get the number of registrations per day  for the Registration Admin page Reports Tab.
485
+	 *        (doesn't utilize models because it's a fairly specialized query)
486
+	 *
487
+	 * @access        public
488
+	 * @param $period string which can be passed to php's strtotime function (eg "-1 month")
489
+	 * @return stdClass[] with properties regDate and total
490
+	 * @throws EE_Error
491
+	 */
492
+	public function get_registrations_per_day_report($period = '-1 month')
493
+	{
494
+		$sql_date = $this->convert_datetime_for_query(
495
+			'REG_date',
496
+			date('Y-m-d H:i:s', strtotime($period)),
497
+			'Y-m-d H:i:s',
498
+			'UTC'
499
+		);
500
+		$where = array(
501
+			'REG_date' => array('>=', $sql_date),
502
+			'STS_ID' => array('!=', EEM_Registration::status_id_incomplete),
503
+		);
504
+		if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_day_report')) {
505
+			$where['Event.EVT_wp_user'] = get_current_user_id();
506
+		}
507
+		$query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'REG_date');
508
+		$results = $this->_get_all_wpdb_results(
509
+			array(
510
+				$where,
511
+				'group_by' => 'regDate',
512
+				'order_by' => array('REG_date' => 'ASC'),
513
+			),
514
+			OBJECT,
515
+			array(
516
+				'regDate' => array('DATE(' . $query_interval . ')', '%s'),
517
+				'total' => array('count(REG_ID)', '%d'),
518
+			)
519
+		);
520
+		return $results;
521
+	}
522
+
523
+
524
+	/**
525
+	 * Get the number of registrations per day including the count of registrations for each Registration Status.
526
+	 * Note: EEM_Registration::status_id_incomplete registrations are excluded from the results.
527
+	 *
528
+	 * @param string $period
529
+	 * @return stdClass[] with properties Registration_REG_date and a column for each registration status as the STS_ID
530
+	 * @throws EE_Error
531
+	 *                    (i.e. RAP)
532
+	 */
533
+	public function get_registrations_per_day_and_per_status_report($period = '-1 month')
534
+	{
535
+		global $wpdb;
536
+		$registration_table = $wpdb->prefix . 'esp_registration';
537
+		$event_table = $wpdb->posts;
538
+		$sql_date = date('Y-m-d H:i:s', strtotime($period));
539
+		// prepare the query interval for displaying offset
540
+		$query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'dates.REG_date');
541
+		// inner date query
542
+		$inner_date_query = "SELECT DISTINCT REG_date from {$registration_table} ";
543
+		$inner_where = ' WHERE';
544
+		// exclude events not authored by user if permissions in effect
545
+		if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
546
+			$inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID";
547
+			$inner_where .= ' post_author = ' . get_current_user_id() . ' AND';
548
+		}
549
+		$inner_where .= " REG_date >= '{$sql_date}'";
550
+		$inner_date_query .= $inner_where;
551
+		// start main query
552
+		$select = "SELECT DATE({$query_interval}) as Registration_REG_date, ";
553
+		$join = '';
554
+		$join_parts = array();
555
+		$select_parts = array();
556
+		// loop through registration stati to do parts for each status.
557
+		foreach (EEM_Registration::reg_status_array() as $STS_ID => $STS_code) {
558
+			if ($STS_ID === EEM_Registration::status_id_incomplete) {
559
+				continue;
560
+			}
561
+			$select_parts[] = "COUNT({$STS_code}.REG_ID) as {$STS_ID}";
562
+			$join_parts[] = "{$registration_table} AS {$STS_code} ON {$STS_code}.REG_date = dates.REG_date AND {$STS_code}.STS_ID = '{$STS_ID}'";
563
+		}
564
+		// setup the selects
565
+		$select .= implode(', ', $select_parts);
566
+		$select .= " FROM ($inner_date_query) AS dates LEFT JOIN ";
567
+		// setup the joins
568
+		$join .= implode(' LEFT JOIN ', $join_parts);
569
+		// now let's put it all together
570
+		$query = $select . $join . ' GROUP BY Registration_REG_date';
571
+		// and execute it
572
+		return $wpdb->get_results($query, ARRAY_A);
573
+	}
574
+
575
+
576
+	/**
577
+	 *        get the number of registrations per event  for the Registration Admin page Reports Tab
578
+	 *
579
+	 * @access        public
580
+	 * @param $period string which can be passed to php's strtotime function (eg "-1 month")
581
+	 * @return stdClass[] each with properties event_name, reg_limit, and total
582
+	 * @throws EE_Error
583
+	 */
584
+	public function get_registrations_per_event_report($period = '-1 month')
585
+	{
586
+		$date_sql = $this->convert_datetime_for_query(
587
+			'REG_date',
588
+			date('Y-m-d H:i:s', strtotime($period)),
589
+			'Y-m-d H:i:s',
590
+			'UTC'
591
+		);
592
+		$where = array(
593
+			'REG_date' => array('>=', $date_sql),
594
+			'STS_ID' => array('!=', EEM_Registration::status_id_incomplete),
595
+		);
596
+		if (!EE_Registry::instance()->CAP->current_user_can(
597
+			'ee_read_others_registrations',
598
+			'reg_per_event_report'
599
+		)
600
+		) {
601
+			$where['Event.EVT_wp_user'] = get_current_user_id();
602
+		}
603
+		$results = $this->_get_all_wpdb_results(
604
+			array(
605
+			$where,
606
+			'group_by' => 'Event.EVT_name',
607
+			'order_by' => 'Event.EVT_name',
608
+			'limit' => array(0, 24),
609
+			),
610
+			OBJECT,
611
+			array(
612
+				'event_name' => array('Event_CPT.post_title', '%s'),
613
+				'total' => array('COUNT(REG_ID)', '%s'),
614
+			)
615
+		);
616
+		return $results;
617
+	}
618
+
619
+
620
+	/**
621
+	 * Get the number of registrations per event grouped by registration status.
622
+	 * Note: EEM_Registration::status_id_incomplete registrations are excluded from the results.
623
+	 *
624
+	 * @param string $period
625
+	 * @return stdClass[] with properties `Registration_Event` and a column for each registration status as the STS_ID
626
+	 * @throws EE_Error
627
+	 *                    (i.e. RAP)
628
+	 */
629
+	public function get_registrations_per_event_and_per_status_report($period = '-1 month')
630
+	{
631
+		global $wpdb;
632
+		$registration_table = $wpdb->prefix . 'esp_registration';
633
+		$event_table = $wpdb->posts;
634
+		$sql_date = date('Y-m-d H:i:s', strtotime($period));
635
+		// inner date query
636
+		$inner_date_query = "SELECT DISTINCT EVT_ID, REG_date from $registration_table ";
637
+		$inner_where = ' WHERE';
638
+		// exclude events not authored by user if permissions in effect
639
+		if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
640
+			$inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID";
641
+			$inner_where .= ' post_author = ' . get_current_user_id() . ' AND';
642
+		}
643
+		$inner_where .= " REG_date >= '{$sql_date}'";
644
+		$inner_date_query .= $inner_where;
645
+		// build main query
646
+		$select = 'SELECT Event.post_title as Registration_Event, ';
647
+		$join = '';
648
+		$join_parts = array();
649
+		$select_parts = array();
650
+		// loop through registration stati to do parts for each status.
651
+		foreach (EEM_Registration::reg_status_array() as $STS_ID => $STS_code) {
652
+			if ($STS_ID === EEM_Registration::status_id_incomplete) {
653
+				continue;
654
+			}
655
+			$select_parts[] = "COUNT({$STS_code}.REG_ID) as {$STS_ID}";
656
+			$join_parts[] = "{$registration_table} AS {$STS_code} ON {$STS_code}.EVT_ID = dates.EVT_ID AND {$STS_code}.STS_ID = '{$STS_ID}' AND {$STS_code}.REG_date = dates.REG_date";
657
+		}
658
+		// setup the selects
659
+		$select .= implode(', ', $select_parts);
660
+		$select .= " FROM ($inner_date_query) AS dates LEFT JOIN $event_table as Event ON Event.ID = dates.EVT_ID LEFT JOIN ";
661
+		// setup remaining joins
662
+		$join .= implode(' LEFT JOIN ', $join_parts);
663
+		// now put it all together
664
+		$query = $select . $join . ' GROUP BY Registration_Event';
665
+		// and execute
666
+		return $wpdb->get_results($query, ARRAY_A);
667
+	}
668
+
669
+
670
+	/**
671
+	 * Returns the EE_Registration of the primary attendee on the transaction id provided
672
+	 *
673
+	 * @param int $TXN_ID
674
+	 * @return EE_Base_Class|EE_Registration|null
675
+	 * @throws EE_Error
676
+	 */
677
+	public function get_primary_registration_for_transaction_ID($TXN_ID = 0)
678
+	{
679
+		if (!$TXN_ID) {
680
+			return null;
681
+		}
682
+		return $this->get_one(array(
683
+			array(
684
+				'TXN_ID' => $TXN_ID,
685
+				'REG_count' => EEM_Registration::PRIMARY_REGISTRANT_COUNT,
686
+			),
687
+		));
688
+	}
689
+
690
+
691
+	/**
692
+	 *        get_event_registration_count
693
+	 *
694
+	 * @access public
695
+	 * @param int $EVT_ID
696
+	 * @param boolean $for_incomplete_payments
697
+	 * @return int
698
+	 * @throws EE_Error
699
+	 */
700
+	public function get_event_registration_count($EVT_ID, $for_incomplete_payments = false)
701
+	{
702
+		// we only count approved registrations towards registration limits
703
+		$query_params = array(array('EVT_ID' => $EVT_ID, 'STS_ID' => self::status_id_approved));
704
+		if ($for_incomplete_payments) {
705
+			$query_params[0]['Transaction.STS_ID'] = array('!=', EEM_Transaction::complete_status_code);
706
+		}
707
+		return $this->count($query_params);
708
+	}
709
+
710
+
711
+	/**
712
+	 * Deletes all registrations with no transactions. Note that this needs to be very efficient
713
+	 * and so it uses wpdb directly
714
+	 *
715
+	 * @global WPDB $wpdb
716
+	 * @return int number deleted
717
+	 * @throws EE_Error
718
+	 */
719
+	public function delete_registrations_with_no_transaction()
720
+	{
721
+		/** @type WPDB $wpdb */
722
+		global $wpdb;
723
+		return $wpdb->query(
724
+			'DELETE r FROM '
725
+			. $this->table()
726
+			. ' r LEFT JOIN '
727
+			. EEM_Transaction::instance()->table()
728
+			. ' t ON r.TXN_ID = t.TXN_ID WHERE t.TXN_ID IS NULL'
729
+		);
730
+	}
731
+
732
+
733
+	/**
734
+	 *  Count registrations checked into (or out of) a datetime
735
+	 *
736
+	 * @param int $DTT_ID datetime ID
737
+	 * @param boolean $checked_in whether to count registrations checked IN or OUT
738
+	 * @return int
739
+	 * @throws EE_Error
740
+	 */
741
+	public function count_registrations_checked_into_datetime($DTT_ID, $checked_in = true)
742
+	{
743
+		global $wpdb;
744
+		// subquery to get latest checkin
745
+		$query = $wpdb->prepare(
746
+			'SELECT '
747
+			. 'COUNT( DISTINCT checkins.REG_ID ) '
748
+			. 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN'
749
+			. '( SELECT '
750
+			. 'max( CHK_timestamp ) AS latest_checkin, '
751
+			. 'REG_ID AS REG_ID '
752
+			. 'FROM ' . EEM_Checkin::instance()->table() . ' '
753
+			. 'WHERE DTT_ID=%d '
754
+			. 'GROUP BY REG_ID'
755
+			. ') AS most_recent_checkin_per_reg '
756
+			. 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID '
757
+			. 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin '
758
+			. 'WHERE '
759
+			. 'checkins.CHK_in=%d',
760
+			$DTT_ID,
761
+			$checked_in
762
+		);
763
+		return (int) $wpdb->get_var($query);
764
+	}
765
+
766
+
767
+	/**
768
+	 *  Count registrations checked into (or out of) an event.
769
+	 *
770
+	 * @param int $EVT_ID event ID
771
+	 * @param boolean $checked_in whether to count registrations checked IN or OUT
772
+	 * @return int
773
+	 * @throws EE_Error
774
+	 */
775
+	public function count_registrations_checked_into_event($EVT_ID, $checked_in = true)
776
+	{
777
+		global $wpdb;
778
+		// subquery to get latest checkin
779
+		$query = $wpdb->prepare(
780
+			'SELECT '
781
+			. 'COUNT( DISTINCT checkins.REG_ID ) '
782
+			. 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN'
783
+			. '( SELECT '
784
+			. 'max( CHK_timestamp ) AS latest_checkin, '
785
+			. 'REG_ID AS REG_ID '
786
+			. 'FROM ' . EEM_Checkin::instance()->table() . ' AS c '
787
+			. 'INNER JOIN ' . EEM_Datetime::instance()->table() . ' AS d '
788
+			. 'ON c.DTT_ID=d.DTT_ID '
789
+			. 'WHERE d.EVT_ID=%d '
790
+			. 'GROUP BY REG_ID'
791
+			. ') AS most_recent_checkin_per_reg '
792
+			. 'ON checkins.REG_ID=most_recent_checkin_per_reg.REG_ID '
793
+			. 'AND checkins.CHK_timestamp = most_recent_checkin_per_reg.latest_checkin '
794
+			. 'WHERE '
795
+			. 'checkins.CHK_in=%d',
796
+			$EVT_ID,
797
+			$checked_in
798
+		);
799
+		return (int) $wpdb->get_var($query);
800
+	}
801
+
802
+
803
+	/**
804
+	 * The purpose of this method is to retrieve an array of
805
+	 * EE_Registration objects that represent the latest registration
806
+	 * for each ATT_ID given in the function argument.
807
+	 *
808
+	 * @param array $attendee_ids
809
+	 * @return EE_Base_Class[]|EE_Registration[]
810
+	 * @throws EE_Error
811
+	 */
812
+	public function get_latest_registration_for_each_of_given_contacts($attendee_ids = array())
813
+	{
814
+		// first do a native wp_query to get the latest REG_ID's matching these attendees.
815
+		global $wpdb;
816
+		$registration_table = $wpdb->prefix . 'esp_registration';
817
+		$attendee_table = $wpdb->posts;
818
+		$attendee_ids = is_array($attendee_ids)
819
+			? array_map('absint', $attendee_ids)
820
+			: array((int) $attendee_ids);
821
+		$ATT_IDs = implode(',', $attendee_ids);
822
+		// first we do a query to get the registration ids
823
+		// (because a group by before order by causes the order by to be ignored.)
824
+		$registration_id_query = "
825 825
 			SELECT registrations.registration_ids as registration_id
826 826
 			FROM (
827 827
 				SELECT
@@ -835,61 +835,61 @@  discard block
 block discarded – undo
835 835
 			  ) AS registrations
836 836
 			  GROUP BY registrations.attendee_ids
837 837
 		";
838
-        $registration_ids = $wpdb->get_results($registration_id_query, ARRAY_A);
839
-        if (empty($registration_ids)) {
840
-            return array();
841
-        }
842
-        $ids_for_model_query = array();
843
-        // let's flatten the ids so they can be used in the model query.
844
-        foreach ($registration_ids as $registration_id) {
845
-            if (isset($registration_id['registration_id'])) {
846
-                $ids_for_model_query[] = $registration_id['registration_id'];
847
-            }
848
-        }
849
-        // construct query
850
-        $_where = array(
851
-            'REG_ID' => array('IN', $ids_for_model_query),
852
-        );
853
-        return $this->get_all(array($_where));
854
-    }
855
-
856
-
857
-
858
-    /**
859
-     * returns a count of registrations for the supplied event having the status as specified
860
-     *
861
-     * @param int $EVT_ID
862
-     * @param array $statuses
863
-     * @return int
864
-     * @throws InvalidArgumentException
865
-     * @throws InvalidStatusException
866
-     * @throws EE_Error
867
-     */
868
-    public function event_reg_count_for_statuses($EVT_ID, $statuses = array())
869
-    {
870
-        $EVT_ID = absint($EVT_ID);
871
-        if (! $EVT_ID) {
872
-            throw new InvalidArgumentException(
873
-                esc_html__('An invalid Event ID was supplied.', 'event_espresso')
874
-            );
875
-        }
876
-        $statuses = is_array($statuses) ? $statuses : array($statuses);
877
-        $statuses = ! empty($statuses) ? $statuses : array(EEM_Registration::status_id_approved);
878
-        $valid_reg_statuses = EEM_Registration::reg_statuses();
879
-        foreach ($statuses as $status) {
880
-            if (! in_array($status, $valid_reg_statuses, true)) {
881
-                throw new InvalidStatusException($status, esc_html__('Registration', 'event_espresso'));
882
-            }
883
-        }
884
-        return $this->count(
885
-            array(
886
-                array(
887
-                    'EVT_ID' => $EVT_ID,
888
-                    'STS_ID' => array('IN', $statuses),
889
-                ),
890
-            ),
891
-            'REG_ID',
892
-            true
893
-        );
894
-    }
838
+		$registration_ids = $wpdb->get_results($registration_id_query, ARRAY_A);
839
+		if (empty($registration_ids)) {
840
+			return array();
841
+		}
842
+		$ids_for_model_query = array();
843
+		// let's flatten the ids so they can be used in the model query.
844
+		foreach ($registration_ids as $registration_id) {
845
+			if (isset($registration_id['registration_id'])) {
846
+				$ids_for_model_query[] = $registration_id['registration_id'];
847
+			}
848
+		}
849
+		// construct query
850
+		$_where = array(
851
+			'REG_ID' => array('IN', $ids_for_model_query),
852
+		);
853
+		return $this->get_all(array($_where));
854
+	}
855
+
856
+
857
+
858
+	/**
859
+	 * returns a count of registrations for the supplied event having the status as specified
860
+	 *
861
+	 * @param int $EVT_ID
862
+	 * @param array $statuses
863
+	 * @return int
864
+	 * @throws InvalidArgumentException
865
+	 * @throws InvalidStatusException
866
+	 * @throws EE_Error
867
+	 */
868
+	public function event_reg_count_for_statuses($EVT_ID, $statuses = array())
869
+	{
870
+		$EVT_ID = absint($EVT_ID);
871
+		if (! $EVT_ID) {
872
+			throw new InvalidArgumentException(
873
+				esc_html__('An invalid Event ID was supplied.', 'event_espresso')
874
+			);
875
+		}
876
+		$statuses = is_array($statuses) ? $statuses : array($statuses);
877
+		$statuses = ! empty($statuses) ? $statuses : array(EEM_Registration::status_id_approved);
878
+		$valid_reg_statuses = EEM_Registration::reg_statuses();
879
+		foreach ($statuses as $status) {
880
+			if (! in_array($status, $valid_reg_statuses, true)) {
881
+				throw new InvalidStatusException($status, esc_html__('Registration', 'event_espresso'));
882
+			}
883
+		}
884
+		return $this->count(
885
+			array(
886
+				array(
887
+					'EVT_ID' => $EVT_ID,
888
+					'STS_ID' => array('IN', $statuses),
889
+				),
890
+			),
891
+			'REG_ID',
892
+			true
893
+		);
894
+	}
895 895
 }
Please login to merge, or discard this patch.
Spacing   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -369,14 +369,14 @@  discard block
 block discarded – undo
369 369
         // and the table hasn't actually been created, this could have an error
370 370
         /** @type WPDB $wpdb */
371 371
         global $wpdb;
372
-        if ($this->_get_table_analysis()->tableExists($wpdb->prefix . 'esp_status')) {
372
+        if ($this->_get_table_analysis()->tableExists($wpdb->prefix.'esp_status')) {
373 373
             $results = $wpdb->get_results(
374 374
                 "SELECT STS_ID, STS_code FROM {$wpdb->prefix}esp_status WHERE STS_type = 'registration'"
375 375
             );
376 376
             self::$_reg_status = array();
377 377
             foreach ($results as $status) {
378
-                if (!in_array($status->STS_ID, $exclude, true)) {
379
-                    self::$_reg_status[ $status->STS_ID ] = $status->STS_code;
378
+                if ( ! in_array($status->STS_ID, $exclude, true)) {
379
+                    self::$_reg_status[$status->STS_ID] = $status->STS_code;
380 380
                 }
381 381
             }
382 382
         }
@@ -433,7 +433,7 @@  discard block
 block discarded – undo
433 433
      */
434 434
     public function get_all_registrations_for_attendee($ATT_ID = 0)
435 435
     {
436
-        if (!$ATT_ID) {
436
+        if ( ! $ATT_ID) {
437 437
             return null;
438 438
         }
439 439
         return $this->get_all(array(array('ATT_ID' => $ATT_ID)));
@@ -450,7 +450,7 @@  discard block
 block discarded – undo
450 450
      */
451 451
     public function get_registration_for_reg_url_link($REG_url_link)
452 452
     {
453
-        if (!$REG_url_link) {
453
+        if ( ! $REG_url_link) {
454 454
             return null;
455 455
         }
456 456
         return $this->get_one(array(array('REG_url_link' => $REG_url_link)));
@@ -501,7 +501,7 @@  discard block
 block discarded – undo
501 501
             'REG_date' => array('>=', $sql_date),
502 502
             'STS_ID' => array('!=', EEM_Registration::status_id_incomplete),
503 503
         );
504
-        if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_day_report')) {
504
+        if ( ! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_day_report')) {
505 505
             $where['Event.EVT_wp_user'] = get_current_user_id();
506 506
         }
507 507
         $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'REG_date');
@@ -513,7 +513,7 @@  discard block
 block discarded – undo
513 513
             ),
514 514
             OBJECT,
515 515
             array(
516
-                'regDate' => array('DATE(' . $query_interval . ')', '%s'),
516
+                'regDate' => array('DATE('.$query_interval.')', '%s'),
517 517
                 'total' => array('count(REG_ID)', '%d'),
518 518
             )
519 519
         );
@@ -533,7 +533,7 @@  discard block
 block discarded – undo
533 533
     public function get_registrations_per_day_and_per_status_report($period = '-1 month')
534 534
     {
535 535
         global $wpdb;
536
-        $registration_table = $wpdb->prefix . 'esp_registration';
536
+        $registration_table = $wpdb->prefix.'esp_registration';
537 537
         $event_table = $wpdb->posts;
538 538
         $sql_date = date('Y-m-d H:i:s', strtotime($period));
539 539
         // prepare the query interval for displaying offset
@@ -542,9 +542,9 @@  discard block
 block discarded – undo
542 542
         $inner_date_query = "SELECT DISTINCT REG_date from {$registration_table} ";
543 543
         $inner_where = ' WHERE';
544 544
         // exclude events not authored by user if permissions in effect
545
-        if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
545
+        if ( ! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
546 546
             $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID";
547
-            $inner_where .= ' post_author = ' . get_current_user_id() . ' AND';
547
+            $inner_where .= ' post_author = '.get_current_user_id().' AND';
548 548
         }
549 549
         $inner_where .= " REG_date >= '{$sql_date}'";
550 550
         $inner_date_query .= $inner_where;
@@ -567,7 +567,7 @@  discard block
 block discarded – undo
567 567
         // setup the joins
568 568
         $join .= implode(' LEFT JOIN ', $join_parts);
569 569
         // now let's put it all together
570
-        $query = $select . $join . ' GROUP BY Registration_REG_date';
570
+        $query = $select.$join.' GROUP BY Registration_REG_date';
571 571
         // and execute it
572 572
         return $wpdb->get_results($query, ARRAY_A);
573 573
     }
@@ -593,7 +593,7 @@  discard block
 block discarded – undo
593 593
             'REG_date' => array('>=', $date_sql),
594 594
             'STS_ID' => array('!=', EEM_Registration::status_id_incomplete),
595 595
         );
596
-        if (!EE_Registry::instance()->CAP->current_user_can(
596
+        if ( ! EE_Registry::instance()->CAP->current_user_can(
597 597
             'ee_read_others_registrations',
598 598
             'reg_per_event_report'
599 599
         )
@@ -629,16 +629,16 @@  discard block
 block discarded – undo
629 629
     public function get_registrations_per_event_and_per_status_report($period = '-1 month')
630 630
     {
631 631
         global $wpdb;
632
-        $registration_table = $wpdb->prefix . 'esp_registration';
632
+        $registration_table = $wpdb->prefix.'esp_registration';
633 633
         $event_table = $wpdb->posts;
634 634
         $sql_date = date('Y-m-d H:i:s', strtotime($period));
635 635
         // inner date query
636 636
         $inner_date_query = "SELECT DISTINCT EVT_ID, REG_date from $registration_table ";
637 637
         $inner_where = ' WHERE';
638 638
         // exclude events not authored by user if permissions in effect
639
-        if (!EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
639
+        if ( ! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
640 640
             $inner_date_query .= "LEFT JOIN {$event_table} ON ID = EVT_ID";
641
-            $inner_where .= ' post_author = ' . get_current_user_id() . ' AND';
641
+            $inner_where .= ' post_author = '.get_current_user_id().' AND';
642 642
         }
643 643
         $inner_where .= " REG_date >= '{$sql_date}'";
644 644
         $inner_date_query .= $inner_where;
@@ -661,7 +661,7 @@  discard block
 block discarded – undo
661 661
         // setup remaining joins
662 662
         $join .= implode(' LEFT JOIN ', $join_parts);
663 663
         // now put it all together
664
-        $query = $select . $join . ' GROUP BY Registration_Event';
664
+        $query = $select.$join.' GROUP BY Registration_Event';
665 665
         // and execute
666 666
         return $wpdb->get_results($query, ARRAY_A);
667 667
     }
@@ -676,7 +676,7 @@  discard block
 block discarded – undo
676 676
      */
677 677
     public function get_primary_registration_for_transaction_ID($TXN_ID = 0)
678 678
     {
679
-        if (!$TXN_ID) {
679
+        if ( ! $TXN_ID) {
680 680
             return null;
681 681
         }
682 682
         return $this->get_one(array(
@@ -745,11 +745,11 @@  discard block
 block discarded – undo
745 745
         $query = $wpdb->prepare(
746 746
             'SELECT '
747 747
             . 'COUNT( DISTINCT checkins.REG_ID ) '
748
-            . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN'
748
+            . 'FROM '.EEM_Checkin::instance()->table().' AS checkins INNER JOIN'
749 749
             . '( SELECT '
750 750
             . 'max( CHK_timestamp ) AS latest_checkin, '
751 751
             . 'REG_ID AS REG_ID '
752
-            . 'FROM ' . EEM_Checkin::instance()->table() . ' '
752
+            . 'FROM '.EEM_Checkin::instance()->table().' '
753 753
             . 'WHERE DTT_ID=%d '
754 754
             . 'GROUP BY REG_ID'
755 755
             . ') AS most_recent_checkin_per_reg '
@@ -779,12 +779,12 @@  discard block
 block discarded – undo
779 779
         $query = $wpdb->prepare(
780 780
             'SELECT '
781 781
             . 'COUNT( DISTINCT checkins.REG_ID ) '
782
-            . 'FROM ' . EEM_Checkin::instance()->table() . ' AS checkins INNER JOIN'
782
+            . 'FROM '.EEM_Checkin::instance()->table().' AS checkins INNER JOIN'
783 783
             . '( SELECT '
784 784
             . 'max( CHK_timestamp ) AS latest_checkin, '
785 785
             . 'REG_ID AS REG_ID '
786
-            . 'FROM ' . EEM_Checkin::instance()->table() . ' AS c '
787
-            . 'INNER JOIN ' . EEM_Datetime::instance()->table() . ' AS d '
786
+            . 'FROM '.EEM_Checkin::instance()->table().' AS c '
787
+            . 'INNER JOIN '.EEM_Datetime::instance()->table().' AS d '
788 788
             . 'ON c.DTT_ID=d.DTT_ID '
789 789
             . 'WHERE d.EVT_ID=%d '
790 790
             . 'GROUP BY REG_ID'
@@ -813,7 +813,7 @@  discard block
 block discarded – undo
813 813
     {
814 814
         // first do a native wp_query to get the latest REG_ID's matching these attendees.
815 815
         global $wpdb;
816
-        $registration_table = $wpdb->prefix . 'esp_registration';
816
+        $registration_table = $wpdb->prefix.'esp_registration';
817 817
         $attendee_table = $wpdb->posts;
818 818
         $attendee_ids = is_array($attendee_ids)
819 819
             ? array_map('absint', $attendee_ids)
@@ -868,7 +868,7 @@  discard block
 block discarded – undo
868 868
     public function event_reg_count_for_statuses($EVT_ID, $statuses = array())
869 869
     {
870 870
         $EVT_ID = absint($EVT_ID);
871
-        if (! $EVT_ID) {
871
+        if ( ! $EVT_ID) {
872 872
             throw new InvalidArgumentException(
873 873
                 esc_html__('An invalid Event ID was supplied.', 'event_espresso')
874 874
             );
@@ -877,7 +877,7 @@  discard block
 block discarded – undo
877 877
         $statuses = ! empty($statuses) ? $statuses : array(EEM_Registration::status_id_approved);
878 878
         $valid_reg_statuses = EEM_Registration::reg_statuses();
879 879
         foreach ($statuses as $status) {
880
-            if (! in_array($status, $valid_reg_statuses, true)) {
880
+            if ( ! in_array($status, $valid_reg_statuses, true)) {
881 881
                 throw new InvalidStatusException($status, esc_html__('Registration', 'event_espresso'));
882 882
             }
883 883
         }
Please login to merge, or discard this patch.
core/exceptions/InvalidStatusException.php 1 patch
Indentation   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -8,26 +8,26 @@
 block discarded – undo
8 8
 
9 9
 class InvalidStatusException extends InvalidArgumentException
10 10
 {
11
-    /**
12
-     * InvalidStatusException constructor.
13
-     * @param string $status the invalid status id that was supplied
14
-     * @param string $domain the name of the domain, model, or class that the status belongs to
15
-     * @param string $message custom message
16
-     * @param int $code
17
-     * @param Exception|null $previous
18
-     */
19
-    public function __construct($status, $domain, $message = '', $code = 0, Exception $previous = null)
20
-    {
21
-        if (empty($message)) {
22
-            $message = sprintf(
23
-                __(
24
-                    '"%1$s" is not a valid %2$s status',
25
-                    'event_espresso'
26
-                ),
27
-                $status,
28
-                $domain
29
-            );
30
-        }
31
-        parent::__construct($message, $code, $previous);
32
-    }
11
+	/**
12
+	 * InvalidStatusException constructor.
13
+	 * @param string $status the invalid status id that was supplied
14
+	 * @param string $domain the name of the domain, model, or class that the status belongs to
15
+	 * @param string $message custom message
16
+	 * @param int $code
17
+	 * @param Exception|null $previous
18
+	 */
19
+	public function __construct($status, $domain, $message = '', $code = 0, Exception $previous = null)
20
+	{
21
+		if (empty($message)) {
22
+			$message = sprintf(
23
+				__(
24
+					'"%1$s" is not a valid %2$s status',
25
+					'event_espresso'
26
+				),
27
+				$status,
28
+				$domain
29
+			);
30
+		}
31
+		parent::__construct($message, $code, $previous);
32
+	}
33 33
 }
Please login to merge, or discard this patch.
core/domain/services/admin/AdminToolBar.php 2 patches
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
     {
121 121
         wp_register_style(
122 122
             'espresso-admin-toolbar',
123
-            EE_GLOBAL_ASSETS_URL . 'css/espresso-admin-toolbar.css',
123
+            EE_GLOBAL_ASSETS_URL.'css/espresso-admin-toolbar.css',
124 124
             array('dashicons'),
125 125
             EVENT_ESPRESSO_VERSION
126 126
         );
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
                 'href'  => $this->events_admin_url,
144 144
                 'meta'  => array(
145 145
                     'title' => esc_html__('Event Espresso', 'event_espresso'),
146
-                    'class' => $this->menu_class . 'first',
146
+                    'class' => $this->menu_class.'first',
147 147
                 ),
148 148
             )
149 149
         );
@@ -491,7 +491,7 @@  discard block
 block discarded – undo
491 491
                     'meta'   => array(
492 492
                         'title'  => esc_html__('Approved', 'event_espresso'),
493 493
                         'target' => '',
494
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-approved',
494
+                        'class'  => $this->menu_class.' ee-toolbar-icon-approved',
495 495
                     ),
496 496
                 )
497 497
             );
@@ -528,7 +528,7 @@  discard block
 block discarded – undo
528 528
                     'meta'   => array(
529 529
                         'title'  => esc_html__('Pending Payment', 'event_espresso'),
530 530
                         'target' => '',
531
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-pending',
531
+                        'class'  => $this->menu_class.' ee-toolbar-icon-pending',
532 532
                     ),
533 533
                 )
534 534
             );
@@ -565,7 +565,7 @@  discard block
 block discarded – undo
565 565
                     'meta'   => array(
566 566
                         'title'  => esc_html__('Not Approved', 'event_espresso'),
567 567
                         'target' => '',
568
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-not-approved',
568
+                        'class'  => $this->menu_class.' ee-toolbar-icon-not-approved',
569 569
                     ),
570 570
                 )
571 571
             );
@@ -602,7 +602,7 @@  discard block
 block discarded – undo
602 602
                     'meta'   => array(
603 603
                         'title'  => esc_html__('Cancelled', 'event_espresso'),
604 604
                         'target' => '',
605
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-cancelled',
605
+                        'class'  => $this->menu_class.' ee-toolbar-icon-cancelled',
606 606
                     ),
607 607
                 )
608 608
             );
@@ -674,7 +674,7 @@  discard block
 block discarded – undo
674 674
                     'meta'   => array(
675 675
                         'title'  => esc_html__('Approved', 'event_espresso'),
676 676
                         'target' => '',
677
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-approved',
677
+                        'class'  => $this->menu_class.' ee-toolbar-icon-approved',
678 678
                     ),
679 679
                 )
680 680
             );
@@ -711,7 +711,7 @@  discard block
 block discarded – undo
711 711
                     'meta'   => array(
712 712
                         'title'  => esc_html__('Pending', 'event_espresso'),
713 713
                         'target' => '',
714
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-pending',
714
+                        'class'  => $this->menu_class.' ee-toolbar-icon-pending',
715 715
                     ),
716 716
                 )
717 717
             );
@@ -748,7 +748,7 @@  discard block
 block discarded – undo
748 748
                     'meta'   => array(
749 749
                         'title'  => esc_html__('Not Approved', 'event_espresso'),
750 750
                         'target' => '',
751
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-not-approved',
751
+                        'class'  => $this->menu_class.' ee-toolbar-icon-not-approved',
752 752
                     ),
753 753
                 )
754 754
             );
@@ -785,7 +785,7 @@  discard block
 block discarded – undo
785 785
                     'meta'   => array(
786 786
                         'title'  => esc_html__('Cancelled', 'event_espresso'),
787 787
                         'target' => '',
788
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-cancelled',
788
+                        'class'  => $this->menu_class.' ee-toolbar-icon-cancelled',
789 789
                     ),
790 790
                 )
791 791
             );
Please login to merge, or discard this patch.
Indentation   +737 added lines, -737 removed lines patch added patch discarded remove patch
@@ -19,741 +19,741 @@
 block discarded – undo
19 19
 class AdminToolBar
20 20
 {
21 21
 
22
-    /**
23
-     * @var WP_Admin_Bar $admin_bar
24
-     */
25
-    private $admin_bar;
26
-
27
-    /**
28
-     * @var EE_Capabilities $capabilities
29
-     */
30
-    private $capabilities;
31
-
32
-    /**
33
-     * @var string $events_admin_url
34
-     */
35
-    private $events_admin_url;
36
-
37
-    /**
38
-     * @var string $menu_class
39
-     */
40
-    private $menu_class = 'espresso_menu_item_class';
41
-
42
-    /**
43
-     * @var string $reg_admin_url
44
-     */
45
-    private $reg_admin_url;
46
-
47
-
48
-    /**
49
-     * AdminToolBar constructor.
50
-     *
51
-     * @param EE_Capabilities $capabilities
52
-     */
53
-    public function __construct(EE_Capabilities $capabilities)
54
-    {
55
-        $this->capabilities = $capabilities;
56
-        add_action('admin_bar_menu', array($this, 'espressoToolbarItems'), 100);
57
-        $this->enqueueAssets();
58
-    }
59
-
60
-
61
-    /**
62
-     *    espresso_toolbar_items
63
-     *
64
-     * @access public
65
-     * @param  WP_Admin_Bar $admin_bar
66
-     * @return void
67
-     */
68
-    public function espressoToolbarItems(WP_Admin_Bar $admin_bar)
69
-    {
70
-        // if its an AJAX request, or user is NOT an admin, or in full M-Mode
71
-        if (defined('DOING_AJAX')
72
-            || ! $this->capabilities->current_user_can('ee_read_ee', 'ee_admin_bar_menu_top_level')
73
-            || EE_Maintenance_Mode::instance()->level() === EE_Maintenance_Mode::level_2_complete_maintenance
74
-        ) {
75
-            return;
76
-        }
77
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
78
-        $this->admin_bar = $admin_bar;
79
-        // we don't use the constants EVENTS_ADMIN_URL or REG_ADMIN_URL
80
-        // because they're only defined in each of their respective constructors
81
-        // and this might be a frontend request, in which case they aren't available
82
-        $this->events_admin_url = admin_url('admin.php?page=espresso_events');
83
-        $this->reg_admin_url = admin_url('admin.php?page=espresso_registrations');
84
-        // now let's add all of the menu items
85
-        $this->addTopLevelMenu();
86
-        $this->addEventsSubMenu();
87
-        $this->addEventsAddEditHeader();
88
-        $this->addEventsAddNew();
89
-        $this->addEventsEditCurrentEvent();
90
-        $this->addEventsViewHeader();
91
-        $this->addEventsViewAll();
92
-        $this->addEventsViewToday();
93
-        $this->addEventsViewThisMonth();
94
-        $this->addRegistrationSubMenu();
95
-        $this->addRegistrationOverviewToday();
96
-        $this->addRegistrationOverviewTodayApproved();
97
-        $this->addRegistrationOverviewTodayPendingPayment();
98
-        $this->addRegistrationOverviewTodayNotApproved();
99
-        $this->addRegistrationOverviewTodayCancelled();
100
-        $this->addRegistrationOverviewThisMonth();
101
-        $this->addRegistrationOverviewThisMonthApproved();
102
-        $this->addRegistrationOverviewThisMonthPending();
103
-        $this->addRegistrationOverviewThisMonthNotApproved();
104
-        $this->addRegistrationOverviewThisMonthCancelled();
105
-        $this->addExtensionsAndServices();
106
-    }
107
-
108
-
109
-    /**
110
-     * @return void
111
-     */
112
-    private function enqueueAssets()
113
-    {
114
-        wp_register_style(
115
-            'espresso-admin-toolbar',
116
-            EE_GLOBAL_ASSETS_URL . 'css/espresso-admin-toolbar.css',
117
-            array('dashicons'),
118
-            EVENT_ESPRESSO_VERSION
119
-        );
120
-        wp_enqueue_style('espresso-admin-toolbar');
121
-    }
122
-
123
-
124
-    /**
125
-     * @return void
126
-     */
127
-    private function addTopLevelMenu()
128
-    {
129
-        $this->admin_bar->add_menu(
130
-            array(
131
-                'id'    => 'espresso-toolbar',
132
-                'title' => '<span class="ee-icon ee-icon-ee-cup-thick ee-icon-size-20"></span><span class="ab-label">'
133
-                           . esc_html_x('Event Espresso', 'admin bar menu group label', 'event_espresso')
134
-                           . '</span>',
135
-                'href'  => $this->events_admin_url,
136
-                'meta'  => array(
137
-                    'title' => esc_html__('Event Espresso', 'event_espresso'),
138
-                    'class' => $this->menu_class . 'first',
139
-                ),
140
-            )
141
-        );
142
-    }
143
-
144
-
145
-    /**
146
-     * @return void
147
-     */
148
-    private function addEventsSubMenu()
149
-    {
150
-        if ($this->capabilities->current_user_can(
151
-            'ee_read_events',
152
-            'ee_admin_bar_menu_espresso-toolbar-events'
153
-        )
154
-        ) {
155
-            $this->admin_bar->add_menu(
156
-                array(
157
-                    'id'     => 'espresso-toolbar-events',
158
-                    'parent' => 'espresso-toolbar',
159
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
160
-                                . esc_html__('Events', 'event_espresso'),
161
-                    'href'   => $this->events_admin_url,
162
-                    'meta'   => array(
163
-                        'title'  => esc_html__('Events', 'event_espresso'),
164
-                        'target' => '',
165
-                        'class'  => $this->menu_class,
166
-                    ),
167
-                )
168
-            );
169
-        }
170
-    }
171
-
172
-
173
-    /**
174
-     * @return void
175
-     */
176
-    private function addEventsAddEditHeader()
177
-    {
178
-        if ($this->capabilities->current_user_can(
179
-            'ee_read_events',
180
-            'ee_admin_bar_menu_espresso-toolbar-events-view'
181
-        )
182
-        ) {
183
-            $this->admin_bar->add_menu(
184
-                array(
185
-                    'id'     => 'espresso-toolbar-events-add-edit',
186
-                    'parent' => 'espresso-toolbar-events',
187
-                    'title'  => esc_html__('Add / Edit', 'event_espresso'),
188
-                    'href'   => '',
189
-                )
190
-            );
191
-        }
192
-    }
193
-
194
-
195
-    /**
196
-     * @return void
197
-     */
198
-    private function addEventsAddNew()
199
-    {
200
-        if ($this->capabilities->current_user_can(
201
-            'ee_edit_events',
202
-            'ee_admin_bar_menu_espresso-toolbar-events-new'
203
-        )) {
204
-            $this->admin_bar->add_menu(
205
-                array(
206
-                    'id'     => 'espresso-toolbar-events-new',
207
-                    'parent' => 'espresso-toolbar-events',
208
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
209
-                                . esc_html__('Add New', 'event_espresso'),
210
-                    'href'   => EEH_URL::add_query_args_and_nonce(
211
-                        array('action' => 'create_new'),
212
-                        $this->events_admin_url
213
-                    ),
214
-                    'meta'   => array(
215
-                        'title'  => esc_html__('Add New', 'event_espresso'),
216
-                        'target' => '',
217
-                        'class'  => $this->menu_class,
218
-                    ),
219
-                )
220
-            );
221
-        }
222
-    }
223
-
224
-
225
-    /**
226
-     * @return void
227
-     */
228
-    private function addEventsEditCurrentEvent()
229
-    {
230
-        if (is_single() && (get_post_type() === 'espresso_events')) {
231
-            // Current post
232
-            global $post;
233
-            if ($this->capabilities->current_user_can(
234
-                'ee_edit_event',
235
-                'ee_admin_bar_menu_espresso-toolbar-events-edit',
236
-                $post->ID
237
-            )) {
238
-                $this->admin_bar->add_menu(
239
-                    array(
240
-                        'id'     => 'espresso-toolbar-events-edit',
241
-                        'parent' => 'espresso-toolbar-events',
242
-                        'title'  => '<span class="ee-toolbar-icon"></span>'
243
-                                    . esc_html__('Edit Event', 'event_espresso'),
244
-                        'href'   => EEH_URL::add_query_args_and_nonce(
245
-                            array(
246
-                                'action' => 'edit',
247
-                                'post'   => $post->ID,
248
-                            ),
249
-                            $this->events_admin_url
250
-                        ),
251
-                        'meta'   => array(
252
-                            'title'  => esc_html__('Edit Event', 'event_espresso'),
253
-                            'target' => '',
254
-                            'class'  => $this->menu_class,
255
-                        ),
256
-                    )
257
-                );
258
-            }
259
-        }
260
-    }
261
-
262
-
263
-    /**
264
-     * @return void
265
-     */
266
-    private function addEventsViewHeader()
267
-    {
268
-        if ($this->capabilities->current_user_can(
269
-            'ee_read_events',
270
-            'ee_admin_bar_menu_espresso-toolbar-events-view'
271
-        )) {
272
-            $this->admin_bar->add_menu(
273
-                array(
274
-                    'id'     => 'espresso-toolbar-events-view',
275
-                    'parent' => 'espresso-toolbar-events',
276
-                    'title'  => esc_html__('View', 'event_espresso'),
277
-                    'href'   => '',
278
-                )
279
-            );
280
-        }
281
-    }
282
-
283
-
284
-    /**
285
-     * @return void
286
-     */
287
-    private function addEventsViewAll()
288
-    {
289
-        if ($this->capabilities->current_user_can(
290
-            'ee_read_events',
291
-            'ee_admin_bar_menu_espresso-toolbar-events-all'
292
-        )) {
293
-            $this->admin_bar->add_menu(
294
-                array(
295
-                    'id'     => 'espresso-toolbar-events-all',
296
-                    'parent' => 'espresso-toolbar-events',
297
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
298
-                                . esc_html__('All', 'event_espresso'),
299
-                    'href'   => $this->events_admin_url,
300
-                    'meta'   => array(
301
-                        'title'  => esc_html__('All', 'event_espresso'),
302
-                        'target' => '',
303
-                        'class'  => $this->menu_class,
304
-                    ),
305
-                )
306
-            );
307
-        }
308
-    }
309
-
310
-
311
-    /**
312
-     * @return void
313
-     */
314
-    private function addEventsViewToday()
315
-    {
316
-        if ($this->capabilities->current_user_can(
317
-            'ee_read_events',
318
-            'ee_admin_bar_menu_espresso-toolbar-events-today'
319
-        )) {
320
-            $this->admin_bar->add_menu(
321
-                array(
322
-                    'id'     => 'espresso-toolbar-events-today',
323
-                    'parent' => 'espresso-toolbar-events',
324
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
325
-                                . esc_html__('Today', 'event_espresso'),
326
-                    'href'   => EEH_URL::add_query_args_and_nonce(
327
-                        array(
328
-                            'action' => 'default',
329
-                            'status' => 'today',
330
-                        ),
331
-                        $this->events_admin_url
332
-                    ),
333
-                    'meta'   => array(
334
-                        'title'  => esc_html__('Today', 'event_espresso'),
335
-                        'target' => '',
336
-                        'class'  => $this->menu_class,
337
-                    ),
338
-                )
339
-            );
340
-        }
341
-    }
342
-
343
-
344
-    /**
345
-     * @return void
346
-     */
347
-    private function addEventsViewThisMonth()
348
-    {
349
-        if ($this->capabilities->current_user_can(
350
-            'ee_read_events',
351
-            'ee_admin_bar_menu_espresso-toolbar-events-month'
352
-        )) {
353
-            $this->admin_bar->add_menu(
354
-                array(
355
-                    'id'     => 'espresso-toolbar-events-month',
356
-                    'parent' => 'espresso-toolbar-events',
357
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
358
-                                . esc_html__('This Month', 'event_espresso'),
359
-                    'href'   => EEH_URL::add_query_args_and_nonce(
360
-                        array(
361
-                            'action' => 'default',
362
-                            'status' => 'month',
363
-                        ),
364
-                        $this->events_admin_url
365
-                    ),
366
-                    'meta'   => array(
367
-                        'title'  => esc_html__('This Month', 'event_espresso'),
368
-                        'target' => '',
369
-                        'class'  => $this->menu_class,
370
-                    ),
371
-                )
372
-            );
373
-        }
374
-    }
375
-
376
-
377
-    /**
378
-     * @return void
379
-     */
380
-    private function addRegistrationSubMenu()
381
-    {
382
-        if ($this->capabilities->current_user_can(
383
-            'ee_read_registrations',
384
-            'ee_admin_bar_menu_espresso-toolbar-registrations'
385
-        )) {
386
-            $this->admin_bar->add_menu(
387
-                array(
388
-                    'id'     => 'espresso-toolbar-registrations',
389
-                    'parent' => 'espresso-toolbar',
390
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
391
-                                . esc_html__('Registrations', 'event_espresso'),
392
-                    'href'   => $this->reg_admin_url,
393
-                    'meta'   => array(
394
-                        'title'  => esc_html__('Registrations', 'event_espresso'),
395
-                        'target' => '',
396
-                        'class'  => $this->menu_class,
397
-                    ),
398
-                )
399
-            );
400
-        }
401
-    }
402
-
403
-
404
-    /**
405
-     * @return void
406
-     */
407
-    private function addRegistrationOverviewToday()
408
-    {
409
-        if ($this->capabilities->current_user_can(
410
-            'ee_read_registrations',
411
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today'
412
-        )) {
413
-            $this->admin_bar->add_menu(
414
-                array(
415
-                    'id'     => 'espresso-toolbar-registrations-today',
416
-                    'parent' => 'espresso-toolbar-registrations',
417
-                    'title'  => esc_html__('Today', 'event_espresso'),
418
-                    'href'   => '',
419
-                    'meta'   => array(
420
-                        'title'  => esc_html__('Today', 'event_espresso'),
421
-                        'target' => '',
422
-                        'class'  => $this->menu_class,
423
-                    ),
424
-                )
425
-            );
426
-        }
427
-    }
428
-
429
-
430
-    /**
431
-     * @return void
432
-     */
433
-    private function addRegistrationOverviewTodayApproved()
434
-    {
435
-        if ($this->capabilities->current_user_can(
436
-            'ee_read_registrations',
437
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today-approved'
438
-        )) {
439
-            $this->admin_bar->add_menu(
440
-                array(
441
-                    'id'     => 'espresso-toolbar-registrations-today-approved',
442
-                    'parent' => 'espresso-toolbar-registrations',
443
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
444
-                                . esc_html__('Approved', 'event_espresso'),
445
-                    'href'   => EEH_URL::add_query_args_and_nonce(
446
-                        array(
447
-                            'action'      => 'default',
448
-                            'status'      => 'today',
449
-                            '_reg_status' => EEM_Registration::status_id_approved,
450
-                        ),
451
-                        $this->reg_admin_url
452
-                    ),
453
-                    'meta'   => array(
454
-                        'title'  => esc_html__('Approved', 'event_espresso'),
455
-                        'target' => '',
456
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-approved',
457
-                    ),
458
-                )
459
-            );
460
-        }
461
-    }
462
-
463
-
464
-    /**
465
-     * @return void
466
-     */
467
-    private function addRegistrationOverviewTodayPendingPayment()
468
-    {
469
-        if ($this->capabilities->current_user_can(
470
-            'ee_read_registrations',
471
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today-pending'
472
-        )) {
473
-            $this->admin_bar->add_menu(
474
-                array(
475
-                    'id'     => 'espresso-toolbar-registrations-today-pending',
476
-                    'parent' => 'espresso-toolbar-registrations',
477
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
478
-                                . esc_html__('Pending', 'event_espresso'),
479
-                    'href'   => EEH_URL::add_query_args_and_nonce(
480
-                        array(
481
-                            'action'      => 'default',
482
-                            'status'      => 'today',
483
-                            '_reg_status' => EEM_Registration::status_id_pending_payment,
484
-                        ),
485
-                        $this->reg_admin_url
486
-                    ),
487
-                    'meta'   => array(
488
-                        'title'  => esc_html__('Pending Payment', 'event_espresso'),
489
-                        'target' => '',
490
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-pending',
491
-                    ),
492
-                )
493
-            );
494
-        }
495
-    }
496
-
497
-
498
-    /**
499
-     * @return void
500
-     */
501
-    private function addRegistrationOverviewTodayNotApproved()
502
-    {
503
-        if ($this->capabilities->current_user_can(
504
-            'ee_read_registrations',
505
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today-not-approved'
506
-        )) {
507
-            $this->admin_bar->add_menu(
508
-                array(
509
-                    'id'     => 'espresso-toolbar-registrations-today-not-approved',
510
-                    'parent' => 'espresso-toolbar-registrations',
511
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
512
-                                . esc_html__('Not Approved', 'event_espresso'),
513
-                    'href'   => EEH_URL::add_query_args_and_nonce(
514
-                        array(
515
-                            'action'      => 'default',
516
-                            'status'      => 'today',
517
-                            '_reg_status' => EEM_Registration::status_id_not_approved,
518
-                        ),
519
-                        $this->reg_admin_url
520
-                    ),
521
-                    'meta'   => array(
522
-                        'title'  => esc_html__('Not Approved', 'event_espresso'),
523
-                        'target' => '',
524
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-not-approved',
525
-                    ),
526
-                )
527
-            );
528
-        }
529
-    }
530
-
531
-
532
-    /**
533
-     * @return void
534
-     */
535
-    private function addRegistrationOverviewTodayCancelled()
536
-    {
537
-        if ($this->capabilities->current_user_can(
538
-            'ee_read_registrations',
539
-            'ee_admin_bar_menu_espresso-toolbar-registrations-today-cancelled'
540
-        )) {
541
-            $this->admin_bar->add_menu(
542
-                array(
543
-                    'id'     => 'espresso-toolbar-registrations-today-cancelled',
544
-                    'parent' => 'espresso-toolbar-registrations',
545
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
546
-                                . esc_html__('Cancelled', 'event_espresso'),
547
-                    'href'   => EEH_URL::add_query_args_and_nonce(
548
-                        array(
549
-                            'action'      => 'default',
550
-                            'status'      => 'today',
551
-                            '_reg_status' => EEM_Registration::status_id_cancelled,
552
-                        ),
553
-                        $this->reg_admin_url
554
-                    ),
555
-                    'meta'   => array(
556
-                        'title'  => esc_html__('Cancelled', 'event_espresso'),
557
-                        'target' => '',
558
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-cancelled',
559
-                    ),
560
-                )
561
-            );
562
-        }
563
-    }
564
-
565
-
566
-    /**
567
-     * @return void
568
-     */
569
-    private function addRegistrationOverviewThisMonth()
570
-    {
571
-        if ($this->capabilities->current_user_can(
572
-            'ee_read_registrations',
573
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month'
574
-        )) {
575
-            $this->admin_bar->add_menu(
576
-                array(
577
-                    'id'     => 'espresso-toolbar-registrations-month',
578
-                    'parent' => 'espresso-toolbar-registrations',
579
-                    'title'  => esc_html__('This Month', 'event_espresso'),
580
-                    'href'   => '', // EEH_URL::add_query_args_and_nonce(
581
-                    //     array(
582
-                    //         'action' => 'default',
583
-                    //         'status' => 'month'
584
-                    //     ),
585
-                    //     $this->reg_admin_url
586
-                    // ),
587
-                    'meta'   => array(
588
-                        'title'  => esc_html__('This Month', 'event_espresso'),
589
-                        'target' => '',
590
-                        'class'  => $this->menu_class,
591
-                    ),
592
-                )
593
-            );
594
-        }
595
-    }
596
-
597
-
598
-    /**
599
-     * @return void
600
-     */
601
-    private function addRegistrationOverviewThisMonthApproved()
602
-    {
603
-        if ($this->capabilities->current_user_can(
604
-            'ee_read_registrations',
605
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month-approved'
606
-        )) {
607
-            $this->admin_bar->add_menu(
608
-                array(
609
-                    'id'     => 'espresso-toolbar-registrations-month-approved',
610
-                    'parent' => 'espresso-toolbar-registrations',
611
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
612
-                                . esc_html__('Approved', 'event_espresso'),
613
-                    'href'   => EEH_URL::add_query_args_and_nonce(
614
-                        array(
615
-                            'action'      => 'default',
616
-                            'status'      => 'month',
617
-                            '_reg_status' => EEM_Registration::status_id_approved,
618
-                        ),
619
-                        $this->reg_admin_url
620
-                    ),
621
-                    'meta'   => array(
622
-                        'title'  => esc_html__('Approved', 'event_espresso'),
623
-                        'target' => '',
624
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-approved',
625
-                    ),
626
-                )
627
-            );
628
-        }
629
-    }
630
-
631
-
632
-    /**
633
-     * @return void
634
-     */
635
-    private function addRegistrationOverviewThisMonthPending()
636
-    {
637
-        if ($this->capabilities->current_user_can(
638
-            'ee_read_registrations',
639
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month-pending'
640
-        )) {
641
-            $this->admin_bar->add_menu(
642
-                array(
643
-                    'id'     => 'espresso-toolbar-registrations-month-pending',
644
-                    'parent' => 'espresso-toolbar-registrations',
645
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
646
-                                . esc_html__('Pending', 'event_espresso'),
647
-                    'href'   => EEH_URL::add_query_args_and_nonce(
648
-                        array(
649
-                            'action'      => 'default',
650
-                            'status'      => 'month',
651
-                            '_reg_status' => EEM_Registration::status_id_pending_payment,
652
-                        ),
653
-                        $this->reg_admin_url
654
-                    ),
655
-                    'meta'   => array(
656
-                        'title'  => esc_html__('Pending', 'event_espresso'),
657
-                        'target' => '',
658
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-pending',
659
-                    ),
660
-                )
661
-            );
662
-        }
663
-    }
664
-
665
-
666
-    /**
667
-     * @return void
668
-     */
669
-    private function addRegistrationOverviewThisMonthNotApproved()
670
-    {
671
-        if ($this->capabilities->current_user_can(
672
-            'ee_read_registrations',
673
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month-not-approved'
674
-        )) {
675
-            $this->admin_bar->add_menu(
676
-                array(
677
-                    'id'     => 'espresso-toolbar-registrations-month-not-approved',
678
-                    'parent' => 'espresso-toolbar-registrations',
679
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
680
-                                . esc_html__('Not Approved', 'event_espresso'),
681
-                    'href'   => EEH_URL::add_query_args_and_nonce(
682
-                        array(
683
-                            'action'      => 'default',
684
-                            'status'      => 'month',
685
-                            '_reg_status' => EEM_Registration::status_id_not_approved,
686
-                        ),
687
-                        $this->reg_admin_url
688
-                    ),
689
-                    'meta'   => array(
690
-                        'title'  => esc_html__('Not Approved', 'event_espresso'),
691
-                        'target' => '',
692
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-not-approved',
693
-                    ),
694
-                )
695
-            );
696
-        }
697
-    }
698
-
699
-
700
-    /**
701
-     * @return void
702
-     */
703
-    private function addRegistrationOverviewThisMonthCancelled()
704
-    {
705
-        if ($this->capabilities->current_user_can(
706
-            'ee_read_registrations',
707
-            'ee_admin_bar_menu_espresso-toolbar-registrations-month-cancelled'
708
-        )) {
709
-            $this->admin_bar->add_menu(
710
-                array(
711
-                    'id'     => 'espresso-toolbar-registrations-month-cancelled',
712
-                    'parent' => 'espresso-toolbar-registrations',
713
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
714
-                                . esc_html__('Cancelled', 'event_espresso'),
715
-                    'href'   => EEH_URL::add_query_args_and_nonce(
716
-                        array(
717
-                            'action'      => 'default',
718
-                            'status'      => 'month',
719
-                            '_reg_status' => EEM_Registration::status_id_cancelled,
720
-                        ),
721
-                        $this->reg_admin_url
722
-                    ),
723
-                    'meta'   => array(
724
-                        'title'  => esc_html__('Cancelled', 'event_espresso'),
725
-                        'target' => '',
726
-                        'class'  => $this->menu_class . ' ee-toolbar-icon-cancelled',
727
-                    ),
728
-                )
729
-            );
730
-        }
731
-    }
732
-
733
-
734
-    /**
735
-     * @return void
736
-     */
737
-    private function addExtensionsAndServices()
738
-    {
739
-        if ($this->capabilities->current_user_can(
740
-            'ee_read_ee',
741
-            'ee_admin_bar_menu_espresso-toolbar-extensions-and-services'
742
-        )) {
743
-            $this->admin_bar->add_menu(
744
-                array(
745
-                    'id'     => 'espresso-toolbar-extensions-and-services',
746
-                    'parent' => 'espresso-toolbar',
747
-                    'title'  => '<span class="ee-toolbar-icon"></span>'
748
-                                . esc_html__('Extensions & Services', 'event_espresso'),
749
-                    'href'   => admin_url('admin.php?page=espresso_packages'),
750
-                    'meta'   => array(
751
-                        'title'  => esc_html__('Extensions & Services', 'event_espresso'),
752
-                        'target' => '',
753
-                        'class'  => $this->menu_class,
754
-                    ),
755
-                )
756
-            );
757
-        }
758
-    }
22
+	/**
23
+	 * @var WP_Admin_Bar $admin_bar
24
+	 */
25
+	private $admin_bar;
26
+
27
+	/**
28
+	 * @var EE_Capabilities $capabilities
29
+	 */
30
+	private $capabilities;
31
+
32
+	/**
33
+	 * @var string $events_admin_url
34
+	 */
35
+	private $events_admin_url;
36
+
37
+	/**
38
+	 * @var string $menu_class
39
+	 */
40
+	private $menu_class = 'espresso_menu_item_class';
41
+
42
+	/**
43
+	 * @var string $reg_admin_url
44
+	 */
45
+	private $reg_admin_url;
46
+
47
+
48
+	/**
49
+	 * AdminToolBar constructor.
50
+	 *
51
+	 * @param EE_Capabilities $capabilities
52
+	 */
53
+	public function __construct(EE_Capabilities $capabilities)
54
+	{
55
+		$this->capabilities = $capabilities;
56
+		add_action('admin_bar_menu', array($this, 'espressoToolbarItems'), 100);
57
+		$this->enqueueAssets();
58
+	}
59
+
60
+
61
+	/**
62
+	 *    espresso_toolbar_items
63
+	 *
64
+	 * @access public
65
+	 * @param  WP_Admin_Bar $admin_bar
66
+	 * @return void
67
+	 */
68
+	public function espressoToolbarItems(WP_Admin_Bar $admin_bar)
69
+	{
70
+		// if its an AJAX request, or user is NOT an admin, or in full M-Mode
71
+		if (defined('DOING_AJAX')
72
+			|| ! $this->capabilities->current_user_can('ee_read_ee', 'ee_admin_bar_menu_top_level')
73
+			|| EE_Maintenance_Mode::instance()->level() === EE_Maintenance_Mode::level_2_complete_maintenance
74
+		) {
75
+			return;
76
+		}
77
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
78
+		$this->admin_bar = $admin_bar;
79
+		// we don't use the constants EVENTS_ADMIN_URL or REG_ADMIN_URL
80
+		// because they're only defined in each of their respective constructors
81
+		// and this might be a frontend request, in which case they aren't available
82
+		$this->events_admin_url = admin_url('admin.php?page=espresso_events');
83
+		$this->reg_admin_url = admin_url('admin.php?page=espresso_registrations');
84
+		// now let's add all of the menu items
85
+		$this->addTopLevelMenu();
86
+		$this->addEventsSubMenu();
87
+		$this->addEventsAddEditHeader();
88
+		$this->addEventsAddNew();
89
+		$this->addEventsEditCurrentEvent();
90
+		$this->addEventsViewHeader();
91
+		$this->addEventsViewAll();
92
+		$this->addEventsViewToday();
93
+		$this->addEventsViewThisMonth();
94
+		$this->addRegistrationSubMenu();
95
+		$this->addRegistrationOverviewToday();
96
+		$this->addRegistrationOverviewTodayApproved();
97
+		$this->addRegistrationOverviewTodayPendingPayment();
98
+		$this->addRegistrationOverviewTodayNotApproved();
99
+		$this->addRegistrationOverviewTodayCancelled();
100
+		$this->addRegistrationOverviewThisMonth();
101
+		$this->addRegistrationOverviewThisMonthApproved();
102
+		$this->addRegistrationOverviewThisMonthPending();
103
+		$this->addRegistrationOverviewThisMonthNotApproved();
104
+		$this->addRegistrationOverviewThisMonthCancelled();
105
+		$this->addExtensionsAndServices();
106
+	}
107
+
108
+
109
+	/**
110
+	 * @return void
111
+	 */
112
+	private function enqueueAssets()
113
+	{
114
+		wp_register_style(
115
+			'espresso-admin-toolbar',
116
+			EE_GLOBAL_ASSETS_URL . 'css/espresso-admin-toolbar.css',
117
+			array('dashicons'),
118
+			EVENT_ESPRESSO_VERSION
119
+		);
120
+		wp_enqueue_style('espresso-admin-toolbar');
121
+	}
122
+
123
+
124
+	/**
125
+	 * @return void
126
+	 */
127
+	private function addTopLevelMenu()
128
+	{
129
+		$this->admin_bar->add_menu(
130
+			array(
131
+				'id'    => 'espresso-toolbar',
132
+				'title' => '<span class="ee-icon ee-icon-ee-cup-thick ee-icon-size-20"></span><span class="ab-label">'
133
+						   . esc_html_x('Event Espresso', 'admin bar menu group label', 'event_espresso')
134
+						   . '</span>',
135
+				'href'  => $this->events_admin_url,
136
+				'meta'  => array(
137
+					'title' => esc_html__('Event Espresso', 'event_espresso'),
138
+					'class' => $this->menu_class . 'first',
139
+				),
140
+			)
141
+		);
142
+	}
143
+
144
+
145
+	/**
146
+	 * @return void
147
+	 */
148
+	private function addEventsSubMenu()
149
+	{
150
+		if ($this->capabilities->current_user_can(
151
+			'ee_read_events',
152
+			'ee_admin_bar_menu_espresso-toolbar-events'
153
+		)
154
+		) {
155
+			$this->admin_bar->add_menu(
156
+				array(
157
+					'id'     => 'espresso-toolbar-events',
158
+					'parent' => 'espresso-toolbar',
159
+					'title'  => '<span class="ee-toolbar-icon"></span>'
160
+								. esc_html__('Events', 'event_espresso'),
161
+					'href'   => $this->events_admin_url,
162
+					'meta'   => array(
163
+						'title'  => esc_html__('Events', 'event_espresso'),
164
+						'target' => '',
165
+						'class'  => $this->menu_class,
166
+					),
167
+				)
168
+			);
169
+		}
170
+	}
171
+
172
+
173
+	/**
174
+	 * @return void
175
+	 */
176
+	private function addEventsAddEditHeader()
177
+	{
178
+		if ($this->capabilities->current_user_can(
179
+			'ee_read_events',
180
+			'ee_admin_bar_menu_espresso-toolbar-events-view'
181
+		)
182
+		) {
183
+			$this->admin_bar->add_menu(
184
+				array(
185
+					'id'     => 'espresso-toolbar-events-add-edit',
186
+					'parent' => 'espresso-toolbar-events',
187
+					'title'  => esc_html__('Add / Edit', 'event_espresso'),
188
+					'href'   => '',
189
+				)
190
+			);
191
+		}
192
+	}
193
+
194
+
195
+	/**
196
+	 * @return void
197
+	 */
198
+	private function addEventsAddNew()
199
+	{
200
+		if ($this->capabilities->current_user_can(
201
+			'ee_edit_events',
202
+			'ee_admin_bar_menu_espresso-toolbar-events-new'
203
+		)) {
204
+			$this->admin_bar->add_menu(
205
+				array(
206
+					'id'     => 'espresso-toolbar-events-new',
207
+					'parent' => 'espresso-toolbar-events',
208
+					'title'  => '<span class="ee-toolbar-icon"></span>'
209
+								. esc_html__('Add New', 'event_espresso'),
210
+					'href'   => EEH_URL::add_query_args_and_nonce(
211
+						array('action' => 'create_new'),
212
+						$this->events_admin_url
213
+					),
214
+					'meta'   => array(
215
+						'title'  => esc_html__('Add New', 'event_espresso'),
216
+						'target' => '',
217
+						'class'  => $this->menu_class,
218
+					),
219
+				)
220
+			);
221
+		}
222
+	}
223
+
224
+
225
+	/**
226
+	 * @return void
227
+	 */
228
+	private function addEventsEditCurrentEvent()
229
+	{
230
+		if (is_single() && (get_post_type() === 'espresso_events')) {
231
+			// Current post
232
+			global $post;
233
+			if ($this->capabilities->current_user_can(
234
+				'ee_edit_event',
235
+				'ee_admin_bar_menu_espresso-toolbar-events-edit',
236
+				$post->ID
237
+			)) {
238
+				$this->admin_bar->add_menu(
239
+					array(
240
+						'id'     => 'espresso-toolbar-events-edit',
241
+						'parent' => 'espresso-toolbar-events',
242
+						'title'  => '<span class="ee-toolbar-icon"></span>'
243
+									. esc_html__('Edit Event', 'event_espresso'),
244
+						'href'   => EEH_URL::add_query_args_and_nonce(
245
+							array(
246
+								'action' => 'edit',
247
+								'post'   => $post->ID,
248
+							),
249
+							$this->events_admin_url
250
+						),
251
+						'meta'   => array(
252
+							'title'  => esc_html__('Edit Event', 'event_espresso'),
253
+							'target' => '',
254
+							'class'  => $this->menu_class,
255
+						),
256
+					)
257
+				);
258
+			}
259
+		}
260
+	}
261
+
262
+
263
+	/**
264
+	 * @return void
265
+	 */
266
+	private function addEventsViewHeader()
267
+	{
268
+		if ($this->capabilities->current_user_can(
269
+			'ee_read_events',
270
+			'ee_admin_bar_menu_espresso-toolbar-events-view'
271
+		)) {
272
+			$this->admin_bar->add_menu(
273
+				array(
274
+					'id'     => 'espresso-toolbar-events-view',
275
+					'parent' => 'espresso-toolbar-events',
276
+					'title'  => esc_html__('View', 'event_espresso'),
277
+					'href'   => '',
278
+				)
279
+			);
280
+		}
281
+	}
282
+
283
+
284
+	/**
285
+	 * @return void
286
+	 */
287
+	private function addEventsViewAll()
288
+	{
289
+		if ($this->capabilities->current_user_can(
290
+			'ee_read_events',
291
+			'ee_admin_bar_menu_espresso-toolbar-events-all'
292
+		)) {
293
+			$this->admin_bar->add_menu(
294
+				array(
295
+					'id'     => 'espresso-toolbar-events-all',
296
+					'parent' => 'espresso-toolbar-events',
297
+					'title'  => '<span class="ee-toolbar-icon"></span>'
298
+								. esc_html__('All', 'event_espresso'),
299
+					'href'   => $this->events_admin_url,
300
+					'meta'   => array(
301
+						'title'  => esc_html__('All', 'event_espresso'),
302
+						'target' => '',
303
+						'class'  => $this->menu_class,
304
+					),
305
+				)
306
+			);
307
+		}
308
+	}
309
+
310
+
311
+	/**
312
+	 * @return void
313
+	 */
314
+	private function addEventsViewToday()
315
+	{
316
+		if ($this->capabilities->current_user_can(
317
+			'ee_read_events',
318
+			'ee_admin_bar_menu_espresso-toolbar-events-today'
319
+		)) {
320
+			$this->admin_bar->add_menu(
321
+				array(
322
+					'id'     => 'espresso-toolbar-events-today',
323
+					'parent' => 'espresso-toolbar-events',
324
+					'title'  => '<span class="ee-toolbar-icon"></span>'
325
+								. esc_html__('Today', 'event_espresso'),
326
+					'href'   => EEH_URL::add_query_args_and_nonce(
327
+						array(
328
+							'action' => 'default',
329
+							'status' => 'today',
330
+						),
331
+						$this->events_admin_url
332
+					),
333
+					'meta'   => array(
334
+						'title'  => esc_html__('Today', 'event_espresso'),
335
+						'target' => '',
336
+						'class'  => $this->menu_class,
337
+					),
338
+				)
339
+			);
340
+		}
341
+	}
342
+
343
+
344
+	/**
345
+	 * @return void
346
+	 */
347
+	private function addEventsViewThisMonth()
348
+	{
349
+		if ($this->capabilities->current_user_can(
350
+			'ee_read_events',
351
+			'ee_admin_bar_menu_espresso-toolbar-events-month'
352
+		)) {
353
+			$this->admin_bar->add_menu(
354
+				array(
355
+					'id'     => 'espresso-toolbar-events-month',
356
+					'parent' => 'espresso-toolbar-events',
357
+					'title'  => '<span class="ee-toolbar-icon"></span>'
358
+								. esc_html__('This Month', 'event_espresso'),
359
+					'href'   => EEH_URL::add_query_args_and_nonce(
360
+						array(
361
+							'action' => 'default',
362
+							'status' => 'month',
363
+						),
364
+						$this->events_admin_url
365
+					),
366
+					'meta'   => array(
367
+						'title'  => esc_html__('This Month', 'event_espresso'),
368
+						'target' => '',
369
+						'class'  => $this->menu_class,
370
+					),
371
+				)
372
+			);
373
+		}
374
+	}
375
+
376
+
377
+	/**
378
+	 * @return void
379
+	 */
380
+	private function addRegistrationSubMenu()
381
+	{
382
+		if ($this->capabilities->current_user_can(
383
+			'ee_read_registrations',
384
+			'ee_admin_bar_menu_espresso-toolbar-registrations'
385
+		)) {
386
+			$this->admin_bar->add_menu(
387
+				array(
388
+					'id'     => 'espresso-toolbar-registrations',
389
+					'parent' => 'espresso-toolbar',
390
+					'title'  => '<span class="ee-toolbar-icon"></span>'
391
+								. esc_html__('Registrations', 'event_espresso'),
392
+					'href'   => $this->reg_admin_url,
393
+					'meta'   => array(
394
+						'title'  => esc_html__('Registrations', 'event_espresso'),
395
+						'target' => '',
396
+						'class'  => $this->menu_class,
397
+					),
398
+				)
399
+			);
400
+		}
401
+	}
402
+
403
+
404
+	/**
405
+	 * @return void
406
+	 */
407
+	private function addRegistrationOverviewToday()
408
+	{
409
+		if ($this->capabilities->current_user_can(
410
+			'ee_read_registrations',
411
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today'
412
+		)) {
413
+			$this->admin_bar->add_menu(
414
+				array(
415
+					'id'     => 'espresso-toolbar-registrations-today',
416
+					'parent' => 'espresso-toolbar-registrations',
417
+					'title'  => esc_html__('Today', 'event_espresso'),
418
+					'href'   => '',
419
+					'meta'   => array(
420
+						'title'  => esc_html__('Today', 'event_espresso'),
421
+						'target' => '',
422
+						'class'  => $this->menu_class,
423
+					),
424
+				)
425
+			);
426
+		}
427
+	}
428
+
429
+
430
+	/**
431
+	 * @return void
432
+	 */
433
+	private function addRegistrationOverviewTodayApproved()
434
+	{
435
+		if ($this->capabilities->current_user_can(
436
+			'ee_read_registrations',
437
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today-approved'
438
+		)) {
439
+			$this->admin_bar->add_menu(
440
+				array(
441
+					'id'     => 'espresso-toolbar-registrations-today-approved',
442
+					'parent' => 'espresso-toolbar-registrations',
443
+					'title'  => '<span class="ee-toolbar-icon"></span>'
444
+								. esc_html__('Approved', 'event_espresso'),
445
+					'href'   => EEH_URL::add_query_args_and_nonce(
446
+						array(
447
+							'action'      => 'default',
448
+							'status'      => 'today',
449
+							'_reg_status' => EEM_Registration::status_id_approved,
450
+						),
451
+						$this->reg_admin_url
452
+					),
453
+					'meta'   => array(
454
+						'title'  => esc_html__('Approved', 'event_espresso'),
455
+						'target' => '',
456
+						'class'  => $this->menu_class . ' ee-toolbar-icon-approved',
457
+					),
458
+				)
459
+			);
460
+		}
461
+	}
462
+
463
+
464
+	/**
465
+	 * @return void
466
+	 */
467
+	private function addRegistrationOverviewTodayPendingPayment()
468
+	{
469
+		if ($this->capabilities->current_user_can(
470
+			'ee_read_registrations',
471
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today-pending'
472
+		)) {
473
+			$this->admin_bar->add_menu(
474
+				array(
475
+					'id'     => 'espresso-toolbar-registrations-today-pending',
476
+					'parent' => 'espresso-toolbar-registrations',
477
+					'title'  => '<span class="ee-toolbar-icon"></span>'
478
+								. esc_html__('Pending', 'event_espresso'),
479
+					'href'   => EEH_URL::add_query_args_and_nonce(
480
+						array(
481
+							'action'      => 'default',
482
+							'status'      => 'today',
483
+							'_reg_status' => EEM_Registration::status_id_pending_payment,
484
+						),
485
+						$this->reg_admin_url
486
+					),
487
+					'meta'   => array(
488
+						'title'  => esc_html__('Pending Payment', 'event_espresso'),
489
+						'target' => '',
490
+						'class'  => $this->menu_class . ' ee-toolbar-icon-pending',
491
+					),
492
+				)
493
+			);
494
+		}
495
+	}
496
+
497
+
498
+	/**
499
+	 * @return void
500
+	 */
501
+	private function addRegistrationOverviewTodayNotApproved()
502
+	{
503
+		if ($this->capabilities->current_user_can(
504
+			'ee_read_registrations',
505
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today-not-approved'
506
+		)) {
507
+			$this->admin_bar->add_menu(
508
+				array(
509
+					'id'     => 'espresso-toolbar-registrations-today-not-approved',
510
+					'parent' => 'espresso-toolbar-registrations',
511
+					'title'  => '<span class="ee-toolbar-icon"></span>'
512
+								. esc_html__('Not Approved', 'event_espresso'),
513
+					'href'   => EEH_URL::add_query_args_and_nonce(
514
+						array(
515
+							'action'      => 'default',
516
+							'status'      => 'today',
517
+							'_reg_status' => EEM_Registration::status_id_not_approved,
518
+						),
519
+						$this->reg_admin_url
520
+					),
521
+					'meta'   => array(
522
+						'title'  => esc_html__('Not Approved', 'event_espresso'),
523
+						'target' => '',
524
+						'class'  => $this->menu_class . ' ee-toolbar-icon-not-approved',
525
+					),
526
+				)
527
+			);
528
+		}
529
+	}
530
+
531
+
532
+	/**
533
+	 * @return void
534
+	 */
535
+	private function addRegistrationOverviewTodayCancelled()
536
+	{
537
+		if ($this->capabilities->current_user_can(
538
+			'ee_read_registrations',
539
+			'ee_admin_bar_menu_espresso-toolbar-registrations-today-cancelled'
540
+		)) {
541
+			$this->admin_bar->add_menu(
542
+				array(
543
+					'id'     => 'espresso-toolbar-registrations-today-cancelled',
544
+					'parent' => 'espresso-toolbar-registrations',
545
+					'title'  => '<span class="ee-toolbar-icon"></span>'
546
+								. esc_html__('Cancelled', 'event_espresso'),
547
+					'href'   => EEH_URL::add_query_args_and_nonce(
548
+						array(
549
+							'action'      => 'default',
550
+							'status'      => 'today',
551
+							'_reg_status' => EEM_Registration::status_id_cancelled,
552
+						),
553
+						$this->reg_admin_url
554
+					),
555
+					'meta'   => array(
556
+						'title'  => esc_html__('Cancelled', 'event_espresso'),
557
+						'target' => '',
558
+						'class'  => $this->menu_class . ' ee-toolbar-icon-cancelled',
559
+					),
560
+				)
561
+			);
562
+		}
563
+	}
564
+
565
+
566
+	/**
567
+	 * @return void
568
+	 */
569
+	private function addRegistrationOverviewThisMonth()
570
+	{
571
+		if ($this->capabilities->current_user_can(
572
+			'ee_read_registrations',
573
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month'
574
+		)) {
575
+			$this->admin_bar->add_menu(
576
+				array(
577
+					'id'     => 'espresso-toolbar-registrations-month',
578
+					'parent' => 'espresso-toolbar-registrations',
579
+					'title'  => esc_html__('This Month', 'event_espresso'),
580
+					'href'   => '', // EEH_URL::add_query_args_and_nonce(
581
+					//     array(
582
+					//         'action' => 'default',
583
+					//         'status' => 'month'
584
+					//     ),
585
+					//     $this->reg_admin_url
586
+					// ),
587
+					'meta'   => array(
588
+						'title'  => esc_html__('This Month', 'event_espresso'),
589
+						'target' => '',
590
+						'class'  => $this->menu_class,
591
+					),
592
+				)
593
+			);
594
+		}
595
+	}
596
+
597
+
598
+	/**
599
+	 * @return void
600
+	 */
601
+	private function addRegistrationOverviewThisMonthApproved()
602
+	{
603
+		if ($this->capabilities->current_user_can(
604
+			'ee_read_registrations',
605
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month-approved'
606
+		)) {
607
+			$this->admin_bar->add_menu(
608
+				array(
609
+					'id'     => 'espresso-toolbar-registrations-month-approved',
610
+					'parent' => 'espresso-toolbar-registrations',
611
+					'title'  => '<span class="ee-toolbar-icon"></span>'
612
+								. esc_html__('Approved', 'event_espresso'),
613
+					'href'   => EEH_URL::add_query_args_and_nonce(
614
+						array(
615
+							'action'      => 'default',
616
+							'status'      => 'month',
617
+							'_reg_status' => EEM_Registration::status_id_approved,
618
+						),
619
+						$this->reg_admin_url
620
+					),
621
+					'meta'   => array(
622
+						'title'  => esc_html__('Approved', 'event_espresso'),
623
+						'target' => '',
624
+						'class'  => $this->menu_class . ' ee-toolbar-icon-approved',
625
+					),
626
+				)
627
+			);
628
+		}
629
+	}
630
+
631
+
632
+	/**
633
+	 * @return void
634
+	 */
635
+	private function addRegistrationOverviewThisMonthPending()
636
+	{
637
+		if ($this->capabilities->current_user_can(
638
+			'ee_read_registrations',
639
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month-pending'
640
+		)) {
641
+			$this->admin_bar->add_menu(
642
+				array(
643
+					'id'     => 'espresso-toolbar-registrations-month-pending',
644
+					'parent' => 'espresso-toolbar-registrations',
645
+					'title'  => '<span class="ee-toolbar-icon"></span>'
646
+								. esc_html__('Pending', 'event_espresso'),
647
+					'href'   => EEH_URL::add_query_args_and_nonce(
648
+						array(
649
+							'action'      => 'default',
650
+							'status'      => 'month',
651
+							'_reg_status' => EEM_Registration::status_id_pending_payment,
652
+						),
653
+						$this->reg_admin_url
654
+					),
655
+					'meta'   => array(
656
+						'title'  => esc_html__('Pending', 'event_espresso'),
657
+						'target' => '',
658
+						'class'  => $this->menu_class . ' ee-toolbar-icon-pending',
659
+					),
660
+				)
661
+			);
662
+		}
663
+	}
664
+
665
+
666
+	/**
667
+	 * @return void
668
+	 */
669
+	private function addRegistrationOverviewThisMonthNotApproved()
670
+	{
671
+		if ($this->capabilities->current_user_can(
672
+			'ee_read_registrations',
673
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month-not-approved'
674
+		)) {
675
+			$this->admin_bar->add_menu(
676
+				array(
677
+					'id'     => 'espresso-toolbar-registrations-month-not-approved',
678
+					'parent' => 'espresso-toolbar-registrations',
679
+					'title'  => '<span class="ee-toolbar-icon"></span>'
680
+								. esc_html__('Not Approved', 'event_espresso'),
681
+					'href'   => EEH_URL::add_query_args_and_nonce(
682
+						array(
683
+							'action'      => 'default',
684
+							'status'      => 'month',
685
+							'_reg_status' => EEM_Registration::status_id_not_approved,
686
+						),
687
+						$this->reg_admin_url
688
+					),
689
+					'meta'   => array(
690
+						'title'  => esc_html__('Not Approved', 'event_espresso'),
691
+						'target' => '',
692
+						'class'  => $this->menu_class . ' ee-toolbar-icon-not-approved',
693
+					),
694
+				)
695
+			);
696
+		}
697
+	}
698
+
699
+
700
+	/**
701
+	 * @return void
702
+	 */
703
+	private function addRegistrationOverviewThisMonthCancelled()
704
+	{
705
+		if ($this->capabilities->current_user_can(
706
+			'ee_read_registrations',
707
+			'ee_admin_bar_menu_espresso-toolbar-registrations-month-cancelled'
708
+		)) {
709
+			$this->admin_bar->add_menu(
710
+				array(
711
+					'id'     => 'espresso-toolbar-registrations-month-cancelled',
712
+					'parent' => 'espresso-toolbar-registrations',
713
+					'title'  => '<span class="ee-toolbar-icon"></span>'
714
+								. esc_html__('Cancelled', 'event_espresso'),
715
+					'href'   => EEH_URL::add_query_args_and_nonce(
716
+						array(
717
+							'action'      => 'default',
718
+							'status'      => 'month',
719
+							'_reg_status' => EEM_Registration::status_id_cancelled,
720
+						),
721
+						$this->reg_admin_url
722
+					),
723
+					'meta'   => array(
724
+						'title'  => esc_html__('Cancelled', 'event_espresso'),
725
+						'target' => '',
726
+						'class'  => $this->menu_class . ' ee-toolbar-icon-cancelled',
727
+					),
728
+				)
729
+			);
730
+		}
731
+	}
732
+
733
+
734
+	/**
735
+	 * @return void
736
+	 */
737
+	private function addExtensionsAndServices()
738
+	{
739
+		if ($this->capabilities->current_user_can(
740
+			'ee_read_ee',
741
+			'ee_admin_bar_menu_espresso-toolbar-extensions-and-services'
742
+		)) {
743
+			$this->admin_bar->add_menu(
744
+				array(
745
+					'id'     => 'espresso-toolbar-extensions-and-services',
746
+					'parent' => 'espresso-toolbar',
747
+					'title'  => '<span class="ee-toolbar-icon"></span>'
748
+								. esc_html__('Extensions & Services', 'event_espresso'),
749
+					'href'   => admin_url('admin.php?page=espresso_packages'),
750
+					'meta'   => array(
751
+						'title'  => esc_html__('Extensions & Services', 'event_espresso'),
752
+						'target' => '',
753
+						'class'  => $this->menu_class,
754
+					),
755
+				)
756
+			);
757
+		}
758
+	}
759 759
 }
Please login to merge, or discard this patch.
core/db_models/EEM_Soft_Delete_Base.model.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -205,7 +205,7 @@  discard block
 block discarded – undo
205 205
      *
206 206
      * @param array  $query_params like EEM_Base::get_all
207 207
      * @param string $field_to_sum
208
-     * @return int
208
+     * @return double
209 209
      */
210 210
     public function sum_deleted($query_params = null, $field_to_sum = null)
211 211
     {
@@ -270,7 +270,7 @@  discard block
 block discarded – undo
270 270
      * @param boolean $allow_blocking if TRUE, matched objects will only be deleted if there is no related model info
271 271
      *                                that blocks it (ie, there' sno other data that depends on this data); if false, deletes regardless of other objects
272 272
      *                                which may depend on it. Its generally advisable to always leave this as TRUE, otherwise you could easily corrupt your DB
273
-     * @return boolean success
273
+     * @return integer success
274 274
      */
275 275
     public function delete_permanently($query_params = array(), $allow_blocking = true)
276 276
     {
Please login to merge, or discard this patch.
Indentation   +359 added lines, -359 removed lines patch added patch discarded remove patch
@@ -26,363 +26,363 @@
 block discarded – undo
26 26
 abstract class EEM_Soft_Delete_Base extends EEM_Base
27 27
 {
28 28
 
29
-    /**
30
-     * @param null $timezone
31
-     */
32
-    protected function __construct($timezone = null)
33
-    {
34
-        if (! $this->_default_where_conditions_strategy instanceof EE_Default_Where_Conditions) {
35
-            $this->_default_where_conditions_strategy = new EE_Soft_Delete_Where_Conditions();
36
-        }
37
-        parent::__construct($timezone);
38
-    }
39
-
40
-
41
-
42
-    /**
43
-     * Searches for field on this model of type 'deleted_flag'. if it is found,
44
-     * returns it's name.
45
-     *
46
-     * @return string
47
-     * @throws EE_Error
48
-     */
49
-    public function deleted_field_name()
50
-    {
51
-        $field = $this->get_a_field_of_type('EE_Trashed_Flag_Field');
52
-        if ($field) {
53
-            return $field->get_name();
54
-        } else {
55
-            throw new EE_Error(sprintf(__(
56
-                'We are trying to find the deleted flag field on %s, but none was found. Are you sure there is a field of type EE_Trashed_Flag_Field in %s constructor?',
57
-                'event_espresso'
58
-            ), get_class($this), get_class($this)));
59
-        }
60
-    }
61
-
62
-
63
-
64
-    /**
65
-     * Gets one item that's been deleted, according to $query_params
66
-     *
67
-     * @param array $query_params like EEM_Base::get_all's $query_params
68
-     * @return EE_Soft_Delete_Base_Class
69
-     */
70
-    public function get_one_deleted($query_params = array())
71
-    {
72
-        $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params);
73
-        return parent::get_one($query_params);
74
-    }
75
-
76
-
77
-
78
-    /**
79
-     * Gets one item from the DB, regardless of whether it's been soft-deleted or not
80
-     *
81
-     * @param array $query_params like EEM_base::get_all's $query_params
82
-     * @return EE_Soft_Delete_Base_Class
83
-     */
84
-    public function get_one_deleted_or_undeleted($query_params = array())
85
-    {
86
-        $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
87
-        return parent::get_one($query_params);
88
-    }
89
-
90
-
91
-
92
-    /**
93
-     * Gets the item indicated by its ID. But if it's soft-deleted, pretends it doesn't exist.
94
-     *
95
-     * @param int|string $id
96
-     * @return EE_Soft_Delete_Base_Class
97
-     */
98
-    public function get_one_by_ID_but_ignore_deleted($id)
99
-    {
100
-        return $this->get_one(
101
-            $this->alter_query_params_to_restrict_by_ID(
102
-                $id,
103
-                array('default_where_conditions' => 'default')
104
-            )
105
-        );
106
-    }
107
-
108
-
109
-
110
-    /**
111
-     * Counts all the deleted/trashed items
112
-     *
113
-     * @param array  $query_params like EEM_Base::get_all
114
-     * @param string $field_to_count
115
-     * @param bool   $distinct     if we want to only count the distinct values for the column then you can trigger that by the setting $distinct to TRUE;
116
-     * @return int
117
-     */
118
-    public function count_deleted($query_params = null, $field_to_count = null, $distinct = false)
119
-    {
120
-        $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params);
121
-        return parent::count($query_params, $field_to_count, $distinct);
122
-    }
123
-
124
-
125
-
126
-    /**
127
-     * Alters the query params so that only trashed/soft-deleted items are considered
128
-     *
129
-     * @param array $query_params like EEM_Base::get_all's $query_params
130
-     * @return array like EEM_Base::get_all's $query_params
131
-     */
132
-    protected function _alter_query_params_so_only_trashed_items_included($query_params)
133
-    {
134
-        $deletedFlagFieldName = $this->deleted_field_name();
135
-        $query_params[0][ $deletedFlagFieldName ] = true;
136
-        return $query_params;
137
-    }
138
-
139
-
140
-
141
-    /**
142
-     * Alters the query params so that only trashed/soft-deleted items are considered
143
-     *
144
-     * @param array $query_params like EEM_Base::get_all's $query_params
145
-     * @return array like EEM_Base::get_all's $query_params
146
-     */
147
-    public function alter_query_params_so_only_trashed_items_included($query_params)
148
-    {
149
-        return $this->_alter_query_params_so_only_trashed_items_included($query_params);
150
-    }
151
-
152
-
153
-
154
-    /**
155
-     * Alters the query params so each item's deleted status is ignored.
156
-     *
157
-     * @param array $query_params
158
-     * @return array
159
-     */
160
-    public function alter_query_params_so_deleted_and_undeleted_items_included($query_params = array())
161
-    {
162
-        return $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
163
-    }
164
-
165
-
166
-
167
-    /**
168
-     * Alters the query params so each item's deleted status is ignored.
169
-     *
170
-     * @param array $query_params
171
-     * @return array
172
-     */
173
-    protected function _alter_query_params_so_deleted_and_undeleted_items_included($query_params)
174
-    {
175
-        if (! isset($query_params['default_where_conditions'])) {
176
-            $query_params['default_where_conditions'] = 'minimum';
177
-        }
178
-        return $query_params;
179
-    }
180
-
181
-
182
-
183
-    /**
184
-     * Counts all deleted and undeleted items
185
-     *
186
-     * @param array  $query_params like EEM_Base::get_all
187
-     * @param string $field_to_count
188
-     * @param bool   $distinct     if we want to only count the distinct values for the column then you can trigger that by the setting $distinct to TRUE;
189
-     * @return int
190
-     */
191
-    public function count_deleted_and_undeleted($query_params = null, $field_to_count = null, $distinct = false)
192
-    {
193
-        $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
194
-        return parent::count($query_params, $field_to_count, $distinct);
195
-    }
196
-
197
-
198
-
199
-    /**
200
-     * Sum all the deleted items.
201
-     *
202
-     * @param array  $query_params like EEM_Base::get_all
203
-     * @param string $field_to_sum
204
-     * @return int
205
-     */
206
-    public function sum_deleted($query_params = null, $field_to_sum = null)
207
-    {
208
-        $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params);
209
-        return parent::sum($query_params, $field_to_sum);
210
-    }
211
-
212
-
213
-
214
-    /**
215
-     * Sums all the deleted and undeleted items.
216
-     *
217
-     * @param array  $query_params lik eEEM_Base::get_all
218
-     * @param string $field_to_sum
219
-     * @return int
220
-     */
221
-    public function sum_deleted_and_undeleted($query_params = null, $field_to_sum = null)
222
-    {
223
-        $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
224
-        parent::sum($query_params, $field_to_sum);
225
-    }
226
-
227
-
228
-
229
-    /**
230
-     * Gets all deleted and undeleted mode objects from the db that meet the criteria, regardless of
231
-     * whether they've been soft-deleted or not
232
-     *
233
-     * @param array $query_params like EEM_Base::get_all
234
-     * @return EE_Soft_Delete_Base_Class[]
235
-     */
236
-    public function get_all_deleted_and_undeleted($query_params = array())
237
-    {
238
-        $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
239
-        return parent::get_all($query_params);
240
-    }
241
-
242
-
243
-
244
-    /**
245
-     * For 'soft deletable' models, gets all which ARE deleted, according to conditions specified in $query_params.
246
-     *
247
-     * @param array $query_params like EEM_Base::get_all
248
-     * @return EE_Soft_Delete_Base_Class[]
249
-     */
250
-    public function get_all_deleted($query_params = array())
251
-    {
252
-        $query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params);
253
-        return parent::get_all($query_params);
254
-    }
255
-
256
-
257
-
258
-    /**
259
-     * Permanently deletes the selected rows. When selecting rows for deletion, ignores
260
-     * whether they've been soft-deleted or not. (ie, you don't have to soft-delete objects
261
-     * before you can permanently delete them).
262
-     * Because this will cause a real deletion, related models may block this deletion (ie, add an error
263
-     * and abort the delete)
264
-     *
265
-     * @param array   $query_params   like EEM_Base::get_all
266
-     * @param boolean $allow_blocking if TRUE, matched objects will only be deleted if there is no related model info
267
-     *                                that blocks it (ie, there' sno other data that depends on this data); if false, deletes regardless of other objects
268
-     *                                which may depend on it. Its generally advisable to always leave this as TRUE, otherwise you could easily corrupt your DB
269
-     * @return boolean success
270
-     */
271
-    public function delete_permanently($query_params = array(), $allow_blocking = true)
272
-    {
273
-        $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
274
-        return parent::delete_permanently($query_params, $allow_blocking);
275
-    }
276
-
277
-
278
-
279
-    /**
280
-     * Restores a particular item by its ID (primary key). Ignores the fact whether the item
281
-     * has been soft-deleted or not.
282
-     *
283
-     * @param mixed $ID int if primary key is an int, string otherwise
284
-     * @return boolean success
285
-     */
286
-    public function restore_by_ID($ID = false)
287
-    {
288
-        return $this->delete_or_restore_by_ID(false, $ID);
289
-    }
290
-
291
-
292
-
293
-    /**
294
-     * For deleting or restoring a particular item. Note that this model is a SOFT-DELETABLE model! However,
295
-     * this function will ignore whether the items have been soft-deleted or not.
296
-     *
297
-     * @param boolean $delete true for delete, false for restore
298
-     * @param mixed   $ID     int if primary key is an int, string otherwise
299
-     * @return boolean
300
-     */
301
-    public function delete_or_restore_by_ID($delete = true, $ID = false)
302
-    {
303
-        if (! $ID) {
304
-            return false;
305
-        }
306
-        if ($this->delete_or_restore(
307
-            $delete,
308
-            $this->alter_query_params_to_restrict_by_ID($ID)
309
-        )
310
-        ) {
311
-            return true;
312
-        } else {
313
-            return false;
314
-        }
315
-    }
316
-
317
-
318
-
319
-    /**
320
-     * Overrides parent's 'delete' method to instead do a soft delete on all rows that
321
-     * meet the criteria in $where_col_n_values. This particular function ignores whether the items have been soft-deleted or not.
322
-     * Note: because this item will be soft-deleted only,
323
-     * doesn't block because of model dependencies
324
-     *
325
-     * @param array $query_params like EEM_Base::get_all
326
-     * @param bool  $block_deletes
327
-     * @return boolean
328
-     */
329
-    public function delete($query_params = array(), $block_deletes = false)
330
-    {
331
-        // no matter what, we WON'T block soft deletes.
332
-        return $this->delete_or_restore(true, $query_params);
333
-    }
334
-
335
-
336
-
337
-    /**
338
-     * 'Un-deletes' the chosen items. Note that this model is a SOFT-DELETABLE model! That means that, by default, trashed/soft-deleted
339
-     * items are ignored in queries. However, this particular function ignores whether the items have been soft-deleted or not.
340
-     *
341
-     * @param array $query_params like EEM_Base::get_all
342
-     * @return boolean
343
-     */
344
-    public function restore($query_params = array())
345
-    {
346
-        return $this->delete_or_restore(false, $query_params);
347
-    }
348
-
349
-
350
-
351
-    /**
352
-     * Performs deletes or restores on items. Both soft-deleted and non-soft-deleted items considered.
353
-     *
354
-     * @param boolean $delete       true to indicate deletion, false to indicate restoration
355
-     * @param array   $query_params like EEM_Base::get_all
356
-     * @return boolean
357
-     */
358
-    public function delete_or_restore($delete = true, $query_params = array())
359
-    {
360
-        $deletedFlagFieldName = $this->deleted_field_name();
361
-        $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
362
-        if ($this->update(array($deletedFlagFieldName => $delete), $query_params)) {
363
-            return true;
364
-        } else {
365
-            return false;
366
-        }
367
-    }
368
-
369
-
370
-
371
-    /**
372
-     * Updates all the items of this model which match the $query params, regardless of whether
373
-     * they've been soft-deleted or not
374
-     *
375
-     * @param array   $fields_n_values         like EEM_Base::update's $fields_n_value
376
-     * @param array   $query_params            like EEM_base::get_all's $query_params
377
-     * @param boolean $keep_model_objs_in_sync if TRUE, makes sure we ALSO update model objects
378
-     *                                         in this model's entity map according to $fields_n_values that match $query_params. This
379
-     *                                         obviously has some overhead, so you can disable it by setting this to FALSE, but
380
-     *                                         be aware that model objects being used could get out-of-sync with the database
381
-     * @return int number of items updated
382
-     */
383
-    public function update_deleted_and_undeleted($fields_n_values, $query_params, $keep_model_objs_in_sync = true)
384
-    {
385
-        $query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
386
-        return $this->update($fields_n_values, $query_params, $keep_model_objs_in_sync);
387
-    }
29
+	/**
30
+	 * @param null $timezone
31
+	 */
32
+	protected function __construct($timezone = null)
33
+	{
34
+		if (! $this->_default_where_conditions_strategy instanceof EE_Default_Where_Conditions) {
35
+			$this->_default_where_conditions_strategy = new EE_Soft_Delete_Where_Conditions();
36
+		}
37
+		parent::__construct($timezone);
38
+	}
39
+
40
+
41
+
42
+	/**
43
+	 * Searches for field on this model of type 'deleted_flag'. if it is found,
44
+	 * returns it's name.
45
+	 *
46
+	 * @return string
47
+	 * @throws EE_Error
48
+	 */
49
+	public function deleted_field_name()
50
+	{
51
+		$field = $this->get_a_field_of_type('EE_Trashed_Flag_Field');
52
+		if ($field) {
53
+			return $field->get_name();
54
+		} else {
55
+			throw new EE_Error(sprintf(__(
56
+				'We are trying to find the deleted flag field on %s, but none was found. Are you sure there is a field of type EE_Trashed_Flag_Field in %s constructor?',
57
+				'event_espresso'
58
+			), get_class($this), get_class($this)));
59
+		}
60
+	}
61
+
62
+
63
+
64
+	/**
65
+	 * Gets one item that's been deleted, according to $query_params
66
+	 *
67
+	 * @param array $query_params like EEM_Base::get_all's $query_params
68
+	 * @return EE_Soft_Delete_Base_Class
69
+	 */
70
+	public function get_one_deleted($query_params = array())
71
+	{
72
+		$query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params);
73
+		return parent::get_one($query_params);
74
+	}
75
+
76
+
77
+
78
+	/**
79
+	 * Gets one item from the DB, regardless of whether it's been soft-deleted or not
80
+	 *
81
+	 * @param array $query_params like EEM_base::get_all's $query_params
82
+	 * @return EE_Soft_Delete_Base_Class
83
+	 */
84
+	public function get_one_deleted_or_undeleted($query_params = array())
85
+	{
86
+		$query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
87
+		return parent::get_one($query_params);
88
+	}
89
+
90
+
91
+
92
+	/**
93
+	 * Gets the item indicated by its ID. But if it's soft-deleted, pretends it doesn't exist.
94
+	 *
95
+	 * @param int|string $id
96
+	 * @return EE_Soft_Delete_Base_Class
97
+	 */
98
+	public function get_one_by_ID_but_ignore_deleted($id)
99
+	{
100
+		return $this->get_one(
101
+			$this->alter_query_params_to_restrict_by_ID(
102
+				$id,
103
+				array('default_where_conditions' => 'default')
104
+			)
105
+		);
106
+	}
107
+
108
+
109
+
110
+	/**
111
+	 * Counts all the deleted/trashed items
112
+	 *
113
+	 * @param array  $query_params like EEM_Base::get_all
114
+	 * @param string $field_to_count
115
+	 * @param bool   $distinct     if we want to only count the distinct values for the column then you can trigger that by the setting $distinct to TRUE;
116
+	 * @return int
117
+	 */
118
+	public function count_deleted($query_params = null, $field_to_count = null, $distinct = false)
119
+	{
120
+		$query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params);
121
+		return parent::count($query_params, $field_to_count, $distinct);
122
+	}
123
+
124
+
125
+
126
+	/**
127
+	 * Alters the query params so that only trashed/soft-deleted items are considered
128
+	 *
129
+	 * @param array $query_params like EEM_Base::get_all's $query_params
130
+	 * @return array like EEM_Base::get_all's $query_params
131
+	 */
132
+	protected function _alter_query_params_so_only_trashed_items_included($query_params)
133
+	{
134
+		$deletedFlagFieldName = $this->deleted_field_name();
135
+		$query_params[0][ $deletedFlagFieldName ] = true;
136
+		return $query_params;
137
+	}
138
+
139
+
140
+
141
+	/**
142
+	 * Alters the query params so that only trashed/soft-deleted items are considered
143
+	 *
144
+	 * @param array $query_params like EEM_Base::get_all's $query_params
145
+	 * @return array like EEM_Base::get_all's $query_params
146
+	 */
147
+	public function alter_query_params_so_only_trashed_items_included($query_params)
148
+	{
149
+		return $this->_alter_query_params_so_only_trashed_items_included($query_params);
150
+	}
151
+
152
+
153
+
154
+	/**
155
+	 * Alters the query params so each item's deleted status is ignored.
156
+	 *
157
+	 * @param array $query_params
158
+	 * @return array
159
+	 */
160
+	public function alter_query_params_so_deleted_and_undeleted_items_included($query_params = array())
161
+	{
162
+		return $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
163
+	}
164
+
165
+
166
+
167
+	/**
168
+	 * Alters the query params so each item's deleted status is ignored.
169
+	 *
170
+	 * @param array $query_params
171
+	 * @return array
172
+	 */
173
+	protected function _alter_query_params_so_deleted_and_undeleted_items_included($query_params)
174
+	{
175
+		if (! isset($query_params['default_where_conditions'])) {
176
+			$query_params['default_where_conditions'] = 'minimum';
177
+		}
178
+		return $query_params;
179
+	}
180
+
181
+
182
+
183
+	/**
184
+	 * Counts all deleted and undeleted items
185
+	 *
186
+	 * @param array  $query_params like EEM_Base::get_all
187
+	 * @param string $field_to_count
188
+	 * @param bool   $distinct     if we want to only count the distinct values for the column then you can trigger that by the setting $distinct to TRUE;
189
+	 * @return int
190
+	 */
191
+	public function count_deleted_and_undeleted($query_params = null, $field_to_count = null, $distinct = false)
192
+	{
193
+		$query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
194
+		return parent::count($query_params, $field_to_count, $distinct);
195
+	}
196
+
197
+
198
+
199
+	/**
200
+	 * Sum all the deleted items.
201
+	 *
202
+	 * @param array  $query_params like EEM_Base::get_all
203
+	 * @param string $field_to_sum
204
+	 * @return int
205
+	 */
206
+	public function sum_deleted($query_params = null, $field_to_sum = null)
207
+	{
208
+		$query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params);
209
+		return parent::sum($query_params, $field_to_sum);
210
+	}
211
+
212
+
213
+
214
+	/**
215
+	 * Sums all the deleted and undeleted items.
216
+	 *
217
+	 * @param array  $query_params lik eEEM_Base::get_all
218
+	 * @param string $field_to_sum
219
+	 * @return int
220
+	 */
221
+	public function sum_deleted_and_undeleted($query_params = null, $field_to_sum = null)
222
+	{
223
+		$query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
224
+		parent::sum($query_params, $field_to_sum);
225
+	}
226
+
227
+
228
+
229
+	/**
230
+	 * Gets all deleted and undeleted mode objects from the db that meet the criteria, regardless of
231
+	 * whether they've been soft-deleted or not
232
+	 *
233
+	 * @param array $query_params like EEM_Base::get_all
234
+	 * @return EE_Soft_Delete_Base_Class[]
235
+	 */
236
+	public function get_all_deleted_and_undeleted($query_params = array())
237
+	{
238
+		$query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
239
+		return parent::get_all($query_params);
240
+	}
241
+
242
+
243
+
244
+	/**
245
+	 * For 'soft deletable' models, gets all which ARE deleted, according to conditions specified in $query_params.
246
+	 *
247
+	 * @param array $query_params like EEM_Base::get_all
248
+	 * @return EE_Soft_Delete_Base_Class[]
249
+	 */
250
+	public function get_all_deleted($query_params = array())
251
+	{
252
+		$query_params = $this->_alter_query_params_so_only_trashed_items_included($query_params);
253
+		return parent::get_all($query_params);
254
+	}
255
+
256
+
257
+
258
+	/**
259
+	 * Permanently deletes the selected rows. When selecting rows for deletion, ignores
260
+	 * whether they've been soft-deleted or not. (ie, you don't have to soft-delete objects
261
+	 * before you can permanently delete them).
262
+	 * Because this will cause a real deletion, related models may block this deletion (ie, add an error
263
+	 * and abort the delete)
264
+	 *
265
+	 * @param array   $query_params   like EEM_Base::get_all
266
+	 * @param boolean $allow_blocking if TRUE, matched objects will only be deleted if there is no related model info
267
+	 *                                that blocks it (ie, there' sno other data that depends on this data); if false, deletes regardless of other objects
268
+	 *                                which may depend on it. Its generally advisable to always leave this as TRUE, otherwise you could easily corrupt your DB
269
+	 * @return boolean success
270
+	 */
271
+	public function delete_permanently($query_params = array(), $allow_blocking = true)
272
+	{
273
+		$query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
274
+		return parent::delete_permanently($query_params, $allow_blocking);
275
+	}
276
+
277
+
278
+
279
+	/**
280
+	 * Restores a particular item by its ID (primary key). Ignores the fact whether the item
281
+	 * has been soft-deleted or not.
282
+	 *
283
+	 * @param mixed $ID int if primary key is an int, string otherwise
284
+	 * @return boolean success
285
+	 */
286
+	public function restore_by_ID($ID = false)
287
+	{
288
+		return $this->delete_or_restore_by_ID(false, $ID);
289
+	}
290
+
291
+
292
+
293
+	/**
294
+	 * For deleting or restoring a particular item. Note that this model is a SOFT-DELETABLE model! However,
295
+	 * this function will ignore whether the items have been soft-deleted or not.
296
+	 *
297
+	 * @param boolean $delete true for delete, false for restore
298
+	 * @param mixed   $ID     int if primary key is an int, string otherwise
299
+	 * @return boolean
300
+	 */
301
+	public function delete_or_restore_by_ID($delete = true, $ID = false)
302
+	{
303
+		if (! $ID) {
304
+			return false;
305
+		}
306
+		if ($this->delete_or_restore(
307
+			$delete,
308
+			$this->alter_query_params_to_restrict_by_ID($ID)
309
+		)
310
+		) {
311
+			return true;
312
+		} else {
313
+			return false;
314
+		}
315
+	}
316
+
317
+
318
+
319
+	/**
320
+	 * Overrides parent's 'delete' method to instead do a soft delete on all rows that
321
+	 * meet the criteria in $where_col_n_values. This particular function ignores whether the items have been soft-deleted or not.
322
+	 * Note: because this item will be soft-deleted only,
323
+	 * doesn't block because of model dependencies
324
+	 *
325
+	 * @param array $query_params like EEM_Base::get_all
326
+	 * @param bool  $block_deletes
327
+	 * @return boolean
328
+	 */
329
+	public function delete($query_params = array(), $block_deletes = false)
330
+	{
331
+		// no matter what, we WON'T block soft deletes.
332
+		return $this->delete_or_restore(true, $query_params);
333
+	}
334
+
335
+
336
+
337
+	/**
338
+	 * 'Un-deletes' the chosen items. Note that this model is a SOFT-DELETABLE model! That means that, by default, trashed/soft-deleted
339
+	 * items are ignored in queries. However, this particular function ignores whether the items have been soft-deleted or not.
340
+	 *
341
+	 * @param array $query_params like EEM_Base::get_all
342
+	 * @return boolean
343
+	 */
344
+	public function restore($query_params = array())
345
+	{
346
+		return $this->delete_or_restore(false, $query_params);
347
+	}
348
+
349
+
350
+
351
+	/**
352
+	 * Performs deletes or restores on items. Both soft-deleted and non-soft-deleted items considered.
353
+	 *
354
+	 * @param boolean $delete       true to indicate deletion, false to indicate restoration
355
+	 * @param array   $query_params like EEM_Base::get_all
356
+	 * @return boolean
357
+	 */
358
+	public function delete_or_restore($delete = true, $query_params = array())
359
+	{
360
+		$deletedFlagFieldName = $this->deleted_field_name();
361
+		$query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
362
+		if ($this->update(array($deletedFlagFieldName => $delete), $query_params)) {
363
+			return true;
364
+		} else {
365
+			return false;
366
+		}
367
+	}
368
+
369
+
370
+
371
+	/**
372
+	 * Updates all the items of this model which match the $query params, regardless of whether
373
+	 * they've been soft-deleted or not
374
+	 *
375
+	 * @param array   $fields_n_values         like EEM_Base::update's $fields_n_value
376
+	 * @param array   $query_params            like EEM_base::get_all's $query_params
377
+	 * @param boolean $keep_model_objs_in_sync if TRUE, makes sure we ALSO update model objects
378
+	 *                                         in this model's entity map according to $fields_n_values that match $query_params. This
379
+	 *                                         obviously has some overhead, so you can disable it by setting this to FALSE, but
380
+	 *                                         be aware that model objects being used could get out-of-sync with the database
381
+	 * @return int number of items updated
382
+	 */
383
+	public function update_deleted_and_undeleted($fields_n_values, $query_params, $keep_model_objs_in_sync = true)
384
+	{
385
+		$query_params = $this->_alter_query_params_so_deleted_and_undeleted_items_included($query_params);
386
+		return $this->update($fields_n_values, $query_params, $keep_model_objs_in_sync);
387
+	}
388 388
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -31,7 +31,7 @@  discard block
 block discarded – undo
31 31
      */
32 32
     protected function __construct($timezone = null)
33 33
     {
34
-        if (! $this->_default_where_conditions_strategy instanceof EE_Default_Where_Conditions) {
34
+        if ( ! $this->_default_where_conditions_strategy instanceof EE_Default_Where_Conditions) {
35 35
             $this->_default_where_conditions_strategy = new EE_Soft_Delete_Where_Conditions();
36 36
         }
37 37
         parent::__construct($timezone);
@@ -132,7 +132,7 @@  discard block
 block discarded – undo
132 132
     protected function _alter_query_params_so_only_trashed_items_included($query_params)
133 133
     {
134 134
         $deletedFlagFieldName = $this->deleted_field_name();
135
-        $query_params[0][ $deletedFlagFieldName ] = true;
135
+        $query_params[0][$deletedFlagFieldName] = true;
136 136
         return $query_params;
137 137
     }
138 138
 
@@ -172,7 +172,7 @@  discard block
 block discarded – undo
172 172
      */
173 173
     protected function _alter_query_params_so_deleted_and_undeleted_items_included($query_params)
174 174
     {
175
-        if (! isset($query_params['default_where_conditions'])) {
175
+        if ( ! isset($query_params['default_where_conditions'])) {
176 176
             $query_params['default_where_conditions'] = 'minimum';
177 177
         }
178 178
         return $query_params;
@@ -300,7 +300,7 @@  discard block
 block discarded – undo
300 300
      */
301 301
     public function delete_or_restore_by_ID($delete = true, $ID = false)
302 302
     {
303
-        if (! $ID) {
303
+        if ( ! $ID) {
304 304
             return false;
305 305
         }
306 306
         if ($this->delete_or_restore(
Please login to merge, or discard this patch.
admin/extend/messages/Custom_Messages_Template_List_Table.class.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -151,7 +151,7 @@
 block discarded – undo
151 151
      * This provides a count of events using this custom template
152 152
      *
153 153
      * @param  EE_Message_Template_Group $item message_template group data
154
-     * @return string column output
154
+     * @return integer column output
155 155
      */
156 156
     public function column_events($item)
157 157
     {
Please login to merge, or discard this patch.
Indentation   +225 added lines, -225 removed lines patch added patch discarded remove patch
@@ -12,252 +12,252 @@
 block discarded – undo
12 12
 class Custom_Messages_Template_List_Table extends Messages_Template_List_Table
13 13
 {
14 14
 
15
-    /**
16
-     * Setup initial data.
17
-     */
18
-    protected function _setup_data()
19
-    {
20
-        $this->_data = $this->get_admin_page()->get_message_templates(
21
-            $this->_per_page,
22
-            $this->_view,
23
-            false,
24
-            false,
25
-            false
26
-        );
27
-        $this->_all_data_count = $this->get_admin_page()->get_message_templates(
28
-            $this->_per_page,
29
-            $this->_view,
30
-            true,
31
-            true,
32
-            false
33
-        );
34
-    }
15
+	/**
16
+	 * Setup initial data.
17
+	 */
18
+	protected function _setup_data()
19
+	{
20
+		$this->_data = $this->get_admin_page()->get_message_templates(
21
+			$this->_per_page,
22
+			$this->_view,
23
+			false,
24
+			false,
25
+			false
26
+		);
27
+		$this->_all_data_count = $this->get_admin_page()->get_message_templates(
28
+			$this->_per_page,
29
+			$this->_view,
30
+			true,
31
+			true,
32
+			false
33
+		);
34
+	}
35 35
 
36 36
 
37
-    /**
38
-     * Set initial properties
39
-     */
40
-    protected function _set_properties()
41
-    {
42
-        parent::_set_properties();
43
-        $this->_wp_list_args = array(
44
-            'singular' => esc_html__('Message Template Group', 'event_espresso'),
45
-            'plural'   => esc_html__('Message Template', 'event_espresso'),
46
-            'ajax'     => true, // for now,
47
-            'screen'   => $this->get_admin_page()->get_current_screen()->id,
48
-        );
37
+	/**
38
+	 * Set initial properties
39
+	 */
40
+	protected function _set_properties()
41
+	{
42
+		parent::_set_properties();
43
+		$this->_wp_list_args = array(
44
+			'singular' => esc_html__('Message Template Group', 'event_espresso'),
45
+			'plural'   => esc_html__('Message Template', 'event_espresso'),
46
+			'ajax'     => true, // for now,
47
+			'screen'   => $this->get_admin_page()->get_current_screen()->id,
48
+		);
49 49
 
50
-        $this->_columns = array_merge(
51
-            array(
52
-                'cb'   => '<input type="checkbox" />',
53
-                'name' => esc_html__('Template Name', 'event_espresso'),
54
-            ),
55
-            $this->_columns,
56
-            array(
57
-                'events'  => esc_html__('Events', 'event_espresso'),
58
-                'actions' => '',
59
-            )
60
-        );
61
-    }
50
+		$this->_columns = array_merge(
51
+			array(
52
+				'cb'   => '<input type="checkbox" />',
53
+				'name' => esc_html__('Template Name', 'event_espresso'),
54
+			),
55
+			$this->_columns,
56
+			array(
57
+				'events'  => esc_html__('Events', 'event_espresso'),
58
+				'actions' => '',
59
+			)
60
+		);
61
+	}
62 62
 
63 63
 
64
-    /**
65
-     * Custom message for when there are no items found.
66
-     *
67
-     * @since 4.3.0
68
-     */
69
-    public function no_items()
70
-    {
71
-        if ($this->_view !== 'trashed') {
72
-            printf(
73
-                esc_html__(
74
-                    '%sNo Custom Templates found.%s To create your first custom message template, go to the "Default Message Templates" tab and click the "Create Custom" button next to the template you want to use as a base for the new one.',
75
-                    'event_espresso'
76
-                ),
77
-                '<strong>',
78
-                '</strong>'
79
-            );
80
-        } else {
81
-            parent::no_items();
82
-        }
83
-    }
64
+	/**
65
+	 * Custom message for when there are no items found.
66
+	 *
67
+	 * @since 4.3.0
68
+	 */
69
+	public function no_items()
70
+	{
71
+		if ($this->_view !== 'trashed') {
72
+			printf(
73
+				esc_html__(
74
+					'%sNo Custom Templates found.%s To create your first custom message template, go to the "Default Message Templates" tab and click the "Create Custom" button next to the template you want to use as a base for the new one.',
75
+					'event_espresso'
76
+				),
77
+				'<strong>',
78
+				'</strong>'
79
+			);
80
+		} else {
81
+			parent::no_items();
82
+		}
83
+	}
84 84
 
85 85
 
86
-    /**
87
-     * @param EE_Message_Template_Group $item
88
-     * @return string
89
-     */
90
-    public function column_cb($item)
91
-    {
92
-        return sprintf('<input type="checkbox" name="checkbox[%s]" value="1" />', $item->GRP_ID());
93
-    }
86
+	/**
87
+	 * @param EE_Message_Template_Group $item
88
+	 * @return string
89
+	 */
90
+	public function column_cb($item)
91
+	{
92
+		return sprintf('<input type="checkbox" name="checkbox[%s]" value="1" />', $item->GRP_ID());
93
+	}
94 94
 
95 95
 
96
-    /**
97
-     * @param EE_Message_Template_Group $item
98
-     * @return string
99
-     */
100
-    public function column_name($item)
101
-    {
102
-        return '<p>' . $item->name() . '</p>';
103
-    }
96
+	/**
97
+	 * @param EE_Message_Template_Group $item
98
+	 * @return string
99
+	 */
100
+	public function column_name($item)
101
+	{
102
+		return '<p>' . $item->name() . '</p>';
103
+	}
104 104
 
105 105
 
106
-    /**
107
-     * @param EE_Message_Template_Group $item
108
-     * @return string
109
-     */
110
-    public function column_actions($item)
111
-    {
112
-        if (EE_Registry::instance()->CAP->current_user_can(
113
-            'ee_edit_messages',
114
-            'espresso_messages_add_new_message_template'
115
-        )) {
116
-            $create_args = array(
117
-                'GRP_ID'       => $item->ID(),
118
-                'messenger'    => $item->messenger(),
119
-                'message_type' => $item->message_type(),
120
-                'action'       => 'add_new_message_template',
121
-            );
122
-            $create_link = EE_Admin_Page::add_query_args_and_nonce($create_args, EE_MSG_ADMIN_URL);
123
-            return sprintf(
124
-                '<p><a href="%s" class="button button-small">%s</a></p>',
125
-                $create_link,
126
-                esc_html__('Create Custom', 'event_espresso')
127
-            );
128
-        }
129
-        return '';
130
-    }
106
+	/**
107
+	 * @param EE_Message_Template_Group $item
108
+	 * @return string
109
+	 */
110
+	public function column_actions($item)
111
+	{
112
+		if (EE_Registry::instance()->CAP->current_user_can(
113
+			'ee_edit_messages',
114
+			'espresso_messages_add_new_message_template'
115
+		)) {
116
+			$create_args = array(
117
+				'GRP_ID'       => $item->ID(),
118
+				'messenger'    => $item->messenger(),
119
+				'message_type' => $item->message_type(),
120
+				'action'       => 'add_new_message_template',
121
+			);
122
+			$create_link = EE_Admin_Page::add_query_args_and_nonce($create_args, EE_MSG_ADMIN_URL);
123
+			return sprintf(
124
+				'<p><a href="%s" class="button button-small">%s</a></p>',
125
+				$create_link,
126
+				esc_html__('Create Custom', 'event_espresso')
127
+			);
128
+		}
129
+		return '';
130
+	}
131 131
 
132
-    /**
133
-     * Set the view counts on the _views property
134
-     */
135
-    protected function _add_view_counts()
136
-    {
137
-        foreach ($this->_views as $view => $args) {
138
-            $this->_views[ $view ]['count'] = $this->get_admin_page()->get_message_templates(
139
-                $this->_per_page,
140
-                $view,
141
-                true,
142
-                true,
143
-                false
144
-            );
145
-        }
146
-    }
132
+	/**
133
+	 * Set the view counts on the _views property
134
+	 */
135
+	protected function _add_view_counts()
136
+	{
137
+		foreach ($this->_views as $view => $args) {
138
+			$this->_views[ $view ]['count'] = $this->get_admin_page()->get_message_templates(
139
+				$this->_per_page,
140
+				$view,
141
+				true,
142
+				true,
143
+				false
144
+			);
145
+		}
146
+	}
147 147
 
148 148
 
149
-    /**
150
-     * column_events
151
-     * This provides a count of events using this custom template
152
-     *
153
-     * @param  EE_Message_Template_Group $item message_template group data
154
-     * @return string column output
155
-     */
156
-    public function column_events($item)
157
-    {
158
-        return $item->count_events();
159
-    }
149
+	/**
150
+	 * column_events
151
+	 * This provides a count of events using this custom template
152
+	 *
153
+	 * @param  EE_Message_Template_Group $item message_template group data
154
+	 * @return string column output
155
+	 */
156
+	public function column_events($item)
157
+	{
158
+		return $item->count_events();
159
+	}
160 160
 
161 161
 
162
-    /**
163
-     * Add additional actions for custom message template list view.
164
-     *
165
-     * @param EE_Message_Template_Group $item
166
-     * @return array
167
-     * @throws EE_Error
168
-     */
169
-    protected function _get_actions_for_messenger_column(EE_Message_Template_Group $item)
170
-    {
171
-        $actions = parent::_get_actions_for_messenger_column($item);
162
+	/**
163
+	 * Add additional actions for custom message template list view.
164
+	 *
165
+	 * @param EE_Message_Template_Group $item
166
+	 * @return array
167
+	 * @throws EE_Error
168
+	 */
169
+	protected function _get_actions_for_messenger_column(EE_Message_Template_Group $item)
170
+	{
171
+		$actions = parent::_get_actions_for_messenger_column($item);
172 172
 
173
-        // add additional actions for trash/restore etc.
174
-        $trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
175
-            'action'   => 'trash_message_template',
176
-            'id'       => $item->GRP_ID(),
177
-            'noheader' => true,
178
-        ), EE_MSG_ADMIN_URL);
179
-        // restore link
180
-        $restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
181
-            'action'   => 'restore_message_template',
182
-            'id'       => $item->GRP_ID(),
183
-            'noheader' => true,
184
-        ), EE_MSG_ADMIN_URL);
185
-        // delete price link
186
-        $delete_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
187
-            'action'   => 'delete_message_template',
188
-            'id'       => $item->GRP_ID(),
189
-            'noheader' => true,
190
-        ), EE_MSG_ADMIN_URL);
173
+		// add additional actions for trash/restore etc.
174
+		$trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
175
+			'action'   => 'trash_message_template',
176
+			'id'       => $item->GRP_ID(),
177
+			'noheader' => true,
178
+		), EE_MSG_ADMIN_URL);
179
+		// restore link
180
+		$restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
181
+			'action'   => 'restore_message_template',
182
+			'id'       => $item->GRP_ID(),
183
+			'noheader' => true,
184
+		), EE_MSG_ADMIN_URL);
185
+		// delete price link
186
+		$delete_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
187
+			'action'   => 'delete_message_template',
188
+			'id'       => $item->GRP_ID(),
189
+			'noheader' => true,
190
+		), EE_MSG_ADMIN_URL);
191 191
 
192
-        if (! $item->get('MTP_deleted')
193
-            && EE_Registry::instance()->CAP->current_user_can(
194
-                'ee_delete_message',
195
-                'espresso_messages_trash_message_template',
196
-                $item->ID()
197
-            )
198
-        ) {
199
-            $actions['trash'] = '<a href="'
200
-                                . $trash_lnk_url
201
-                                . '" title="'
202
-                                . esc_attr__('Move Template Group to Trash', 'event_espresso')
203
-                                . '">'
204
-                                . esc_html__('Move to Trash', 'event_espresso')
205
-                                . '</a>';
206
-        } else {
207
-            if (EE_Registry::instance()->CAP->current_user_can(
208
-                'ee_delete_message',
209
-                'espresso_messages_restore_message_template',
210
-                $item->ID()
211
-            )) {
212
-                $actions['restore'] = '<a href="'
213
-                                      . $restore_lnk_url
214
-                                      . '" title="'
215
-                                      . esc_attr__('Restore Message Template', 'event_espresso')
216
-                                      . '">'
217
-                                      . esc_html__('Restore', 'event_espresso') . '</a>';
218
-            }
192
+		if (! $item->get('MTP_deleted')
193
+			&& EE_Registry::instance()->CAP->current_user_can(
194
+				'ee_delete_message',
195
+				'espresso_messages_trash_message_template',
196
+				$item->ID()
197
+			)
198
+		) {
199
+			$actions['trash'] = '<a href="'
200
+								. $trash_lnk_url
201
+								. '" title="'
202
+								. esc_attr__('Move Template Group to Trash', 'event_espresso')
203
+								. '">'
204
+								. esc_html__('Move to Trash', 'event_espresso')
205
+								. '</a>';
206
+		} else {
207
+			if (EE_Registry::instance()->CAP->current_user_can(
208
+				'ee_delete_message',
209
+				'espresso_messages_restore_message_template',
210
+				$item->ID()
211
+			)) {
212
+				$actions['restore'] = '<a href="'
213
+									  . $restore_lnk_url
214
+									  . '" title="'
215
+									  . esc_attr__('Restore Message Template', 'event_espresso')
216
+									  . '">'
217
+									  . esc_html__('Restore', 'event_espresso') . '</a>';
218
+			}
219 219
 
220
-            if ($this->_view === 'trashed'
221
-                && EE_Registry::instance()->CAP->current_user_can(
222
-                    'ee_delete_message',
223
-                    'espresso_messages_delete_message_template',
224
-                    $item->ID()
225
-                )) {
226
-                $actions['delete'] = '<a href="'
227
-                                     . $delete_lnk_url
228
-                                     . '" title="'
229
-                                     . esc_attr__('Delete Template Group Permanently', 'event_espresso')
230
-                                     . '">'
231
-                                     . esc_html__('Delete Permanently', 'event_espresso')
232
-                                     . '</a>';
233
-            }
234
-        }
235
-        return $actions;
236
-    }
220
+			if ($this->_view === 'trashed'
221
+				&& EE_Registry::instance()->CAP->current_user_can(
222
+					'ee_delete_message',
223
+					'espresso_messages_delete_message_template',
224
+					$item->ID()
225
+				)) {
226
+				$actions['delete'] = '<a href="'
227
+									 . $delete_lnk_url
228
+									 . '" title="'
229
+									 . esc_attr__('Delete Template Group Permanently', 'event_espresso')
230
+									 . '">'
231
+									 . esc_html__('Delete Permanently', 'event_espresso')
232
+									 . '</a>';
233
+			}
234
+		}
235
+		return $actions;
236
+	}
237 237
 
238 238
 
239
-    /**
240
-     * Generate dropdown filter select input for messengers
241
-     *
242
-     * @param bool $global
243
-     * @return string
244
-     * @throws EE_Error
245
-     */
246
-    protected function _get_messengers_dropdown_filter($global = true)
247
-    {
248
-        return parent::_get_messengers_dropdown_filter(false);
249
-    }
239
+	/**
240
+	 * Generate dropdown filter select input for messengers
241
+	 *
242
+	 * @param bool $global
243
+	 * @return string
244
+	 * @throws EE_Error
245
+	 */
246
+	protected function _get_messengers_dropdown_filter($global = true)
247
+	{
248
+		return parent::_get_messengers_dropdown_filter(false);
249
+	}
250 250
 
251 251
 
252
-    /**
253
-     * Generate dropdown filter select input for message types
254
-     *
255
-     * @param bool $global
256
-     * @return string
257
-     * @throws EE_Error
258
-     */
259
-    protected function _get_message_types_dropdown_filter($global = true)
260
-    {
261
-        return parent::_get_message_types_dropdown_filter(false);
262
-    }
252
+	/**
253
+	 * Generate dropdown filter select input for message types
254
+	 *
255
+	 * @param bool $global
256
+	 * @return string
257
+	 * @throws EE_Error
258
+	 */
259
+	protected function _get_message_types_dropdown_filter($global = true)
260
+	{
261
+		return parent::_get_message_types_dropdown_filter(false);
262
+	}
263 263
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -99,7 +99,7 @@  discard block
 block discarded – undo
99 99
      */
100 100
     public function column_name($item)
101 101
     {
102
-        return '<p>' . $item->name() . '</p>';
102
+        return '<p>'.$item->name().'</p>';
103 103
     }
104 104
 
105 105
 
@@ -135,7 +135,7 @@  discard block
 block discarded – undo
135 135
     protected function _add_view_counts()
136 136
     {
137 137
         foreach ($this->_views as $view => $args) {
138
-            $this->_views[ $view ]['count'] = $this->get_admin_page()->get_message_templates(
138
+            $this->_views[$view]['count'] = $this->get_admin_page()->get_message_templates(
139 139
                 $this->_per_page,
140 140
                 $view,
141 141
                 true,
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
             'noheader' => true,
190 190
         ), EE_MSG_ADMIN_URL);
191 191
 
192
-        if (! $item->get('MTP_deleted')
192
+        if ( ! $item->get('MTP_deleted')
193 193
             && EE_Registry::instance()->CAP->current_user_can(
194 194
                 'ee_delete_message',
195 195
                 'espresso_messages_trash_message_template',
@@ -214,7 +214,7 @@  discard block
 block discarded – undo
214 214
                                       . '" title="'
215 215
                                       . esc_attr__('Restore Message Template', 'event_espresso')
216 216
                                       . '">'
217
-                                      . esc_html__('Restore', 'event_espresso') . '</a>';
217
+                                      . esc_html__('Restore', 'event_espresso').'</a>';
218 218
             }
219 219
 
220 220
             if ($this->_view === 'trashed'
Please login to merge, or discard this patch.
core/libraries/messages/EE_Message_Template_Group_Collection.lib.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -47,7 +47,7 @@
 block discarded – undo
47 47
     /**
48 48
      * This retrieves any EE_Message_Template_Group in the repo by its ID.
49 49
      *
50
-     * @param $GRP_ID
50
+     * @param integer $GRP_ID
51 51
      * @return EE_Message_Template_Group | null
52 52
      */
53 53
     public function get_by_ID($GRP_ID)
Please login to merge, or discard this patch.
Indentation   +100 added lines, -100 removed lines patch added patch discarded remove patch
@@ -14,115 +14,115 @@
 block discarded – undo
14 14
 {
15 15
 
16 16
 
17
-    /**
18
-     * EE_Message_Template_Group_Collection constructor.
19
-     */
20
-    public function __construct()
21
-    {
22
-        $this->interface = 'EE_Message_Template_Group';
23
-    }
17
+	/**
18
+	 * EE_Message_Template_Group_Collection constructor.
19
+	 */
20
+	public function __construct()
21
+	{
22
+		$this->interface = 'EE_Message_Template_Group';
23
+	}
24 24
 
25 25
 
26
-    /**
27
-     * Adds the Message Template Group object to the repository.
28
-     *
29
-     * @param           $message_template_group
30
-     * @param array|int $EVT_ID    Some templates are specific to EVT, so this is provided as a way of
31
-     *                         indexing the template by key.  If this template is shared among multiple events then
32
-     *                         include the events as an array.
33
-     * @return bool
34
-     */
35
-    public function add($message_template_group, $EVT_ID = array())
36
-    {
37
-        $EVT_ID = is_array($EVT_ID) ? $EVT_ID : (array) $EVT_ID;
38
-        if ($message_template_group instanceof $this->interface) {
39
-            $data['key'] = $this->getKey(
40
-                $message_template_group->messenger(),
41
-                $message_template_group->message_type(),
42
-                $EVT_ID
43
-            );
44
-            return parent::add($message_template_group, $data);
45
-        }
46
-        return false;
47
-    }
26
+	/**
27
+	 * Adds the Message Template Group object to the repository.
28
+	 *
29
+	 * @param           $message_template_group
30
+	 * @param array|int $EVT_ID    Some templates are specific to EVT, so this is provided as a way of
31
+	 *                         indexing the template by key.  If this template is shared among multiple events then
32
+	 *                         include the events as an array.
33
+	 * @return bool
34
+	 */
35
+	public function add($message_template_group, $EVT_ID = array())
36
+	{
37
+		$EVT_ID = is_array($EVT_ID) ? $EVT_ID : (array) $EVT_ID;
38
+		if ($message_template_group instanceof $this->interface) {
39
+			$data['key'] = $this->getKey(
40
+				$message_template_group->messenger(),
41
+				$message_template_group->message_type(),
42
+				$EVT_ID
43
+			);
44
+			return parent::add($message_template_group, $data);
45
+		}
46
+		return false;
47
+	}
48 48
 
49 49
 
50
-    /**
51
-     * This retrieves any EE_Message_Template_Group in the repo by its ID.
52
-     *
53
-     * @param $GRP_ID
54
-     * @return EE_Message_Template_Group | null
55
-     */
56
-    public function get_by_ID($GRP_ID)
57
-    {
58
-        $this->rewind();
59
-        while ($this->valid()) {
60
-            if ($this->current()->ID() === $GRP_ID) {
61
-                /** @var EE_Message_Template_Group $message_template_group */
62
-                $message_template_group = $this->current();
63
-                $this->rewind();
64
-                return $message_template_group;
65
-            }
66
-            $this->next();
67
-        }
68
-        return null;
69
-    }
50
+	/**
51
+	 * This retrieves any EE_Message_Template_Group in the repo by its ID.
52
+	 *
53
+	 * @param $GRP_ID
54
+	 * @return EE_Message_Template_Group | null
55
+	 */
56
+	public function get_by_ID($GRP_ID)
57
+	{
58
+		$this->rewind();
59
+		while ($this->valid()) {
60
+			if ($this->current()->ID() === $GRP_ID) {
61
+				/** @var EE_Message_Template_Group $message_template_group */
62
+				$message_template_group = $this->current();
63
+				$this->rewind();
64
+				return $message_template_group;
65
+			}
66
+			$this->next();
67
+		}
68
+		return null;
69
+	}
70 70
 
71 71
 
72
-    /**
73
-     * Generates a hash used to identify a given Message Template Group.
74
-     *
75
-     * @param string $messenger    The EE_messenger->name
76
-     * @param string $message_type The EE_message_type->name
77
-     * @param int    $EVT_ID       Optional.  If the template is for a specific EVT then that should be included.
78
-     * @deprecated 4.9.40.rc.017  Use getKey instead.
79
-     * @return string
80
-     */
81
-    public function get_key($messenger, $message_type, $EVT_ID = 0)
82
-    {
83
-        $EVT_ID = (array) $EVT_ID;
84
-        return $this->getKey($messenger, $message_type, $EVT_ID);
85
-    }
72
+	/**
73
+	 * Generates a hash used to identify a given Message Template Group.
74
+	 *
75
+	 * @param string $messenger    The EE_messenger->name
76
+	 * @param string $message_type The EE_message_type->name
77
+	 * @param int    $EVT_ID       Optional.  If the template is for a specific EVT then that should be included.
78
+	 * @deprecated 4.9.40.rc.017  Use getKey instead.
79
+	 * @return string
80
+	 */
81
+	public function get_key($messenger, $message_type, $EVT_ID = 0)
82
+	{
83
+		$EVT_ID = (array) $EVT_ID;
84
+		return $this->getKey($messenger, $message_type, $EVT_ID);
85
+	}
86 86
 
87 87
 
88
-    /**
89
-     * Generates a hash used to identify a given Message Template Group
90
-     * @param string    $messenger      The EE_messenger->name
91
-     * @param string    $message_type   The EE_message_type->name
92
-     * @param array     $EVT_ID         Optional.  If the template is for a specific EVT_ID (or events) then that should
93
-     *                                  be included.
94
-     * @since 4.9.40.rc.017
95
-     * @return string
96
-     */
97
-    public function getKey($messenger, $message_type, array $EVT_ID = array())
98
-    {
99
-        sort($EVT_ID);
100
-        $EVT_ID = implode(',', array_unique($EVT_ID));
101
-        return md5($messenger . $message_type . $EVT_ID);
102
-    }
88
+	/**
89
+	 * Generates a hash used to identify a given Message Template Group
90
+	 * @param string    $messenger      The EE_messenger->name
91
+	 * @param string    $message_type   The EE_message_type->name
92
+	 * @param array     $EVT_ID         Optional.  If the template is for a specific EVT_ID (or events) then that should
93
+	 *                                  be included.
94
+	 * @since 4.9.40.rc.017
95
+	 * @return string
96
+	 */
97
+	public function getKey($messenger, $message_type, array $EVT_ID = array())
98
+	{
99
+		sort($EVT_ID);
100
+		$EVT_ID = implode(',', array_unique($EVT_ID));
101
+		return md5($messenger . $message_type . $EVT_ID);
102
+	}
103 103
 
104 104
 
105
-    /**
106
-     * This returns a saved EE_Message_Template_Group object if there is one in the repository indexed by a key matching
107
-     * the given string.
108
-     *
109
-     * @param string $key @see EE_Message_Template_Group::get_key() to setup a key formatted for searching.
110
-     * @return null|EE_Message_Template_Group
111
-     */
112
-    public function get_by_key($key)
113
-    {
114
-        $this->rewind();
115
-        while ($this->valid()) {
116
-            $data = $this->getInfo();
117
-            if (isset($data['key']) && $data['key'] === $key) {
118
-                /** @var EE_Message_Template_Group $message_template_group */
119
-                $message_template_group = $this->current();
120
-                $this->rewind();
121
-                return $message_template_group;
122
-            }
123
-            $this->next();
124
-        }
125
-        return null;
126
-    }
105
+	/**
106
+	 * This returns a saved EE_Message_Template_Group object if there is one in the repository indexed by a key matching
107
+	 * the given string.
108
+	 *
109
+	 * @param string $key @see EE_Message_Template_Group::get_key() to setup a key formatted for searching.
110
+	 * @return null|EE_Message_Template_Group
111
+	 */
112
+	public function get_by_key($key)
113
+	{
114
+		$this->rewind();
115
+		while ($this->valid()) {
116
+			$data = $this->getInfo();
117
+			if (isset($data['key']) && $data['key'] === $key) {
118
+				/** @var EE_Message_Template_Group $message_template_group */
119
+				$message_template_group = $this->current();
120
+				$this->rewind();
121
+				return $message_template_group;
122
+			}
123
+			$this->next();
124
+		}
125
+		return null;
126
+	}
127 127
 
128 128
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -98,7 +98,7 @@
 block discarded – undo
98 98
     {
99 99
         sort($EVT_ID);
100 100
         $EVT_ID = implode(',', array_unique($EVT_ID));
101
-        return md5($messenger . $message_type . $EVT_ID);
101
+        return md5($messenger.$message_type.$EVT_ID);
102 102
     }
103 103
 
104 104
 
Please login to merge, or discard this patch.