Completed
Branch FET/add-loco-translate-support (7d9689)
by
unknown
06:39 queued 04:48
created
acceptance_tests/Page/TicketSelector.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -12,27 +12,27 @@
 block discarded – undo
12 12
 class TicketSelector
13 13
 {
14 14
 
15
-    /**
16
-     * Return the selector for the ticket option select input for the given event id.
17
-     * @param int|string $event_id
18
-     * @return string
19
-     */
20
-    public static function ticketOptionByEventIdSelector($event_id)
21
-    {
22
-        return "//select[@id='ticket-selector-tbl-qty-slct-$event_id-1']";
23
-    }
15
+	/**
16
+	 * Return the selector for the ticket option select input for the given event id.
17
+	 * @param int|string $event_id
18
+	 * @return string
19
+	 */
20
+	public static function ticketOptionByEventIdSelector($event_id)
21
+	{
22
+		return "//select[@id='ticket-selector-tbl-qty-slct-$event_id-1']";
23
+	}
24 24
 
25 25
 
26
-    /**
27
-     * Return the selector for the submit button for the ticket selector for the given event id.
28
-     * @param int|string $event_id
29
-     * @param bool       $admin     Used to return the selector from the context of the admin (true) or frontend (false)
30
-     * @return string
31
-     */
32
-    public static function ticketSelectionSubmitSelectorByEventId($event_id, $admin = false)
33
-    {
34
-        return $admin
35
-            ? "#ee-new-registration-step-button"
36
-            : "#ticket-selector-submit-$event_id-btn";
37
-    }
26
+	/**
27
+	 * Return the selector for the submit button for the ticket selector for the given event id.
28
+	 * @param int|string $event_id
29
+	 * @param bool       $admin     Used to return the selector from the context of the admin (true) or frontend (false)
30
+	 * @return string
31
+	 */
32
+	public static function ticketSelectionSubmitSelectorByEventId($event_id, $admin = false)
33
+	{
34
+		return $admin
35
+			? "#ee-new-registration-step-button"
36
+			: "#ticket-selector-submit-$event_id-btn";
37
+	}
38 38
 }
39 39
\ No newline at end of file
Please login to merge, or discard this patch.
acceptance_tests/Page/RegistrationsAdmin.php 1 patch
Indentation   +43 added lines, -43 removed lines patch added patch discarded remove patch
@@ -12,47 +12,47 @@
 block discarded – undo
12 12
 class RegistrationsAdmin extends CoreAdmin
13 13
 {
14 14
 
15
-    const REGISTRATION_STATUS_NOT_APPROVED = 'RNA';
16
-    const REGISTRATION_STATUS_APPROVED = 'RAP';
17
-    const REGISTRATION_STATUS_PENDING_PAYMENT = 'RPP';
18
-    const SEARCH_INPUT_SELECTOR_LIST_TABLE_REGISTRATION = '#event-espresso_page_espresso_registrations-search-input';
19
-    const BUTTON_ADD_NEW_REGISTRATION = '#add-new-registration';
20
-    const DROPDOWN_REGISTRATION_STATUS = '#reg-status-change-form-reg-status';
21
-    const BUTTON_UPDATE_REGISTRATION_STATUS = '#reg-status-change-form-submit-submit';
22
-    const DROPDOWN_SEND_RELATED_MESSAGES = '#reg-status-change-form-send-notifications';
23
-
24
-
25
-    /**
26
-     * @param string $additional_params
27
-     * @return string
28
-     */
29
-    public static function registrationsDefaultAdminListTableUrl($additional_params = '')
30
-    {
31
-        return self::adminUrl('espresso_registrations', 'default', $additional_params);
32
-    }
33
-
34
-
35
-    /**
36
-     * Given a registration id, this will return the selector for all the checkbox for that id.
37
-     * Assumes the view is the default registrations list table.
38
-     * @param int $registration_id
39
-     * @return string
40
-     */
41
-    public static function listTableCheckBoxSelectorForRegistrationId($registration_id)
42
-    {
43
-        return "//input[@name='_REG_ID[]' and @value='{$registration_id}']";
44
-    }
45
-
46
-
47
-    /**
48
-     * Given a registration id, this will return the selector for the link to the registration details.
49
-     * Assumes the view is the default registrations list table.
50
-     * @param int $registration_id
51
-     * @return string
52
-     */
53
-    public static function viewDetailsLinkSelectorForRegistrationId($registration_id)
54
-    {
55
-        return "//tbody[@id='the-list']/tr/td[contains(@class, 'column-_REG_ID') and contains(., $registration_id)]"
56
-            . "//ancestor::tr/td[contains(@class, 'column-ATT_fname')]/a[1]";
57
-    }
15
+	const REGISTRATION_STATUS_NOT_APPROVED = 'RNA';
16
+	const REGISTRATION_STATUS_APPROVED = 'RAP';
17
+	const REGISTRATION_STATUS_PENDING_PAYMENT = 'RPP';
18
+	const SEARCH_INPUT_SELECTOR_LIST_TABLE_REGISTRATION = '#event-espresso_page_espresso_registrations-search-input';
19
+	const BUTTON_ADD_NEW_REGISTRATION = '#add-new-registration';
20
+	const DROPDOWN_REGISTRATION_STATUS = '#reg-status-change-form-reg-status';
21
+	const BUTTON_UPDATE_REGISTRATION_STATUS = '#reg-status-change-form-submit-submit';
22
+	const DROPDOWN_SEND_RELATED_MESSAGES = '#reg-status-change-form-send-notifications';
23
+
24
+
25
+	/**
26
+	 * @param string $additional_params
27
+	 * @return string
28
+	 */
29
+	public static function registrationsDefaultAdminListTableUrl($additional_params = '')
30
+	{
31
+		return self::adminUrl('espresso_registrations', 'default', $additional_params);
32
+	}
33
+
34
+
35
+	/**
36
+	 * Given a registration id, this will return the selector for all the checkbox for that id.
37
+	 * Assumes the view is the default registrations list table.
38
+	 * @param int $registration_id
39
+	 * @return string
40
+	 */
41
+	public static function listTableCheckBoxSelectorForRegistrationId($registration_id)
42
+	{
43
+		return "//input[@name='_REG_ID[]' and @value='{$registration_id}']";
44
+	}
45
+
46
+
47
+	/**
48
+	 * Given a registration id, this will return the selector for the link to the registration details.
49
+	 * Assumes the view is the default registrations list table.
50
+	 * @param int $registration_id
51
+	 * @return string
52
+	 */
53
+	public static function viewDetailsLinkSelectorForRegistrationId($registration_id)
54
+	{
55
+		return "//tbody[@id='the-list']/tr/td[contains(@class, 'column-_REG_ID') and contains(., $registration_id)]"
56
+			. "//ancestor::tr/td[contains(@class, 'column-ATT_fname')]/a[1]";
57
+	}
58 58
 }
59 59
\ No newline at end of file
Please login to merge, or discard this patch.
acceptance_tests/Page/Checkout.php 1 patch
Indentation   +67 added lines, -67 removed lines patch added patch discarded remove patch
@@ -13,71 +13,71 @@
 block discarded – undo
13 13
 class Checkout
14 14
 {
15 15
 
16
-    /**
17
-     * The class selector for the next step button in the checkout.
18
-     * @var string
19
-     */
20
-    const NEXT_STEP_BUTTON_SELECTOR = '.spco-next-step-btn';
21
-
22
-
23
-    const PAYMENT_METHOD_STEP_FORM = '#ee-spco-payment_options-reg-step-form';
24
-
25
-
26
-    const SELECTOR_PAYMENT_OPTIONS_CONTAINER = '#spco-available-methods-of-payment-dv';
27
-
28
-
29
-    /**
30
-     * @param int $attendee_number
31
-     * @param bool  $admin  Used to indicate whether we're retrieving the selector from the context of the admin or not.
32
-     * @return string
33
-     */
34
-    public static function firstNameFieldSelectorForAttendeeNumber($attendee_number = 1, $admin = false)
35
-    {
36
-        return self::fieldSelectorForAttendeeNumber('fname', $attendee_number, $admin);
37
-    }
38
-
39
-
40
-    /**
41
-     * @param int $attendee_number
42
-     * @param bool  $admin  Used to indicate whether we're retrieving the selector from the context of the admin or not.
43
-     * @return string
44
-     */
45
-    public static function lastNameFieldSelectorForAttendeeNumber($attendee_number = 1, $admin = false)
46
-    {
47
-        return self::fieldSelectorForAttendeeNumber('lname', $attendee_number, $admin);
48
-    }
49
-
50
-
51
-    /**
52
-     * @param int $attendee_number
53
-     * @param bool  $admin  Used to indicate whether we're retrieving the selector from the context of the admin or not.
54
-     * @return string
55
-     */
56
-    public static function emailFieldSelectorForAttendeeNumber($attendee_number = 1, $admin = false)
57
-    {
58
-        return self::fieldSelectorForAttendeeNumber('email', $attendee_number, $admin);
59
-    }
60
-
61
-    /**
62
-     * @param string    $field_name
63
-     * @param int $attendee_number
64
-     * @param bool  $admin  Used to indicate whether we're retrieving the selector from the context of the admin or not.
65
-     * @return string
66
-     */
67
-    public static function fieldSelectorForAttendeeNumber($field_name, $attendee_number = 1, $admin = false)
68
-    {
69
-        return $admin
70
-                ? "//fieldset[starts-with(@id, 'ee-registration-$attendee_number')]//input[contains(@class, 'ee-reg-qstn-$field_name')]"
71
-                : "//div[starts-with(@id, 'spco-attendee-panel-dv-$attendee_number')]//input[contains(@class, 'ee-reg-qstn-$field_name')]";
72
-    }
73
-
74
-
75
-    /**
76
-     * @param string $payment_method_slug Slug for the payment method.
77
-     * @return string
78
-     */
79
-    public static function fieldSelectorForPaymentOption($payment_method_slug)
80
-    {
81
-        return "#ee-available-payment-method-inputs-{$payment_method_slug}";
82
-    }
16
+	/**
17
+	 * The class selector for the next step button in the checkout.
18
+	 * @var string
19
+	 */
20
+	const NEXT_STEP_BUTTON_SELECTOR = '.spco-next-step-btn';
21
+
22
+
23
+	const PAYMENT_METHOD_STEP_FORM = '#ee-spco-payment_options-reg-step-form';
24
+
25
+
26
+	const SELECTOR_PAYMENT_OPTIONS_CONTAINER = '#spco-available-methods-of-payment-dv';
27
+
28
+
29
+	/**
30
+	 * @param int $attendee_number
31
+	 * @param bool  $admin  Used to indicate whether we're retrieving the selector from the context of the admin or not.
32
+	 * @return string
33
+	 */
34
+	public static function firstNameFieldSelectorForAttendeeNumber($attendee_number = 1, $admin = false)
35
+	{
36
+		return self::fieldSelectorForAttendeeNumber('fname', $attendee_number, $admin);
37
+	}
38
+
39
+
40
+	/**
41
+	 * @param int $attendee_number
42
+	 * @param bool  $admin  Used to indicate whether we're retrieving the selector from the context of the admin or not.
43
+	 * @return string
44
+	 */
45
+	public static function lastNameFieldSelectorForAttendeeNumber($attendee_number = 1, $admin = false)
46
+	{
47
+		return self::fieldSelectorForAttendeeNumber('lname', $attendee_number, $admin);
48
+	}
49
+
50
+
51
+	/**
52
+	 * @param int $attendee_number
53
+	 * @param bool  $admin  Used to indicate whether we're retrieving the selector from the context of the admin or not.
54
+	 * @return string
55
+	 */
56
+	public static function emailFieldSelectorForAttendeeNumber($attendee_number = 1, $admin = false)
57
+	{
58
+		return self::fieldSelectorForAttendeeNumber('email', $attendee_number, $admin);
59
+	}
60
+
61
+	/**
62
+	 * @param string    $field_name
63
+	 * @param int $attendee_number
64
+	 * @param bool  $admin  Used to indicate whether we're retrieving the selector from the context of the admin or not.
65
+	 * @return string
66
+	 */
67
+	public static function fieldSelectorForAttendeeNumber($field_name, $attendee_number = 1, $admin = false)
68
+	{
69
+		return $admin
70
+				? "//fieldset[starts-with(@id, 'ee-registration-$attendee_number')]//input[contains(@class, 'ee-reg-qstn-$field_name')]"
71
+				: "//div[starts-with(@id, 'spco-attendee-panel-dv-$attendee_number')]//input[contains(@class, 'ee-reg-qstn-$field_name')]";
72
+	}
73
+
74
+
75
+	/**
76
+	 * @param string $payment_method_slug Slug for the payment method.
77
+	 * @return string
78
+	 */
79
+	public static function fieldSelectorForPaymentOption($payment_method_slug)
80
+	{
81
+		return "#ee-available-payment-method-inputs-{$payment_method_slug}";
82
+	}
83 83
 }
Please login to merge, or discard this patch.
core/domain/services/factories/CartFactory.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -23,14 +23,14 @@
 block discarded – undo
23 23
 class CartFactory
24 24
 {
25 25
 
26
-    /**
27
-     * @return EE_Cart
28
-     * @throws InvalidArgumentException
29
-     * @throws InvalidInterfaceException
30
-     * @throws InvalidDataTypeException
31
-     */
32
-    public static function getCart()
33
-    {
34
-        return LoaderFactory::getLoader()->getShared('EE_Cart');
35
-    }
26
+	/**
27
+	 * @return EE_Cart
28
+	 * @throws InvalidArgumentException
29
+	 * @throws InvalidInterfaceException
30
+	 * @throws InvalidDataTypeException
31
+	 */
32
+	public static function getCart()
33
+	{
34
+		return LoaderFactory::getLoader()->getShared('EE_Cart');
35
+	}
36 36
 }
Please login to merge, or discard this patch.
core/domain/services/factories/ModelFactory.php 1 patch
Indentation   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -25,17 +25,17 @@
 block discarded – undo
25 25
 class ModelFactory
26 26
 {
27 27
 
28
-    /**
29
-     * @param string $model_name
30
-     * @return bool|EEM_Base
31
-     * @throws EE_Error
32
-     * @throws InvalidDataTypeException
33
-     * @throws InvalidInterfaceException
34
-     * @throws InvalidArgumentException
35
-     * @throws ReflectionException
36
-     */
37
-    public static function getModel($model_name)
38
-    {
39
-        return EE_Registry::instance()->load_model($model_name);
40
-    }
28
+	/**
29
+	 * @param string $model_name
30
+	 * @return bool|EEM_Base
31
+	 * @throws EE_Error
32
+	 * @throws InvalidDataTypeException
33
+	 * @throws InvalidInterfaceException
34
+	 * @throws InvalidArgumentException
35
+	 * @throws ReflectionException
36
+	 */
37
+	public static function getModel($model_name)
38
+	{
39
+		return EE_Registry::instance()->load_model($model_name);
40
+	}
41 41
 }
Please login to merge, or discard this patch.
modules/ticket_selector/TicketDatetimeAvailabilityTracker.php 2 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -66,24 +66,24 @@  discard block
 block discarded – undo
66 66
     public function ticketDatetimeAvailability(EE_Ticket $ticket, $get_original_ticket_spaces = false)
67 67
     {
68 68
         // if the $_available_spaces array has not been set up yet...
69
-        if (! isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
69
+        if ( ! isset($this->available_spaces['tickets'][$ticket->ID()])) {
70 70
             $this->setInitialTicketDatetimeAvailability($ticket);
71 71
         }
72 72
         $available_spaces = $ticket->qty() - $ticket->sold();
73
-        if (isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
73
+        if (isset($this->available_spaces['tickets'][$ticket->ID()])) {
74 74
             // loop thru tickets, which will ALSO include individual ticket records AND a total
75
-            foreach ($this->available_spaces['tickets'][ $ticket->ID() ] as $DTD_ID => $spaces) {
75
+            foreach ($this->available_spaces['tickets'][$ticket->ID()] as $DTD_ID => $spaces) {
76 76
                 // if we want the original datetime availability BEFORE we started subtracting tickets ?
77 77
                 if ($get_original_ticket_spaces) {
78 78
                     // then grab the available spaces from the "tickets" array
79 79
                     // and compare with the above to get the lowest number
80 80
                     $available_spaces = min(
81 81
                         $available_spaces,
82
-                        $this->available_spaces['tickets'][ $ticket->ID() ][ $DTD_ID ]
82
+                        $this->available_spaces['tickets'][$ticket->ID()][$DTD_ID]
83 83
                     );
84 84
                 } else {
85 85
                     // we want the updated ticket availability as stored in the "datetimes" array
86
-                    $available_spaces = min($available_spaces, $this->available_spaces['datetimes'][ $DTD_ID ]);
86
+                    $available_spaces = min($available_spaces, $this->available_spaces['datetimes'][$DTD_ID]);
87 87
                 }
88 88
             }
89 89
         }
@@ -114,7 +114,7 @@  discard block
 block discarded – undo
114 114
                 'order_by' => array('DTT_EVT_start' => 'ASC'),
115 115
             )
116 116
         );
117
-        if (! empty($datetimes)) {
117
+        if ( ! empty($datetimes)) {
118 118
             // now loop thru all of the datetimes
119 119
             foreach ($datetimes as $datetime) {
120 120
                 if ($datetime instanceof EE_Datetime) {
@@ -122,17 +122,17 @@  discard block
 block discarded – undo
122 122
                     $spaces_remaining = $datetime->spaces_remaining();
123 123
                     // save the total available spaces ( the lesser of the ticket qty minus the number of tickets sold
124 124
                     // or the datetime spaces remaining) to this ticket using the datetime ID as the key
125
-                    $this->available_spaces['tickets'][ $ticket->ID() ][ $datetime->ID() ] = min(
125
+                    $this->available_spaces['tickets'][$ticket->ID()][$datetime->ID()] = min(
126 126
                         $ticket->qty() - $ticket->sold(),
127 127
                         $spaces_remaining
128 128
                     );
129 129
                     // if the remaining spaces for this datetime is already set,
130 130
                     // then compare that against the datetime spaces remaining, and take the lowest number,
131 131
                     // else just take the datetime spaces remaining, and assign to the datetimes array
132
-                    $this->available_spaces['datetimes'][ $datetime->ID() ] = isset(
133
-                        $this->available_spaces['datetimes'][ $datetime->ID() ]
132
+                    $this->available_spaces['datetimes'][$datetime->ID()] = isset(
133
+                        $this->available_spaces['datetimes'][$datetime->ID()]
134 134
                     )
135
-                        ? min($this->available_spaces['datetimes'][ $datetime->ID() ], $spaces_remaining)
135
+                        ? min($this->available_spaces['datetimes'][$datetime->ID()], $spaces_remaining)
136 136
                         : $spaces_remaining;
137 137
                 }
138 138
             }
@@ -148,11 +148,11 @@  discard block
 block discarded – undo
148 148
      */
149 149
     public function recalculateTicketDatetimeAvailability(EE_Ticket $ticket, $qty = 0)
150 150
     {
151
-        if (isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
151
+        if (isset($this->available_spaces['tickets'][$ticket->ID()])) {
152 152
             // loop thru tickets, which will ALSO include individual ticket records AND a total
153
-            foreach ($this->available_spaces['tickets'][ $ticket->ID() ] as $DTD_ID => $spaces) {
153
+            foreach ($this->available_spaces['tickets'][$ticket->ID()] as $DTD_ID => $spaces) {
154 154
                 // subtract the qty of selected tickets from each datetime's available spaces this ticket has access to,
155
-                $this->available_spaces['datetimes'][ $DTD_ID ] -= $qty;
155
+                $this->available_spaces['datetimes'][$DTD_ID] -= $qty;
156 156
             }
157 157
         }
158 158
     }
Please login to merge, or discard this patch.
Indentation   +211 added lines, -211 removed lines patch added patch discarded remove patch
@@ -22,215 +22,215 @@
 block discarded – undo
22 22
 class TicketDatetimeAvailabilityTracker
23 23
 {
24 24
 
25
-    /**
26
-     * array of datetimes and the spaces available for them
27
-     *
28
-     * @var array[][]
29
-     */
30
-    private $available_spaces = array();
31
-
32
-    /**
33
-     * @var EEM_Datetime $datetime_model
34
-     */
35
-    private $datetime_model;
36
-
37
-
38
-    /**
39
-     * TicketDatetimeAvailabilityTracker constructor.
40
-     *
41
-     * @param EEM_Datetime $datetime_model
42
-     */
43
-    public function __construct(EEM_Datetime $datetime_model)
44
-    {
45
-        $this->datetime_model = $datetime_model;
46
-    }
47
-
48
-
49
-    /**
50
-     * ticketDatetimeAvailability
51
-     * creates an array of tickets plus all of the datetimes available to each ticket
52
-     * and tracks the spaces remaining for each of those datetimes
53
-     *
54
-     * @param EE_Ticket $ticket - selected ticket
55
-     * @param bool      $get_original_ticket_spaces
56
-     * @return int
57
-     * @throws EE_Error
58
-     * @throws InvalidArgumentException
59
-     * @throws InvalidDataTypeException
60
-     * @throws InvalidInterfaceException
61
-     */
62
-    public function ticketDatetimeAvailability(EE_Ticket $ticket, $get_original_ticket_spaces = false)
63
-    {
64
-        // if the $_available_spaces array has not been set up yet...
65
-        if (! isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
66
-            $this->setInitialTicketDatetimeAvailability($ticket);
67
-        }
68
-        $available_spaces = $ticket->qty() - $ticket->sold();
69
-        if (isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
70
-            // loop thru tickets, which will ALSO include individual ticket records AND a total
71
-            foreach ($this->available_spaces['tickets'][ $ticket->ID() ] as $DTD_ID => $spaces) {
72
-                // if we want the original datetime availability BEFORE we started subtracting tickets ?
73
-                if ($get_original_ticket_spaces) {
74
-                    // then grab the available spaces from the "tickets" array
75
-                    // and compare with the above to get the lowest number
76
-                    $available_spaces = min(
77
-                        $available_spaces,
78
-                        $this->available_spaces['tickets'][ $ticket->ID() ][ $DTD_ID ]
79
-                    );
80
-                } else {
81
-                    // we want the updated ticket availability as stored in the "datetimes" array
82
-                    $available_spaces = min($available_spaces, $this->available_spaces['datetimes'][ $DTD_ID ]);
83
-                }
84
-            }
85
-        }
86
-        return $available_spaces;
87
-    }
88
-
89
-
90
-    /**
91
-     * @param EE_Ticket $ticket
92
-     * @return void
93
-     * @throws InvalidArgumentException
94
-     * @throws InvalidInterfaceException
95
-     * @throws InvalidDataTypeException
96
-     * @throws EE_Error
97
-     */
98
-    private function setInitialTicketDatetimeAvailability(EE_Ticket $ticket)
99
-    {
100
-        // first, get all of the datetimes that are available to this ticket
101
-        $datetimes = $ticket->get_many_related(
102
-            'Datetime',
103
-            array(
104
-                array(
105
-                    'DTT_EVT_end' => array(
106
-                        '>=',
107
-                        $this->datetime_model->current_time_for_query('DTT_EVT_end'),
108
-                    ),
109
-                ),
110
-                'order_by' => array('DTT_EVT_start' => 'ASC'),
111
-            )
112
-        );
113
-        if (! empty($datetimes)) {
114
-            // now loop thru all of the datetimes
115
-            foreach ($datetimes as $datetime) {
116
-                if ($datetime instanceof EE_Datetime) {
117
-                    // the number of spaces available for the datetime without considering individual ticket quantities
118
-                    $spaces_remaining = $datetime->spaces_remaining();
119
-                    // save the total available spaces ( the lesser of the ticket qty minus the number of tickets sold
120
-                    // or the datetime spaces remaining) to this ticket using the datetime ID as the key
121
-                    $this->available_spaces['tickets'][ $ticket->ID() ][ $datetime->ID() ] = min(
122
-                        $ticket->qty() - $ticket->sold(),
123
-                        $spaces_remaining
124
-                    );
125
-                    // if the remaining spaces for this datetime is already set,
126
-                    // then compare that against the datetime spaces remaining, and take the lowest number,
127
-                    // else just take the datetime spaces remaining, and assign to the datetimes array
128
-                    $this->available_spaces['datetimes'][ $datetime->ID() ] = isset(
129
-                        $this->available_spaces['datetimes'][ $datetime->ID() ]
130
-                    )
131
-                        ? min($this->available_spaces['datetimes'][ $datetime->ID() ], $spaces_remaining)
132
-                        : $spaces_remaining;
133
-                }
134
-            }
135
-        }
136
-    }
137
-
138
-
139
-    /**
140
-     * @param    EE_Ticket $ticket
141
-     * @param    int       $qty
142
-     * @return    void
143
-     * @throws EE_Error
144
-     */
145
-    public function recalculateTicketDatetimeAvailability(EE_Ticket $ticket, $qty = 0)
146
-    {
147
-        if (isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
148
-            // loop thru tickets, which will ALSO include individual ticket records AND a total
149
-            foreach ($this->available_spaces['tickets'][ $ticket->ID() ] as $DTD_ID => $spaces) {
150
-                // subtract the qty of selected tickets from each datetime's available spaces this ticket has access to,
151
-                $this->available_spaces['datetimes'][ $DTD_ID ] -= $qty;
152
-            }
153
-        }
154
-    }
155
-
156
-
157
-    /**
158
-     * @param EE_Ticket $ticket
159
-     * @param           $qty
160
-     * @param int       $total_ticket_count
161
-     * @throws EE_Error
162
-     * @throws InvalidArgumentException
163
-     * @throws InvalidDataTypeException
164
-     * @throws InvalidInterfaceException
165
-     */
166
-    public function processAvailabilityError(EE_Ticket $ticket, $qty, $total_ticket_count = 1)
167
-    {
168
-        // tickets can not be purchased but let's find the exact number left
169
-        // for the last ticket selected PRIOR to subtracting tickets
170
-        $available_spaces = $this->ticketDatetimeAvailability($ticket, true);
171
-        // greedy greedy greedy eh?
172
-        if ($available_spaces > 0) {
173
-            if (apply_filters(
174
-                'FHEE__EE_Ticket_Selector___add_ticket_to_cart__allow_display_availability_error',
175
-                true,
176
-                $ticket,
177
-                $qty,
178
-                $available_spaces
179
-            )) {
180
-                $this->availabilityError(
181
-                    $available_spaces,
182
-                    $total_ticket_count
183
-                );
184
-            }
185
-        } else {
186
-            EE_Error::add_error(
187
-                esc_html__(
188
-                    'We\'re sorry, but there are no available spaces left for this event at this particular date and time.',
189
-                    'event_espresso'
190
-                ),
191
-                __FILE__,
192
-                __FUNCTION__,
193
-                __LINE__
194
-            );
195
-        }
196
-    }
197
-
198
-
199
-    /**
200
-     * @param int $available_spaces
201
-     * @param int $total_ticket_count
202
-     */
203
-    private function availabilityError($available_spaces = 1, $total_ticket_count = 1)
204
-    {
205
-        // add error messaging - we're using the _n function that will generate
206
-        // the appropriate singular or plural message based on the number of $available_spaces
207
-        if ($total_ticket_count) {
208
-            $msg = sprintf(
209
-                esc_html(
210
-                    _n(
211
-                        'We\'re sorry, but there is only %1$s available space left for this event at this particular date and time. Please select a different number (or different combination) of tickets by cancelling the current selection and choosing again, or proceed to registration.',
212
-                        'We\'re sorry, but there are only %1$s available spaces left for this event at this particular date and time. Please select a different number (or different combination) of tickets by cancelling the current selection and choosing again, or proceed to registration.',
213
-                        $available_spaces,
214
-                        'event_espresso'
215
-                    )
216
-                ),
217
-                $available_spaces,
218
-                '<br />'
219
-            );
220
-        } else {
221
-            $msg = sprintf(
222
-                esc_html(
223
-                    _n(
224
-                        'We\'re sorry, but there is only %1$s available space left for this event at this particular date and time. Please select a different number (or different combination) of tickets.',
225
-                        'We\'re sorry, but there are only %1$s available spaces left for this event at this particular date and time. Please select a different number (or different combination) of tickets.',
226
-                        $available_spaces,
227
-                        'event_espresso'
228
-                    )
229
-                ),
230
-                $available_spaces,
231
-                '<br />'
232
-            );
233
-        }
234
-        EE_Error::add_error($msg, __FILE__, __FUNCTION__, __LINE__);
235
-    }
25
+	/**
26
+	 * array of datetimes and the spaces available for them
27
+	 *
28
+	 * @var array[][]
29
+	 */
30
+	private $available_spaces = array();
31
+
32
+	/**
33
+	 * @var EEM_Datetime $datetime_model
34
+	 */
35
+	private $datetime_model;
36
+
37
+
38
+	/**
39
+	 * TicketDatetimeAvailabilityTracker constructor.
40
+	 *
41
+	 * @param EEM_Datetime $datetime_model
42
+	 */
43
+	public function __construct(EEM_Datetime $datetime_model)
44
+	{
45
+		$this->datetime_model = $datetime_model;
46
+	}
47
+
48
+
49
+	/**
50
+	 * ticketDatetimeAvailability
51
+	 * creates an array of tickets plus all of the datetimes available to each ticket
52
+	 * and tracks the spaces remaining for each of those datetimes
53
+	 *
54
+	 * @param EE_Ticket $ticket - selected ticket
55
+	 * @param bool      $get_original_ticket_spaces
56
+	 * @return int
57
+	 * @throws EE_Error
58
+	 * @throws InvalidArgumentException
59
+	 * @throws InvalidDataTypeException
60
+	 * @throws InvalidInterfaceException
61
+	 */
62
+	public function ticketDatetimeAvailability(EE_Ticket $ticket, $get_original_ticket_spaces = false)
63
+	{
64
+		// if the $_available_spaces array has not been set up yet...
65
+		if (! isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
66
+			$this->setInitialTicketDatetimeAvailability($ticket);
67
+		}
68
+		$available_spaces = $ticket->qty() - $ticket->sold();
69
+		if (isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
70
+			// loop thru tickets, which will ALSO include individual ticket records AND a total
71
+			foreach ($this->available_spaces['tickets'][ $ticket->ID() ] as $DTD_ID => $spaces) {
72
+				// if we want the original datetime availability BEFORE we started subtracting tickets ?
73
+				if ($get_original_ticket_spaces) {
74
+					// then grab the available spaces from the "tickets" array
75
+					// and compare with the above to get the lowest number
76
+					$available_spaces = min(
77
+						$available_spaces,
78
+						$this->available_spaces['tickets'][ $ticket->ID() ][ $DTD_ID ]
79
+					);
80
+				} else {
81
+					// we want the updated ticket availability as stored in the "datetimes" array
82
+					$available_spaces = min($available_spaces, $this->available_spaces['datetimes'][ $DTD_ID ]);
83
+				}
84
+			}
85
+		}
86
+		return $available_spaces;
87
+	}
88
+
89
+
90
+	/**
91
+	 * @param EE_Ticket $ticket
92
+	 * @return void
93
+	 * @throws InvalidArgumentException
94
+	 * @throws InvalidInterfaceException
95
+	 * @throws InvalidDataTypeException
96
+	 * @throws EE_Error
97
+	 */
98
+	private function setInitialTicketDatetimeAvailability(EE_Ticket $ticket)
99
+	{
100
+		// first, get all of the datetimes that are available to this ticket
101
+		$datetimes = $ticket->get_many_related(
102
+			'Datetime',
103
+			array(
104
+				array(
105
+					'DTT_EVT_end' => array(
106
+						'>=',
107
+						$this->datetime_model->current_time_for_query('DTT_EVT_end'),
108
+					),
109
+				),
110
+				'order_by' => array('DTT_EVT_start' => 'ASC'),
111
+			)
112
+		);
113
+		if (! empty($datetimes)) {
114
+			// now loop thru all of the datetimes
115
+			foreach ($datetimes as $datetime) {
116
+				if ($datetime instanceof EE_Datetime) {
117
+					// the number of spaces available for the datetime without considering individual ticket quantities
118
+					$spaces_remaining = $datetime->spaces_remaining();
119
+					// save the total available spaces ( the lesser of the ticket qty minus the number of tickets sold
120
+					// or the datetime spaces remaining) to this ticket using the datetime ID as the key
121
+					$this->available_spaces['tickets'][ $ticket->ID() ][ $datetime->ID() ] = min(
122
+						$ticket->qty() - $ticket->sold(),
123
+						$spaces_remaining
124
+					);
125
+					// if the remaining spaces for this datetime is already set,
126
+					// then compare that against the datetime spaces remaining, and take the lowest number,
127
+					// else just take the datetime spaces remaining, and assign to the datetimes array
128
+					$this->available_spaces['datetimes'][ $datetime->ID() ] = isset(
129
+						$this->available_spaces['datetimes'][ $datetime->ID() ]
130
+					)
131
+						? min($this->available_spaces['datetimes'][ $datetime->ID() ], $spaces_remaining)
132
+						: $spaces_remaining;
133
+				}
134
+			}
135
+		}
136
+	}
137
+
138
+
139
+	/**
140
+	 * @param    EE_Ticket $ticket
141
+	 * @param    int       $qty
142
+	 * @return    void
143
+	 * @throws EE_Error
144
+	 */
145
+	public function recalculateTicketDatetimeAvailability(EE_Ticket $ticket, $qty = 0)
146
+	{
147
+		if (isset($this->available_spaces['tickets'][ $ticket->ID() ])) {
148
+			// loop thru tickets, which will ALSO include individual ticket records AND a total
149
+			foreach ($this->available_spaces['tickets'][ $ticket->ID() ] as $DTD_ID => $spaces) {
150
+				// subtract the qty of selected tickets from each datetime's available spaces this ticket has access to,
151
+				$this->available_spaces['datetimes'][ $DTD_ID ] -= $qty;
152
+			}
153
+		}
154
+	}
155
+
156
+
157
+	/**
158
+	 * @param EE_Ticket $ticket
159
+	 * @param           $qty
160
+	 * @param int       $total_ticket_count
161
+	 * @throws EE_Error
162
+	 * @throws InvalidArgumentException
163
+	 * @throws InvalidDataTypeException
164
+	 * @throws InvalidInterfaceException
165
+	 */
166
+	public function processAvailabilityError(EE_Ticket $ticket, $qty, $total_ticket_count = 1)
167
+	{
168
+		// tickets can not be purchased but let's find the exact number left
169
+		// for the last ticket selected PRIOR to subtracting tickets
170
+		$available_spaces = $this->ticketDatetimeAvailability($ticket, true);
171
+		// greedy greedy greedy eh?
172
+		if ($available_spaces > 0) {
173
+			if (apply_filters(
174
+				'FHEE__EE_Ticket_Selector___add_ticket_to_cart__allow_display_availability_error',
175
+				true,
176
+				$ticket,
177
+				$qty,
178
+				$available_spaces
179
+			)) {
180
+				$this->availabilityError(
181
+					$available_spaces,
182
+					$total_ticket_count
183
+				);
184
+			}
185
+		} else {
186
+			EE_Error::add_error(
187
+				esc_html__(
188
+					'We\'re sorry, but there are no available spaces left for this event at this particular date and time.',
189
+					'event_espresso'
190
+				),
191
+				__FILE__,
192
+				__FUNCTION__,
193
+				__LINE__
194
+			);
195
+		}
196
+	}
197
+
198
+
199
+	/**
200
+	 * @param int $available_spaces
201
+	 * @param int $total_ticket_count
202
+	 */
203
+	private function availabilityError($available_spaces = 1, $total_ticket_count = 1)
204
+	{
205
+		// add error messaging - we're using the _n function that will generate
206
+		// the appropriate singular or plural message based on the number of $available_spaces
207
+		if ($total_ticket_count) {
208
+			$msg = sprintf(
209
+				esc_html(
210
+					_n(
211
+						'We\'re sorry, but there is only %1$s available space left for this event at this particular date and time. Please select a different number (or different combination) of tickets by cancelling the current selection and choosing again, or proceed to registration.',
212
+						'We\'re sorry, but there are only %1$s available spaces left for this event at this particular date and time. Please select a different number (or different combination) of tickets by cancelling the current selection and choosing again, or proceed to registration.',
213
+						$available_spaces,
214
+						'event_espresso'
215
+					)
216
+				),
217
+				$available_spaces,
218
+				'<br />'
219
+			);
220
+		} else {
221
+			$msg = sprintf(
222
+				esc_html(
223
+					_n(
224
+						'We\'re sorry, but there is only %1$s available space left for this event at this particular date and time. Please select a different number (or different combination) of tickets.',
225
+						'We\'re sorry, but there are only %1$s available spaces left for this event at this particular date and time. Please select a different number (or different combination) of tickets.',
226
+						$available_spaces,
227
+						'event_espresso'
228
+					)
229
+				),
230
+				$available_spaces,
231
+				'<br />'
232
+			);
233
+		}
234
+		EE_Error::add_error($msg, __FILE__, __FUNCTION__, __LINE__);
235
+	}
236 236
 }
Please login to merge, or discard this patch.
core/domain/entities/notifications/PersistentAdminNotice.php 2 patches
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
      */
131 131
     private function setName($name)
132 132
     {
133
-        if (! is_string($name)) {
133
+        if ( ! is_string($name)) {
134 134
             throw new InvalidDataTypeException('$name', $name, 'string');
135 135
         }
136 136
         $this->name = sanitize_key($name);
@@ -154,7 +154,7 @@  discard block
 block discarded – undo
154 154
      */
155 155
     private function setMessage($message)
156 156
     {
157
-        if (! is_string($message)) {
157
+        if ( ! is_string($message)) {
158 158
             throw new InvalidDataTypeException('$message', $message, 'string');
159 159
         }
160 160
         global $allowedtags;
@@ -200,7 +200,7 @@  discard block
 block discarded – undo
200 200
      */
201 201
     private function setCapability($capability)
202 202
     {
203
-        if (! is_string($capability)) {
203
+        if ( ! is_string($capability)) {
204 204
             throw new InvalidDataTypeException('$capability', $capability, 'string');
205 205
         }
206 206
         $this->capability = ! empty($capability) ? $capability : 'manage_options';
@@ -224,7 +224,7 @@  discard block
 block discarded – undo
224 224
      */
225 225
     private function setCapContext($cap_context)
226 226
     {
227
-        if (! is_string($cap_context)) {
227
+        if ( ! is_string($cap_context)) {
228 228
             throw new InvalidDataTypeException('$cap_context', $cap_context, 'string');
229 229
         }
230 230
         $this->cap_context = ! empty($cap_context) ? $cap_context : 'view persistent admin notice';
@@ -258,7 +258,7 @@  discard block
 block discarded – undo
258 258
      */
259 259
     public function getCapCheck()
260 260
     {
261
-        if (! $this->cap_check instanceof CapCheckInterface) {
261
+        if ( ! $this->cap_check instanceof CapCheckInterface) {
262 262
             $this->setCapCheck(
263 263
                 new CapCheck(
264 264
                     $this->capability,
@@ -343,10 +343,10 @@  discard block
 block discarded – undo
343 343
      */
344 344
     public function confirmRegistered()
345 345
     {
346
-        if (! apply_filters('PersistentAdminNoticeManager__registerAndSaveNotices__complete', false)) {
346
+        if ( ! apply_filters('PersistentAdminNoticeManager__registerAndSaveNotices__complete', false)) {
347 347
             PersistentAdminNoticeManager::loadRegisterAndSaveNotices();
348 348
         }
349
-        if (! $this->registered && WP_DEBUG) {
349
+        if ( ! $this->registered && WP_DEBUG) {
350 350
             throw new DomainException(
351 351
                 sprintf(
352 352
                     esc_html__(
Please login to merge, or discard this patch.
Indentation   +311 added lines, -311 removed lines patch added patch discarded remove patch
@@ -24,315 +24,315 @@
 block discarded – undo
24 24
 class PersistentAdminNotice implements RequiresCapCheckInterface
25 25
 {
26 26
 
27
-    /**
28
-     * @var string $name
29
-     */
30
-    protected $name = '';
31
-
32
-    /**
33
-     * @var string $message
34
-     */
35
-    protected $message = '';
36
-
37
-    /**
38
-     * @var boolean $force_update
39
-     */
40
-    protected $force_update = false;
41
-
42
-    /**
43
-     * @var string $capability
44
-     */
45
-    protected $capability = 'manage_options';
46
-
47
-    /**
48
-     * @var string $cap_context
49
-     */
50
-    protected $cap_context = 'view persistent admin notice';
51
-
52
-    /**
53
-     * @var boolean $dismissed
54
-     */
55
-    protected $dismissed = false;
56
-
57
-    /**
58
-     * @var CapCheckInterface $cap_check
59
-     */
60
-    protected $cap_check;
61
-
62
-    /**
63
-     * if true, then this notice will be deleted from the database
64
-     *
65
-     * @var boolean $purge
66
-     */
67
-    protected $purge = false;
68
-
69
-    /**
70
-     * gets set to true if notice is successfully registered with the PersistentAdminNoticeManager
71
-     * if false, and WP_DEBUG is on, then an exception will be thrown in the admin footer
72
-     *
73
-     * @var boolean $registered
74
-     */
75
-    private $registered = false;
76
-
77
-
78
-    /**
79
-     * PersistentAdminNotice constructor
80
-     *
81
-     * @param string $name         [required] the name, or key of the Persistent Admin Notice to be stored
82
-     * @param string $message      [required] the message to be stored persistently until dismissed
83
-     * @param bool   $force_update enforce the reappearance of a persistent message
84
-     * @param string $capability   user capability required to view this notice
85
-     * @param string $cap_context  description for why the cap check is being performed
86
-     * @param bool   $dismissed    whether or not the user has already dismissed/viewed this notice
87
-     * @throws InvalidDataTypeException
88
-     */
89
-    public function __construct(
90
-        $name,
91
-        $message,
92
-        $force_update = false,
93
-        $capability = 'manage_options',
94
-        $cap_context = 'view persistent admin notice',
95
-        $dismissed = false
96
-    ) {
97
-        $this->setName($name);
98
-        $this->setMessage($message);
99
-        $this->setForceUpdate($force_update);
100
-        $this->setCapability($capability);
101
-        $this->setCapContext($cap_context);
102
-        $this->setDismissed($dismissed);
103
-        add_action(
104
-            'AHEE__EventEspresso_core_services_notifications_PersistentAdminNoticeManager__registerNotices',
105
-            array($this, 'registerPersistentAdminNotice')
106
-        );
107
-        add_action('shutdown', array($this, 'confirmRegistered'), 999);
108
-    }
109
-
110
-
111
-    /**
112
-     * @return string
113
-     */
114
-    public function getName()
115
-    {
116
-        return $this->name;
117
-    }
118
-
119
-
120
-    /**
121
-     * @param string $name
122
-     * @throws InvalidDataTypeException
123
-     */
124
-    private function setName($name)
125
-    {
126
-        if (! is_string($name)) {
127
-            throw new InvalidDataTypeException('$name', $name, 'string');
128
-        }
129
-        $this->name = sanitize_key($name);
130
-    }
131
-
132
-
133
-    /**
134
-     * @return string
135
-     */
136
-    public function getMessage()
137
-    {
138
-        return $this->message;
139
-    }
140
-
141
-
142
-    /**
143
-     * @param string $message
144
-     * @throws InvalidDataTypeException
145
-     */
146
-    private function setMessage($message)
147
-    {
148
-        if (! is_string($message)) {
149
-            throw new InvalidDataTypeException('$message', $message, 'string');
150
-        }
151
-        global $allowedtags;
152
-        $allowedtags['br'] = array();
153
-        $this->message = wp_kses($message, $allowedtags);
154
-    }
155
-
156
-
157
-    /**
158
-     * @return bool
159
-     */
160
-    public function getForceUpdate()
161
-    {
162
-        return $this->force_update;
163
-    }
164
-
165
-
166
-    /**
167
-     * @param bool $force_update
168
-     */
169
-    private function setForceUpdate($force_update)
170
-    {
171
-        $this->force_update = filter_var($force_update, FILTER_VALIDATE_BOOLEAN);
172
-    }
173
-
174
-
175
-    /**
176
-     * @return string
177
-     */
178
-    public function getCapability()
179
-    {
180
-        return $this->capability;
181
-    }
182
-
183
-
184
-    /**
185
-     * @param string $capability
186
-     * @throws InvalidDataTypeException
187
-     */
188
-    private function setCapability($capability)
189
-    {
190
-        if (! is_string($capability)) {
191
-            throw new InvalidDataTypeException('$capability', $capability, 'string');
192
-        }
193
-        $this->capability = ! empty($capability) ? $capability : 'manage_options';
194
-    }
195
-
196
-
197
-    /**
198
-     * @return string
199
-     */
200
-    public function getCapContext()
201
-    {
202
-        return $this->cap_context;
203
-    }
204
-
205
-
206
-    /**
207
-     * @param string $cap_context
208
-     * @throws InvalidDataTypeException
209
-     */
210
-    private function setCapContext($cap_context)
211
-    {
212
-        if (! is_string($cap_context)) {
213
-            throw new InvalidDataTypeException('$cap_context', $cap_context, 'string');
214
-        }
215
-        $this->cap_context = ! empty($cap_context) ? $cap_context : 'view persistent admin notice';
216
-    }
217
-
218
-
219
-    /**
220
-     * @return bool
221
-     */
222
-    public function getDismissed()
223
-    {
224
-        return $this->dismissed;
225
-    }
226
-
227
-
228
-    /**
229
-     * @param bool $dismissed
230
-     */
231
-    public function setDismissed($dismissed)
232
-    {
233
-        $this->dismissed = filter_var($dismissed, FILTER_VALIDATE_BOOLEAN);
234
-    }
235
-
236
-
237
-    /**
238
-     * @return CapCheckInterface
239
-     * @throws InvalidDataTypeException
240
-     */
241
-    public function getCapCheck()
242
-    {
243
-        if (! $this->cap_check instanceof CapCheckInterface) {
244
-            $this->setCapCheck(
245
-                new CapCheck(
246
-                    $this->capability,
247
-                    $this->cap_context
248
-                )
249
-            );
250
-        }
251
-        return $this->cap_check;
252
-    }
253
-
254
-
255
-    /**
256
-     * @param CapCheckInterface $cap_check
257
-     */
258
-    private function setCapCheck(CapCheckInterface $cap_check)
259
-    {
260
-        $this->cap_check = $cap_check;
261
-    }
262
-
263
-
264
-    /**
265
-     * @return bool
266
-     */
267
-    public function getPurge()
268
-    {
269
-        return $this->purge;
270
-    }
271
-
272
-
273
-    /**
274
-     * @param bool $purge
275
-     */
276
-    public function setPurge($purge)
277
-    {
278
-        $this->purge = filter_var($purge, FILTER_VALIDATE_BOOLEAN);
279
-    }
280
-
281
-
282
-    /**
283
-     * given a valid PersistentAdminNotice Collection,
284
-     * this notice will be added if it is not already found in the collection (using its name as the identifier)
285
-     * if an existing notice is found that has already been dismissed,
286
-     * but we are overriding with a forced update, then we will toggle its dismissed state,
287
-     * so that the notice is displayed again
288
-     *
289
-     * @param Collection $persistent_admin_notice_collection
290
-     * @throws InvalidEntityException
291
-     * @throws InvalidDataTypeException
292
-     */
293
-    public function registerPersistentAdminNotice(Collection $persistent_admin_notice_collection)
294
-    {
295
-        if ($this->registered) {
296
-            return;
297
-        }
298
-        // first check if this notice has already been added to the collection
299
-        if ($persistent_admin_notice_collection->has($this->name)) {
300
-            /** @var PersistentAdminNotice $existing */
301
-            $existing = $persistent_admin_notice_collection->get($this->name);
302
-            // we don't need to add it again (we can't actually)
303
-            // but if it has already been dismissed, and we are overriding with a forced update
304
-            if ($existing->getDismissed() && $this->getForceUpdate()) {
305
-                // then toggle the notice's dismissed state to true
306
-                // so that it gets displayed again
307
-                $existing->setDismissed(false);
308
-                // and make sure the message is set
309
-                $existing->setMessage($this->message);
310
-            }
311
-        } else {
312
-            $persistent_admin_notice_collection->add($this, $this->name);
313
-        }
314
-        $this->registered = true;
315
-    }
316
-
317
-
318
-    /**
319
-     * @throws Exception
320
-     */
321
-    public function confirmRegistered()
322
-    {
323
-        if (! apply_filters('PersistentAdminNoticeManager__registerAndSaveNotices__complete', false)) {
324
-            PersistentAdminNoticeManager::loadRegisterAndSaveNotices();
325
-        }
326
-        if (! $this->registered && WP_DEBUG) {
327
-            throw new DomainException(
328
-                sprintf(
329
-                    esc_html__(
330
-                        'The "%1$s" PersistentAdminNotice was not successfully registered. Please ensure that it is being created prior to either the "admin_notices" or "network_admin_notices" hooks being triggered.',
331
-                        'event_espresso'
332
-                    ),
333
-                    $this->name
334
-                )
335
-            );
336
-        }
337
-    }
27
+	/**
28
+	 * @var string $name
29
+	 */
30
+	protected $name = '';
31
+
32
+	/**
33
+	 * @var string $message
34
+	 */
35
+	protected $message = '';
36
+
37
+	/**
38
+	 * @var boolean $force_update
39
+	 */
40
+	protected $force_update = false;
41
+
42
+	/**
43
+	 * @var string $capability
44
+	 */
45
+	protected $capability = 'manage_options';
46
+
47
+	/**
48
+	 * @var string $cap_context
49
+	 */
50
+	protected $cap_context = 'view persistent admin notice';
51
+
52
+	/**
53
+	 * @var boolean $dismissed
54
+	 */
55
+	protected $dismissed = false;
56
+
57
+	/**
58
+	 * @var CapCheckInterface $cap_check
59
+	 */
60
+	protected $cap_check;
61
+
62
+	/**
63
+	 * if true, then this notice will be deleted from the database
64
+	 *
65
+	 * @var boolean $purge
66
+	 */
67
+	protected $purge = false;
68
+
69
+	/**
70
+	 * gets set to true if notice is successfully registered with the PersistentAdminNoticeManager
71
+	 * if false, and WP_DEBUG is on, then an exception will be thrown in the admin footer
72
+	 *
73
+	 * @var boolean $registered
74
+	 */
75
+	private $registered = false;
76
+
77
+
78
+	/**
79
+	 * PersistentAdminNotice constructor
80
+	 *
81
+	 * @param string $name         [required] the name, or key of the Persistent Admin Notice to be stored
82
+	 * @param string $message      [required] the message to be stored persistently until dismissed
83
+	 * @param bool   $force_update enforce the reappearance of a persistent message
84
+	 * @param string $capability   user capability required to view this notice
85
+	 * @param string $cap_context  description for why the cap check is being performed
86
+	 * @param bool   $dismissed    whether or not the user has already dismissed/viewed this notice
87
+	 * @throws InvalidDataTypeException
88
+	 */
89
+	public function __construct(
90
+		$name,
91
+		$message,
92
+		$force_update = false,
93
+		$capability = 'manage_options',
94
+		$cap_context = 'view persistent admin notice',
95
+		$dismissed = false
96
+	) {
97
+		$this->setName($name);
98
+		$this->setMessage($message);
99
+		$this->setForceUpdate($force_update);
100
+		$this->setCapability($capability);
101
+		$this->setCapContext($cap_context);
102
+		$this->setDismissed($dismissed);
103
+		add_action(
104
+			'AHEE__EventEspresso_core_services_notifications_PersistentAdminNoticeManager__registerNotices',
105
+			array($this, 'registerPersistentAdminNotice')
106
+		);
107
+		add_action('shutdown', array($this, 'confirmRegistered'), 999);
108
+	}
109
+
110
+
111
+	/**
112
+	 * @return string
113
+	 */
114
+	public function getName()
115
+	{
116
+		return $this->name;
117
+	}
118
+
119
+
120
+	/**
121
+	 * @param string $name
122
+	 * @throws InvalidDataTypeException
123
+	 */
124
+	private function setName($name)
125
+	{
126
+		if (! is_string($name)) {
127
+			throw new InvalidDataTypeException('$name', $name, 'string');
128
+		}
129
+		$this->name = sanitize_key($name);
130
+	}
131
+
132
+
133
+	/**
134
+	 * @return string
135
+	 */
136
+	public function getMessage()
137
+	{
138
+		return $this->message;
139
+	}
140
+
141
+
142
+	/**
143
+	 * @param string $message
144
+	 * @throws InvalidDataTypeException
145
+	 */
146
+	private function setMessage($message)
147
+	{
148
+		if (! is_string($message)) {
149
+			throw new InvalidDataTypeException('$message', $message, 'string');
150
+		}
151
+		global $allowedtags;
152
+		$allowedtags['br'] = array();
153
+		$this->message = wp_kses($message, $allowedtags);
154
+	}
155
+
156
+
157
+	/**
158
+	 * @return bool
159
+	 */
160
+	public function getForceUpdate()
161
+	{
162
+		return $this->force_update;
163
+	}
164
+
165
+
166
+	/**
167
+	 * @param bool $force_update
168
+	 */
169
+	private function setForceUpdate($force_update)
170
+	{
171
+		$this->force_update = filter_var($force_update, FILTER_VALIDATE_BOOLEAN);
172
+	}
173
+
174
+
175
+	/**
176
+	 * @return string
177
+	 */
178
+	public function getCapability()
179
+	{
180
+		return $this->capability;
181
+	}
182
+
183
+
184
+	/**
185
+	 * @param string $capability
186
+	 * @throws InvalidDataTypeException
187
+	 */
188
+	private function setCapability($capability)
189
+	{
190
+		if (! is_string($capability)) {
191
+			throw new InvalidDataTypeException('$capability', $capability, 'string');
192
+		}
193
+		$this->capability = ! empty($capability) ? $capability : 'manage_options';
194
+	}
195
+
196
+
197
+	/**
198
+	 * @return string
199
+	 */
200
+	public function getCapContext()
201
+	{
202
+		return $this->cap_context;
203
+	}
204
+
205
+
206
+	/**
207
+	 * @param string $cap_context
208
+	 * @throws InvalidDataTypeException
209
+	 */
210
+	private function setCapContext($cap_context)
211
+	{
212
+		if (! is_string($cap_context)) {
213
+			throw new InvalidDataTypeException('$cap_context', $cap_context, 'string');
214
+		}
215
+		$this->cap_context = ! empty($cap_context) ? $cap_context : 'view persistent admin notice';
216
+	}
217
+
218
+
219
+	/**
220
+	 * @return bool
221
+	 */
222
+	public function getDismissed()
223
+	{
224
+		return $this->dismissed;
225
+	}
226
+
227
+
228
+	/**
229
+	 * @param bool $dismissed
230
+	 */
231
+	public function setDismissed($dismissed)
232
+	{
233
+		$this->dismissed = filter_var($dismissed, FILTER_VALIDATE_BOOLEAN);
234
+	}
235
+
236
+
237
+	/**
238
+	 * @return CapCheckInterface
239
+	 * @throws InvalidDataTypeException
240
+	 */
241
+	public function getCapCheck()
242
+	{
243
+		if (! $this->cap_check instanceof CapCheckInterface) {
244
+			$this->setCapCheck(
245
+				new CapCheck(
246
+					$this->capability,
247
+					$this->cap_context
248
+				)
249
+			);
250
+		}
251
+		return $this->cap_check;
252
+	}
253
+
254
+
255
+	/**
256
+	 * @param CapCheckInterface $cap_check
257
+	 */
258
+	private function setCapCheck(CapCheckInterface $cap_check)
259
+	{
260
+		$this->cap_check = $cap_check;
261
+	}
262
+
263
+
264
+	/**
265
+	 * @return bool
266
+	 */
267
+	public function getPurge()
268
+	{
269
+		return $this->purge;
270
+	}
271
+
272
+
273
+	/**
274
+	 * @param bool $purge
275
+	 */
276
+	public function setPurge($purge)
277
+	{
278
+		$this->purge = filter_var($purge, FILTER_VALIDATE_BOOLEAN);
279
+	}
280
+
281
+
282
+	/**
283
+	 * given a valid PersistentAdminNotice Collection,
284
+	 * this notice will be added if it is not already found in the collection (using its name as the identifier)
285
+	 * if an existing notice is found that has already been dismissed,
286
+	 * but we are overriding with a forced update, then we will toggle its dismissed state,
287
+	 * so that the notice is displayed again
288
+	 *
289
+	 * @param Collection $persistent_admin_notice_collection
290
+	 * @throws InvalidEntityException
291
+	 * @throws InvalidDataTypeException
292
+	 */
293
+	public function registerPersistentAdminNotice(Collection $persistent_admin_notice_collection)
294
+	{
295
+		if ($this->registered) {
296
+			return;
297
+		}
298
+		// first check if this notice has already been added to the collection
299
+		if ($persistent_admin_notice_collection->has($this->name)) {
300
+			/** @var PersistentAdminNotice $existing */
301
+			$existing = $persistent_admin_notice_collection->get($this->name);
302
+			// we don't need to add it again (we can't actually)
303
+			// but if it has already been dismissed, and we are overriding with a forced update
304
+			if ($existing->getDismissed() && $this->getForceUpdate()) {
305
+				// then toggle the notice's dismissed state to true
306
+				// so that it gets displayed again
307
+				$existing->setDismissed(false);
308
+				// and make sure the message is set
309
+				$existing->setMessage($this->message);
310
+			}
311
+		} else {
312
+			$persistent_admin_notice_collection->add($this, $this->name);
313
+		}
314
+		$this->registered = true;
315
+	}
316
+
317
+
318
+	/**
319
+	 * @throws Exception
320
+	 */
321
+	public function confirmRegistered()
322
+	{
323
+		if (! apply_filters('PersistentAdminNoticeManager__registerAndSaveNotices__complete', false)) {
324
+			PersistentAdminNoticeManager::loadRegisterAndSaveNotices();
325
+		}
326
+		if (! $this->registered && WP_DEBUG) {
327
+			throw new DomainException(
328
+				sprintf(
329
+					esc_html__(
330
+						'The "%1$s" PersistentAdminNotice was not successfully registered. Please ensure that it is being created prior to either the "admin_notices" or "network_admin_notices" hooks being triggered.',
331
+						'event_espresso'
332
+					),
333
+					$this->name
334
+				)
335
+			);
336
+		}
337
+	}
338 338
 }
Please login to merge, or discard this patch.
acceptance_tests/Helpers/EventsAdmin.php 1 patch
Indentation   +129 added lines, -129 removed lines patch added patch discarded remove patch
@@ -14,133 +14,133 @@
 block discarded – undo
14 14
 trait EventsAdmin
15 15
 {
16 16
 
17
-    /**
18
-     * @param string $additional_params
19
-     */
20
-    public function amOnDefaultEventsListTablePage($additional_params = '')
21
-    {
22
-        $this->actor()->amOnAdminPage(EventsPage::defaultEventsListTableUrl($additional_params));
23
-    }
24
-
25
-
26
-    /**
27
-     * Triggers the publishing of the Event.
28
-     */
29
-    public function publishEvent()
30
-    {
31
-        $this->actor()->scrollTo(EventsPage::EVENT_EDITOR_TITLE_FIELD_SELECTOR);
32
-        $this->actor()->wait(3);
33
-        $this->actor()->click(EventsPage::EVENT_EDITOR_PUBLISH_BUTTON_SELECTOR);
34
-        $this->actor()->waitForText('Event published.', 30);
35
-    }
36
-
37
-
38
-    /**
39
-     * Triggers saving the Event.
40
-     */
41
-    public function saveEvent()
42
-    {
43
-        $this->actor()->scrollTo(EventsPage::EVENT_EDITOR_TITLE_FIELD_SELECTOR);
44
-        $this->actor()->wait(2);
45
-        $this->actor()->click(EventsPage::EVENT_EDITOR_SAVE_BUTTON_SELECTOR);
46
-    }
47
-
48
-
49
-    /**
50
-     * Navigates the actor to the event list table page and will attempt to edit the event for the given title.
51
-     * First this will search using the given title and then attempt to edit from the results of the search.
52
-     *
53
-     * Assumes actor is already logged in.
54
-     * @param $event_title
55
-     */
56
-    public function amEditingTheEventWithTitle($event_title)
57
-    {
58
-        $this->amOnDefaultEventsListTablePage();
59
-        $this->actor()->fillField(EventsPage::EVENT_LIST_TABLE_SEARCH_INPUT_SELECTOR, $event_title);
60
-        $this->actor()->click(CoreAdmin::LIST_TABLE_SEARCH_SUBMIT_SELECTOR);
61
-        $this->actor()->waitForText($event_title, 15);
62
-        $this->actor()->click(EventsPage::eventListTableEventTitleEditLinkSelectorForTitle($event_title));
63
-    }
64
-
65
-
66
-    /**
67
-     * Navigates the user to the single event page (frontend view) for the given event title via clicking the "View"
68
-     * link for the event in the event list table.
69
-     * Assumes the actor is already logged in and on the Event list table page.
70
-     *
71
-     * @param string $event_title
72
-     */
73
-    public function amOnEventPageAfterClickingViewLinkInListTableForEvent($event_title)
74
-    {
75
-        $this->actor()->moveMouseOver(EventsPage::eventListTableEventTitleEditLinkSelectorForTitle($event_title));
76
-        $this->actor()->click(EventsPage::eventListTableEventTitleViewLinkSelectorForTitle($event_title));
77
-    }
78
-
79
-
80
-    /**
81
-     * Used to retrieve the event id for the event via the list table and for the given event.
82
-     * @param string $event_title
83
-     */
84
-    public function observeEventIdInListTableForEvent($event_title)
85
-    {
86
-        return $this->actor()->observeValueFromInputAt(EventsPage::eventListTableEventIdSelectorForTitle($event_title));
87
-    }
88
-
89
-
90
-    /**
91
-     * This performs the click action on the gear icon that triggers the advanced settings view state.
92
-     * Assumes the actor is already logged in and editing an event.
93
-     *
94
-     * @param int $row_number  What ticket row to toggle open/close.
95
-     */
96
-    public function toggleAdvancedSettingsViewForTicketRow($row_number = 1)
97
-    {
98
-        $this->actor()->click(EventsPage::eventEditorTicketAdvancedDetailsSelector($row_number));
99
-    }
100
-
101
-
102
-    /**
103
-     * Toggles the TKT_is_taxable checkbox for the ticket in the given row.
104
-     * Assumes the actor is already logged in and editing an event and that the advanced settings view state for that
105
-     * ticket is "open".
106
-     *
107
-     * @param int $row_number  What ticket row to toggle the checkbox for.
108
-     */
109
-    public function toggleTicketIsTaxableForTicketRow($row_number = 1)
110
-    {
111
-        $this->actor()->click(EventsPage::eventEditorTicketTaxableCheckboxSelector($row_number));
112
-    }
113
-
114
-
115
-    /**
116
-     * Use to change the default registration status for the event.
117
-     * Assumes the view is already on the event editor.
118
-     * @param $registration_status
119
-     */
120
-    public function changeDefaultRegistrationStatusTo($registration_status)
121
-    {
122
-        $this->actor()->selectOption(
123
-            EventsPage::EVENT_EDITOR_DEFAULT_REGISTRATION_STATUS_FIELD_SELECTOR,
124
-            $registration_status
125
-        );
126
-    }
127
-
128
-
129
-    /**
130
-     * Use this from the context of the event editor to select the given custom template for a given message type and
131
-     * messenger.
132
-     *
133
-     * @param string $message_type_label  The visible label for the message type (eg Registration Approved)
134
-     * @param string $messenger_slug      The slug for the messenger (eg 'email')
135
-     * @param string $custom_template_label The visible label in the select input for the custom template you want
136
-     *                                      selected.
137
-     */
138
-    public function selectCustomTemplateFor($message_type_label, $messenger_slug, $custom_template_label)
139
-    {
140
-        $this->actor()->click(EventsPage::eventEditorNotificationsMetaBoxMessengerTabSelector($messenger_slug));
141
-        $this->actor()->selectOption(
142
-            EventsPage::eventEditorNotificationsMetaBoxSelectSelectorForMessageType($message_type_label),
143
-            $custom_template_label
144
-        );
145
-    }
17
+	/**
18
+	 * @param string $additional_params
19
+	 */
20
+	public function amOnDefaultEventsListTablePage($additional_params = '')
21
+	{
22
+		$this->actor()->amOnAdminPage(EventsPage::defaultEventsListTableUrl($additional_params));
23
+	}
24
+
25
+
26
+	/**
27
+	 * Triggers the publishing of the Event.
28
+	 */
29
+	public function publishEvent()
30
+	{
31
+		$this->actor()->scrollTo(EventsPage::EVENT_EDITOR_TITLE_FIELD_SELECTOR);
32
+		$this->actor()->wait(3);
33
+		$this->actor()->click(EventsPage::EVENT_EDITOR_PUBLISH_BUTTON_SELECTOR);
34
+		$this->actor()->waitForText('Event published.', 30);
35
+	}
36
+
37
+
38
+	/**
39
+	 * Triggers saving the Event.
40
+	 */
41
+	public function saveEvent()
42
+	{
43
+		$this->actor()->scrollTo(EventsPage::EVENT_EDITOR_TITLE_FIELD_SELECTOR);
44
+		$this->actor()->wait(2);
45
+		$this->actor()->click(EventsPage::EVENT_EDITOR_SAVE_BUTTON_SELECTOR);
46
+	}
47
+
48
+
49
+	/**
50
+	 * Navigates the actor to the event list table page and will attempt to edit the event for the given title.
51
+	 * First this will search using the given title and then attempt to edit from the results of the search.
52
+	 *
53
+	 * Assumes actor is already logged in.
54
+	 * @param $event_title
55
+	 */
56
+	public function amEditingTheEventWithTitle($event_title)
57
+	{
58
+		$this->amOnDefaultEventsListTablePage();
59
+		$this->actor()->fillField(EventsPage::EVENT_LIST_TABLE_SEARCH_INPUT_SELECTOR, $event_title);
60
+		$this->actor()->click(CoreAdmin::LIST_TABLE_SEARCH_SUBMIT_SELECTOR);
61
+		$this->actor()->waitForText($event_title, 15);
62
+		$this->actor()->click(EventsPage::eventListTableEventTitleEditLinkSelectorForTitle($event_title));
63
+	}
64
+
65
+
66
+	/**
67
+	 * Navigates the user to the single event page (frontend view) for the given event title via clicking the "View"
68
+	 * link for the event in the event list table.
69
+	 * Assumes the actor is already logged in and on the Event list table page.
70
+	 *
71
+	 * @param string $event_title
72
+	 */
73
+	public function amOnEventPageAfterClickingViewLinkInListTableForEvent($event_title)
74
+	{
75
+		$this->actor()->moveMouseOver(EventsPage::eventListTableEventTitleEditLinkSelectorForTitle($event_title));
76
+		$this->actor()->click(EventsPage::eventListTableEventTitleViewLinkSelectorForTitle($event_title));
77
+	}
78
+
79
+
80
+	/**
81
+	 * Used to retrieve the event id for the event via the list table and for the given event.
82
+	 * @param string $event_title
83
+	 */
84
+	public function observeEventIdInListTableForEvent($event_title)
85
+	{
86
+		return $this->actor()->observeValueFromInputAt(EventsPage::eventListTableEventIdSelectorForTitle($event_title));
87
+	}
88
+
89
+
90
+	/**
91
+	 * This performs the click action on the gear icon that triggers the advanced settings view state.
92
+	 * Assumes the actor is already logged in and editing an event.
93
+	 *
94
+	 * @param int $row_number  What ticket row to toggle open/close.
95
+	 */
96
+	public function toggleAdvancedSettingsViewForTicketRow($row_number = 1)
97
+	{
98
+		$this->actor()->click(EventsPage::eventEditorTicketAdvancedDetailsSelector($row_number));
99
+	}
100
+
101
+
102
+	/**
103
+	 * Toggles the TKT_is_taxable checkbox for the ticket in the given row.
104
+	 * Assumes the actor is already logged in and editing an event and that the advanced settings view state for that
105
+	 * ticket is "open".
106
+	 *
107
+	 * @param int $row_number  What ticket row to toggle the checkbox for.
108
+	 */
109
+	public function toggleTicketIsTaxableForTicketRow($row_number = 1)
110
+	{
111
+		$this->actor()->click(EventsPage::eventEditorTicketTaxableCheckboxSelector($row_number));
112
+	}
113
+
114
+
115
+	/**
116
+	 * Use to change the default registration status for the event.
117
+	 * Assumes the view is already on the event editor.
118
+	 * @param $registration_status
119
+	 */
120
+	public function changeDefaultRegistrationStatusTo($registration_status)
121
+	{
122
+		$this->actor()->selectOption(
123
+			EventsPage::EVENT_EDITOR_DEFAULT_REGISTRATION_STATUS_FIELD_SELECTOR,
124
+			$registration_status
125
+		);
126
+	}
127
+
128
+
129
+	/**
130
+	 * Use this from the context of the event editor to select the given custom template for a given message type and
131
+	 * messenger.
132
+	 *
133
+	 * @param string $message_type_label  The visible label for the message type (eg Registration Approved)
134
+	 * @param string $messenger_slug      The slug for the messenger (eg 'email')
135
+	 * @param string $custom_template_label The visible label in the select input for the custom template you want
136
+	 *                                      selected.
137
+	 */
138
+	public function selectCustomTemplateFor($message_type_label, $messenger_slug, $custom_template_label)
139
+	{
140
+		$this->actor()->click(EventsPage::eventEditorNotificationsMetaBoxMessengerTabSelector($messenger_slug));
141
+		$this->actor()->selectOption(
142
+			EventsPage::eventEditorNotificationsMetaBoxSelectSelectorForMessageType($message_type_label),
143
+			$custom_template_label
144
+		);
145
+	}
146 146
 }
147 147
\ No newline at end of file
Please login to merge, or discard this patch.
core/services/request/RequestInterface.php 1 patch
Indentation   +118 added lines, -118 removed lines patch added patch discarded remove patch
@@ -20,139 +20,139 @@
 block discarded – undo
20 20
 interface RequestInterface extends RequestTypeContextCheckerInterface
21 21
 {
22 22
 
23
-    /**
24
-     * @param RequestTypeContextCheckerInterface $type
25
-     */
26
-    public function setRequestTypeContextChecker(RequestTypeContextCheckerInterface $type);
27
-
28
-    /**
29
-     * @return array
30
-     */
31
-    public function getParams();
32
-
33
-
34
-    /**
35
-     * @return array
36
-     */
37
-    public function postParams();
38
-
39
-
40
-    /**
41
-     * @return array
42
-     */
43
-    public function cookieParams();
44
-
45
-
46
-    /**
47
-     * @return array
48
-     */
49
-    public function serverParams();
50
-
51
-
52
-    /**
53
-     * returns contents of $_REQUEST
54
-     *
55
-     * @return array
56
-     */
57
-    public function requestParams();
23
+	/**
24
+	 * @param RequestTypeContextCheckerInterface $type
25
+	 */
26
+	public function setRequestTypeContextChecker(RequestTypeContextCheckerInterface $type);
27
+
28
+	/**
29
+	 * @return array
30
+	 */
31
+	public function getParams();
32
+
33
+
34
+	/**
35
+	 * @return array
36
+	 */
37
+	public function postParams();
38
+
39
+
40
+	/**
41
+	 * @return array
42
+	 */
43
+	public function cookieParams();
44
+
45
+
46
+	/**
47
+	 * @return array
48
+	 */
49
+	public function serverParams();
50
+
51
+
52
+	/**
53
+	 * returns contents of $_REQUEST
54
+	 *
55
+	 * @return array
56
+	 */
57
+	public function requestParams();
58 58
 
59 59
 
60
-    /**
61
-     * @param string $key
62
-     * @param string $value
63
-     * @param bool   $override_ee
64
-     * @return    void
65
-     */
66
-    public function setRequestParam($key, $value, $override_ee = false);
60
+	/**
61
+	 * @param string $key
62
+	 * @param string $value
63
+	 * @param bool   $override_ee
64
+	 * @return    void
65
+	 */
66
+	public function setRequestParam($key, $value, $override_ee = false);
67 67
 
68 68
 
69
-    /**
70
-     * returns the value for a request param if the given key exists
71
-     *
72
-     * @param string $key
73
-     * @param null   $default
74
-     * @return mixed
75
-     */
76
-    public function getRequestParam($key, $default = null);
69
+	/**
70
+	 * returns the value for a request param if the given key exists
71
+	 *
72
+	 * @param string $key
73
+	 * @param null   $default
74
+	 * @return mixed
75
+	 */
76
+	public function getRequestParam($key, $default = null);
77 77
 
78 78
 
79
-    /**
80
-     * check if param exists
81
-     *
82
-     * @param string $key
83
-     * @return bool
84
-     */
85
-    public function requestParamIsSet($key);
79
+	/**
80
+	 * check if param exists
81
+	 *
82
+	 * @param string $key
83
+	 * @return bool
84
+	 */
85
+	public function requestParamIsSet($key);
86 86
 
87 87
 
88
-    /**
89
-     * check if a request parameter exists whose key that matches the supplied wildcard pattern
90
-     * and return the value for the first match found
91
-     * wildcards can be either of the following:
92
-     *      ? to represent a single character of any type
93
-     *      * to represent one or more characters of any type
94
-     *
95
-     * @param string     $pattern
96
-     * @param null|mixed $default
97
-     * @return false|int
98
-     */
99
-    public function getMatch($pattern, $default = null);
88
+	/**
89
+	 * check if a request parameter exists whose key that matches the supplied wildcard pattern
90
+	 * and return the value for the first match found
91
+	 * wildcards can be either of the following:
92
+	 *      ? to represent a single character of any type
93
+	 *      * to represent one or more characters of any type
94
+	 *
95
+	 * @param string     $pattern
96
+	 * @param null|mixed $default
97
+	 * @return false|int
98
+	 */
99
+	public function getMatch($pattern, $default = null);
100 100
 
101 101
 
102
-    /**
103
-     * check if a request parameter exists whose key matches the supplied wildcard pattern
104
-     * wildcards can be either of the following:
105
-     *      ? to represent a single character of any type
106
-     *      * to represent one or more characters of any type
107
-     * returns true if a match is found or false if not
108
-     *
109
-     * @param string $pattern
110
-     * @return false|int
111
-     */
112
-    public function matches($pattern);
102
+	/**
103
+	 * check if a request parameter exists whose key matches the supplied wildcard pattern
104
+	 * wildcards can be either of the following:
105
+	 *      ? to represent a single character of any type
106
+	 *      * to represent one or more characters of any type
107
+	 * returns true if a match is found or false if not
108
+	 *
109
+	 * @param string $pattern
110
+	 * @return false|int
111
+	 */
112
+	public function matches($pattern);
113 113
 
114 114
 
115
-    /**
116
-     * remove param
117
-     *
118
-     * @param string $key
119
-     * @param bool   $unset_from_global_too
120
-     */
121
-    public function unSetRequestParam($key, $unset_from_global_too = false);
115
+	/**
116
+	 * remove param
117
+	 *
118
+	 * @param string $key
119
+	 * @param bool   $unset_from_global_too
120
+	 */
121
+	public function unSetRequestParam($key, $unset_from_global_too = false);
122 122
 
123 123
 
124
-    /**
125
-     * @return string
126
-     */
127
-    public function ipAddress();
124
+	/**
125
+	 * @return string
126
+	 */
127
+	public function ipAddress();
128 128
 
129 129
 
130
-    /**
131
-     * @return string
132
-     */
133
-    public function requestUri();
134
-
130
+	/**
131
+	 * @return string
132
+	 */
133
+	public function requestUri();
134
+
135 135
 
136
-    /**
137
-     * @return string
138
-     */
139
-    public function userAgent();
140
-
141
-
142
-    /**
143
-     * @param string $user_agent
144
-     */
145
-    public function setUserAgent($user_agent = '');
146
-
147
-
148
-    /**
149
-     * @return bool
150
-     */
151
-    public function isBot();
152
-
153
-
154
-    /**
155
-     * @param bool $is_bot
156
-     */
157
-    public function setIsBot($is_bot);
136
+	/**
137
+	 * @return string
138
+	 */
139
+	public function userAgent();
140
+
141
+
142
+	/**
143
+	 * @param string $user_agent
144
+	 */
145
+	public function setUserAgent($user_agent = '');
146
+
147
+
148
+	/**
149
+	 * @return bool
150
+	 */
151
+	public function isBot();
152
+
153
+
154
+	/**
155
+	 * @param bool $is_bot
156
+	 */
157
+	public function setIsBot($is_bot);
158 158
 }
Please login to merge, or discard this patch.