Completed
Branch FET/allow-prices-to-be-more-pr... (276f1f)
by
unknown
16:59 queued 13:36
created
modules/ticket_selector/DatetimeSelector.php 2 patches
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -102,10 +102,10 @@  discard block
 block discarded – undo
102 102
             )
103 103
         );
104 104
         foreach ($ticket_datetimes as $ticket_datetime) {
105
-            if (! $ticket_datetime instanceof \EE_Datetime) {
105
+            if ( ! $ticket_datetime instanceof \EE_Datetime) {
106 106
                 continue;
107 107
             }
108
-            $datetimes[ $ticket_datetime->ID() ] = $ticket_datetime;
108
+            $datetimes[$ticket_datetime->ID()] = $ticket_datetime;
109 109
         }
110 110
         return $datetimes;
111 111
     }
@@ -118,16 +118,16 @@  discard block
 block discarded – undo
118 118
      */
119 119
     public function getTicketDatetimeClasses(\EE_Ticket $ticket)
120 120
     {
121
-        if (! $this->active) {
121
+        if ( ! $this->active) {
122 122
             return '';
123 123
         }
124 124
         $ticket_datetimes = $this->getTicketDatetimes($ticket);
125 125
         $classes = '';
126 126
         foreach ($this->datetimes as $datetime) {
127
-            if (! $datetime instanceof \EE_Datetime || ! in_array($datetime, $ticket_datetimes, true)) {
127
+            if ( ! $datetime instanceof \EE_Datetime || ! in_array($datetime, $ticket_datetimes, true)) {
128 128
                 continue;
129 129
             }
130
-            $classes .= ' ee-ticket-datetimes-' . $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_');
130
+            $classes .= ' ee-ticket-datetimes-'.$datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_');
131 131
         }
132 132
         return $classes;
133 133
     }
@@ -143,10 +143,10 @@  discard block
 block discarded – undo
143 143
     {
144 144
         $datetime_options = array();
145 145
         foreach ($this->datetimes as $datetime) {
146
-            if (! $datetime instanceof \EE_Datetime) {
146
+            if ( ! $datetime instanceof \EE_Datetime) {
147 147
                 continue;
148 148
             }
149
-            $datetime_options[ $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_') ] =
149
+            $datetime_options[$datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_')] =
150 150
                 $datetime->date_and_time_range($date_format, $time_format, ' - ');
151 151
         }
152 152
         return $datetime_options;
@@ -159,18 +159,18 @@  discard block
 block discarded – undo
159 159
      */
160 160
     public function getDatetimeSelector()
161 161
     {
162
-        if (! $this->active) {
162
+        if ( ! $this->active) {
163 163
             return '';
164 164
         }
165 165
         $dropdown_selector = new \EE_Checkbox_Dropdown_Selector_Input(
166 166
             $this->unique_dates,
167 167
             array(
168
-                'html_id'               => 'datetime-selector-' . $this->event->ID(),
169
-                'html_name'             => 'datetime_selector_' . $this->event->ID(),
168
+                'html_id'               => 'datetime-selector-'.$this->event->ID(),
169
+                'html_name'             => 'datetime_selector_'.$this->event->ID(),
170 170
                 'html_class'            => 'datetime-selector',
171 171
                 'select_button_text'    => '<span class="dashicons dashicons-calendar-alt"></span> '
172 172
                                            . esc_html__('Filter by Date', 'event_espresso'),
173
-                'other_html_attributes' => ' data-tkt_slctr_evt="' . $this->event->ID() . '"',
173
+                'other_html_attributes' => ' data-tkt_slctr_evt="'.$this->event->ID().'"',
174 174
             )
175 175
         );
176 176
         return \EEH_HTML::div(
Please login to merge, or discard this patch.
Indentation   +167 added lines, -167 removed lines patch added patch discarded remove patch
@@ -11,171 +11,171 @@
 block discarded – undo
11 11
  */
12 12
 class DatetimeSelector
13 13
 {
14
-    /**
15
-     * @var \EE_Event $event
16
-     */
17
-    protected $event;
18
-
19
-    /**
20
-     * @var \EE_Ticket[] $tickets
21
-     */
22
-    protected $tickets;
23
-
24
-    /**
25
-     * @var \EE_Datetime[] $datetimes
26
-     */
27
-    protected $datetimes;
28
-
29
-    /**
30
-     * @var \EE_Datetime[] $unique_dates
31
-     */
32
-    protected $unique_dates;
33
-
34
-    /**
35
-     * @var \EE_Ticket_Selector_Config $template_settings
36
-     */
37
-    protected $template_settings;
38
-
39
-    /**
40
-     * @var boolean $active
41
-     */
42
-    protected $active = false;
43
-
44
-
45
-    /**
46
-     * DatetimeSelector constructor.
47
-     *
48
-     * @param \EE_Event                  $event
49
-     * @param \EE_Ticket[]               $tickets
50
-     * @param \EE_Ticket_Selector_Config $template_settings
51
-     * @param string                     $date_format
52
-     * @param string                     $time_format
53
-     * @throws \EE_Error
54
-     */
55
-    public function __construct(
56
-        \EE_Event $event,
57
-        array $tickets,
58
-        \EE_Ticket_Selector_Config $template_settings,
59
-        $date_format = 'Y-m-d',
60
-        $time_format = 'g:i a'
61
-    ) {
62
-        $this->event = $event;
63
-        $this->tickets = $tickets;
64
-        $this->template_settings = $template_settings;
65
-        $this->datetimes = $this->getAllDatetimesForAllTicket($tickets);
66
-        $this->unique_dates = $this->getUniqueDatetimeOptions($date_format, $time_format);
67
-        $this->active = $this->template_settings->showDatetimeSelector($this->unique_dates);
68
-    }
69
-
70
-
71
-    /**
72
-     * @param \EE_Ticket[] $tickets
73
-     * @return array
74
-     * @throws \EE_Error
75
-     */
76
-    protected function getAllDatetimesForAllTicket($tickets = array())
77
-    {
78
-        $datetimes = array();
79
-        foreach ($tickets as $ticket) {
80
-            $datetimes = $this->getTicketDatetimes($ticket, $datetimes);
81
-        }
82
-        return $datetimes;
83
-    }
84
-
85
-
86
-    /**
87
-     * @param \EE_Ticket      $ticket
88
-     * @param  \EE_Datetime[] $datetimes
89
-     * @return \EE_Datetime[]
90
-     * @throws \EE_Error
91
-     */
92
-    protected function getTicketDatetimes(\EE_Ticket $ticket, $datetimes = array())
93
-    {
94
-        $ticket_datetimes = $ticket->datetimes(
95
-            array(
96
-                'order_by'                 => array(
97
-                    'DTT_order'     => 'ASC',
98
-                    'DTT_EVT_start' => 'ASC',
99
-                ),
100
-                'default_where_conditions' => 'none',
101
-            )
102
-        );
103
-        foreach ($ticket_datetimes as $ticket_datetime) {
104
-            if (! $ticket_datetime instanceof \EE_Datetime) {
105
-                continue;
106
-            }
107
-            $datetimes[ $ticket_datetime->ID() ] = $ticket_datetime;
108
-        }
109
-        return $datetimes;
110
-    }
111
-
112
-
113
-    /**
114
-     * @param \EE_Ticket $ticket
115
-     * @return string
116
-     * @throws \EE_Error
117
-     */
118
-    public function getTicketDatetimeClasses(\EE_Ticket $ticket)
119
-    {
120
-        if (! $this->active) {
121
-            return '';
122
-        }
123
-        $ticket_datetimes = $this->getTicketDatetimes($ticket);
124
-        $classes = '';
125
-        foreach ($this->datetimes as $datetime) {
126
-            if (! $datetime instanceof \EE_Datetime || ! in_array($datetime, $ticket_datetimes, true)) {
127
-                continue;
128
-            }
129
-            $classes .= ' ee-ticket-datetimes-' . $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_');
130
-        }
131
-        return $classes;
132
-    }
133
-
134
-
135
-    /**
136
-     * @param string $date_format
137
-     * @param string $time_format
138
-     * @return array
139
-     * @throws \EE_Error
140
-     */
141
-    public function getUniqueDatetimeOptions($date_format = 'Y-m-d', $time_format = 'g:i a')
142
-    {
143
-        $datetime_options = array();
144
-        foreach ($this->datetimes as $datetime) {
145
-            if (! $datetime instanceof \EE_Datetime) {
146
-                continue;
147
-            }
148
-            $datetime_options[ $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_') ] =
149
-                $datetime->date_and_time_range($date_format, $time_format, ' - ');
150
-        }
151
-        return $datetime_options;
152
-    }
153
-
154
-
155
-    /**
156
-     * @return string
157
-     * @throws \EE_Error
158
-     */
159
-    public function getDatetimeSelector()
160
-    {
161
-        if (! $this->active) {
162
-            return '';
163
-        }
164
-        $dropdown_selector = new \EE_Checkbox_Dropdown_Selector_Input(
165
-            $this->unique_dates,
166
-            array(
167
-                'html_id'               => 'datetime-selector-' . $this->event->ID(),
168
-                'html_name'             => 'datetime_selector_' . $this->event->ID(),
169
-                'html_class'            => 'datetime-selector',
170
-                'select_button_text'    => '<span class="dashicons dashicons-calendar-alt"></span> '
171
-                                           . esc_html__('Filter by Date', 'event_espresso'),
172
-                'other_html_attributes' => ' data-tkt_slctr_evt="' . $this->event->ID() . '"',
173
-            )
174
-        );
175
-        return \EEH_HTML::div(
176
-            $dropdown_selector->get_html_for_input(),
177
-            '',
178
-            'datetime_selector-dv'
179
-        );
180
-    }
14
+	/**
15
+	 * @var \EE_Event $event
16
+	 */
17
+	protected $event;
18
+
19
+	/**
20
+	 * @var \EE_Ticket[] $tickets
21
+	 */
22
+	protected $tickets;
23
+
24
+	/**
25
+	 * @var \EE_Datetime[] $datetimes
26
+	 */
27
+	protected $datetimes;
28
+
29
+	/**
30
+	 * @var \EE_Datetime[] $unique_dates
31
+	 */
32
+	protected $unique_dates;
33
+
34
+	/**
35
+	 * @var \EE_Ticket_Selector_Config $template_settings
36
+	 */
37
+	protected $template_settings;
38
+
39
+	/**
40
+	 * @var boolean $active
41
+	 */
42
+	protected $active = false;
43
+
44
+
45
+	/**
46
+	 * DatetimeSelector constructor.
47
+	 *
48
+	 * @param \EE_Event                  $event
49
+	 * @param \EE_Ticket[]               $tickets
50
+	 * @param \EE_Ticket_Selector_Config $template_settings
51
+	 * @param string                     $date_format
52
+	 * @param string                     $time_format
53
+	 * @throws \EE_Error
54
+	 */
55
+	public function __construct(
56
+		\EE_Event $event,
57
+		array $tickets,
58
+		\EE_Ticket_Selector_Config $template_settings,
59
+		$date_format = 'Y-m-d',
60
+		$time_format = 'g:i a'
61
+	) {
62
+		$this->event = $event;
63
+		$this->tickets = $tickets;
64
+		$this->template_settings = $template_settings;
65
+		$this->datetimes = $this->getAllDatetimesForAllTicket($tickets);
66
+		$this->unique_dates = $this->getUniqueDatetimeOptions($date_format, $time_format);
67
+		$this->active = $this->template_settings->showDatetimeSelector($this->unique_dates);
68
+	}
69
+
70
+
71
+	/**
72
+	 * @param \EE_Ticket[] $tickets
73
+	 * @return array
74
+	 * @throws \EE_Error
75
+	 */
76
+	protected function getAllDatetimesForAllTicket($tickets = array())
77
+	{
78
+		$datetimes = array();
79
+		foreach ($tickets as $ticket) {
80
+			$datetimes = $this->getTicketDatetimes($ticket, $datetimes);
81
+		}
82
+		return $datetimes;
83
+	}
84
+
85
+
86
+	/**
87
+	 * @param \EE_Ticket      $ticket
88
+	 * @param  \EE_Datetime[] $datetimes
89
+	 * @return \EE_Datetime[]
90
+	 * @throws \EE_Error
91
+	 */
92
+	protected function getTicketDatetimes(\EE_Ticket $ticket, $datetimes = array())
93
+	{
94
+		$ticket_datetimes = $ticket->datetimes(
95
+			array(
96
+				'order_by'                 => array(
97
+					'DTT_order'     => 'ASC',
98
+					'DTT_EVT_start' => 'ASC',
99
+				),
100
+				'default_where_conditions' => 'none',
101
+			)
102
+		);
103
+		foreach ($ticket_datetimes as $ticket_datetime) {
104
+			if (! $ticket_datetime instanceof \EE_Datetime) {
105
+				continue;
106
+			}
107
+			$datetimes[ $ticket_datetime->ID() ] = $ticket_datetime;
108
+		}
109
+		return $datetimes;
110
+	}
111
+
112
+
113
+	/**
114
+	 * @param \EE_Ticket $ticket
115
+	 * @return string
116
+	 * @throws \EE_Error
117
+	 */
118
+	public function getTicketDatetimeClasses(\EE_Ticket $ticket)
119
+	{
120
+		if (! $this->active) {
121
+			return '';
122
+		}
123
+		$ticket_datetimes = $this->getTicketDatetimes($ticket);
124
+		$classes = '';
125
+		foreach ($this->datetimes as $datetime) {
126
+			if (! $datetime instanceof \EE_Datetime || ! in_array($datetime, $ticket_datetimes, true)) {
127
+				continue;
128
+			}
129
+			$classes .= ' ee-ticket-datetimes-' . $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_');
130
+		}
131
+		return $classes;
132
+	}
133
+
134
+
135
+	/**
136
+	 * @param string $date_format
137
+	 * @param string $time_format
138
+	 * @return array
139
+	 * @throws \EE_Error
140
+	 */
141
+	public function getUniqueDatetimeOptions($date_format = 'Y-m-d', $time_format = 'g:i a')
142
+	{
143
+		$datetime_options = array();
144
+		foreach ($this->datetimes as $datetime) {
145
+			if (! $datetime instanceof \EE_Datetime) {
146
+				continue;
147
+			}
148
+			$datetime_options[ $datetime->date_and_time_range('Y_m_d', 'H_i', '-', '_') ] =
149
+				$datetime->date_and_time_range($date_format, $time_format, ' - ');
150
+		}
151
+		return $datetime_options;
152
+	}
153
+
154
+
155
+	/**
156
+	 * @return string
157
+	 * @throws \EE_Error
158
+	 */
159
+	public function getDatetimeSelector()
160
+	{
161
+		if (! $this->active) {
162
+			return '';
163
+		}
164
+		$dropdown_selector = new \EE_Checkbox_Dropdown_Selector_Input(
165
+			$this->unique_dates,
166
+			array(
167
+				'html_id'               => 'datetime-selector-' . $this->event->ID(),
168
+				'html_name'             => 'datetime_selector_' . $this->event->ID(),
169
+				'html_class'            => 'datetime-selector',
170
+				'select_button_text'    => '<span class="dashicons dashicons-calendar-alt"></span> '
171
+										   . esc_html__('Filter by Date', 'event_espresso'),
172
+				'other_html_attributes' => ' data-tkt_slctr_evt="' . $this->event->ID() . '"',
173
+			)
174
+		);
175
+		return \EEH_HTML::div(
176
+			$dropdown_selector->get_html_for_input(),
177
+			'',
178
+			'datetime_selector-dv'
179
+		);
180
+	}
181 181
 }
Please login to merge, or discard this patch.
caffeinated/modules/recaptcha/ReCaptcha/Response.php 2 patches
Indentation   +61 added lines, -61 removed lines patch added patch discarded remove patch
@@ -28,74 +28,74 @@
 block discarded – undo
28 28
  */
29 29
 class Response
30 30
 {
31
-    /**
32
-     * Succes or failure.
33
-     *
34
-     * @var boolean
35
-     */
36
-    private $success = false;
31
+	/**
32
+	 * Succes or failure.
33
+	 *
34
+	 * @var boolean
35
+	 */
36
+	private $success = false;
37 37
 
38
-    /**
39
-     * Error code strings.
40
-     *
41
-     * @var array
42
-     */
43
-    private $errorCodes = array();
38
+	/**
39
+	 * Error code strings.
40
+	 *
41
+	 * @var array
42
+	 */
43
+	private $errorCodes = array();
44 44
 
45
-    /**
46
-     * Build the response from the expected JSON returned by the service.
47
-     *
48
-     * @param string $json
49
-     * @return \ReCaptcha\Response
50
-     */
51
-    public static function fromJson($json)
52
-    {
53
-        $responseData = json_decode($json, true);
45
+	/**
46
+	 * Build the response from the expected JSON returned by the service.
47
+	 *
48
+	 * @param string $json
49
+	 * @return \ReCaptcha\Response
50
+	 */
51
+	public static function fromJson($json)
52
+	{
53
+		$responseData = json_decode($json, true);
54 54
 
55
-        if (! $responseData) {
56
-            return new Response(false, array('invalid-json'));
57
-        }
55
+		if (! $responseData) {
56
+			return new Response(false, array('invalid-json'));
57
+		}
58 58
 
59
-        if (isset($responseData['success']) && $responseData['success'] == true) {
60
-            return new Response(true);
61
-        }
59
+		if (isset($responseData['success']) && $responseData['success'] == true) {
60
+			return new Response(true);
61
+		}
62 62
 
63
-        if (isset($responseData['error-codes']) && is_array($responseData['error-codes'])) {
64
-            return new Response(false, $responseData['error-codes']);
65
-        }
63
+		if (isset($responseData['error-codes']) && is_array($responseData['error-codes'])) {
64
+			return new Response(false, $responseData['error-codes']);
65
+		}
66 66
 
67
-        return new Response(false);
68
-    }
67
+		return new Response(false);
68
+	}
69 69
 
70
-    /**
71
-     * Constructor.
72
-     *
73
-     * @param boolean $success
74
-     * @param array   $errorCodes
75
-     */
76
-    public function __construct($success, array $errorCodes = array())
77
-    {
78
-        $this->success = $success;
79
-        $this->errorCodes = $errorCodes;
80
-    }
70
+	/**
71
+	 * Constructor.
72
+	 *
73
+	 * @param boolean $success
74
+	 * @param array   $errorCodes
75
+	 */
76
+	public function __construct($success, array $errorCodes = array())
77
+	{
78
+		$this->success = $success;
79
+		$this->errorCodes = $errorCodes;
80
+	}
81 81
 
82
-    /**
83
-     * Is success?
84
-     *
85
-     * @return boolean
86
-     */
87
-    public function isSuccess()
88
-    {
89
-        return $this->success;
90
-    }
82
+	/**
83
+	 * Is success?
84
+	 *
85
+	 * @return boolean
86
+	 */
87
+	public function isSuccess()
88
+	{
89
+		return $this->success;
90
+	}
91 91
 
92
-    /**
93
-     * Get error codes.
94
-     *
95
-     * @return array
96
-     */
97
-    public function getErrorCodes()
98
-    {
99
-        return $this->errorCodes;
100
-    }
92
+	/**
93
+	 * Get error codes.
94
+	 *
95
+	 * @return array
96
+	 */
97
+	public function getErrorCodes()
98
+	{
99
+		return $this->errorCodes;
100
+	}
101 101
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@
 block discarded – undo
52 52
     {
53 53
         $responseData = json_decode($json, true);
54 54
 
55
-        if (! $responseData) {
55
+        if ( ! $responseData) {
56 56
             return new Response(false, array('invalid-json'));
57 57
         }
58 58
 
Please login to merge, or discard this patch.
core/Psr4Autoloader.php 2 patches
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -67,9 +67,9 @@  discard block
 block discarded – undo
67 67
      */
68 68
     public function prefixes($prefix = '')
69 69
     {
70
-        if (! empty($prefix)) {
70
+        if ( ! empty($prefix)) {
71 71
             // are there any base directories for this namespace prefix?
72
-            return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
72
+            return isset($this->prefixes[$prefix]) ? $this->prefixes[$prefix] : array();
73 73
         }
74 74
         return $this->prefixes;
75 75
     }
@@ -100,18 +100,18 @@  discard block
 block discarded – undo
100 100
     public function addNamespace($prefix, $base_dir, $prepend = false)
101 101
     {
102 102
         // normalize namespace prefix
103
-        $prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
103
+        $prefix = trim($prefix, Psr4Autoloader::NS).Psr4Autoloader::NS;
104 104
         // normalize the base directory with a trailing separator
105 105
         $base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
106 106
         // initialize the namespace prefix array
107
-        if (isset($this->prefixes[ $prefix ]) === false) {
108
-            $this->prefixes[ $prefix ] = array();
107
+        if (isset($this->prefixes[$prefix]) === false) {
108
+            $this->prefixes[$prefix] = array();
109 109
         }
110 110
         // retain the base directory for the namespace prefix
111 111
         if ($prepend) {
112
-            array_unshift($this->prefixes[ $prefix ], $base_dir);
112
+            array_unshift($this->prefixes[$prefix], $base_dir);
113 113
         } else {
114
-            $this->prefixes[ $prefix ][] = $base_dir;
114
+            $this->prefixes[$prefix][] = $base_dir;
115 115
         }
116 116
     }
117 117
 
Please login to merge, or discard this patch.
Indentation   +133 added lines, -133 removed lines patch added patch discarded remove patch
@@ -44,150 +44,150 @@
 block discarded – undo
44 44
  */
45 45
 class Psr4Autoloader
46 46
 {
47
-    /**
48
-     * namespace separator
49
-     */
50
-    const NS = '\\';
47
+	/**
48
+	 * namespace separator
49
+	 */
50
+	const NS = '\\';
51 51
 
52
-    /**
53
-     * An associative array where the key is a namespace prefix and the value
54
-     * is an array of base directories for classes in that namespace.
55
-     *
56
-     * @var array
57
-     */
58
-    protected $prefixes = array();
52
+	/**
53
+	 * An associative array where the key is a namespace prefix and the value
54
+	 * is an array of base directories for classes in that namespace.
55
+	 *
56
+	 * @var array
57
+	 */
58
+	protected $prefixes = array();
59 59
 
60 60
 
61
-    /**
62
-     * returns an array of registered namespace prefixes
63
-     *
64
-     * @param string $prefix
65
-     * @return array
66
-     */
67
-    public function prefixes($prefix = '')
68
-    {
69
-        if (! empty($prefix)) {
70
-            // are there any base directories for this namespace prefix?
71
-            return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
72
-        }
73
-        return $this->prefixes;
74
-    }
61
+	/**
62
+	 * returns an array of registered namespace prefixes
63
+	 *
64
+	 * @param string $prefix
65
+	 * @return array
66
+	 */
67
+	public function prefixes($prefix = '')
68
+	{
69
+		if (! empty($prefix)) {
70
+			// are there any base directories for this namespace prefix?
71
+			return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
72
+		}
73
+		return $this->prefixes;
74
+	}
75 75
 
76 76
 
77
-    /**
78
-     * Register loader with SPL autoloader stack.
79
-     *
80
-     * @return void
81
-     */
82
-    public function register()
83
-    {
84
-        spl_autoload_register(array($this, 'loadClass'));
85
-    }
77
+	/**
78
+	 * Register loader with SPL autoloader stack.
79
+	 *
80
+	 * @return void
81
+	 */
82
+	public function register()
83
+	{
84
+		spl_autoload_register(array($this, 'loadClass'));
85
+	}
86 86
 
87 87
 
88
-    /**
89
-     * Adds a base directory for a namespace prefix.
90
-     *
91
-     * @param string $prefix   The namespace prefix.
92
-     * @param string $base_dir A base directory for class files in the
93
-     *                         namespace.
94
-     * @param bool   $prepend  If true, prepend the base directory to the stack
95
-     *                         instead of appending it; this causes it to be searched first rather
96
-     *                         than last.
97
-     * @return void
98
-     */
99
-    public function addNamespace($prefix, $base_dir, $prepend = false)
100
-    {
101
-        // normalize namespace prefix
102
-        $prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
103
-        // normalize the base directory with a trailing separator
104
-        $base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
105
-        // initialize the namespace prefix array
106
-        if (isset($this->prefixes[ $prefix ]) === false) {
107
-            $this->prefixes[ $prefix ] = array();
108
-        }
109
-        // retain the base directory for the namespace prefix
110
-        if ($prepend) {
111
-            array_unshift($this->prefixes[ $prefix ], $base_dir);
112
-        } else {
113
-            $this->prefixes[ $prefix ][] = $base_dir;
114
-        }
115
-    }
88
+	/**
89
+	 * Adds a base directory for a namespace prefix.
90
+	 *
91
+	 * @param string $prefix   The namespace prefix.
92
+	 * @param string $base_dir A base directory for class files in the
93
+	 *                         namespace.
94
+	 * @param bool   $prepend  If true, prepend the base directory to the stack
95
+	 *                         instead of appending it; this causes it to be searched first rather
96
+	 *                         than last.
97
+	 * @return void
98
+	 */
99
+	public function addNamespace($prefix, $base_dir, $prepend = false)
100
+	{
101
+		// normalize namespace prefix
102
+		$prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
103
+		// normalize the base directory with a trailing separator
104
+		$base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
105
+		// initialize the namespace prefix array
106
+		if (isset($this->prefixes[ $prefix ]) === false) {
107
+			$this->prefixes[ $prefix ] = array();
108
+		}
109
+		// retain the base directory for the namespace prefix
110
+		if ($prepend) {
111
+			array_unshift($this->prefixes[ $prefix ], $base_dir);
112
+		} else {
113
+			$this->prefixes[ $prefix ][] = $base_dir;
114
+		}
115
+	}
116 116
 
117 117
 
118
-    /**
119
-     * Loads the class file for a given class name.
120
-     *
121
-     * @param string $class The fully-qualified class name.
122
-     * @return mixed The mapped file name on success, or boolean false on
123
-     *                      failure.
124
-     */
125
-    public function loadClass($class)
126
-    {
127
-        // the current namespace prefix
128
-        $prefix = $class;
129
-        // work backwards through the namespace names of the fully-qualified
130
-        // class name to find a mapped file name
131
-        while (false !== $pos = strrpos($prefix, Psr4Autoloader::NS)) {
132
-            // retain the trailing namespace separator in the prefix
133
-            $prefix = substr($class, 0, $pos + 1);
134
-            // the rest is the relative class name
135
-            $relative_class = substr($class, $pos + 1);
136
-            // try to load a mapped file for the prefix and relative class
137
-            $mapped_file = $this->loadMappedFile($prefix, $relative_class);
138
-            if ($mapped_file) {
139
-                return $mapped_file;
140
-            }
141
-            // remove the trailing namespace separator for the next iteration
142
-            // of strrpos()
143
-            $prefix = rtrim($prefix, Psr4Autoloader::NS);
144
-        }
145
-        // never found a mapped file
146
-        return false;
147
-    }
118
+	/**
119
+	 * Loads the class file for a given class name.
120
+	 *
121
+	 * @param string $class The fully-qualified class name.
122
+	 * @return mixed The mapped file name on success, or boolean false on
123
+	 *                      failure.
124
+	 */
125
+	public function loadClass($class)
126
+	{
127
+		// the current namespace prefix
128
+		$prefix = $class;
129
+		// work backwards through the namespace names of the fully-qualified
130
+		// class name to find a mapped file name
131
+		while (false !== $pos = strrpos($prefix, Psr4Autoloader::NS)) {
132
+			// retain the trailing namespace separator in the prefix
133
+			$prefix = substr($class, 0, $pos + 1);
134
+			// the rest is the relative class name
135
+			$relative_class = substr($class, $pos + 1);
136
+			// try to load a mapped file for the prefix and relative class
137
+			$mapped_file = $this->loadMappedFile($prefix, $relative_class);
138
+			if ($mapped_file) {
139
+				return $mapped_file;
140
+			}
141
+			// remove the trailing namespace separator for the next iteration
142
+			// of strrpos()
143
+			$prefix = rtrim($prefix, Psr4Autoloader::NS);
144
+		}
145
+		// never found a mapped file
146
+		return false;
147
+	}
148 148
 
149 149
 
150
-    /**
151
-     * Load the mapped file for a namespace prefix and relative class.
152
-     *
153
-     * @param string $prefix         The namespace prefix.
154
-     * @param string $relative_class The relative class name.
155
-     * @return mixed Boolean false if no mapped file can be loaded, or the
156
-     *                               name of the mapped file that was loaded.
157
-     */
158
-    protected function loadMappedFile($prefix, $relative_class)
159
-    {
160
-        // look through base directories for this namespace prefix
161
-        foreach ($this->prefixes($prefix) as $base_dir) {
162
-            // replace the namespace prefix with the base directory,
163
-            // replace namespace separators with directory separators
164
-            // in the relative class name, append with .php
165
-            $file = $base_dir
166
-                    . str_replace(Psr4Autoloader::NS, '/', $relative_class)
167
-                    . '.php';
168
-            // if the mapped file exists, require it
169
-            if ($this->requireFile($file)) {
170
-                // yes, we're done
171
-                return $file;
172
-            }
173
-        }
174
-        // never found it
175
-        return false;
176
-    }
150
+	/**
151
+	 * Load the mapped file for a namespace prefix and relative class.
152
+	 *
153
+	 * @param string $prefix         The namespace prefix.
154
+	 * @param string $relative_class The relative class name.
155
+	 * @return mixed Boolean false if no mapped file can be loaded, or the
156
+	 *                               name of the mapped file that was loaded.
157
+	 */
158
+	protected function loadMappedFile($prefix, $relative_class)
159
+	{
160
+		// look through base directories for this namespace prefix
161
+		foreach ($this->prefixes($prefix) as $base_dir) {
162
+			// replace the namespace prefix with the base directory,
163
+			// replace namespace separators with directory separators
164
+			// in the relative class name, append with .php
165
+			$file = $base_dir
166
+					. str_replace(Psr4Autoloader::NS, '/', $relative_class)
167
+					. '.php';
168
+			// if the mapped file exists, require it
169
+			if ($this->requireFile($file)) {
170
+				// yes, we're done
171
+				return $file;
172
+			}
173
+		}
174
+		// never found it
175
+		return false;
176
+	}
177 177
 
178 178
 
179
-    /**
180
-     * If a file exists, require it from the file system.
181
-     *
182
-     * @param string $file The file to require.
183
-     * @return bool True if the file exists, false if not.
184
-     */
185
-    protected function requireFile($file)
186
-    {
187
-        if (file_exists($file)) {
188
-            require $file;
189
-            return true;
190
-        }
191
-        return false;
192
-    }
179
+	/**
180
+	 * If a file exists, require it from the file system.
181
+	 *
182
+	 * @param string $file The file to require.
183
+	 * @return bool True if the file exists, false if not.
184
+	 */
185
+	protected function requireFile($file)
186
+	{
187
+		if (file_exists($file)) {
188
+			require $file;
189
+			return true;
190
+		}
191
+		return false;
192
+	}
193 193
 }
Please login to merge, or discard this patch.
core/services/cache/PostRelatedCacheManager.php 2 patches
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
     {
57 57
         $post_related_cache = get_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, array());
58 58
         // verify that cached data was not truncated or corrupted and no longer an array
59
-        if (! is_array($post_related_cache)) {
59
+        if ( ! is_array($post_related_cache)) {
60 60
             // uh-oh... let's get rid of any transients using our cache prefix
61 61
             $this->clear(PostRelatedCacheManager::CACHE_PREFIX);
62 62
             // then update the post related cache tracking option
@@ -94,13 +94,13 @@  discard block
 block discarded – undo
94 94
     {
95 95
         $post_related_cache = $this->getPostRelatedCache();
96 96
         // if post is not already being tracked
97
-        if (! isset($post_related_cache[ $post_ID ])) {
97
+        if ( ! isset($post_related_cache[$post_ID])) {
98 98
             // add array to add cache ids to
99
-            $post_related_cache[ $post_ID ] = array();
99
+            $post_related_cache[$post_ID] = array();
100 100
         }
101
-        if (! in_array($id_prefix, $post_related_cache[ $post_ID ], true)) {
101
+        if ( ! in_array($id_prefix, $post_related_cache[$post_ID], true)) {
102 102
             // add cache id to be tracked
103
-            $post_related_cache[ $post_ID ][] = $id_prefix;
103
+            $post_related_cache[$post_ID][] = $id_prefix;
104 104
             $this->updatePostRelatedCache($post_related_cache);
105 105
         }
106 106
     }
@@ -116,18 +116,18 @@  discard block
 block discarded – undo
116 116
     {
117 117
         $post_related_cache = $this->getPostRelatedCache();
118 118
         // if post is not being tracked
119
-        if (! isset($post_related_cache[ $post_ID ])) {
119
+        if ( ! isset($post_related_cache[$post_ID])) {
120 120
             // let's clean up some of the duplicate IDs that were getting added
121 121
             foreach ($post_related_cache as $other_post_ID => $cache_IDs) {
122 122
                 // remove duplicates
123
-                $post_related_cache[ $other_post_ID ] = array_unique($post_related_cache[ $other_post_ID ]);
123
+                $post_related_cache[$other_post_ID] = array_unique($post_related_cache[$other_post_ID]);
124 124
             }
125 125
             $this->updatePostRelatedCache($post_related_cache);
126 126
             return;
127 127
         }
128 128
         // get cache id prefixes for post, and delete their corresponding transients
129
-        $this->clear($post_related_cache[ $post_ID ]);
130
-        unset($post_related_cache[ $post_ID ]);
129
+        $this->clear($post_related_cache[$post_ID]);
130
+        unset($post_related_cache[$post_ID]);
131 131
         $this->updatePostRelatedCache($post_related_cache);
132 132
     }
133 133
 }
Please login to merge, or discard this patch.
Indentation   +104 added lines, -104 removed lines patch added patch discarded remove patch
@@ -12,121 +12,121 @@
 block discarded – undo
12 12
  */
13 13
 class PostRelatedCacheManager extends BasicCacheManager
14 14
 {
15
-    /**
16
-     * @type string
17
-     */
18
-    const POST_CACHE_PREFIX = 'ee_cache_post_';
15
+	/**
16
+	 * @type string
17
+	 */
18
+	const POST_CACHE_PREFIX = 'ee_cache_post_';
19 19
 
20
-    /**
21
-     * wp-option option_name for tracking post related cache
22
-     *
23
-     * @type string
24
-     */
25
-    const POST_CACHE_OPTIONS_KEY = 'ee_post_cache';
20
+	/**
21
+	 * wp-option option_name for tracking post related cache
22
+	 *
23
+	 * @type string
24
+	 */
25
+	const POST_CACHE_OPTIONS_KEY = 'ee_post_cache';
26 26
 
27 27
 
28
-    /**
29
-     * PostRelatedCacheManager constructor.
30
-     *
31
-     * @param CacheStorageInterface $cache_storage
32
-     */
33
-    public function __construct(CacheStorageInterface $cache_storage)
34
-    {
35
-        parent::__construct($cache_storage);
36
-        add_action('save_post', array($this, 'clearPostRelatedCache'));
37
-    }
28
+	/**
29
+	 * PostRelatedCacheManager constructor.
30
+	 *
31
+	 * @param CacheStorageInterface $cache_storage
32
+	 */
33
+	public function __construct(CacheStorageInterface $cache_storage)
34
+	{
35
+		parent::__construct($cache_storage);
36
+		add_action('save_post', array($this, 'clearPostRelatedCache'));
37
+	}
38 38
 
39 39
 
40
-    /**
41
-     * returns a string that will be prepended to all cache identifiers
42
-     *
43
-     * @return string
44
-     */
45
-    public function cachePrefix()
46
-    {
47
-        return PostRelatedCacheManager::POST_CACHE_PREFIX;
48
-    }
40
+	/**
41
+	 * returns a string that will be prepended to all cache identifiers
42
+	 *
43
+	 * @return string
44
+	 */
45
+	public function cachePrefix()
46
+	{
47
+		return PostRelatedCacheManager::POST_CACHE_PREFIX;
48
+	}
49 49
 
50 50
 
51
-    /**
52
-     * @return array
53
-     */
54
-    protected function getPostRelatedCache()
55
-    {
56
-        $post_related_cache = get_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, array());
57
-        // verify that cached data was not truncated or corrupted and no longer an array
58
-        if (! is_array($post_related_cache)) {
59
-            // uh-oh... let's get rid of any transients using our cache prefix
60
-            $this->clear(PostRelatedCacheManager::CACHE_PREFIX);
61
-            // then update the post related cache tracking option
62
-            $post_related_cache = array();
63
-            $this->updatePostRelatedCache($post_related_cache);
64
-        }
65
-        return $post_related_cache;
66
-    }
51
+	/**
52
+	 * @return array
53
+	 */
54
+	protected function getPostRelatedCache()
55
+	{
56
+		$post_related_cache = get_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, array());
57
+		// verify that cached data was not truncated or corrupted and no longer an array
58
+		if (! is_array($post_related_cache)) {
59
+			// uh-oh... let's get rid of any transients using our cache prefix
60
+			$this->clear(PostRelatedCacheManager::CACHE_PREFIX);
61
+			// then update the post related cache tracking option
62
+			$post_related_cache = array();
63
+			$this->updatePostRelatedCache($post_related_cache);
64
+		}
65
+		return $post_related_cache;
66
+	}
67 67
 
68 68
 
69
-    /**
70
-     * @param array $post_related_cache
71
-     */
72
-    protected function updatePostRelatedCache(array $post_related_cache = array())
73
-    {
74
-        update_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, $post_related_cache);
75
-    }
69
+	/**
70
+	 * @param array $post_related_cache
71
+	 */
72
+	protected function updatePostRelatedCache(array $post_related_cache = array())
73
+	{
74
+		update_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, $post_related_cache);
75
+	}
76 76
 
77 77
 
78
-    /**
79
-     * If you are caching content that pertains to a Post of any type,
80
-     * then it is recommended to pass the post id and cache id prefix to this method
81
-     * so that it can be added to the post related cache tracking.
82
-     * Then, whenever that post is updated, the cache will automatically be deleted,
83
-     * which helps to ensure that outdated cache content will not be served
84
-     *
85
-     * @param int    $post_ID    [required]
86
-     * @param string $id_prefix  [required] Appended to all cache IDs. Can be helpful in finding specific cache types.
87
-     *                           May also be helpful to include an additional specific identifier,
88
-     *                           such as a post ID as part of the $id_prefix so that individual caches
89
-     *                           can be found and/or cleared. ex: "venue-28", or "shortcode-156".
90
-     *                           BasicCacheManager::CACHE_PREFIX will also be prepended to the cache id.
91
-     */
92
-    public function clearPostRelatedCacheOnUpdate($post_ID, $id_prefix)
93
-    {
94
-        $post_related_cache = $this->getPostRelatedCache();
95
-        // if post is not already being tracked
96
-        if (! isset($post_related_cache[ $post_ID ])) {
97
-            // add array to add cache ids to
98
-            $post_related_cache[ $post_ID ] = array();
99
-        }
100
-        if (! in_array($id_prefix, $post_related_cache[ $post_ID ], true)) {
101
-            // add cache id to be tracked
102
-            $post_related_cache[ $post_ID ][] = $id_prefix;
103
-            $this->updatePostRelatedCache($post_related_cache);
104
-        }
105
-    }
78
+	/**
79
+	 * If you are caching content that pertains to a Post of any type,
80
+	 * then it is recommended to pass the post id and cache id prefix to this method
81
+	 * so that it can be added to the post related cache tracking.
82
+	 * Then, whenever that post is updated, the cache will automatically be deleted,
83
+	 * which helps to ensure that outdated cache content will not be served
84
+	 *
85
+	 * @param int    $post_ID    [required]
86
+	 * @param string $id_prefix  [required] Appended to all cache IDs. Can be helpful in finding specific cache types.
87
+	 *                           May also be helpful to include an additional specific identifier,
88
+	 *                           such as a post ID as part of the $id_prefix so that individual caches
89
+	 *                           can be found and/or cleared. ex: "venue-28", or "shortcode-156".
90
+	 *                           BasicCacheManager::CACHE_PREFIX will also be prepended to the cache id.
91
+	 */
92
+	public function clearPostRelatedCacheOnUpdate($post_ID, $id_prefix)
93
+	{
94
+		$post_related_cache = $this->getPostRelatedCache();
95
+		// if post is not already being tracked
96
+		if (! isset($post_related_cache[ $post_ID ])) {
97
+			// add array to add cache ids to
98
+			$post_related_cache[ $post_ID ] = array();
99
+		}
100
+		if (! in_array($id_prefix, $post_related_cache[ $post_ID ], true)) {
101
+			// add cache id to be tracked
102
+			$post_related_cache[ $post_ID ][] = $id_prefix;
103
+			$this->updatePostRelatedCache($post_related_cache);
104
+		}
105
+	}
106 106
 
107 107
 
108
-    /**
109
-     * callback hooked into the WordPress "save_post" action
110
-     * deletes any cache content associated with the post
111
-     *
112
-     * @param int $post_ID [required]
113
-     */
114
-    public function clearPostRelatedCache($post_ID)
115
-    {
116
-        $post_related_cache = $this->getPostRelatedCache();
117
-        // if post is not being tracked
118
-        if (! isset($post_related_cache[ $post_ID ])) {
119
-            // let's clean up some of the duplicate IDs that were getting added
120
-            foreach ($post_related_cache as $other_post_ID => $cache_IDs) {
121
-                // remove duplicates
122
-                $post_related_cache[ $other_post_ID ] = array_unique($post_related_cache[ $other_post_ID ]);
123
-            }
124
-            $this->updatePostRelatedCache($post_related_cache);
125
-            return;
126
-        }
127
-        // get cache id prefixes for post, and delete their corresponding transients
128
-        $this->clear($post_related_cache[ $post_ID ]);
129
-        unset($post_related_cache[ $post_ID ]);
130
-        $this->updatePostRelatedCache($post_related_cache);
131
-    }
108
+	/**
109
+	 * callback hooked into the WordPress "save_post" action
110
+	 * deletes any cache content associated with the post
111
+	 *
112
+	 * @param int $post_ID [required]
113
+	 */
114
+	public function clearPostRelatedCache($post_ID)
115
+	{
116
+		$post_related_cache = $this->getPostRelatedCache();
117
+		// if post is not being tracked
118
+		if (! isset($post_related_cache[ $post_ID ])) {
119
+			// let's clean up some of the duplicate IDs that were getting added
120
+			foreach ($post_related_cache as $other_post_ID => $cache_IDs) {
121
+				// remove duplicates
122
+				$post_related_cache[ $other_post_ID ] = array_unique($post_related_cache[ $other_post_ID ]);
123
+			}
124
+			$this->updatePostRelatedCache($post_related_cache);
125
+			return;
126
+		}
127
+		// get cache id prefixes for post, and delete their corresponding transients
128
+		$this->clear($post_related_cache[ $post_ID ]);
129
+		unset($post_related_cache[ $post_ID ]);
130
+		$this->updatePostRelatedCache($post_related_cache);
131
+	}
132 132
 }
Please login to merge, or discard this patch.
core/services/database/TableManager.php 2 patches
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -65,7 +65,7 @@  discard block
 block discarded – undo
65 65
         global $wpdb;
66 66
         $full_table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
67 67
         $columns = $this->getTableColumns($table_name);
68
-        if (! in_array($column_name, $columns)) {
68
+        if ( ! in_array($column_name, $columns)) {
69 69
             $alter_query = "ALTER TABLE {$full_table_name} ADD {$column_name} {$column_info}";
70 70
             return $wpdb->query($alter_query);
71 71
         }
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
         global $wpdb;
87 87
         $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
88 88
         $field_array = array();
89
-        if (! empty($table_name)) {
89
+        if ( ! empty($table_name)) {
90 90
             $columns = $wpdb->get_results("SHOW COLUMNS FROM {$table_name} ");
91 91
             if ($columns !== false) {
92 92
                 foreach ($columns as $column) {
@@ -132,14 +132,14 @@  discard block
 block discarded – undo
132 132
         foreach ($table_names as $table_name) {
133 133
             $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
134 134
             if ($this->getTableAnalysis()->tableExists($table_name)) {
135
-                $tables_to_delete[ $table_name ] = $table_name;
135
+                $tables_to_delete[$table_name] = $table_name;
136 136
             }
137 137
         }
138
-        if (! empty($tables_to_delete)) {
138
+        if ( ! empty($tables_to_delete)) {
139 139
             global $wpdb;
140 140
             // make sure we only have a unique strings in the array.
141 141
             $tables_to_delete = array_unique($tables_to_delete);
142
-            $wpdb->query('DROP TABLE ' . implode(', ', $tables_to_delete));
142
+            $wpdb->query('DROP TABLE '.implode(', ', $tables_to_delete));
143 143
         }
144 144
         return $tables_to_delete;
145 145
     }
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
             $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
190 190
             /** @var \wpdb $wpdb */
191 191
             global $wpdb;
192
-            $SQL = "CREATE TABLE {$table_name} ( {$create_sql} ) ENGINE={$engine} " . $wpdb->get_charset_collate();
192
+            $SQL = "CREATE TABLE {$table_name} ( {$create_sql} ) ENGINE={$engine} ".$wpdb->get_charset_collate();
193 193
 
194 194
             // get $wpdb to echo errors, but buffer them. This way at least WE know an error
195 195
             // happened. And then we can choose to tell the end user
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
             ob_end_clean();
202 202
             $wpdb->show_errors($old_show_errors_policy);
203 203
             $wpdb->suppress_errors($old_error_suppression_policy);
204
-            if (! empty($output)) {
204
+            if ( ! empty($output)) {
205 205
                 throw new \EE_Error($output);
206 206
             }
207 207
         } else {
@@ -242,7 +242,7 @@  discard block
 block discarded – undo
242 242
         if ($column_name === null) {
243 243
             $column_name = $index_name;
244 244
         }
245
-        if (! $this->getTableAnalysis()->tableExists($table_name)) {
245
+        if ( ! $this->getTableAnalysis()->tableExists($table_name)) {
246 246
             return false;
247 247
         }
248 248
         $index_entries = $this->getTableAnalysis()->showIndexes($table_name, $index_name);
Please login to merge, or discard this patch.
Indentation   +234 added lines, -234 removed lines patch added patch discarded remove patch
@@ -12,257 +12,257 @@
 block discarded – undo
12 12
  */
13 13
 class TableManager extends \EE_Base
14 14
 {
15
-    /**
16
-     * @var TableAnalysis $table_analysis
17
-     */
18
-    private $table_analysis;
15
+	/**
16
+	 * @var TableAnalysis $table_analysis
17
+	 */
18
+	private $table_analysis;
19 19
 
20 20
 
21
-    /**
22
-     * TableManager constructor.
23
-     *
24
-     * @param TableAnalysis $TableAnalysis
25
-     */
26
-    public function __construct(TableAnalysis $TableAnalysis)
27
-    {
28
-        $this->table_analysis = $TableAnalysis;
29
-    }
21
+	/**
22
+	 * TableManager constructor.
23
+	 *
24
+	 * @param TableAnalysis $TableAnalysis
25
+	 */
26
+	public function __construct(TableAnalysis $TableAnalysis)
27
+	{
28
+		$this->table_analysis = $TableAnalysis;
29
+	}
30 30
 
31 31
 
32
-    /**
33
-     * Gets the injected table analyzer, or throws an exception
34
-     *
35
-     * @return TableAnalysis
36
-     * @throws \EE_Error
37
-     */
38
-    protected function getTableAnalysis()
39
-    {
40
-        if ($this->table_analysis instanceof TableAnalysis) {
41
-            return $this->table_analysis;
42
-        } else {
43
-            throw new \EE_Error(
44
-                sprintf(
45
-                    esc_html__('Table analysis class on class %1$s is not set properly.', 'event_espresso'),
46
-                    get_class($this)
47
-                )
48
-            );
49
-        }
50
-    }
32
+	/**
33
+	 * Gets the injected table analyzer, or throws an exception
34
+	 *
35
+	 * @return TableAnalysis
36
+	 * @throws \EE_Error
37
+	 */
38
+	protected function getTableAnalysis()
39
+	{
40
+		if ($this->table_analysis instanceof TableAnalysis) {
41
+			return $this->table_analysis;
42
+		} else {
43
+			throw new \EE_Error(
44
+				sprintf(
45
+					esc_html__('Table analysis class on class %1$s is not set properly.', 'event_espresso'),
46
+					get_class($this)
47
+				)
48
+			);
49
+		}
50
+	}
51 51
 
52 52
 
53
-    /**
54
-     * @param string $table_name which can optionally start with $wpdb->prefix or not
55
-     * @param string $column_name
56
-     * @param string $column_info
57
-     * @return bool|false|int
58
-     */
59
-    public function addColumn($table_name, $column_name, $column_info = 'INT UNSIGNED NOT NULL')
60
-    {
61
-        if (apply_filters('FHEE__EEH_Activation__add_column_if_it_doesnt_exist__short_circuit', false)) {
62
-            return false;
63
-        }
64
-        global $wpdb;
65
-        $full_table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
66
-        $columns = $this->getTableColumns($table_name);
67
-        if (! in_array($column_name, $columns)) {
68
-            $alter_query = "ALTER TABLE {$full_table_name} ADD {$column_name} {$column_info}";
69
-            return $wpdb->query($alter_query);
70
-        }
71
-        return true;
72
-    }
53
+	/**
54
+	 * @param string $table_name which can optionally start with $wpdb->prefix or not
55
+	 * @param string $column_name
56
+	 * @param string $column_info
57
+	 * @return bool|false|int
58
+	 */
59
+	public function addColumn($table_name, $column_name, $column_info = 'INT UNSIGNED NOT NULL')
60
+	{
61
+		if (apply_filters('FHEE__EEH_Activation__add_column_if_it_doesnt_exist__short_circuit', false)) {
62
+			return false;
63
+		}
64
+		global $wpdb;
65
+		$full_table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
66
+		$columns = $this->getTableColumns($table_name);
67
+		if (! in_array($column_name, $columns)) {
68
+			$alter_query = "ALTER TABLE {$full_table_name} ADD {$column_name} {$column_info}";
69
+			return $wpdb->query($alter_query);
70
+		}
71
+		return true;
72
+	}
73 73
 
74 74
 
75
-    /**
76
-     * Gets the name of all columns on the  table. $table_name can
77
-     * optionally start with $wpdb->prefix or not
78
-     *
79
-     * @global \wpdb $wpdb
80
-     * @param string $table_name
81
-     * @return array
82
-     */
83
-    public function getTableColumns($table_name)
84
-    {
85
-        global $wpdb;
86
-        $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
87
-        $field_array = array();
88
-        if (! empty($table_name)) {
89
-            $columns = $wpdb->get_results("SHOW COLUMNS FROM {$table_name} ");
90
-            if ($columns !== false) {
91
-                foreach ($columns as $column) {
92
-                    $field_array[] = $column->Field;
93
-                }
94
-            }
95
-        }
96
-        return $field_array;
97
-    }
75
+	/**
76
+	 * Gets the name of all columns on the  table. $table_name can
77
+	 * optionally start with $wpdb->prefix or not
78
+	 *
79
+	 * @global \wpdb $wpdb
80
+	 * @param string $table_name
81
+	 * @return array
82
+	 */
83
+	public function getTableColumns($table_name)
84
+	{
85
+		global $wpdb;
86
+		$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
87
+		$field_array = array();
88
+		if (! empty($table_name)) {
89
+			$columns = $wpdb->get_results("SHOW COLUMNS FROM {$table_name} ");
90
+			if ($columns !== false) {
91
+				foreach ($columns as $column) {
92
+					$field_array[] = $column->Field;
93
+				}
94
+			}
95
+		}
96
+		return $field_array;
97
+	}
98 98
 
99 99
 
100
-    /**
101
-     * Drops the specified table from the database. $table_name can
102
-     * optionally start with $wpdb->prefix or not
103
-     *
104
-     * @global \wpdb $wpdb
105
-     * @param string $table_name
106
-     * @return int
107
-     */
108
-    public function dropTable($table_name)
109
-    {
110
-        global $wpdb;
111
-        if ($this->getTableAnalysis()->tableExists($table_name)) {
112
-            $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
113
-            return $wpdb->query("DROP TABLE IF EXISTS {$table_name}");
114
-        }
115
-        return 0;
116
-    }
100
+	/**
101
+	 * Drops the specified table from the database. $table_name can
102
+	 * optionally start with $wpdb->prefix or not
103
+	 *
104
+	 * @global \wpdb $wpdb
105
+	 * @param string $table_name
106
+	 * @return int
107
+	 */
108
+	public function dropTable($table_name)
109
+	{
110
+		global $wpdb;
111
+		if ($this->getTableAnalysis()->tableExists($table_name)) {
112
+			$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
113
+			return $wpdb->query("DROP TABLE IF EXISTS {$table_name}");
114
+		}
115
+		return 0;
116
+	}
117 117
 
118 118
 
119
-    /**
120
-     * Drops all the tables mentioned in a single MYSQL query. Double-checks
121
-     * each table name provided has a wpdb prefix attached, and that it exists.
122
-     * Returns the list actually deleted
123
-     *
124
-     * @global WPDB $wpdb
125
-     * @param array $table_names
126
-     * @return array of table names which we deleted
127
-     */
128
-    public function dropTables($table_names)
129
-    {
130
-        $tables_to_delete = array();
131
-        foreach ($table_names as $table_name) {
132
-            $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
133
-            if ($this->getTableAnalysis()->tableExists($table_name)) {
134
-                $tables_to_delete[ $table_name ] = $table_name;
135
-            }
136
-        }
137
-        if (! empty($tables_to_delete)) {
138
-            global $wpdb;
139
-            // make sure we only have a unique strings in the array.
140
-            $tables_to_delete = array_unique($tables_to_delete);
141
-            $wpdb->query('DROP TABLE ' . implode(', ', $tables_to_delete));
142
-        }
143
-        return $tables_to_delete;
144
-    }
119
+	/**
120
+	 * Drops all the tables mentioned in a single MYSQL query. Double-checks
121
+	 * each table name provided has a wpdb prefix attached, and that it exists.
122
+	 * Returns the list actually deleted
123
+	 *
124
+	 * @global WPDB $wpdb
125
+	 * @param array $table_names
126
+	 * @return array of table names which we deleted
127
+	 */
128
+	public function dropTables($table_names)
129
+	{
130
+		$tables_to_delete = array();
131
+		foreach ($table_names as $table_name) {
132
+			$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
133
+			if ($this->getTableAnalysis()->tableExists($table_name)) {
134
+				$tables_to_delete[ $table_name ] = $table_name;
135
+			}
136
+		}
137
+		if (! empty($tables_to_delete)) {
138
+			global $wpdb;
139
+			// make sure we only have a unique strings in the array.
140
+			$tables_to_delete = array_unique($tables_to_delete);
141
+			$wpdb->query('DROP TABLE ' . implode(', ', $tables_to_delete));
142
+		}
143
+		return $tables_to_delete;
144
+	}
145 145
 
146 146
 
147
-    /**
148
-     * Drops the specified index from the specified table. $table_name can
149
-     * optionally start with $wpdb->prefix or not
150
-     *
151
-     * @global \wpdb $wpdb
152
-     * @param string $table_name
153
-     * @param string $index_name
154
-     * @return int the number of indexes dropped. False if there was a datbase error
155
-     */
156
-    public function dropIndex($table_name, $index_name)
157
-    {
158
-        if (apply_filters('FHEE__EEH_Activation__drop_index__short_circuit', false)) {
159
-            return 0;
160
-        }
161
-        global $wpdb;
162
-        $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
163
-        $index_exists_query = "SHOW INDEX FROM {$table_name} WHERE key_name = '{$index_name}'";
164
-        if (
165
-            $this->getTableAnalysis()->tableExists($table_name)
166
-            && $wpdb->get_var($index_exists_query)
167
-               === $table_name // using get_var with the $index_exists_query returns the table's name
168
-        ) {
169
-            return $wpdb->query("ALTER TABLE {$table_name} DROP INDEX {$index_name}");
170
-        }
171
-        return 0;
172
-    }
147
+	/**
148
+	 * Drops the specified index from the specified table. $table_name can
149
+	 * optionally start with $wpdb->prefix or not
150
+	 *
151
+	 * @global \wpdb $wpdb
152
+	 * @param string $table_name
153
+	 * @param string $index_name
154
+	 * @return int the number of indexes dropped. False if there was a datbase error
155
+	 */
156
+	public function dropIndex($table_name, $index_name)
157
+	{
158
+		if (apply_filters('FHEE__EEH_Activation__drop_index__short_circuit', false)) {
159
+			return 0;
160
+		}
161
+		global $wpdb;
162
+		$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
163
+		$index_exists_query = "SHOW INDEX FROM {$table_name} WHERE key_name = '{$index_name}'";
164
+		if (
165
+			$this->getTableAnalysis()->tableExists($table_name)
166
+			&& $wpdb->get_var($index_exists_query)
167
+			   === $table_name // using get_var with the $index_exists_query returns the table's name
168
+		) {
169
+			return $wpdb->query("ALTER TABLE {$table_name} DROP INDEX {$index_name}");
170
+		}
171
+		return 0;
172
+	}
173 173
 
174 174
 
175
-    /**
176
-     * Just creates the requested table. $table_name can
177
-     * optionally start with $wpdb->prefix or not
178
-     *
179
-     * @param string $table_name
180
-     * @param string $create_sql defining the table's columns and indexes
181
-     * @param string $engine     (no need to specify "ENGINE=", that's implied)
182
-     * @return void
183
-     * @throws \EE_Error
184
-     */
185
-    public function createTable($table_name, $create_sql, $engine = 'MyISAM')
186
-    {
187
-        $engine = apply_filters(
188
-            'FHEE__EventEspresso_core_services_database_TableManager__createTable__engine',
189
-            $engine,
190
-            $table_name,
191
-            $create_sql
192
-        );
193
-        // does $sql contain valid column information? ( LPT: https://regex101.com/ is great for working out regex patterns )
194
-        if (preg_match('((((.*?))(,\s))+)', $create_sql, $valid_column_data)) {
195
-            $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
196
-            /** @var \wpdb $wpdb */
197
-            global $wpdb;
198
-            $SQL = "CREATE TABLE {$table_name} ( {$create_sql} ) ENGINE={$engine} " . $wpdb->get_charset_collate();
175
+	/**
176
+	 * Just creates the requested table. $table_name can
177
+	 * optionally start with $wpdb->prefix or not
178
+	 *
179
+	 * @param string $table_name
180
+	 * @param string $create_sql defining the table's columns and indexes
181
+	 * @param string $engine     (no need to specify "ENGINE=", that's implied)
182
+	 * @return void
183
+	 * @throws \EE_Error
184
+	 */
185
+	public function createTable($table_name, $create_sql, $engine = 'MyISAM')
186
+	{
187
+		$engine = apply_filters(
188
+			'FHEE__EventEspresso_core_services_database_TableManager__createTable__engine',
189
+			$engine,
190
+			$table_name,
191
+			$create_sql
192
+		);
193
+		// does $sql contain valid column information? ( LPT: https://regex101.com/ is great for working out regex patterns )
194
+		if (preg_match('((((.*?))(,\s))+)', $create_sql, $valid_column_data)) {
195
+			$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
196
+			/** @var \wpdb $wpdb */
197
+			global $wpdb;
198
+			$SQL = "CREATE TABLE {$table_name} ( {$create_sql} ) ENGINE={$engine} " . $wpdb->get_charset_collate();
199 199
 
200
-            // get $wpdb to echo errors, but buffer them. This way at least WE know an error
201
-            // happened. And then we can choose to tell the end user
202
-            $old_show_errors_policy = $wpdb->show_errors(true);
203
-            $old_error_suppression_policy = $wpdb->suppress_errors(false);
204
-            ob_start();
205
-            dbDelta($SQL);
206
-            $output = ob_get_contents();
207
-            ob_end_clean();
208
-            $wpdb->show_errors($old_show_errors_policy);
209
-            $wpdb->suppress_errors($old_error_suppression_policy);
210
-            if (! empty($output)) {
211
-                throw new \EE_Error($output);
212
-            }
213
-        } else {
214
-            throw new \EE_Error(
215
-                sprintf(
216
-                    esc_html__(
217
-                        'The following table creation SQL does not contain valid information about the table columns: %1$s %2$s',
218
-                        'event_espresso'
219
-                    ),
220
-                    '<br />',
221
-                    $create_sql
222
-                )
223
-            );
224
-        }
225
-    }
200
+			// get $wpdb to echo errors, but buffer them. This way at least WE know an error
201
+			// happened. And then we can choose to tell the end user
202
+			$old_show_errors_policy = $wpdb->show_errors(true);
203
+			$old_error_suppression_policy = $wpdb->suppress_errors(false);
204
+			ob_start();
205
+			dbDelta($SQL);
206
+			$output = ob_get_contents();
207
+			ob_end_clean();
208
+			$wpdb->show_errors($old_show_errors_policy);
209
+			$wpdb->suppress_errors($old_error_suppression_policy);
210
+			if (! empty($output)) {
211
+				throw new \EE_Error($output);
212
+			}
213
+		} else {
214
+			throw new \EE_Error(
215
+				sprintf(
216
+					esc_html__(
217
+						'The following table creation SQL does not contain valid information about the table columns: %1$s %2$s',
218
+						'event_espresso'
219
+					),
220
+					'<br />',
221
+					$create_sql
222
+				)
223
+			);
224
+		}
225
+	}
226 226
 
227 227
 
228
-    /**
229
-     * Drops the specified index if it's size differs from $desired_index_size.
230
-     * WordPress' dbdelta method doesn't automatically change index sizes, so this
231
-     * method can be used to only drop the index if needed, and afterwards dbdelta can be used as normal.
232
-     * If the table doesn't exist, or it exists but the index does not, or returns false
233
-     *
234
-     * @param string     $table_name
235
-     * @param string     $index_name
236
-     * @param string     $column_name        if none is provided, we assume the column name matches the index (often
237
-     *                                       true in EE)
238
-     * @param string|int $desired_index_size defaults to TableAnalysis::index_col_size, the max for utf8mb4.
239
-     * @return bool whether an index was dropped or not
240
-     * @throws /EE_Error if table analysis object isn't defined
241
-     */
242
-    public function dropIndexIfSizeNot(
243
-        $table_name,
244
-        $index_name,
245
-        $column_name = null,
246
-        $desired_index_size = TableAnalysis::INDEX_COLUMN_SIZE
247
-    ) {
248
-        if ($column_name === null) {
249
-            $column_name = $index_name;
250
-        }
251
-        if (! $this->getTableAnalysis()->tableExists($table_name)) {
252
-            return false;
253
-        }
254
-        $index_entries = $this->getTableAnalysis()->showIndexes($table_name, $index_name);
255
-        if (empty($index_entries)) {
256
-            return false;
257
-        }
258
-        foreach ($index_entries as $index_entry) {
259
-            if (
260
-                $column_name === $index_entry->Column_name
261
-                && (string) $desired_index_size !== $index_entry->Sub_part
262
-            ) {
263
-                return $this->dropIndex($table_name, $index_name);
264
-            }
265
-        }
266
-        return false;
267
-    }
228
+	/**
229
+	 * Drops the specified index if it's size differs from $desired_index_size.
230
+	 * WordPress' dbdelta method doesn't automatically change index sizes, so this
231
+	 * method can be used to only drop the index if needed, and afterwards dbdelta can be used as normal.
232
+	 * If the table doesn't exist, or it exists but the index does not, or returns false
233
+	 *
234
+	 * @param string     $table_name
235
+	 * @param string     $index_name
236
+	 * @param string     $column_name        if none is provided, we assume the column name matches the index (often
237
+	 *                                       true in EE)
238
+	 * @param string|int $desired_index_size defaults to TableAnalysis::index_col_size, the max for utf8mb4.
239
+	 * @return bool whether an index was dropped or not
240
+	 * @throws /EE_Error if table analysis object isn't defined
241
+	 */
242
+	public function dropIndexIfSizeNot(
243
+		$table_name,
244
+		$index_name,
245
+		$column_name = null,
246
+		$desired_index_size = TableAnalysis::INDEX_COLUMN_SIZE
247
+	) {
248
+		if ($column_name === null) {
249
+			$column_name = $index_name;
250
+		}
251
+		if (! $this->getTableAnalysis()->tableExists($table_name)) {
252
+			return false;
253
+		}
254
+		$index_entries = $this->getTableAnalysis()->showIndexes($table_name, $index_name);
255
+		if (empty($index_entries)) {
256
+			return false;
257
+		}
258
+		foreach ($index_entries as $index_entry) {
259
+			if (
260
+				$column_name === $index_entry->Column_name
261
+				&& (string) $desired_index_size !== $index_entry->Sub_part
262
+			) {
263
+				return $this->dropIndex($table_name, $index_name);
264
+			}
265
+		}
266
+		return false;
267
+	}
268 268
 }
Please login to merge, or discard this patch.
core/services/notices/Notice.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -157,7 +157,7 @@
 block discarded – undo
157 157
      */
158 158
     private function setType($type)
159 159
     {
160
-        if (! in_array($type, $this->types(), true)) {
160
+        if ( ! in_array($type, $this->types(), true)) {
161 161
             throw new InvalidDataTypeException(
162 162
                 '$type',
163 163
                 $type,
Please login to merge, or discard this patch.
Indentation   +249 added lines, -249 removed lines patch added patch discarded remove patch
@@ -13,253 +13,253 @@
 block discarded – undo
13 13
  */
14 14
 class Notice implements NoticeInterface
15 15
 {
16
-    const ERROR = 'error';
17
-
18
-    const SUCCESS = 'success';
19
-
20
-    const ATTENTION = 'attention'; // alias for warning
21
-
22
-    const INFORMATION = 'information';
23
-
24
-    /**
25
-     * @var string $type
26
-     */
27
-    private $type;
28
-
29
-
30
-    /**
31
-     * @var string $message
32
-     */
33
-    private $message;
34
-
35
-
36
-    /**
37
-     * @var string $file
38
-     */
39
-    private $file;
40
-
41
-
42
-    /**
43
-     * @var string $func
44
-     */
45
-    private $func;
46
-
47
-
48
-    /**
49
-     * @var string $line
50
-     */
51
-    private $line;
52
-
53
-
54
-    /**
55
-     * @var boolean $dismissible
56
-     */
57
-    private $dismissible;
58
-
59
-
60
-    /**
61
-     * Notice constructor.
62
-     *
63
-     * @param string $type
64
-     * @param string $message
65
-     * @param bool   $dismissible
66
-     * @param string $file
67
-     * @param string $func
68
-     * @param string $line
69
-     * @throws InvalidDataTypeException
70
-     */
71
-    public function __construct($type, $message, $dismissible = true, $file = '', $func = '', $line = '')
72
-    {
73
-        $this->setType($type);
74
-        $this->setMessage($message);
75
-        $this->setDismissible($dismissible);
76
-        $this->setFile($file);
77
-        $this->setFunc($func);
78
-        $this->setLine($line);
79
-    }
80
-
81
-
82
-    /**
83
-     * @return array
84
-     */
85
-    private function types()
86
-    {
87
-        return (array) apply_filters(
88
-            'FHEE__EventEspresso_core_services_notices_Notice__types',
89
-            array(
90
-                Notice::ERROR,
91
-                Notice::SUCCESS,
92
-                Notice::ATTENTION,
93
-                Notice::INFORMATION,
94
-            )
95
-        );
96
-    }
97
-
98
-
99
-    /**
100
-     * @return string
101
-     */
102
-    public function type()
103
-    {
104
-        return $this->type;
105
-    }
106
-
107
-
108
-    /**
109
-     * @return string
110
-     */
111
-    public function message()
112
-    {
113
-        return $this->message;
114
-    }
115
-
116
-
117
-    /**
118
-     * @return string
119
-     */
120
-    public function file()
121
-    {
122
-        return $this->file;
123
-    }
124
-
125
-
126
-    /**
127
-     * @return string
128
-     */
129
-    public function func()
130
-    {
131
-        return $this->func;
132
-    }
133
-
134
-
135
-    /**
136
-     * @return string
137
-     */
138
-    public function line()
139
-    {
140
-        return $this->line;
141
-    }
142
-
143
-
144
-    /**
145
-     * @return bool
146
-     */
147
-    public function isDismissible()
148
-    {
149
-        return $this->dismissible;
150
-    }
151
-
152
-
153
-    /**
154
-     * @param string $type
155
-     * @throws InvalidDataTypeException
156
-     */
157
-    private function setType($type)
158
-    {
159
-        if (! in_array($type, $this->types(), true)) {
160
-            throw new InvalidDataTypeException(
161
-                '$type',
162
-                $type,
163
-                $this->invalidTypeMessage()
164
-            );
165
-        }
166
-        $this->type = $type;
167
-    }
168
-
169
-
170
-    /**
171
-     * gets the $invalid_type_message string
172
-     */
173
-    private function invalidTypeMessage()
174
-    {
175
-        return apply_filters(
176
-            'FHEE__EventEspresso_core_services_notices_Notice__invalidTypeMessage',
177
-            sprintf(
178
-                esc_html__(
179
-                    ' one of the following notice types was expected: %1$s %2$s',
180
-                    'event_espresso'
181
-                ),
182
-                '<br />',
183
-                var_export($this->types(), true)
184
-            )
185
-        );
186
-    }
187
-
188
-
189
-    /**
190
-     * @param string $message
191
-     * @throws InvalidDataTypeException
192
-     */
193
-    private function setMessage($message)
194
-    {
195
-        if (empty($message) || ! is_string($message)) {
196
-            throw new InvalidDataTypeException(
197
-                '$message',
198
-                $message,
199
-                esc_html__('non empty string', 'event_espresso')
200
-            );
201
-        }
202
-        $this->message = sanitize_text_field($message);
203
-    }
204
-
205
-
206
-    /**
207
-     * @param string $file
208
-     * @throws InvalidDataTypeException
209
-     */
210
-    private function setFile($file)
211
-    {
212
-        if ($this->type === Notice::ERROR && (empty($file) || ! is_string($file))) {
213
-            throw new InvalidDataTypeException(
214
-                '$file',
215
-                $file,
216
-                esc_html__('non empty string', 'event_espresso')
217
-            );
218
-        }
219
-        $this->file = sanitize_text_field($file);
220
-    }
221
-
222
-
223
-    /**
224
-     * @param string $func
225
-     * @throws InvalidDataTypeException
226
-     */
227
-    private function setFunc($func)
228
-    {
229
-        if ($this->type === Notice::ERROR && (empty($func) || ! is_string($func))) {
230
-            throw new InvalidDataTypeException(
231
-                '$func',
232
-                $func,
233
-                esc_html__('non empty string', 'event_espresso')
234
-            );
235
-        }
236
-        $this->func = sanitize_text_field($func);
237
-    }
238
-
239
-
240
-    /**
241
-     * @param int $line
242
-     * @throws InvalidDataTypeException
243
-     */
244
-    private function setLine($line)
245
-    {
246
-        $line = absint($line);
247
-        if ($this->type === Notice::ERROR && $line === 0) {
248
-            throw new InvalidDataTypeException(
249
-                '$line',
250
-                $line,
251
-                esc_html__('integer', 'event_espresso')
252
-            );
253
-        }
254
-        $this->line = sanitize_text_field($line);
255
-    }
256
-
257
-
258
-    /**
259
-     * @param boolean $dismissible
260
-     */
261
-    private function setDismissible($dismissible = true)
262
-    {
263
-        $this->dismissible = filter_var($dismissible, FILTER_VALIDATE_BOOLEAN);
264
-    }
16
+	const ERROR = 'error';
17
+
18
+	const SUCCESS = 'success';
19
+
20
+	const ATTENTION = 'attention'; // alias for warning
21
+
22
+	const INFORMATION = 'information';
23
+
24
+	/**
25
+	 * @var string $type
26
+	 */
27
+	private $type;
28
+
29
+
30
+	/**
31
+	 * @var string $message
32
+	 */
33
+	private $message;
34
+
35
+
36
+	/**
37
+	 * @var string $file
38
+	 */
39
+	private $file;
40
+
41
+
42
+	/**
43
+	 * @var string $func
44
+	 */
45
+	private $func;
46
+
47
+
48
+	/**
49
+	 * @var string $line
50
+	 */
51
+	private $line;
52
+
53
+
54
+	/**
55
+	 * @var boolean $dismissible
56
+	 */
57
+	private $dismissible;
58
+
59
+
60
+	/**
61
+	 * Notice constructor.
62
+	 *
63
+	 * @param string $type
64
+	 * @param string $message
65
+	 * @param bool   $dismissible
66
+	 * @param string $file
67
+	 * @param string $func
68
+	 * @param string $line
69
+	 * @throws InvalidDataTypeException
70
+	 */
71
+	public function __construct($type, $message, $dismissible = true, $file = '', $func = '', $line = '')
72
+	{
73
+		$this->setType($type);
74
+		$this->setMessage($message);
75
+		$this->setDismissible($dismissible);
76
+		$this->setFile($file);
77
+		$this->setFunc($func);
78
+		$this->setLine($line);
79
+	}
80
+
81
+
82
+	/**
83
+	 * @return array
84
+	 */
85
+	private function types()
86
+	{
87
+		return (array) apply_filters(
88
+			'FHEE__EventEspresso_core_services_notices_Notice__types',
89
+			array(
90
+				Notice::ERROR,
91
+				Notice::SUCCESS,
92
+				Notice::ATTENTION,
93
+				Notice::INFORMATION,
94
+			)
95
+		);
96
+	}
97
+
98
+
99
+	/**
100
+	 * @return string
101
+	 */
102
+	public function type()
103
+	{
104
+		return $this->type;
105
+	}
106
+
107
+
108
+	/**
109
+	 * @return string
110
+	 */
111
+	public function message()
112
+	{
113
+		return $this->message;
114
+	}
115
+
116
+
117
+	/**
118
+	 * @return string
119
+	 */
120
+	public function file()
121
+	{
122
+		return $this->file;
123
+	}
124
+
125
+
126
+	/**
127
+	 * @return string
128
+	 */
129
+	public function func()
130
+	{
131
+		return $this->func;
132
+	}
133
+
134
+
135
+	/**
136
+	 * @return string
137
+	 */
138
+	public function line()
139
+	{
140
+		return $this->line;
141
+	}
142
+
143
+
144
+	/**
145
+	 * @return bool
146
+	 */
147
+	public function isDismissible()
148
+	{
149
+		return $this->dismissible;
150
+	}
151
+
152
+
153
+	/**
154
+	 * @param string $type
155
+	 * @throws InvalidDataTypeException
156
+	 */
157
+	private function setType($type)
158
+	{
159
+		if (! in_array($type, $this->types(), true)) {
160
+			throw new InvalidDataTypeException(
161
+				'$type',
162
+				$type,
163
+				$this->invalidTypeMessage()
164
+			);
165
+		}
166
+		$this->type = $type;
167
+	}
168
+
169
+
170
+	/**
171
+	 * gets the $invalid_type_message string
172
+	 */
173
+	private function invalidTypeMessage()
174
+	{
175
+		return apply_filters(
176
+			'FHEE__EventEspresso_core_services_notices_Notice__invalidTypeMessage',
177
+			sprintf(
178
+				esc_html__(
179
+					' one of the following notice types was expected: %1$s %2$s',
180
+					'event_espresso'
181
+				),
182
+				'<br />',
183
+				var_export($this->types(), true)
184
+			)
185
+		);
186
+	}
187
+
188
+
189
+	/**
190
+	 * @param string $message
191
+	 * @throws InvalidDataTypeException
192
+	 */
193
+	private function setMessage($message)
194
+	{
195
+		if (empty($message) || ! is_string($message)) {
196
+			throw new InvalidDataTypeException(
197
+				'$message',
198
+				$message,
199
+				esc_html__('non empty string', 'event_espresso')
200
+			);
201
+		}
202
+		$this->message = sanitize_text_field($message);
203
+	}
204
+
205
+
206
+	/**
207
+	 * @param string $file
208
+	 * @throws InvalidDataTypeException
209
+	 */
210
+	private function setFile($file)
211
+	{
212
+		if ($this->type === Notice::ERROR && (empty($file) || ! is_string($file))) {
213
+			throw new InvalidDataTypeException(
214
+				'$file',
215
+				$file,
216
+				esc_html__('non empty string', 'event_espresso')
217
+			);
218
+		}
219
+		$this->file = sanitize_text_field($file);
220
+	}
221
+
222
+
223
+	/**
224
+	 * @param string $func
225
+	 * @throws InvalidDataTypeException
226
+	 */
227
+	private function setFunc($func)
228
+	{
229
+		if ($this->type === Notice::ERROR && (empty($func) || ! is_string($func))) {
230
+			throw new InvalidDataTypeException(
231
+				'$func',
232
+				$func,
233
+				esc_html__('non empty string', 'event_espresso')
234
+			);
235
+		}
236
+		$this->func = sanitize_text_field($func);
237
+	}
238
+
239
+
240
+	/**
241
+	 * @param int $line
242
+	 * @throws InvalidDataTypeException
243
+	 */
244
+	private function setLine($line)
245
+	{
246
+		$line = absint($line);
247
+		if ($this->type === Notice::ERROR && $line === 0) {
248
+			throw new InvalidDataTypeException(
249
+				'$line',
250
+				$line,
251
+				esc_html__('integer', 'event_espresso')
252
+			);
253
+		}
254
+		$this->line = sanitize_text_field($line);
255
+	}
256
+
257
+
258
+	/**
259
+	 * @param boolean $dismissible
260
+	 */
261
+	private function setDismissible($dismissible = true)
262
+	{
263
+		$this->dismissible = filter_var($dismissible, FILTER_VALIDATE_BOOLEAN);
264
+	}
265 265
 }
Please login to merge, or discard this patch.
core/libraries/rest_api/controllers/model/Meta.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -80,13 +80,13 @@  discard block
 block discarded – undo
80 80
                     'table_alias'         => $field_obj->get_table_alias(),
81 81
                     'table_column'        => $field_obj->get_table_column(),
82 82
                 );
83
-                $fields_json[ $field_json['name'] ] = $field_json;
83
+                $fields_json[$field_json['name']] = $field_json;
84 84
             }
85 85
             $fields_json = array_merge(
86 86
                 $fields_json,
87 87
                 $this->getModelVersionInfo()->extraResourcePropertiesForModel($model)
88 88
             );
89
-            $response[ $model_name ]['fields'] = apply_filters(
89
+            $response[$model_name]['fields'] = apply_filters(
90 90
                 'FHEE__Meta__handle_request_models_meta__fields',
91 91
                 $fields_json,
92 92
                 $model
@@ -98,9 +98,9 @@  discard block
 block discarded – undo
98 98
                     'type'   => str_replace('EE_', '', get_class($relation_obj)),
99 99
                     'single' => $relation_obj instanceof \EE_Belongs_To_Relation ? true : false,
100 100
                 );
101
-                $relations_json[ $relation_name ] = $relation_json;
101
+                $relations_json[$relation_name] = $relation_json;
102 102
             }
103
-            $response[ $model_name ]['relations'] = apply_filters(
103
+            $response[$model_name]['relations'] = apply_filters(
104 104
                 'FHEE__Meta__handle_request_models_meta__relations',
105 105
                 $relations_json,
106 106
                 $model
@@ -125,7 +125,7 @@  discard block
 block discarded – undo
125 125
                 'name'    => $addon->name(),
126 126
                 'version' => $addon->version(),
127 127
             );
128
-            $addons[ $addon_json['name'] ] = $addon_json;
128
+            $addons[$addon_json['name']] = $addon_json;
129 129
         }
130 130
         $response_data['ee'] = array(
131 131
             'version'              => EEM_System_Status::instance()->get_ee_version(),
Please login to merge, or discard this patch.
Indentation   +109 added lines, -109 removed lines patch added patch discarded remove patch
@@ -21,122 +21,122 @@
 block discarded – undo
21 21
  */
22 22
 class Meta extends Base
23 23
 {
24
-    /**
25
-     * @param \WP_REST_Request $request
26
-     * @param string           $version
27
-     * @return array|\WP_REST_Response
28
-     */
29
-    public static function handleRequestModelsMeta(\WP_REST_Request $request, $version)
30
-    {
31
-        $controller = new Meta();
32
-        try {
33
-            $controller->setRequestedVersion($version);
34
-            return $controller->sendResponse($controller->getModelsMetadataEntity());
35
-        } catch (Exception $e) {
36
-            return $controller->sendResponse($e);
37
-        }
38
-    }
24
+	/**
25
+	 * @param \WP_REST_Request $request
26
+	 * @param string           $version
27
+	 * @return array|\WP_REST_Response
28
+	 */
29
+	public static function handleRequestModelsMeta(\WP_REST_Request $request, $version)
30
+	{
31
+		$controller = new Meta();
32
+		try {
33
+			$controller->setRequestedVersion($version);
34
+			return $controller->sendResponse($controller->getModelsMetadataEntity());
35
+		} catch (Exception $e) {
36
+			return $controller->sendResponse($e);
37
+		}
38
+	}
39 39
 
40 40
 
41
-    /*
41
+	/*
42 42
      * Gets the model metadata resource entity
43 43
      * @return array for JSON response, describing all the models available in teh requested version
44 44
      */
45
-    protected function getModelsMetadataEntity()
46
-    {
47
-        $response = array();
48
-        foreach ($this->getModelVersionInfo()->modelsForRequestedVersion() as $model_name => $model_classname) {
49
-            $model = $this->getModelVersionInfo()->loadModel($model_name);
50
-            $fields_json = array();
51
-            foreach ($this->getModelVersionInfo()->fieldsOnModelInThisVersion($model) as $field_name => $field_obj) {
52
-                if ($this->getModelVersionInfo()->fieldIsIgnored($field_obj)) {
53
-                    continue;
54
-                }
55
-                if ($field_obj instanceof EE_Boolean_Field) {
56
-                    $datatype = 'Boolean';
57
-                } elseif ($field_obj->get_wpdb_data_type() == '%d') {
58
-                    $datatype = 'Number';
59
-                } elseif ($field_name instanceof EE_Serialized_Text_Field) {
60
-                    $datatype = 'Object';
61
-                } else {
62
-                    $datatype = 'String';
63
-                }
64
-                $default_value = ModelDataTranslator::prepareFieldValueForJson(
65
-                    $field_obj,
66
-                    $field_obj->get_default_value(),
67
-                    $this->getModelVersionInfo()->requestedVersion()
68
-                );
69
-                $field_json = array(
70
-                    'name'                => $field_name,
71
-                    'nicename'            => wp_specialchars_decode($field_obj->get_nicename(), ENT_QUOTES),
72
-                    'has_rendered_format' => $this->getModelVersionInfo()->fieldHasRenderedFormat($field_obj),
73
-                    'has_pretty_format'   => $this->getModelVersionInfo()->fieldHasPrettyFormat($field_obj),
74
-                    'type'                => str_replace('EE_', '', get_class($field_obj)),
75
-                    'datatype'            => $datatype,
76
-                    'nullable'            => $field_obj->is_nullable(),
77
-                    'default'             => $default_value,
78
-                    'table_alias'         => $field_obj->get_table_alias(),
79
-                    'table_column'        => $field_obj->get_table_column(),
80
-                );
81
-                $fields_json[ $field_json['name'] ] = $field_json;
82
-            }
83
-            $fields_json = array_merge(
84
-                $fields_json,
85
-                $this->getModelVersionInfo()->extraResourcePropertiesForModel($model)
86
-            );
87
-            $response[ $model_name ]['fields'] = apply_filters(
88
-                'FHEE__Meta__handle_request_models_meta__fields',
89
-                $fields_json,
90
-                $model
91
-            );
92
-            $relations_json = array();
93
-            foreach ($model->relation_settings() as $relation_name => $relation_obj) {
94
-                $relation_json = array(
95
-                    'name'   => $relation_name,
96
-                    'type'   => str_replace('EE_', '', get_class($relation_obj)),
97
-                    'single' => $relation_obj instanceof \EE_Belongs_To_Relation ? true : false,
98
-                );
99
-                $relations_json[ $relation_name ] = $relation_json;
100
-            }
101
-            $response[ $model_name ]['relations'] = apply_filters(
102
-                'FHEE__Meta__handle_request_models_meta__relations',
103
-                $relations_json,
104
-                $model
105
-            );
106
-        }
107
-        return $response;
108
-    }
45
+	protected function getModelsMetadataEntity()
46
+	{
47
+		$response = array();
48
+		foreach ($this->getModelVersionInfo()->modelsForRequestedVersion() as $model_name => $model_classname) {
49
+			$model = $this->getModelVersionInfo()->loadModel($model_name);
50
+			$fields_json = array();
51
+			foreach ($this->getModelVersionInfo()->fieldsOnModelInThisVersion($model) as $field_name => $field_obj) {
52
+				if ($this->getModelVersionInfo()->fieldIsIgnored($field_obj)) {
53
+					continue;
54
+				}
55
+				if ($field_obj instanceof EE_Boolean_Field) {
56
+					$datatype = 'Boolean';
57
+				} elseif ($field_obj->get_wpdb_data_type() == '%d') {
58
+					$datatype = 'Number';
59
+				} elseif ($field_name instanceof EE_Serialized_Text_Field) {
60
+					$datatype = 'Object';
61
+				} else {
62
+					$datatype = 'String';
63
+				}
64
+				$default_value = ModelDataTranslator::prepareFieldValueForJson(
65
+					$field_obj,
66
+					$field_obj->get_default_value(),
67
+					$this->getModelVersionInfo()->requestedVersion()
68
+				);
69
+				$field_json = array(
70
+					'name'                => $field_name,
71
+					'nicename'            => wp_specialchars_decode($field_obj->get_nicename(), ENT_QUOTES),
72
+					'has_rendered_format' => $this->getModelVersionInfo()->fieldHasRenderedFormat($field_obj),
73
+					'has_pretty_format'   => $this->getModelVersionInfo()->fieldHasPrettyFormat($field_obj),
74
+					'type'                => str_replace('EE_', '', get_class($field_obj)),
75
+					'datatype'            => $datatype,
76
+					'nullable'            => $field_obj->is_nullable(),
77
+					'default'             => $default_value,
78
+					'table_alias'         => $field_obj->get_table_alias(),
79
+					'table_column'        => $field_obj->get_table_column(),
80
+				);
81
+				$fields_json[ $field_json['name'] ] = $field_json;
82
+			}
83
+			$fields_json = array_merge(
84
+				$fields_json,
85
+				$this->getModelVersionInfo()->extraResourcePropertiesForModel($model)
86
+			);
87
+			$response[ $model_name ]['fields'] = apply_filters(
88
+				'FHEE__Meta__handle_request_models_meta__fields',
89
+				$fields_json,
90
+				$model
91
+			);
92
+			$relations_json = array();
93
+			foreach ($model->relation_settings() as $relation_name => $relation_obj) {
94
+				$relation_json = array(
95
+					'name'   => $relation_name,
96
+					'type'   => str_replace('EE_', '', get_class($relation_obj)),
97
+					'single' => $relation_obj instanceof \EE_Belongs_To_Relation ? true : false,
98
+				);
99
+				$relations_json[ $relation_name ] = $relation_json;
100
+			}
101
+			$response[ $model_name ]['relations'] = apply_filters(
102
+				'FHEE__Meta__handle_request_models_meta__relations',
103
+				$relations_json,
104
+				$model
105
+			);
106
+		}
107
+		return $response;
108
+	}
109 109
 
110 110
 
111
-    /**
112
-     * Adds EE metadata to the index
113
-     *
114
-     * @param \WP_REST_Response $rest_response_obj
115
-     * @return \WP_REST_Response
116
-     */
117
-    public static function filterEeMetadataIntoIndex(\WP_REST_Response $rest_response_obj)
118
-    {
119
-        $response_data = $rest_response_obj->get_data();
120
-        $addons = array();
121
-        foreach (EE_Registry::instance()->addons as $addon) {
122
-            $addon_json = array(
123
-                'name'    => $addon->name(),
124
-                'version' => $addon->version(),
125
-            );
126
-            $addons[ $addon_json['name'] ] = $addon_json;
127
-        }
128
-        $response_data['ee'] = array(
129
-            'version'              => EEM_System_Status::instance()->get_ee_version(),
130
-            // @codingStandardsIgnoreStart
131
-            'documentation_url'    => 'https://github.com/eventespresso/event-espresso-core/tree/master/docs/C--REST-API',
132
-            // @codingStandardsIgnoreEnd
133
-            'addons'               => $addons,
134
-            'maintenance_mode'     => EE_Maintenance_Mode::instance()->real_level(),
135
-            'served_core_versions' => array_keys(EED_Core_Rest_Api::versions_served()),
136
-        );
137
-        $rest_response_obj->set_data($response_data);
138
-        return $rest_response_obj;
139
-    }
111
+	/**
112
+	 * Adds EE metadata to the index
113
+	 *
114
+	 * @param \WP_REST_Response $rest_response_obj
115
+	 * @return \WP_REST_Response
116
+	 */
117
+	public static function filterEeMetadataIntoIndex(\WP_REST_Response $rest_response_obj)
118
+	{
119
+		$response_data = $rest_response_obj->get_data();
120
+		$addons = array();
121
+		foreach (EE_Registry::instance()->addons as $addon) {
122
+			$addon_json = array(
123
+				'name'    => $addon->name(),
124
+				'version' => $addon->version(),
125
+			);
126
+			$addons[ $addon_json['name'] ] = $addon_json;
127
+		}
128
+		$response_data['ee'] = array(
129
+			'version'              => EEM_System_Status::instance()->get_ee_version(),
130
+			// @codingStandardsIgnoreStart
131
+			'documentation_url'    => 'https://github.com/eventespresso/event-espresso-core/tree/master/docs/C--REST-API',
132
+			// @codingStandardsIgnoreEnd
133
+			'addons'               => $addons,
134
+			'maintenance_mode'     => EE_Maintenance_Mode::instance()->real_level(),
135
+			'served_core_versions' => array_keys(EED_Core_Rest_Api::versions_served()),
136
+		);
137
+		$rest_response_obj->set_data($response_data);
138
+		return $rest_response_obj;
139
+	}
140 140
 }
141 141
 
142 142
 
Please login to merge, or discard this patch.
core/libraries/rest_api/changes/ChangesIn40836.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -119,9 +119,9 @@  discard block
 block discarded – undo
119 119
                 $headers,
120 120
                 array_flip(
121 121
                     array(
122
-                        Base::HEADER_PREFIX_FOR_WP . 'Total',
123
-                        Base::HEADER_PREFIX_FOR_WP . 'TotalPages',
124
-                        Base::HEADER_PREFIX_FOR_WP . 'PageSize',
122
+                        Base::HEADER_PREFIX_FOR_WP.'Total',
123
+                        Base::HEADER_PREFIX_FOR_WP.'TotalPages',
124
+                        Base::HEADER_PREFIX_FOR_WP.'PageSize',
125 125
                     )
126 126
                 )
127 127
             );
@@ -151,7 +151,7 @@  discard block
 block discarded – undo
151 151
             && $model instanceof \EEM_CPT_Base
152 152
         ) {
153 153
             $attachment = wp_get_attachment_image_src(
154
-                get_post_thumbnail_id($entity_response_array[ $model->primary_key_name() ]),
154
+                get_post_thumbnail_id($entity_response_array[$model->primary_key_name()]),
155 155
                 'full'
156 156
             );
157 157
             $entity_response_array['featured_image_url'] = ! empty($attachment) ? $attachment[0] : null;
Please login to merge, or discard this patch.
Indentation   +162 added lines, -162 removed lines patch added patch discarded remove patch
@@ -16,176 +16,176 @@
 block discarded – undo
16 16
 class ChangesIn40836 extends ChangesInBase
17 17
 {
18 18
 
19
-    /**
20
-     * Adds hooks so requests to 4.8.29 don't have the checkin endpoints
21
-     */
22
-    public function setHooks()
23
-    {
24
-        // set a hook to remove the "calculate" query param
25
-        add_filter(
26
-            'FHEE__EED_Core_Rest_Api___get_response_selection_query_params',
27
-            array($this, 'removeCalculateQueryParam'),
28
-            10,
29
-            3
30
-        );
31
-        // don't add the _calculated_fields either
32
-        add_filter(
33
-            'FHEE__Read__create_entity_from_wpdb_results__entity_before_inaccessible_field_removal',
34
-            array($this, 'removeCalculatedFieldsFromResponse'),
35
-            10,
36
-            5
37
-        );
38
-        // and also don't add the count headers
39
-        add_filter(
40
-            'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers',
41
-            array($this, 'removeHeadersNewInThisVersion'),
42
-            10,
43
-            3
44
-        );
45
-        // remove the old featured_image part of the response...
46
-        add_filter(
47
-            'FHEE__Read__create_entity_from_wpdb_results__entity_before_including_requested_models',
48
-            array($this, 'addOldFeaturedImagePartOfCptEntities'),
49
-            10,
50
-            5
51
-        );
52
-        // assuming ticket 9425's change gets pushed with 9406, we don't need to
53
-        // remove it from the calculated fields on older requests (because this will
54
-        // be the first version with calculated fields)
55
-        // before this, infinity was -1, now it's null
56
-        add_filter(
57
-            'FHEE__EventEspresso\core\libraries\rest_api\Model_Data_Translator__prepare_field_for_rest_api',
58
-            array($this, 'useNegativeOneForInfinityBeforeThisVersion'),
59
-            10,
60
-            4
61
-        );
62
-    }
19
+	/**
20
+	 * Adds hooks so requests to 4.8.29 don't have the checkin endpoints
21
+	 */
22
+	public function setHooks()
23
+	{
24
+		// set a hook to remove the "calculate" query param
25
+		add_filter(
26
+			'FHEE__EED_Core_Rest_Api___get_response_selection_query_params',
27
+			array($this, 'removeCalculateQueryParam'),
28
+			10,
29
+			3
30
+		);
31
+		// don't add the _calculated_fields either
32
+		add_filter(
33
+			'FHEE__Read__create_entity_from_wpdb_results__entity_before_inaccessible_field_removal',
34
+			array($this, 'removeCalculatedFieldsFromResponse'),
35
+			10,
36
+			5
37
+		);
38
+		// and also don't add the count headers
39
+		add_filter(
40
+			'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers',
41
+			array($this, 'removeHeadersNewInThisVersion'),
42
+			10,
43
+			3
44
+		);
45
+		// remove the old featured_image part of the response...
46
+		add_filter(
47
+			'FHEE__Read__create_entity_from_wpdb_results__entity_before_including_requested_models',
48
+			array($this, 'addOldFeaturedImagePartOfCptEntities'),
49
+			10,
50
+			5
51
+		);
52
+		// assuming ticket 9425's change gets pushed with 9406, we don't need to
53
+		// remove it from the calculated fields on older requests (because this will
54
+		// be the first version with calculated fields)
55
+		// before this, infinity was -1, now it's null
56
+		add_filter(
57
+			'FHEE__EventEspresso\core\libraries\rest_api\Model_Data_Translator__prepare_field_for_rest_api',
58
+			array($this, 'useNegativeOneForInfinityBeforeThisVersion'),
59
+			10,
60
+			4
61
+		);
62
+	}
63 63
 
64 64
 
65
-    /**
66
-     * Don't show "calculate" as an query param option in the index
67
-     *
68
-     * @param array    $query_params
69
-     * @param EEM_Base $model
70
-     * @param string   $version
71
-     * @return array
72
-     */
73
-    public function removeCalculateQueryParam($query_params, EEM_Base $model, $version)
74
-    {
75
-        if ($this->appliesToVersion($version)) {
76
-            unset($query_params['calculate']);
77
-        }
78
-        return $query_params;
79
-    }
65
+	/**
66
+	 * Don't show "calculate" as an query param option in the index
67
+	 *
68
+	 * @param array    $query_params
69
+	 * @param EEM_Base $model
70
+	 * @param string   $version
71
+	 * @return array
72
+	 */
73
+	public function removeCalculateQueryParam($query_params, EEM_Base $model, $version)
74
+	{
75
+		if ($this->appliesToVersion($version)) {
76
+			unset($query_params['calculate']);
77
+		}
78
+		return $query_params;
79
+	}
80 80
 
81 81
 
82
-    /**
83
-     * Removes the "_calculate_fields" part of entity responses before 4.8.36
84
-     *
85
-     * @param array           $entity_response_array
86
-     * @param EEM_Base        $model
87
-     * @param string          $request_context
88
-     * @param WP_REST_Request $request
89
-     * @param Read            $controller
90
-     * @return array
91
-     */
92
-    public function removeCalculatedFieldsFromResponse(
93
-        $entity_response_array,
94
-        EEM_Base $model,
95
-        $request_context,
96
-        WP_REST_Request $request,
97
-        Read $controller
98
-    ) {
99
-        if ($this->appliesToVersion($controller->getModelVersionInfo()->requestedVersion())) {
100
-            unset($entity_response_array['_calculated_fields']);
101
-        }
102
-        return $entity_response_array;
103
-    }
82
+	/**
83
+	 * Removes the "_calculate_fields" part of entity responses before 4.8.36
84
+	 *
85
+	 * @param array           $entity_response_array
86
+	 * @param EEM_Base        $model
87
+	 * @param string          $request_context
88
+	 * @param WP_REST_Request $request
89
+	 * @param Read            $controller
90
+	 * @return array
91
+	 */
92
+	public function removeCalculatedFieldsFromResponse(
93
+		$entity_response_array,
94
+		EEM_Base $model,
95
+		$request_context,
96
+		WP_REST_Request $request,
97
+		Read $controller
98
+	) {
99
+		if ($this->appliesToVersion($controller->getModelVersionInfo()->requestedVersion())) {
100
+			unset($entity_response_array['_calculated_fields']);
101
+		}
102
+		return $entity_response_array;
103
+	}
104 104
 
105 105
 
106
-    /**
107
-     * Removes the new headers for requests before 4.8.36
108
-     *
109
-     * @param array           $headers
110
-     * @param Controller_Base $controller
111
-     * @param string          $version
112
-     * @return array
113
-     */
114
-    public function removeHeadersNewInThisVersion(
115
-        $headers,
116
-        Controller_Base $controller,
117
-        $version
118
-    ) {
119
-        if ($this->appliesToVersion($version)) {
120
-            $headers = array_diff_key(
121
-                $headers,
122
-                array_flip(
123
-                    array(
124
-                        Base::HEADER_PREFIX_FOR_WP . 'Total',
125
-                        Base::HEADER_PREFIX_FOR_WP . 'TotalPages',
126
-                        Base::HEADER_PREFIX_FOR_WP . 'PageSize',
127
-                    )
128
-                )
129
-            );
130
-        }
131
-        return $headers;
132
-    }
106
+	/**
107
+	 * Removes the new headers for requests before 4.8.36
108
+	 *
109
+	 * @param array           $headers
110
+	 * @param Controller_Base $controller
111
+	 * @param string          $version
112
+	 * @return array
113
+	 */
114
+	public function removeHeadersNewInThisVersion(
115
+		$headers,
116
+		Controller_Base $controller,
117
+		$version
118
+	) {
119
+		if ($this->appliesToVersion($version)) {
120
+			$headers = array_diff_key(
121
+				$headers,
122
+				array_flip(
123
+					array(
124
+						Base::HEADER_PREFIX_FOR_WP . 'Total',
125
+						Base::HEADER_PREFIX_FOR_WP . 'TotalPages',
126
+						Base::HEADER_PREFIX_FOR_WP . 'PageSize',
127
+					)
128
+				)
129
+			);
130
+		}
131
+		return $headers;
132
+	}
133 133
 
134 134
 
135
-    /**
136
-     * Puts the 'featured_image_url' back in for responses before 4.8.36.
137
-     *
138
-     * @param array           $entity_response_array
139
-     * @param EEM_Base        $model
140
-     * @param string          $request_context
141
-     * @param WP_REST_Request $request
142
-     * @param Read            $controller
143
-     * @return array
144
-     */
145
-    public function addOldFeaturedImagePartOfCptEntities(
146
-        $entity_response_array,
147
-        EEM_Base $model,
148
-        $request_context,
149
-        WP_REST_Request $request,
150
-        Read $controller
151
-    ) {
152
-        if (
153
-            $this->appliesToVersion($controller->getModelVersionInfo()->requestedVersion())
154
-            && $model instanceof \EEM_CPT_Base
155
-        ) {
156
-            $attachment = wp_get_attachment_image_src(
157
-                get_post_thumbnail_id($entity_response_array[ $model->primary_key_name() ]),
158
-                'full'
159
-            );
160
-            $entity_response_array['featured_image_url'] = ! empty($attachment) ? $attachment[0] : null;
161
-        }
162
-        return $entity_response_array;
163
-    }
135
+	/**
136
+	 * Puts the 'featured_image_url' back in for responses before 4.8.36.
137
+	 *
138
+	 * @param array           $entity_response_array
139
+	 * @param EEM_Base        $model
140
+	 * @param string          $request_context
141
+	 * @param WP_REST_Request $request
142
+	 * @param Read            $controller
143
+	 * @return array
144
+	 */
145
+	public function addOldFeaturedImagePartOfCptEntities(
146
+		$entity_response_array,
147
+		EEM_Base $model,
148
+		$request_context,
149
+		WP_REST_Request $request,
150
+		Read $controller
151
+	) {
152
+		if (
153
+			$this->appliesToVersion($controller->getModelVersionInfo()->requestedVersion())
154
+			&& $model instanceof \EEM_CPT_Base
155
+		) {
156
+			$attachment = wp_get_attachment_image_src(
157
+				get_post_thumbnail_id($entity_response_array[ $model->primary_key_name() ]),
158
+				'full'
159
+			);
160
+			$entity_response_array['featured_image_url'] = ! empty($attachment) ? $attachment[0] : null;
161
+		}
162
+		return $entity_response_array;
163
+	}
164 164
 
165 165
 
166
-    /**
167
-     * If the value was infinity, we now use null in our JSON responses,
168
-     * but before this version we used -1.
169
-     *
170
-     * @param mixed                $new_value
171
-     * @param \EE_Model_Field_Base $field_obj
172
-     * @param mixed                $original_value
173
-     * @param string               $requested_value
174
-     * @return mixed
175
-     */
176
-    public function useNegativeOneForInfinityBeforeThisVersion(
177
-        $new_value,
178
-        $field_obj,
179
-        $original_value,
180
-        $requested_value
181
-    ) {
182
-        if (
183
-            $this->appliesToVersion($requested_value)
184
-            && $original_value === EE_INF
185
-        ) {
186
-            // return the old representation of infinity in the JSON
187
-            return -1;
188
-        }
189
-        return $new_value;
190
-    }
166
+	/**
167
+	 * If the value was infinity, we now use null in our JSON responses,
168
+	 * but before this version we used -1.
169
+	 *
170
+	 * @param mixed                $new_value
171
+	 * @param \EE_Model_Field_Base $field_obj
172
+	 * @param mixed                $original_value
173
+	 * @param string               $requested_value
174
+	 * @return mixed
175
+	 */
176
+	public function useNegativeOneForInfinityBeforeThisVersion(
177
+		$new_value,
178
+		$field_obj,
179
+		$original_value,
180
+		$requested_value
181
+	) {
182
+		if (
183
+			$this->appliesToVersion($requested_value)
184
+			&& $original_value === EE_INF
185
+		) {
186
+			// return the old representation of infinity in the JSON
187
+			return -1;
188
+		}
189
+		return $new_value;
190
+	}
191 191
 }
Please login to merge, or discard this patch.
core/libraries/batch/JobHandlers/DatetimeOffsetFix.php 2 patches
Indentation   +467 added lines, -467 removed lines patch added patch discarded remove patch
@@ -24,471 +24,471 @@
 block discarded – undo
24 24
 class DatetimeOffsetFix extends JobHandler
25 25
 {
26 26
 
27
-    /**
28
-     * Key for the option used to track which models have been processed when doing the batches.
29
-     */
30
-    const MODELS_TO_PROCESS_OPTION_KEY = 'ee_models_processed_for_datetime_offset_fix';
31
-
32
-
33
-    const COUNT_OF_MODELS_PROCESSED = 'ee_count_of_ee_models_processed_for_datetime_offset_fixed';
34
-
35
-    /**
36
-     * Key for the option used to track what the current offset is that will be applied when this tool is executed.
37
-     */
38
-    const OFFSET_TO_APPLY_OPTION_KEY = 'ee_datetime_offset_fix_offset_to_apply';
39
-
40
-
41
-    const OPTION_KEY_OFFSET_RANGE_START_DATE = 'ee_datetime_offset_start_date_range';
42
-
43
-
44
-    const OPTION_KEY_OFFSET_RANGE_END_DATE = 'ee_datetime_offset_end_date_range';
45
-
46
-
47
-    /**
48
-     * String labelling the datetime offset fix type for change-log entries.
49
-     */
50
-    const DATETIME_OFFSET_FIX_CHANGELOG_TYPE = 'datetime_offset_fix';
51
-
52
-
53
-    /**
54
-     * String labelling a datetime offset fix error for change-log entries.
55
-     */
56
-    const DATETIME_OFFSET_FIX_CHANGELOG_ERROR_TYPE = 'datetime_offset_fix_error';
57
-
58
-    /**
59
-     * @var EEM_Base[]
60
-     */
61
-    protected $models_with_datetime_fields = array();
62
-
63
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
64
-
65
-    /**
66
-     * Performs any necessary setup for starting the job. This is also a good
67
-     * place to setup the $job_arguments which will be used for subsequent HTTP requests
68
-     * when continue_job will be called
69
-     *
70
-     * @param JobParameters $job_parameters
71
-     * @return JobStepResponse
72
-     * @throws EE_Error
73
-     * @throws InvalidArgumentException
74
-     * @throws InvalidDataTypeException
75
-     * @throws InvalidInterfaceException
76
-     */
77
-    public function create_job(JobParameters $job_parameters)
78
-    {
79
-        $models_with_datetime_fields = $this->getModelsWithDatetimeFields();
80
-        // we'll be doing each model as a batch.
81
-        $job_parameters->set_job_size(count($models_with_datetime_fields));
82
-        return new JobStepResponse(
83
-            $job_parameters,
84
-            esc_html__('Starting Datetime Offset Fix', 'event_espresso')
85
-        );
86
-    }
87
-
88
-    /**
89
-     * Performs another step of the job
90
-     *
91
-     * @param JobParameters $job_parameters
92
-     * @param int           $batch_size
93
-     * @return JobStepResponse
94
-     * @throws EE_Error
95
-     * @throws InvalidArgumentException
96
-     * @throws InvalidDataTypeException
97
-     * @throws InvalidInterfaceException
98
-     */
99
-    public function continue_job(JobParameters $job_parameters, $batch_size = 50)
100
-    {
101
-        $models_to_process = $this->getModelsWithDatetimeFields();
102
-        // let's pop off the a model and do the query to apply the offset.
103
-        $model_to_process = array_pop($models_to_process);
104
-        // update our record
105
-        $this->setModelsToProcess($models_to_process);
106
-        $this->processModel($model_to_process);
107
-        $this->updateCountOfModelsProcessed();
108
-        $job_parameters->set_units_processed($this->getCountOfModelsProcessed());
109
-        if (count($models_to_process) > 0) {
110
-            $job_parameters->set_status(JobParameters::status_continue);
111
-        } else {
112
-            $job_parameters->set_status(JobParameters::status_complete);
113
-        }
114
-        return new JobStepResponse(
115
-            $job_parameters,
116
-            sprintf(
117
-                esc_html__('Updated the offset for all datetime fields on the %s model.', 'event_espresso'),
118
-                $model_to_process
119
-            )
120
-        );
121
-    }
122
-
123
-    /**
124
-     * Performs any clean-up logic when we know the job is completed
125
-     *
126
-     * @param JobParameters $job_parameters
127
-     * @return JobStepResponse
128
-     * @throws BatchRequestException
129
-     */
130
-    public function cleanup_job(JobParameters $job_parameters)
131
-    {
132
-        // delete important saved options.
133
-        delete_option(self::MODELS_TO_PROCESS_OPTION_KEY);
134
-        delete_option(self::COUNT_OF_MODELS_PROCESSED);
135
-        delete_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE);
136
-        delete_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE);
137
-        return new JobStepResponse($job_parameters, esc_html__(
138
-            'Offset has been applied to all affected fields.',
139
-            'event_espresso'
140
-        ));
141
-    }
142
-
143
-
144
-    /**
145
-     * Contains the logic for processing a model and applying the datetime offset to affected fields on that model.
146
-     *
147
-     * @param string $model_class_name
148
-     * @throws EE_Error
149
-     */
150
-    protected function processModel($model_class_name)
151
-    {
152
-        global $wpdb;
153
-        /** @var EEM_Base $model */
154
-        $model = $model_class_name::instance();
155
-        $original_offset = self::getOffset();
156
-        $start_date_range = self::getStartDateRange();
157
-        $end_date_range = self::getEndDateRange();
158
-        $sql_date_function = $original_offset > 0 ? 'DATE_ADD' : 'DATE_SUB';
159
-        $offset = abs($original_offset) * 60;
160
-        $date_ranges = array();
161
-        // since some affected models might have two tables, we have to get our tables and set up a query for each table.
162
-        foreach ($model->get_tables() as $table) {
163
-            $query = 'UPDATE ' . $table->get_table_name();
164
-            $fields_affected = array();
165
-            $inner_query = array();
166
-            foreach ($model->_get_fields_for_table($table->get_table_alias()) as $model_field) {
167
-                if ($model_field instanceof EE_Datetime_Field) {
168
-                    $inner_query[ $model_field->get_table_column() ] = $model_field->get_table_column() . ' = '
169
-                                                                       . $sql_date_function . '('
170
-                                                                       . $model_field->get_table_column()
171
-                                                                       . ", INTERVAL {$offset} MINUTE)";
172
-                    $fields_affected[] = $model_field;
173
-                }
174
-            }
175
-            if (! $fields_affected) {
176
-                continue;
177
-            }
178
-            // do we do one query per column/field or one query for all fields on the model? It all depends on whether
179
-            // there is a date range applied or not.
180
-            if ($start_date_range instanceof DbSafeDateTime || $end_date_range instanceof DbSafeDateTime) {
181
-                $result = $this->doQueryForEachField($query, $inner_query, $start_date_range, $end_date_range);
182
-            } else {
183
-                $result = $this->doQueryForAllFields($query, $inner_query);
184
-            }
185
-
186
-            // record appropriate logs for the query
187
-            switch (true) {
188
-                case $result === false:
189
-                    // record error.
190
-                    $error_message = $wpdb->last_error;
191
-                    // handle the edgecases where last_error might be empty.
192
-                    if (! $error_message) {
193
-                        $error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
194
-                    }
195
-                    $this->recordChangeLog($model, $original_offset, $table, $fields_affected, $error_message);
196
-                    break;
197
-                case is_array($result) && ! empty($result):
198
-                    foreach ($result as $field_name => $error_message) {
199
-                        $this->recordChangeLog($model, $original_offset, $table, array($field_name), $error_message);
200
-                    }
201
-                    break;
202
-                default:
203
-                    $this->recordChangeLog($model, $original_offset, $table, $fields_affected);
204
-            }
205
-        }
206
-    }
207
-
208
-
209
-    /**
210
-     * Does the query on each $inner_query individually.
211
-     *
212
-     * @param string              $query
213
-     * @param array               $inner_query
214
-     * @param DbSafeDateTime|null $start_date_range
215
-     * @param DbSafeDateTime|null $end_date_range
216
-     * @return array  An array of any errors encountered and the fields they were for.
217
-     */
218
-    private function doQueryForEachField($query, array $inner_query, $start_date_range, $end_date_range)
219
-    {
220
-        global $wpdb;
221
-        $errors = array();
222
-        foreach ($inner_query as $field_name => $field_query) {
223
-            $query_to_run = $query;
224
-            $where_conditions = array();
225
-            $query_to_run .= ' SET ' . $field_query;
226
-            if ($start_date_range instanceof DbSafeDateTime) {
227
-                $start_date = $start_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
228
-                $where_conditions[] = "{$field_name} > '{$start_date}'";
229
-            }
230
-            if ($end_date_range instanceof DbSafeDateTime) {
231
-                $end_date = $end_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
232
-                $where_conditions[] = "{$field_name} < '{$end_date}'";
233
-            }
234
-            if ($where_conditions) {
235
-                $query_to_run .= ' WHERE ' . implode(' AND ', $where_conditions);
236
-            }
237
-            $result = $wpdb->query($query_to_run);
238
-            if ($result === false) {
239
-                // record error.
240
-                $error_message = $wpdb->last_error;
241
-                // handle the edgecases where last_error might be empty.
242
-                if (! $error_message) {
243
-                    $error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
244
-                }
245
-                $errors[ $field_name ] = $error_message;
246
-            }
247
-        }
248
-        return $errors;
249
-    }
250
-
251
-
252
-    /**
253
-     * Performs the query for all fields within the inner_query
254
-     *
255
-     * @param string $query
256
-     * @param array  $inner_query
257
-     * @return false|int
258
-     */
259
-    private function doQueryForAllFields($query, array $inner_query)
260
-    {
261
-        global $wpdb;
262
-        $query .= ' SET ' . implode(',', $inner_query);
263
-        return $wpdb->query($query);
264
-    }
265
-
266
-
267
-    /**
268
-     * Records a changelog entry using the given information.
269
-     *
270
-     * @param EEM_Base              $model
271
-     * @param float                 $offset
272
-     * @param EE_Table_Base         $table
273
-     * @param EE_Model_Field_Base[] $model_fields_affected
274
-     * @param string                $error_message If present then there was an error so let's record that instead.
275
-     * @throws EE_Error
276
-     */
277
-    private function recordChangeLog(
278
-        EEM_Base $model,
279
-        $offset,
280
-        EE_Table_Base $table,
281
-        $model_fields_affected,
282
-        $error_message = ''
283
-    ) {
284
-        // setup $fields list.
285
-        $fields = array();
286
-        /** @var EE_Datetime_Field $model_field */
287
-        foreach ($model_fields_affected as $model_field) {
288
-            if (! $model_field instanceof EE_Datetime_Field) {
289
-                continue;
290
-            }
291
-            $fields[] = $model_field->get_name();
292
-        }
293
-        // setup the message for the changelog entry.
294
-        $message = $error_message
295
-            ? sprintf(
296
-                esc_html__(
297
-                    'The %1$s table for the %2$s model did not have the offset of %3$f applied to its fields (%4$s), because of the following error:%5$s',
298
-                    'event_espresso'
299
-                ),
300
-                $table->get_table_name(),
301
-                $model->get_this_model_name(),
302
-                $offset,
303
-                implode(',', $fields),
304
-                $error_message
305
-            )
306
-            : sprintf(
307
-                esc_html__(
308
-                    'The %1$s table for the %2$s model has had the offset of %3$f applied to its following fields: %4$s',
309
-                    'event_espresso'
310
-                ),
311
-                $table->get_table_name(),
312
-                $model->get_this_model_name(),
313
-                $offset,
314
-                implode(',', $fields)
315
-            );
316
-        // write to the log
317
-        $changelog = EE_Change_Log::new_instance(array(
318
-            'LOG_type'    => $error_message
319
-                ? self::DATETIME_OFFSET_FIX_CHANGELOG_ERROR_TYPE
320
-                : self::DATETIME_OFFSET_FIX_CHANGELOG_TYPE,
321
-            'LOG_message' => $message,
322
-        ));
323
-        $changelog->save();
324
-    }
325
-
326
-
327
-    /**
328
-     * Returns an array of models that have datetime fields.
329
-     * This array is added to a short lived transient cache to keep having to build this list to a minimum.
330
-     *
331
-     * @return array an array of model class names.
332
-     * @throws EE_Error
333
-     * @throws InvalidDataTypeException
334
-     * @throws InvalidInterfaceException
335
-     * @throws InvalidArgumentException
336
-     */
337
-    private function getModelsWithDatetimeFields()
338
-    {
339
-        $this->getModelsToProcess();
340
-        if (! empty($this->models_with_datetime_fields)) {
341
-            return $this->models_with_datetime_fields;
342
-        }
343
-
344
-        $all_non_abstract_models = EE_Registry::instance()->non_abstract_db_models;
345
-        foreach ($all_non_abstract_models as $non_abstract_model) {
346
-            // get model instance
347
-            /** @var EEM_Base $non_abstract_model */
348
-            $non_abstract_model = $non_abstract_model::instance();
349
-            if ($non_abstract_model->get_a_field_of_type('EE_Datetime_Field') instanceof EE_Datetime_Field) {
350
-                $this->models_with_datetime_fields[] = get_class($non_abstract_model);
351
-            }
352
-        }
353
-        $this->setModelsToProcess($this->models_with_datetime_fields);
354
-        return $this->models_with_datetime_fields;
355
-    }
356
-
357
-
358
-    /**
359
-     * This simply records the models that have been processed with our tracking option.
360
-     *
361
-     * @param array $models_to_set array of model class names.
362
-     */
363
-    private function setModelsToProcess($models_to_set)
364
-    {
365
-        update_option(self::MODELS_TO_PROCESS_OPTION_KEY, $models_to_set);
366
-    }
367
-
368
-
369
-    /**
370
-     * Used to keep track of how many models have been processed for the batch
371
-     *
372
-     * @param $count
373
-     */
374
-    private function updateCountOfModelsProcessed($count = 1)
375
-    {
376
-        $count = $this->getCountOfModelsProcessed() + (int) $count;
377
-        update_option(self::COUNT_OF_MODELS_PROCESSED, $count);
378
-    }
379
-
380
-
381
-    /**
382
-     * Retrieve the tracked number of models processed between requests.
383
-     *
384
-     * @return int
385
-     */
386
-    private function getCountOfModelsProcessed()
387
-    {
388
-        return (int) get_option(self::COUNT_OF_MODELS_PROCESSED, 0);
389
-    }
390
-
391
-
392
-    /**
393
-     * Returns the models that are left to process.
394
-     *
395
-     * @return array  an array of model class names.
396
-     */
397
-    private function getModelsToProcess()
398
-    {
399
-        if (empty($this->models_with_datetime_fields)) {
400
-            $this->models_with_datetime_fields = get_option(self::MODELS_TO_PROCESS_OPTION_KEY, array());
401
-        }
402
-        return $this->models_with_datetime_fields;
403
-    }
404
-
405
-
406
-    /**
407
-     * Used to record the offset that will be applied to dates and times for EE_Datetime_Field columns.
408
-     *
409
-     * @param float $offset
410
-     */
411
-    public static function updateOffset($offset)
412
-    {
413
-        update_option(self::OFFSET_TO_APPLY_OPTION_KEY, $offset);
414
-    }
415
-
416
-
417
-    /**
418
-     * Used to retrieve the saved offset that will be applied to dates and times for EE_Datetime_Field columns.
419
-     *
420
-     * @return float
421
-     */
422
-    public static function getOffset()
423
-    {
424
-        return (float) get_option(self::OFFSET_TO_APPLY_OPTION_KEY, 0);
425
-    }
426
-
427
-
428
-    /**
429
-     * Used to set the saved offset range start date.
430
-     *
431
-     * @param DbSafeDateTime|null $start_date
432
-     */
433
-    public static function updateStartDateRange(DbSafeDateTime $start_date = null)
434
-    {
435
-        $date_to_save = $start_date instanceof DbSafeDateTime
436
-            ? $start_date->format('U')
437
-            : '';
438
-        update_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE, $date_to_save);
439
-    }
440
-
441
-
442
-    /**
443
-     * Used to get the saved offset range start date.
444
-     *
445
-     * @return DbSafeDateTime|null
446
-     */
447
-    public static function getStartDateRange()
448
-    {
449
-        $start_date = get_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE, null);
450
-        try {
451
-            $datetime = DateTime::createFromFormat('U', $start_date, new DateTimeZone('UTC'));
452
-            $start_date = $datetime instanceof DateTime
453
-                ? DbSafeDateTime::createFromDateTime($datetime)
454
-                : null;
455
-        } catch (Exception $e) {
456
-            $start_date = null;
457
-        }
458
-        return $start_date;
459
-    }
460
-
461
-
462
-    /**
463
-     * Used to set the saved offset range end date.
464
-     *
465
-     * @param DbSafeDateTime|null $end_date
466
-     */
467
-    public static function updateEndDateRange(DbSafeDateTime $end_date = null)
468
-    {
469
-        $date_to_save = $end_date instanceof DbSafeDateTime
470
-            ? $end_date->format('U')
471
-            : '';
472
-        update_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE, $date_to_save);
473
-    }
474
-
475
-
476
-    /**
477
-     * Used to get the saved offset range end date.
478
-     *
479
-     * @return DbSafeDateTime|null
480
-     */
481
-    public static function getEndDateRange()
482
-    {
483
-        $end_date = get_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE, null);
484
-        try {
485
-            $datetime = DateTime::createFromFormat('U', $end_date, new DateTimeZone('UTC'));
486
-            $end_date = $datetime instanceof Datetime
487
-                ? DbSafeDateTime::createFromDateTime($datetime)
488
-                : null;
489
-        } catch (Exception $e) {
490
-            $end_date = null;
491
-        }
492
-        return $end_date;
493
-    }
27
+	/**
28
+	 * Key for the option used to track which models have been processed when doing the batches.
29
+	 */
30
+	const MODELS_TO_PROCESS_OPTION_KEY = 'ee_models_processed_for_datetime_offset_fix';
31
+
32
+
33
+	const COUNT_OF_MODELS_PROCESSED = 'ee_count_of_ee_models_processed_for_datetime_offset_fixed';
34
+
35
+	/**
36
+	 * Key for the option used to track what the current offset is that will be applied when this tool is executed.
37
+	 */
38
+	const OFFSET_TO_APPLY_OPTION_KEY = 'ee_datetime_offset_fix_offset_to_apply';
39
+
40
+
41
+	const OPTION_KEY_OFFSET_RANGE_START_DATE = 'ee_datetime_offset_start_date_range';
42
+
43
+
44
+	const OPTION_KEY_OFFSET_RANGE_END_DATE = 'ee_datetime_offset_end_date_range';
45
+
46
+
47
+	/**
48
+	 * String labelling the datetime offset fix type for change-log entries.
49
+	 */
50
+	const DATETIME_OFFSET_FIX_CHANGELOG_TYPE = 'datetime_offset_fix';
51
+
52
+
53
+	/**
54
+	 * String labelling a datetime offset fix error for change-log entries.
55
+	 */
56
+	const DATETIME_OFFSET_FIX_CHANGELOG_ERROR_TYPE = 'datetime_offset_fix_error';
57
+
58
+	/**
59
+	 * @var EEM_Base[]
60
+	 */
61
+	protected $models_with_datetime_fields = array();
62
+
63
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
64
+
65
+	/**
66
+	 * Performs any necessary setup for starting the job. This is also a good
67
+	 * place to setup the $job_arguments which will be used for subsequent HTTP requests
68
+	 * when continue_job will be called
69
+	 *
70
+	 * @param JobParameters $job_parameters
71
+	 * @return JobStepResponse
72
+	 * @throws EE_Error
73
+	 * @throws InvalidArgumentException
74
+	 * @throws InvalidDataTypeException
75
+	 * @throws InvalidInterfaceException
76
+	 */
77
+	public function create_job(JobParameters $job_parameters)
78
+	{
79
+		$models_with_datetime_fields = $this->getModelsWithDatetimeFields();
80
+		// we'll be doing each model as a batch.
81
+		$job_parameters->set_job_size(count($models_with_datetime_fields));
82
+		return new JobStepResponse(
83
+			$job_parameters,
84
+			esc_html__('Starting Datetime Offset Fix', 'event_espresso')
85
+		);
86
+	}
87
+
88
+	/**
89
+	 * Performs another step of the job
90
+	 *
91
+	 * @param JobParameters $job_parameters
92
+	 * @param int           $batch_size
93
+	 * @return JobStepResponse
94
+	 * @throws EE_Error
95
+	 * @throws InvalidArgumentException
96
+	 * @throws InvalidDataTypeException
97
+	 * @throws InvalidInterfaceException
98
+	 */
99
+	public function continue_job(JobParameters $job_parameters, $batch_size = 50)
100
+	{
101
+		$models_to_process = $this->getModelsWithDatetimeFields();
102
+		// let's pop off the a model and do the query to apply the offset.
103
+		$model_to_process = array_pop($models_to_process);
104
+		// update our record
105
+		$this->setModelsToProcess($models_to_process);
106
+		$this->processModel($model_to_process);
107
+		$this->updateCountOfModelsProcessed();
108
+		$job_parameters->set_units_processed($this->getCountOfModelsProcessed());
109
+		if (count($models_to_process) > 0) {
110
+			$job_parameters->set_status(JobParameters::status_continue);
111
+		} else {
112
+			$job_parameters->set_status(JobParameters::status_complete);
113
+		}
114
+		return new JobStepResponse(
115
+			$job_parameters,
116
+			sprintf(
117
+				esc_html__('Updated the offset for all datetime fields on the %s model.', 'event_espresso'),
118
+				$model_to_process
119
+			)
120
+		);
121
+	}
122
+
123
+	/**
124
+	 * Performs any clean-up logic when we know the job is completed
125
+	 *
126
+	 * @param JobParameters $job_parameters
127
+	 * @return JobStepResponse
128
+	 * @throws BatchRequestException
129
+	 */
130
+	public function cleanup_job(JobParameters $job_parameters)
131
+	{
132
+		// delete important saved options.
133
+		delete_option(self::MODELS_TO_PROCESS_OPTION_KEY);
134
+		delete_option(self::COUNT_OF_MODELS_PROCESSED);
135
+		delete_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE);
136
+		delete_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE);
137
+		return new JobStepResponse($job_parameters, esc_html__(
138
+			'Offset has been applied to all affected fields.',
139
+			'event_espresso'
140
+		));
141
+	}
142
+
143
+
144
+	/**
145
+	 * Contains the logic for processing a model and applying the datetime offset to affected fields on that model.
146
+	 *
147
+	 * @param string $model_class_name
148
+	 * @throws EE_Error
149
+	 */
150
+	protected function processModel($model_class_name)
151
+	{
152
+		global $wpdb;
153
+		/** @var EEM_Base $model */
154
+		$model = $model_class_name::instance();
155
+		$original_offset = self::getOffset();
156
+		$start_date_range = self::getStartDateRange();
157
+		$end_date_range = self::getEndDateRange();
158
+		$sql_date_function = $original_offset > 0 ? 'DATE_ADD' : 'DATE_SUB';
159
+		$offset = abs($original_offset) * 60;
160
+		$date_ranges = array();
161
+		// since some affected models might have two tables, we have to get our tables and set up a query for each table.
162
+		foreach ($model->get_tables() as $table) {
163
+			$query = 'UPDATE ' . $table->get_table_name();
164
+			$fields_affected = array();
165
+			$inner_query = array();
166
+			foreach ($model->_get_fields_for_table($table->get_table_alias()) as $model_field) {
167
+				if ($model_field instanceof EE_Datetime_Field) {
168
+					$inner_query[ $model_field->get_table_column() ] = $model_field->get_table_column() . ' = '
169
+																	   . $sql_date_function . '('
170
+																	   . $model_field->get_table_column()
171
+																	   . ", INTERVAL {$offset} MINUTE)";
172
+					$fields_affected[] = $model_field;
173
+				}
174
+			}
175
+			if (! $fields_affected) {
176
+				continue;
177
+			}
178
+			// do we do one query per column/field or one query for all fields on the model? It all depends on whether
179
+			// there is a date range applied or not.
180
+			if ($start_date_range instanceof DbSafeDateTime || $end_date_range instanceof DbSafeDateTime) {
181
+				$result = $this->doQueryForEachField($query, $inner_query, $start_date_range, $end_date_range);
182
+			} else {
183
+				$result = $this->doQueryForAllFields($query, $inner_query);
184
+			}
185
+
186
+			// record appropriate logs for the query
187
+			switch (true) {
188
+				case $result === false:
189
+					// record error.
190
+					$error_message = $wpdb->last_error;
191
+					// handle the edgecases where last_error might be empty.
192
+					if (! $error_message) {
193
+						$error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
194
+					}
195
+					$this->recordChangeLog($model, $original_offset, $table, $fields_affected, $error_message);
196
+					break;
197
+				case is_array($result) && ! empty($result):
198
+					foreach ($result as $field_name => $error_message) {
199
+						$this->recordChangeLog($model, $original_offset, $table, array($field_name), $error_message);
200
+					}
201
+					break;
202
+				default:
203
+					$this->recordChangeLog($model, $original_offset, $table, $fields_affected);
204
+			}
205
+		}
206
+	}
207
+
208
+
209
+	/**
210
+	 * Does the query on each $inner_query individually.
211
+	 *
212
+	 * @param string              $query
213
+	 * @param array               $inner_query
214
+	 * @param DbSafeDateTime|null $start_date_range
215
+	 * @param DbSafeDateTime|null $end_date_range
216
+	 * @return array  An array of any errors encountered and the fields they were for.
217
+	 */
218
+	private function doQueryForEachField($query, array $inner_query, $start_date_range, $end_date_range)
219
+	{
220
+		global $wpdb;
221
+		$errors = array();
222
+		foreach ($inner_query as $field_name => $field_query) {
223
+			$query_to_run = $query;
224
+			$where_conditions = array();
225
+			$query_to_run .= ' SET ' . $field_query;
226
+			if ($start_date_range instanceof DbSafeDateTime) {
227
+				$start_date = $start_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
228
+				$where_conditions[] = "{$field_name} > '{$start_date}'";
229
+			}
230
+			if ($end_date_range instanceof DbSafeDateTime) {
231
+				$end_date = $end_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
232
+				$where_conditions[] = "{$field_name} < '{$end_date}'";
233
+			}
234
+			if ($where_conditions) {
235
+				$query_to_run .= ' WHERE ' . implode(' AND ', $where_conditions);
236
+			}
237
+			$result = $wpdb->query($query_to_run);
238
+			if ($result === false) {
239
+				// record error.
240
+				$error_message = $wpdb->last_error;
241
+				// handle the edgecases where last_error might be empty.
242
+				if (! $error_message) {
243
+					$error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
244
+				}
245
+				$errors[ $field_name ] = $error_message;
246
+			}
247
+		}
248
+		return $errors;
249
+	}
250
+
251
+
252
+	/**
253
+	 * Performs the query for all fields within the inner_query
254
+	 *
255
+	 * @param string $query
256
+	 * @param array  $inner_query
257
+	 * @return false|int
258
+	 */
259
+	private function doQueryForAllFields($query, array $inner_query)
260
+	{
261
+		global $wpdb;
262
+		$query .= ' SET ' . implode(',', $inner_query);
263
+		return $wpdb->query($query);
264
+	}
265
+
266
+
267
+	/**
268
+	 * Records a changelog entry using the given information.
269
+	 *
270
+	 * @param EEM_Base              $model
271
+	 * @param float                 $offset
272
+	 * @param EE_Table_Base         $table
273
+	 * @param EE_Model_Field_Base[] $model_fields_affected
274
+	 * @param string                $error_message If present then there was an error so let's record that instead.
275
+	 * @throws EE_Error
276
+	 */
277
+	private function recordChangeLog(
278
+		EEM_Base $model,
279
+		$offset,
280
+		EE_Table_Base $table,
281
+		$model_fields_affected,
282
+		$error_message = ''
283
+	) {
284
+		// setup $fields list.
285
+		$fields = array();
286
+		/** @var EE_Datetime_Field $model_field */
287
+		foreach ($model_fields_affected as $model_field) {
288
+			if (! $model_field instanceof EE_Datetime_Field) {
289
+				continue;
290
+			}
291
+			$fields[] = $model_field->get_name();
292
+		}
293
+		// setup the message for the changelog entry.
294
+		$message = $error_message
295
+			? sprintf(
296
+				esc_html__(
297
+					'The %1$s table for the %2$s model did not have the offset of %3$f applied to its fields (%4$s), because of the following error:%5$s',
298
+					'event_espresso'
299
+				),
300
+				$table->get_table_name(),
301
+				$model->get_this_model_name(),
302
+				$offset,
303
+				implode(',', $fields),
304
+				$error_message
305
+			)
306
+			: sprintf(
307
+				esc_html__(
308
+					'The %1$s table for the %2$s model has had the offset of %3$f applied to its following fields: %4$s',
309
+					'event_espresso'
310
+				),
311
+				$table->get_table_name(),
312
+				$model->get_this_model_name(),
313
+				$offset,
314
+				implode(',', $fields)
315
+			);
316
+		// write to the log
317
+		$changelog = EE_Change_Log::new_instance(array(
318
+			'LOG_type'    => $error_message
319
+				? self::DATETIME_OFFSET_FIX_CHANGELOG_ERROR_TYPE
320
+				: self::DATETIME_OFFSET_FIX_CHANGELOG_TYPE,
321
+			'LOG_message' => $message,
322
+		));
323
+		$changelog->save();
324
+	}
325
+
326
+
327
+	/**
328
+	 * Returns an array of models that have datetime fields.
329
+	 * This array is added to a short lived transient cache to keep having to build this list to a minimum.
330
+	 *
331
+	 * @return array an array of model class names.
332
+	 * @throws EE_Error
333
+	 * @throws InvalidDataTypeException
334
+	 * @throws InvalidInterfaceException
335
+	 * @throws InvalidArgumentException
336
+	 */
337
+	private function getModelsWithDatetimeFields()
338
+	{
339
+		$this->getModelsToProcess();
340
+		if (! empty($this->models_with_datetime_fields)) {
341
+			return $this->models_with_datetime_fields;
342
+		}
343
+
344
+		$all_non_abstract_models = EE_Registry::instance()->non_abstract_db_models;
345
+		foreach ($all_non_abstract_models as $non_abstract_model) {
346
+			// get model instance
347
+			/** @var EEM_Base $non_abstract_model */
348
+			$non_abstract_model = $non_abstract_model::instance();
349
+			if ($non_abstract_model->get_a_field_of_type('EE_Datetime_Field') instanceof EE_Datetime_Field) {
350
+				$this->models_with_datetime_fields[] = get_class($non_abstract_model);
351
+			}
352
+		}
353
+		$this->setModelsToProcess($this->models_with_datetime_fields);
354
+		return $this->models_with_datetime_fields;
355
+	}
356
+
357
+
358
+	/**
359
+	 * This simply records the models that have been processed with our tracking option.
360
+	 *
361
+	 * @param array $models_to_set array of model class names.
362
+	 */
363
+	private function setModelsToProcess($models_to_set)
364
+	{
365
+		update_option(self::MODELS_TO_PROCESS_OPTION_KEY, $models_to_set);
366
+	}
367
+
368
+
369
+	/**
370
+	 * Used to keep track of how many models have been processed for the batch
371
+	 *
372
+	 * @param $count
373
+	 */
374
+	private function updateCountOfModelsProcessed($count = 1)
375
+	{
376
+		$count = $this->getCountOfModelsProcessed() + (int) $count;
377
+		update_option(self::COUNT_OF_MODELS_PROCESSED, $count);
378
+	}
379
+
380
+
381
+	/**
382
+	 * Retrieve the tracked number of models processed between requests.
383
+	 *
384
+	 * @return int
385
+	 */
386
+	private function getCountOfModelsProcessed()
387
+	{
388
+		return (int) get_option(self::COUNT_OF_MODELS_PROCESSED, 0);
389
+	}
390
+
391
+
392
+	/**
393
+	 * Returns the models that are left to process.
394
+	 *
395
+	 * @return array  an array of model class names.
396
+	 */
397
+	private function getModelsToProcess()
398
+	{
399
+		if (empty($this->models_with_datetime_fields)) {
400
+			$this->models_with_datetime_fields = get_option(self::MODELS_TO_PROCESS_OPTION_KEY, array());
401
+		}
402
+		return $this->models_with_datetime_fields;
403
+	}
404
+
405
+
406
+	/**
407
+	 * Used to record the offset that will be applied to dates and times for EE_Datetime_Field columns.
408
+	 *
409
+	 * @param float $offset
410
+	 */
411
+	public static function updateOffset($offset)
412
+	{
413
+		update_option(self::OFFSET_TO_APPLY_OPTION_KEY, $offset);
414
+	}
415
+
416
+
417
+	/**
418
+	 * Used to retrieve the saved offset that will be applied to dates and times for EE_Datetime_Field columns.
419
+	 *
420
+	 * @return float
421
+	 */
422
+	public static function getOffset()
423
+	{
424
+		return (float) get_option(self::OFFSET_TO_APPLY_OPTION_KEY, 0);
425
+	}
426
+
427
+
428
+	/**
429
+	 * Used to set the saved offset range start date.
430
+	 *
431
+	 * @param DbSafeDateTime|null $start_date
432
+	 */
433
+	public static function updateStartDateRange(DbSafeDateTime $start_date = null)
434
+	{
435
+		$date_to_save = $start_date instanceof DbSafeDateTime
436
+			? $start_date->format('U')
437
+			: '';
438
+		update_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE, $date_to_save);
439
+	}
440
+
441
+
442
+	/**
443
+	 * Used to get the saved offset range start date.
444
+	 *
445
+	 * @return DbSafeDateTime|null
446
+	 */
447
+	public static function getStartDateRange()
448
+	{
449
+		$start_date = get_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE, null);
450
+		try {
451
+			$datetime = DateTime::createFromFormat('U', $start_date, new DateTimeZone('UTC'));
452
+			$start_date = $datetime instanceof DateTime
453
+				? DbSafeDateTime::createFromDateTime($datetime)
454
+				: null;
455
+		} catch (Exception $e) {
456
+			$start_date = null;
457
+		}
458
+		return $start_date;
459
+	}
460
+
461
+
462
+	/**
463
+	 * Used to set the saved offset range end date.
464
+	 *
465
+	 * @param DbSafeDateTime|null $end_date
466
+	 */
467
+	public static function updateEndDateRange(DbSafeDateTime $end_date = null)
468
+	{
469
+		$date_to_save = $end_date instanceof DbSafeDateTime
470
+			? $end_date->format('U')
471
+			: '';
472
+		update_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE, $date_to_save);
473
+	}
474
+
475
+
476
+	/**
477
+	 * Used to get the saved offset range end date.
478
+	 *
479
+	 * @return DbSafeDateTime|null
480
+	 */
481
+	public static function getEndDateRange()
482
+	{
483
+		$end_date = get_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE, null);
484
+		try {
485
+			$datetime = DateTime::createFromFormat('U', $end_date, new DateTimeZone('UTC'));
486
+			$end_date = $datetime instanceof Datetime
487
+				? DbSafeDateTime::createFromDateTime($datetime)
488
+				: null;
489
+		} catch (Exception $e) {
490
+			$end_date = null;
491
+		}
492
+		return $end_date;
493
+	}
494 494
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -160,19 +160,19 @@  discard block
 block discarded – undo
160 160
         $date_ranges = array();
161 161
         // since some affected models might have two tables, we have to get our tables and set up a query for each table.
162 162
         foreach ($model->get_tables() as $table) {
163
-            $query = 'UPDATE ' . $table->get_table_name();
163
+            $query = 'UPDATE '.$table->get_table_name();
164 164
             $fields_affected = array();
165 165
             $inner_query = array();
166 166
             foreach ($model->_get_fields_for_table($table->get_table_alias()) as $model_field) {
167 167
                 if ($model_field instanceof EE_Datetime_Field) {
168
-                    $inner_query[ $model_field->get_table_column() ] = $model_field->get_table_column() . ' = '
169
-                                                                       . $sql_date_function . '('
168
+                    $inner_query[$model_field->get_table_column()] = $model_field->get_table_column().' = '
169
+                                                                       . $sql_date_function.'('
170 170
                                                                        . $model_field->get_table_column()
171 171
                                                                        . ", INTERVAL {$offset} MINUTE)";
172 172
                     $fields_affected[] = $model_field;
173 173
                 }
174 174
             }
175
-            if (! $fields_affected) {
175
+            if ( ! $fields_affected) {
176 176
                 continue;
177 177
             }
178 178
             // do we do one query per column/field or one query for all fields on the model? It all depends on whether
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
                     // record error.
190 190
                     $error_message = $wpdb->last_error;
191 191
                     // handle the edgecases where last_error might be empty.
192
-                    if (! $error_message) {
192
+                    if ( ! $error_message) {
193 193
                         $error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
194 194
                     }
195 195
                     $this->recordChangeLog($model, $original_offset, $table, $fields_affected, $error_message);
@@ -222,7 +222,7 @@  discard block
 block discarded – undo
222 222
         foreach ($inner_query as $field_name => $field_query) {
223 223
             $query_to_run = $query;
224 224
             $where_conditions = array();
225
-            $query_to_run .= ' SET ' . $field_query;
225
+            $query_to_run .= ' SET '.$field_query;
226 226
             if ($start_date_range instanceof DbSafeDateTime) {
227 227
                 $start_date = $start_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
228 228
                 $where_conditions[] = "{$field_name} > '{$start_date}'";
@@ -232,17 +232,17 @@  discard block
 block discarded – undo
232 232
                 $where_conditions[] = "{$field_name} < '{$end_date}'";
233 233
             }
234 234
             if ($where_conditions) {
235
-                $query_to_run .= ' WHERE ' . implode(' AND ', $where_conditions);
235
+                $query_to_run .= ' WHERE '.implode(' AND ', $where_conditions);
236 236
             }
237 237
             $result = $wpdb->query($query_to_run);
238 238
             if ($result === false) {
239 239
                 // record error.
240 240
                 $error_message = $wpdb->last_error;
241 241
                 // handle the edgecases where last_error might be empty.
242
-                if (! $error_message) {
242
+                if ( ! $error_message) {
243 243
                     $error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
244 244
                 }
245
-                $errors[ $field_name ] = $error_message;
245
+                $errors[$field_name] = $error_message;
246 246
             }
247 247
         }
248 248
         return $errors;
@@ -259,7 +259,7 @@  discard block
 block discarded – undo
259 259
     private function doQueryForAllFields($query, array $inner_query)
260 260
     {
261 261
         global $wpdb;
262
-        $query .= ' SET ' . implode(',', $inner_query);
262
+        $query .= ' SET '.implode(',', $inner_query);
263 263
         return $wpdb->query($query);
264 264
     }
265 265
 
@@ -285,7 +285,7 @@  discard block
 block discarded – undo
285 285
         $fields = array();
286 286
         /** @var EE_Datetime_Field $model_field */
287 287
         foreach ($model_fields_affected as $model_field) {
288
-            if (! $model_field instanceof EE_Datetime_Field) {
288
+            if ( ! $model_field instanceof EE_Datetime_Field) {
289 289
                 continue;
290 290
             }
291 291
             $fields[] = $model_field->get_name();
@@ -337,7 +337,7 @@  discard block
 block discarded – undo
337 337
     private function getModelsWithDatetimeFields()
338 338
     {
339 339
         $this->getModelsToProcess();
340
-        if (! empty($this->models_with_datetime_fields)) {
340
+        if ( ! empty($this->models_with_datetime_fields)) {
341 341
             return $this->models_with_datetime_fields;
342 342
         }
343 343
 
Please login to merge, or discard this patch.