Completed
Branch fix-react-asset-loading (dd608f)
by
unknown
69:50 queued 60:26
created
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/exceptions/ExceptionStackTraceDisplay.php 2 patches
Indentation   +285 added lines, -285 removed lines patch added patch discarded remove patch
@@ -19,52 +19,52 @@  discard block
 block discarded – undo
19 19
 {
20 20
 
21 21
 
22
-    /**
23
-     * @param Exception $exception
24
-     * @throws Exception
25
-     */
26
-    public function __construct(Exception $exception)
27
-    {
28
-        if (WP_DEBUG && ! defined('EE_TESTS_DIR')) {
29
-            $this->displayException($exception);
30
-        } else {
31
-            throw $exception;
32
-        }
33
-    }
22
+	/**
23
+	 * @param Exception $exception
24
+	 * @throws Exception
25
+	 */
26
+	public function __construct(Exception $exception)
27
+	{
28
+		if (WP_DEBUG && ! defined('EE_TESTS_DIR')) {
29
+			$this->displayException($exception);
30
+		} else {
31
+			throw $exception;
32
+		}
33
+	}
34 34
 
35 35
 
36
-    /**
37
-     * @access protected
38
-     * @param Exception $exception
39
-     * @throws ReflectionException
40
-     */
41
-    protected function displayException(Exception $exception)
42
-    {
43
-        $error_code = '';
44
-        $trace_details = '';
45
-        $time = time();
46
-        $trace = $exception->getTrace();
47
-        // get separate user and developer messages if they exist
48
-        $msg = explode('||', $exception->getMessage());
49
-        $user_msg = $msg[0];
50
-        $dev_msg = isset($msg[1]) ? $msg[1] : $msg[0];
51
-        $msg = WP_DEBUG ? $dev_msg : $user_msg;
52
-        // start gathering output
53
-        $output = $this->exceptionStyles();
54
-        $output .= '
36
+	/**
37
+	 * @access protected
38
+	 * @param Exception $exception
39
+	 * @throws ReflectionException
40
+	 */
41
+	protected function displayException(Exception $exception)
42
+	{
43
+		$error_code = '';
44
+		$trace_details = '';
45
+		$time = time();
46
+		$trace = $exception->getTrace();
47
+		// get separate user and developer messages if they exist
48
+		$msg = explode('||', $exception->getMessage());
49
+		$user_msg = $msg[0];
50
+		$dev_msg = isset($msg[1]) ? $msg[1] : $msg[0];
51
+		$msg = WP_DEBUG ? $dev_msg : $user_msg;
52
+		// start gathering output
53
+		$output = $this->exceptionStyles();
54
+		$output .= '
55 55
 <div id="ee-error-message" class="error">';
56
-        if (! WP_DEBUG) {
57
-            $output .= '
56
+		if (! WP_DEBUG) {
57
+			$output .= '
58 58
 	<p>';
59
-        }
60
-        // process trace info
61
-        if (empty($trace)) {
62
-            $trace_details .= __(
63
-                'Sorry, but no trace information was available for this exception.',
64
-                'event_espresso'
65
-            );
66
-        } else {
67
-            $trace_details .= '
59
+		}
60
+		// process trace info
61
+		if (empty($trace)) {
62
+			$trace_details .= __(
63
+				'Sorry, but no trace information was available for this exception.',
64
+				'event_espresso'
65
+			);
66
+		} else {
67
+			$trace_details .= '
68 68
 			<div id="ee-trace-details">
69 69
 			<table width="100%" border="0" cellpadding="5" cellspacing="0">
70 70
 				<tr>
@@ -72,263 +72,263 @@  discard block
 block discarded – undo
72 72
 					<th scope="col" align="right" style="width:3.5%;">Line</th>
73 73
 					<th scope="col" align="left" style="width:40%;">File</th>
74 74
 					<th scope="col" align="left">' . __('Class', 'event_espresso') . '->'
75
-                              . __(
76
-                                  'Method( arguments )',
77
-                                  'event_espresso'
78
-                              ) . '</th>
75
+							  . __(
76
+								  'Method( arguments )',
77
+								  'event_espresso'
78
+							  ) . '</th>
79 79
 				</tr>';
80
-            $last_on_stack = count($trace) - 1;
81
-            // reverse array so that stack is in proper chronological order
82
-            $sorted_trace = array_reverse($trace);
83
-            foreach ($sorted_trace as $nmbr => $trace) {
84
-                $file = isset($trace['file']) ? $trace['file'] : '';
85
-                $class = isset($trace['class']) ? $trace['class'] : '';
86
-                $type = isset($trace['type']) ? $trace['type'] : '';
87
-                $function = isset($trace['function']) ? $trace['function'] : '';
88
-                $args = isset($trace['args']) ? $this->_convert_args_to_string($trace['args']) : '';
89
-                $args = isset($trace['args']) && count($trace['args']) > 4 ? ' <br />' . $args . '<br />' : $args;
90
-                $line = isset($trace['line']) ? $trace['line'] : '';
91
-                $zebra = $nmbr % 2 !== 0 ? ' odd' : '';
92
-                if (empty($file) && ! empty($class)) {
93
-                    $a = new ReflectionClass($class);
94
-                    $file = $a->getFileName();
95
-                    if (empty($line) && ! empty($function)) {
96
-                        try {
97
-                            // if $function is a closure, this throws an exception
98
-                            $b = new ReflectionMethod($class, $function);
99
-                            $line = $b->getStartLine();
100
-                        } catch (Exception $closure_exception) {
101
-                            $line = 'unknown';
102
-                        }
103
-                    }
104
-                }
105
-                if ($nmbr === $last_on_stack) {
106
-                    $file = $exception->getFile() !== '' ? $exception->getFile() : $file;
107
-                    $line = $exception->getLine() !== '' ? $exception->getLine() : $line;
108
-                    $error_code = $this->generate_error_code($file, $trace['function'], $line);
109
-                }
110
-                $file = \EEH_File::standardise_directory_separators($file);
111
-                $nmbr = ! empty($nmbr) ? $nmbr : '&nbsp;';
112
-                $line = ! empty($line) ? $line : '&nbsp;';
113
-                $file = ! empty($file) ? $file : '&nbsp;';
114
-                $class_display = ! empty($class) ? $class : '';
115
-                $type = ! empty($type) ? $type : '';
116
-                $function = ! empty($function) ? $function : '';
117
-                $args = ! empty($args) ? '( ' . $args . ' )' : '()';
118
-                $trace_details .= '
80
+			$last_on_stack = count($trace) - 1;
81
+			// reverse array so that stack is in proper chronological order
82
+			$sorted_trace = array_reverse($trace);
83
+			foreach ($sorted_trace as $nmbr => $trace) {
84
+				$file = isset($trace['file']) ? $trace['file'] : '';
85
+				$class = isset($trace['class']) ? $trace['class'] : '';
86
+				$type = isset($trace['type']) ? $trace['type'] : '';
87
+				$function = isset($trace['function']) ? $trace['function'] : '';
88
+				$args = isset($trace['args']) ? $this->_convert_args_to_string($trace['args']) : '';
89
+				$args = isset($trace['args']) && count($trace['args']) > 4 ? ' <br />' . $args . '<br />' : $args;
90
+				$line = isset($trace['line']) ? $trace['line'] : '';
91
+				$zebra = $nmbr % 2 !== 0 ? ' odd' : '';
92
+				if (empty($file) && ! empty($class)) {
93
+					$a = new ReflectionClass($class);
94
+					$file = $a->getFileName();
95
+					if (empty($line) && ! empty($function)) {
96
+						try {
97
+							// if $function is a closure, this throws an exception
98
+							$b = new ReflectionMethod($class, $function);
99
+							$line = $b->getStartLine();
100
+						} catch (Exception $closure_exception) {
101
+							$line = 'unknown';
102
+						}
103
+					}
104
+				}
105
+				if ($nmbr === $last_on_stack) {
106
+					$file = $exception->getFile() !== '' ? $exception->getFile() : $file;
107
+					$line = $exception->getLine() !== '' ? $exception->getLine() : $line;
108
+					$error_code = $this->generate_error_code($file, $trace['function'], $line);
109
+				}
110
+				$file = \EEH_File::standardise_directory_separators($file);
111
+				$nmbr = ! empty($nmbr) ? $nmbr : '&nbsp;';
112
+				$line = ! empty($line) ? $line : '&nbsp;';
113
+				$file = ! empty($file) ? $file : '&nbsp;';
114
+				$class_display = ! empty($class) ? $class : '';
115
+				$type = ! empty($type) ? $type : '';
116
+				$function = ! empty($function) ? $function : '';
117
+				$args = ! empty($args) ? '( ' . $args . ' )' : '()';
118
+				$trace_details .= '
119 119
 					<tr>
120 120
 						<td align="right" valign="top" class="'
121
-                                  . $zebra
122
-                                  . '">'
123
-                                  . $nmbr
124
-                                  . '</td>
121
+								  . $zebra
122
+								  . '">'
123
+								  . $nmbr
124
+								  . '</td>
125 125
 						<td align="right" valign="top" class="'
126
-                                  . $zebra
127
-                                  . '">'
128
-                                  . $line
129
-                                  . '</td>
126
+								  . $zebra
127
+								  . '">'
128
+								  . $line
129
+								  . '</td>
130 130
 						<td align="left" valign="top" class="'
131
-                                  . $zebra
132
-                                  . '">'
133
-                                  . $file
134
-                                  . '</td>
131
+								  . $zebra
132
+								  . '">'
133
+								  . $file
134
+								  . '</td>
135 135
 						<td align="left" valign="top" class="'
136
-                                  . $zebra
137
-                                  . '">'
138
-                                  . $class_display
139
-                                  . $type
140
-                                  . $function
141
-                                  . $args
142
-                                  . '</td>
136
+								  . $zebra
137
+								  . '">'
138
+								  . $class_display
139
+								  . $type
140
+								  . $function
141
+								  . $args
142
+								  . '</td>
143 143
 					</tr>';
144
-            }
145
-            $trace_details .= '
144
+			}
145
+			$trace_details .= '
146 146
 			 </table>
147 147
 			</div>';
148
-        }
149
-        $code = $exception->getCode() ? $exception->getCode() : $error_code;
150
-        // add generic non-identifying messages for non-privileged users
151
-        if (! WP_DEBUG) {
152
-            $output .= '<span class="ee-error-user-msg-spn">'
153
-                       . trim($msg)
154
-                       . '</span> &nbsp; <sup>'
155
-                       . $code
156
-                       . '</sup><br />';
157
-        } else {
158
-            // or helpful developer messages if debugging is on
159
-            $output .= '
148
+		}
149
+		$code = $exception->getCode() ? $exception->getCode() : $error_code;
150
+		// add generic non-identifying messages for non-privileged users
151
+		if (! WP_DEBUG) {
152
+			$output .= '<span class="ee-error-user-msg-spn">'
153
+					   . trim($msg)
154
+					   . '</span> &nbsp; <sup>'
155
+					   . $code
156
+					   . '</sup><br />';
157
+		} else {
158
+			// or helpful developer messages if debugging is on
159
+			$output .= '
160 160
 		<div class="ee-error-dev-msg-dv">
161 161
 			<p class="ee-error-dev-msg-pg">
162 162
 				'
163
-                       . sprintf(
164
-                           __('%1$sAn %2$s was thrown!%3$s code: %4$s', 'event_espresso'),
165
-                           '<strong class="ee-error-dev-msg-str">',
166
-                           get_class($exception),
167
-                           '</strong>  &nbsp; <span>',
168
-                           $code . '</span>'
169
-                       )
170
-                       . '<br />
163
+					   . sprintf(
164
+						   __('%1$sAn %2$s was thrown!%3$s code: %4$s', 'event_espresso'),
165
+						   '<strong class="ee-error-dev-msg-str">',
166
+						   get_class($exception),
167
+						   '</strong>  &nbsp; <span>',
168
+						   $code . '</span>'
169
+					   )
170
+					   . '<br />
171 171
 				<span class="big-text">"'
172
-                       . trim($msg)
173
-                       . '"</span><br/>
172
+					   . trim($msg)
173
+					   . '"</span><br/>
174 174
 				<a id="display-ee-error-trace-1'
175
-                       . $time
176
-                       . '" class="display-ee-error-trace-lnk small-text" rel="ee-error-trace-1'
177
-                       . $time
178
-                       . '">
175
+					   . $time
176
+					   . '" class="display-ee-error-trace-lnk small-text" rel="ee-error-trace-1'
177
+					   . $time
178
+					   . '">
179 179
 					'
180
-                       . __('click to view backtrace and class/method details', 'event_espresso')
181
-                       . '
180
+					   . __('click to view backtrace and class/method details', 'event_espresso')
181
+					   . '
182 182
 				</a><br />
183 183
 				'
184
-                       . $exception->getFile()
185
-                       . sprintf(
186
-                           __('%1$s( line no: %2$s )%3$s', 'event_espresso'),
187
-                           ' &nbsp; <span class="small-text lt-grey-text">',
188
-                           $exception->getLine(),
189
-                           '</span>'
190
-                       )
191
-                       . '
184
+					   . $exception->getFile()
185
+					   . sprintf(
186
+						   __('%1$s( line no: %2$s )%3$s', 'event_espresso'),
187
+						   ' &nbsp; <span class="small-text lt-grey-text">',
188
+						   $exception->getLine(),
189
+						   '</span>'
190
+					   )
191
+					   . '
192 192
 			</p>
193 193
 			<div id="ee-error-trace-1'
194
-                       . $time
195
-                       . '-dv" class="ee-error-trace-dv" style="display: none;">
194
+					   . $time
195
+					   . '-dv" class="ee-error-trace-dv" style="display: none;">
196 196
 				'
197
-                       . $trace_details;
198
-            if (! empty($class)) {
199
-                $output .= '
197
+					   . $trace_details;
198
+			if (! empty($class)) {
199
+				$output .= '
200 200
 				<div style="padding:3px; margin:0 0 1em; border:1px solid #999; background:#fff; border-radius:3px;">
201 201
 					<div style="padding:1em 2em; border:1px solid #999; background:#fcfcfc;">
202 202
 						<h3>' . __('Class Details', 'event_espresso') . '</h3>';
203
-                $a = new ReflectionClass($class);
204
-                $output .= '
203
+				$a = new ReflectionClass($class);
204
+				$output .= '
205 205
 						<pre>' . $a . '</pre>
206 206
 					</div>
207 207
 				</div>';
208
-            }
209
-            $output .= '
208
+			}
209
+			$output .= '
210 210
 			</div>
211 211
 		</div>
212 212
 		<br />';
213
-        }
214
-        // remove last linebreak
215
-        $output = substr($output, 0, -6);
216
-        if (! WP_DEBUG) {
217
-            $output .= '
213
+		}
214
+		// remove last linebreak
215
+		$output = substr($output, 0, -6);
216
+		if (! WP_DEBUG) {
217
+			$output .= '
218 218
 	</p>';
219
-        }
220
-        $output .= '
219
+		}
220
+		$output .= '
221 221
 </div>';
222
-        $output .= $this->printScripts(true);
223
-        if (defined('DOING_AJAX')) {
224
-            echo wp_json_encode(array('error' => $output));
225
-            exit();
226
-        }
227
-        echo $output;
228
-    }
222
+		$output .= $this->printScripts(true);
223
+		if (defined('DOING_AJAX')) {
224
+			echo wp_json_encode(array('error' => $output));
225
+			exit();
226
+		}
227
+		echo $output;
228
+	}
229 229
 
230 230
 
231
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
232
-    // phpcs:disable PSR2.Methods.MethodDeclaration.Underscore
231
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
232
+	// phpcs:disable PSR2.Methods.MethodDeclaration.Underscore
233 233
 
234
-    /**
235
-     * generate string from exception trace args
236
-     *
237
-     * @param array $arguments
238
-     * @param int   $indent
239
-     * @param bool  $array
240
-     * @return string
241
-     */
242
-    private function _convert_args_to_string($arguments = array(), $indent = 0, $array = false)
243
-    {
244
-        $args = array();
245
-        $args_count = count($arguments);
246
-        if ($args_count > 2) {
247
-            $indent++;
248
-            $args[] = '<br />';
249
-        }
250
-        $x = 0;
251
-        foreach ($arguments as $arg) {
252
-            $x++;
253
-            for ($i = 0; $i < $indent; $i++) {
254
-                $args[] = ' &nbsp;&nbsp; ';
255
-            }
256
-            if (is_string($arg)) {
257
-                if (! $array && strlen($arg) > 75) {
258
-                    $args[] = '<br />';
259
-                    for ($i = 0; $i <= $indent; $i++) {
260
-                        $args[] = ' &nbsp;&nbsp; ';
261
-                    }
262
-                    $args[] = "'" . $arg . "'<br />";
263
-                } else {
264
-                    $args[] = " '" . $arg . "'";
265
-                }
266
-            } elseif (is_array($arg)) {
267
-                $arg_count = count($arg);
268
-                if ($arg_count > 2) {
269
-                    $indent++;
270
-                    $args[] = ' array(' . $this->_convert_args_to_string($arg, $indent, true) . ')';
271
-                    $indent--;
272
-                } elseif ($arg_count === 0) {
273
-                    $args[] = ' array()';
274
-                } else {
275
-                    $args[] = ' array( ' . $this->_convert_args_to_string($arg) . ' )';
276
-                }
277
-            } elseif ($arg === null) {
278
-                $args[] = ' null';
279
-            } elseif (is_bool($arg)) {
280
-                $args[] = $arg ? ' true' : ' false';
281
-            } elseif (is_object($arg)) {
282
-                $args[] = get_class($arg);
283
-            } elseif (is_resource($arg)) {
284
-                $args[] = get_resource_type($arg);
285
-            } else {
286
-                $args[] = $arg;
287
-            }
288
-            if ($x === $args_count) {
289
-                if ($args_count > 2) {
290
-                    $args[] = '<br />';
291
-                    $indent--;
292
-                    for ($i = 1; $i < $indent; $i++) {
293
-                        $args[] = ' &nbsp;&nbsp; ';
294
-                    }
295
-                }
296
-            } else {
297
-                $args[] = $args_count > 2 ? ',<br />' : ', ';
298
-            }
299
-        }
300
-        return implode('', $args);
301
-    }
234
+	/**
235
+	 * generate string from exception trace args
236
+	 *
237
+	 * @param array $arguments
238
+	 * @param int   $indent
239
+	 * @param bool  $array
240
+	 * @return string
241
+	 */
242
+	private function _convert_args_to_string($arguments = array(), $indent = 0, $array = false)
243
+	{
244
+		$args = array();
245
+		$args_count = count($arguments);
246
+		if ($args_count > 2) {
247
+			$indent++;
248
+			$args[] = '<br />';
249
+		}
250
+		$x = 0;
251
+		foreach ($arguments as $arg) {
252
+			$x++;
253
+			for ($i = 0; $i < $indent; $i++) {
254
+				$args[] = ' &nbsp;&nbsp; ';
255
+			}
256
+			if (is_string($arg)) {
257
+				if (! $array && strlen($arg) > 75) {
258
+					$args[] = '<br />';
259
+					for ($i = 0; $i <= $indent; $i++) {
260
+						$args[] = ' &nbsp;&nbsp; ';
261
+					}
262
+					$args[] = "'" . $arg . "'<br />";
263
+				} else {
264
+					$args[] = " '" . $arg . "'";
265
+				}
266
+			} elseif (is_array($arg)) {
267
+				$arg_count = count($arg);
268
+				if ($arg_count > 2) {
269
+					$indent++;
270
+					$args[] = ' array(' . $this->_convert_args_to_string($arg, $indent, true) . ')';
271
+					$indent--;
272
+				} elseif ($arg_count === 0) {
273
+					$args[] = ' array()';
274
+				} else {
275
+					$args[] = ' array( ' . $this->_convert_args_to_string($arg) . ' )';
276
+				}
277
+			} elseif ($arg === null) {
278
+				$args[] = ' null';
279
+			} elseif (is_bool($arg)) {
280
+				$args[] = $arg ? ' true' : ' false';
281
+			} elseif (is_object($arg)) {
282
+				$args[] = get_class($arg);
283
+			} elseif (is_resource($arg)) {
284
+				$args[] = get_resource_type($arg);
285
+			} else {
286
+				$args[] = $arg;
287
+			}
288
+			if ($x === $args_count) {
289
+				if ($args_count > 2) {
290
+					$args[] = '<br />';
291
+					$indent--;
292
+					for ($i = 1; $i < $indent; $i++) {
293
+						$args[] = ' &nbsp;&nbsp; ';
294
+					}
295
+				}
296
+			} else {
297
+				$args[] = $args_count > 2 ? ',<br />' : ', ';
298
+			}
299
+		}
300
+		return implode('', $args);
301
+	}
302 302
 
303 303
 
304
-    /**
305
-     * create error code from filepath, function name,
306
-     * and line number where exception or error was thrown
307
-     *
308
-     * @access protected
309
-     * @param string $file
310
-     * @param string $func
311
-     * @param string $line
312
-     * @return string
313
-     */
314
-    protected function generate_error_code($file = '', $func = '', $line = '')
315
-    {
316
-        $file_bits = explode('.', basename($file));
317
-        $error_code = ! empty($file_bits[0]) ? $file_bits[0] : '';
318
-        $error_code .= ! empty($func) ? ' - ' . $func : '';
319
-        $error_code .= ! empty($line) ? ' - ' . $line : '';
320
-        return $error_code;
321
-    }
304
+	/**
305
+	 * create error code from filepath, function name,
306
+	 * and line number where exception or error was thrown
307
+	 *
308
+	 * @access protected
309
+	 * @param string $file
310
+	 * @param string $func
311
+	 * @param string $line
312
+	 * @return string
313
+	 */
314
+	protected function generate_error_code($file = '', $func = '', $line = '')
315
+	{
316
+		$file_bits = explode('.', basename($file));
317
+		$error_code = ! empty($file_bits[0]) ? $file_bits[0] : '';
318
+		$error_code .= ! empty($func) ? ' - ' . $func : '';
319
+		$error_code .= ! empty($line) ? ' - ' . $line : '';
320
+		return $error_code;
321
+	}
322 322
 
323 323
 
324
-    /**
325
-     * _exception_styles
326
-     *
327
-     * @return string
328
-     */
329
-    private function exceptionStyles()
330
-    {
331
-        return '
324
+	/**
325
+	 * _exception_styles
326
+	 *
327
+	 * @return string
328
+	 */
329
+	private function exceptionStyles()
330
+	{
331
+		return '
332 332
 <style type="text/css">
333 333
 	#ee-error-message {
334 334
 		max-width:90% !important;
@@ -385,29 +385,29 @@  discard block
 block discarded – undo
385 385
 		color: #999;
386 386
 	}
387 387
 </style>';
388
-    }
388
+	}
389 389
 
390 390
 
391
-    /**
392
-     * _print_scripts
393
-     *
394
-     * @param bool $force_print
395
-     * @return string
396
-     */
397
-    private function printScripts($force_print = false)
398
-    {
399
-        if (! $force_print && (did_action('admin_enqueue_scripts') || did_action('wp_enqueue_scripts'))) {
400
-            if (wp_script_is('ee_error_js', 'enqueued')) {
401
-                return '';
402
-            }
403
-            if (wp_script_is('ee_error_js', 'registered')) {
404
-                wp_enqueue_style('espresso_default');
405
-                wp_enqueue_style('espresso_custom_css');
406
-                wp_enqueue_script('ee_error_js');
407
-                wp_localize_script('ee_error_js', 'ee_settings', array('wp_debug' => WP_DEBUG));
408
-            }
409
-        } else {
410
-            return '
391
+	/**
392
+	 * _print_scripts
393
+	 *
394
+	 * @param bool $force_print
395
+	 * @return string
396
+	 */
397
+	private function printScripts($force_print = false)
398
+	{
399
+		if (! $force_print && (did_action('admin_enqueue_scripts') || did_action('wp_enqueue_scripts'))) {
400
+			if (wp_script_is('ee_error_js', 'enqueued')) {
401
+				return '';
402
+			}
403
+			if (wp_script_is('ee_error_js', 'registered')) {
404
+				wp_enqueue_style('espresso_default');
405
+				wp_enqueue_style('espresso_custom_css');
406
+				wp_enqueue_script('ee_error_js');
407
+				wp_localize_script('ee_error_js', 'ee_settings', array('wp_debug' => WP_DEBUG));
408
+			}
409
+		} else {
410
+			return '
411 411
 <script>
412 412
 /* <![CDATA[ */
413 413
 var ee_settings = {"wp_debug":"' . WP_DEBUG . '"};
@@ -417,7 +417,7 @@  discard block
 block discarded – undo
417 417
 <script src="' . EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js' . '?ver=' . espresso_version() . '" type="text/javascript"></script>
418 418
 <script src="' . EE_GLOBAL_ASSETS_URL . 'scripts/EE_Error.js' . '?ver=' . espresso_version() . '" type="text/javascript"></script>
419 419
 ';
420
-        }
421
-        return '';
422
-    }
420
+		}
421
+		return '';
422
+	}
423 423
 }
Please login to merge, or discard this patch.
Spacing   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
         $output = $this->exceptionStyles();
54 54
         $output .= '
55 55
 <div id="ee-error-message" class="error">';
56
-        if (! WP_DEBUG) {
56
+        if ( ! WP_DEBUG) {
57 57
             $output .= '
58 58
 	<p>';
59 59
         }
@@ -71,11 +71,11 @@  discard block
 block discarded – undo
71 71
 					<th scope="col" align="right" style="width:2.5%;">#</th>
72 72
 					<th scope="col" align="right" style="width:3.5%;">Line</th>
73 73
 					<th scope="col" align="left" style="width:40%;">File</th>
74
-					<th scope="col" align="left">' . __('Class', 'event_espresso') . '->'
74
+					<th scope="col" align="left">' . __('Class', 'event_espresso').'->'
75 75
                               . __(
76 76
                                   'Method( arguments )',
77 77
                                   'event_espresso'
78
-                              ) . '</th>
78
+                              ).'</th>
79 79
 				</tr>';
80 80
             $last_on_stack = count($trace) - 1;
81 81
             // reverse array so that stack is in proper chronological order
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
                 $type = isset($trace['type']) ? $trace['type'] : '';
87 87
                 $function = isset($trace['function']) ? $trace['function'] : '';
88 88
                 $args = isset($trace['args']) ? $this->_convert_args_to_string($trace['args']) : '';
89
-                $args = isset($trace['args']) && count($trace['args']) > 4 ? ' <br />' . $args . '<br />' : $args;
89
+                $args = isset($trace['args']) && count($trace['args']) > 4 ? ' <br />'.$args.'<br />' : $args;
90 90
                 $line = isset($trace['line']) ? $trace['line'] : '';
91 91
                 $zebra = $nmbr % 2 !== 0 ? ' odd' : '';
92 92
                 if (empty($file) && ! empty($class)) {
@@ -114,7 +114,7 @@  discard block
 block discarded – undo
114 114
                 $class_display = ! empty($class) ? $class : '';
115 115
                 $type = ! empty($type) ? $type : '';
116 116
                 $function = ! empty($function) ? $function : '';
117
-                $args = ! empty($args) ? '( ' . $args . ' )' : '()';
117
+                $args = ! empty($args) ? '( '.$args.' )' : '()';
118 118
                 $trace_details .= '
119 119
 					<tr>
120 120
 						<td align="right" valign="top" class="'
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
         }
149 149
         $code = $exception->getCode() ? $exception->getCode() : $error_code;
150 150
         // add generic non-identifying messages for non-privileged users
151
-        if (! WP_DEBUG) {
151
+        if ( ! WP_DEBUG) {
152 152
             $output .= '<span class="ee-error-user-msg-spn">'
153 153
                        . trim($msg)
154 154
                        . '</span> &nbsp; <sup>'
@@ -165,7 +165,7 @@  discard block
 block discarded – undo
165 165
                            '<strong class="ee-error-dev-msg-str">',
166 166
                            get_class($exception),
167 167
                            '</strong>  &nbsp; <span>',
168
-                           $code . '</span>'
168
+                           $code.'</span>'
169 169
                        )
170 170
                        . '<br />
171 171
 				<span class="big-text">"'
@@ -195,14 +195,14 @@  discard block
 block discarded – undo
195 195
                        . '-dv" class="ee-error-trace-dv" style="display: none;">
196 196
 				'
197 197
                        . $trace_details;
198
-            if (! empty($class)) {
198
+            if ( ! empty($class)) {
199 199
                 $output .= '
200 200
 				<div style="padding:3px; margin:0 0 1em; border:1px solid #999; background:#fff; border-radius:3px;">
201 201
 					<div style="padding:1em 2em; border:1px solid #999; background:#fcfcfc;">
202
-						<h3>' . __('Class Details', 'event_espresso') . '</h3>';
202
+						<h3>' . __('Class Details', 'event_espresso').'</h3>';
203 203
                 $a = new ReflectionClass($class);
204 204
                 $output .= '
205
-						<pre>' . $a . '</pre>
205
+						<pre>' . $a.'</pre>
206 206
 					</div>
207 207
 				</div>';
208 208
             }
@@ -213,7 +213,7 @@  discard block
 block discarded – undo
213 213
         }
214 214
         // remove last linebreak
215 215
         $output = substr($output, 0, -6);
216
-        if (! WP_DEBUG) {
216
+        if ( ! WP_DEBUG) {
217 217
             $output .= '
218 218
 	</p>';
219 219
         }
@@ -254,25 +254,25 @@  discard block
 block discarded – undo
254 254
                 $args[] = ' &nbsp;&nbsp; ';
255 255
             }
256 256
             if (is_string($arg)) {
257
-                if (! $array && strlen($arg) > 75) {
257
+                if ( ! $array && strlen($arg) > 75) {
258 258
                     $args[] = '<br />';
259 259
                     for ($i = 0; $i <= $indent; $i++) {
260 260
                         $args[] = ' &nbsp;&nbsp; ';
261 261
                     }
262
-                    $args[] = "'" . $arg . "'<br />";
262
+                    $args[] = "'".$arg."'<br />";
263 263
                 } else {
264
-                    $args[] = " '" . $arg . "'";
264
+                    $args[] = " '".$arg."'";
265 265
                 }
266 266
             } elseif (is_array($arg)) {
267 267
                 $arg_count = count($arg);
268 268
                 if ($arg_count > 2) {
269 269
                     $indent++;
270
-                    $args[] = ' array(' . $this->_convert_args_to_string($arg, $indent, true) . ')';
270
+                    $args[] = ' array('.$this->_convert_args_to_string($arg, $indent, true).')';
271 271
                     $indent--;
272 272
                 } elseif ($arg_count === 0) {
273 273
                     $args[] = ' array()';
274 274
                 } else {
275
-                    $args[] = ' array( ' . $this->_convert_args_to_string($arg) . ' )';
275
+                    $args[] = ' array( '.$this->_convert_args_to_string($arg).' )';
276 276
                 }
277 277
             } elseif ($arg === null) {
278 278
                 $args[] = ' null';
@@ -315,8 +315,8 @@  discard block
 block discarded – undo
315 315
     {
316 316
         $file_bits = explode('.', basename($file));
317 317
         $error_code = ! empty($file_bits[0]) ? $file_bits[0] : '';
318
-        $error_code .= ! empty($func) ? ' - ' . $func : '';
319
-        $error_code .= ! empty($line) ? ' - ' . $line : '';
318
+        $error_code .= ! empty($func) ? ' - '.$func : '';
319
+        $error_code .= ! empty($line) ? ' - '.$line : '';
320 320
         return $error_code;
321 321
     }
322 322
 
@@ -396,7 +396,7 @@  discard block
 block discarded – undo
396 396
      */
397 397
     private function printScripts($force_print = false)
398 398
     {
399
-        if (! $force_print && (did_action('admin_enqueue_scripts') || did_action('wp_enqueue_scripts'))) {
399
+        if ( ! $force_print && (did_action('admin_enqueue_scripts') || did_action('wp_enqueue_scripts'))) {
400 400
             if (wp_script_is('ee_error_js', 'enqueued')) {
401 401
                 return '';
402 402
             }
@@ -410,12 +410,12 @@  discard block
 block discarded – undo
410 410
             return '
411 411
 <script>
412 412
 /* <![CDATA[ */
413
-var ee_settings = {"wp_debug":"' . WP_DEBUG . '"};
413
+var ee_settings = {"wp_debug":"' . WP_DEBUG.'"};
414 414
 /* ]]> */
415 415
 </script>
416
-<script src="' . includes_url() . 'js/jquery/jquery.js" type="text/javascript"></script>
417
-<script src="' . EE_GLOBAL_ASSETS_URL . 'scripts/espresso_core.js' . '?ver=' . espresso_version() . '" type="text/javascript"></script>
418
-<script src="' . EE_GLOBAL_ASSETS_URL . 'scripts/EE_Error.js' . '?ver=' . espresso_version() . '" type="text/javascript"></script>
416
+<script src="' . includes_url().'js/jquery/jquery.js" type="text/javascript"></script>
417
+<script src="' . EE_GLOBAL_ASSETS_URL.'scripts/espresso_core.js'.'?ver='.espresso_version().'" type="text/javascript"></script>
418
+<script src="' . EE_GLOBAL_ASSETS_URL.'scripts/EE_Error.js'.'?ver='.espresso_version().'" type="text/javascript"></script>
419 419
 ';
420 420
         }
421 421
         return '';
Please login to merge, or discard this patch.
core/services/cache/PostRelatedCacheManager.php 2 patches
Indentation   +117 added lines, -117 removed lines patch added patch discarded remove patch
@@ -13,121 +13,121 @@
 block discarded – undo
13 13
 class PostRelatedCacheManager extends BasicCacheManager
14 14
 {
15 15
 
16
-    /**
17
-     * @type string
18
-     */
19
-    const POST_CACHE_PREFIX = 'ee_cache_post_';
20
-
21
-    /**
22
-     * wp-option option_name for tracking post related cache
23
-     *
24
-     * @type string
25
-     */
26
-    const POST_CACHE_OPTIONS_KEY = 'ee_post_cache';
27
-
28
-
29
-    /**
30
-     * PostRelatedCacheManager constructor.
31
-     *
32
-     * @param CacheStorageInterface $cache_storage
33
-     */
34
-    public function __construct(CacheStorageInterface $cache_storage)
35
-    {
36
-        parent::__construct($cache_storage);
37
-        add_action('save_post', array($this, 'clearPostRelatedCache'));
38
-    }
39
-
40
-
41
-    /**
42
-     * returns a string that will be prepended to all cache identifiers
43
-     *
44
-     * @return string
45
-     */
46
-    public function cachePrefix()
47
-    {
48
-        return PostRelatedCacheManager::POST_CACHE_PREFIX;
49
-    }
50
-
51
-
52
-    /**
53
-     * @return array
54
-     */
55
-    protected function getPostRelatedCache()
56
-    {
57
-        $post_related_cache = get_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, array());
58
-        // verify that cached data was not truncated or corrupted and no longer an array
59
-        if (! is_array($post_related_cache)) {
60
-            // uh-oh... let's get rid of any transients using our cache prefix
61
-            $this->clear(PostRelatedCacheManager::CACHE_PREFIX);
62
-            // then update the post related cache tracking option
63
-            $post_related_cache = array();
64
-            $this->updatePostRelatedCache($post_related_cache);
65
-        }
66
-        return $post_related_cache;
67
-    }
68
-
69
-
70
-    /**
71
-     * @param array $post_related_cache
72
-     */
73
-    protected function updatePostRelatedCache(array $post_related_cache = array())
74
-    {
75
-        update_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, $post_related_cache);
76
-    }
77
-
78
-
79
-    /**
80
-     * If you are caching content that pertains to a Post of any type,
81
-     * then it is recommended to pass the post id and cache id prefix to this method
82
-     * so that it can be added to the post related cache tracking.
83
-     * Then, whenever that post is updated, the cache will automatically be deleted,
84
-     * which helps to ensure that outdated cache content will not be served
85
-     *
86
-     * @param int    $post_ID    [required]
87
-     * @param string $id_prefix  [required] Appended to all cache IDs. Can be helpful in finding specific cache types.
88
-     *                           May also be helpful to include an additional specific identifier,
89
-     *                           such as a post ID as part of the $id_prefix so that individual caches
90
-     *                           can be found and/or cleared. ex: "venue-28", or "shortcode-156".
91
-     *                           BasicCacheManager::CACHE_PREFIX will also be prepended to the cache id.
92
-     */
93
-    public function clearPostRelatedCacheOnUpdate($post_ID, $id_prefix)
94
-    {
95
-        $post_related_cache = $this->getPostRelatedCache();
96
-        // if post is not already being tracked
97
-        if (! isset($post_related_cache[ $post_ID ])) {
98
-            // add array to add cache ids to
99
-            $post_related_cache[ $post_ID ] = array();
100
-        }
101
-        if (! in_array($id_prefix, $post_related_cache[ $post_ID ], true)) {
102
-            // add cache id to be tracked
103
-            $post_related_cache[ $post_ID ][] = $id_prefix;
104
-            $this->updatePostRelatedCache($post_related_cache);
105
-        }
106
-    }
107
-
108
-
109
-    /**
110
-     * callback hooked into the WordPress "save_post" action
111
-     * deletes any cache content associated with the post
112
-     *
113
-     * @param int $post_ID [required]
114
-     */
115
-    public function clearPostRelatedCache($post_ID)
116
-    {
117
-        $post_related_cache = $this->getPostRelatedCache();
118
-        // if post is not being tracked
119
-        if (! isset($post_related_cache[ $post_ID ])) {
120
-            // let's clean up some of the duplicate IDs that were getting added
121
-            foreach ($post_related_cache as $other_post_ID => $cache_IDs) {
122
-                // remove duplicates
123
-                $post_related_cache[ $other_post_ID ] = array_unique($post_related_cache[ $other_post_ID ]);
124
-            }
125
-            $this->updatePostRelatedCache($post_related_cache);
126
-            return;
127
-        }
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 ]);
131
-        $this->updatePostRelatedCache($post_related_cache);
132
-    }
16
+	/**
17
+	 * @type string
18
+	 */
19
+	const POST_CACHE_PREFIX = 'ee_cache_post_';
20
+
21
+	/**
22
+	 * wp-option option_name for tracking post related cache
23
+	 *
24
+	 * @type string
25
+	 */
26
+	const POST_CACHE_OPTIONS_KEY = 'ee_post_cache';
27
+
28
+
29
+	/**
30
+	 * PostRelatedCacheManager constructor.
31
+	 *
32
+	 * @param CacheStorageInterface $cache_storage
33
+	 */
34
+	public function __construct(CacheStorageInterface $cache_storage)
35
+	{
36
+		parent::__construct($cache_storage);
37
+		add_action('save_post', array($this, 'clearPostRelatedCache'));
38
+	}
39
+
40
+
41
+	/**
42
+	 * returns a string that will be prepended to all cache identifiers
43
+	 *
44
+	 * @return string
45
+	 */
46
+	public function cachePrefix()
47
+	{
48
+		return PostRelatedCacheManager::POST_CACHE_PREFIX;
49
+	}
50
+
51
+
52
+	/**
53
+	 * @return array
54
+	 */
55
+	protected function getPostRelatedCache()
56
+	{
57
+		$post_related_cache = get_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, array());
58
+		// verify that cached data was not truncated or corrupted and no longer an array
59
+		if (! is_array($post_related_cache)) {
60
+			// uh-oh... let's get rid of any transients using our cache prefix
61
+			$this->clear(PostRelatedCacheManager::CACHE_PREFIX);
62
+			// then update the post related cache tracking option
63
+			$post_related_cache = array();
64
+			$this->updatePostRelatedCache($post_related_cache);
65
+		}
66
+		return $post_related_cache;
67
+	}
68
+
69
+
70
+	/**
71
+	 * @param array $post_related_cache
72
+	 */
73
+	protected function updatePostRelatedCache(array $post_related_cache = array())
74
+	{
75
+		update_option(PostRelatedCacheManager::POST_CACHE_OPTIONS_KEY, $post_related_cache);
76
+	}
77
+
78
+
79
+	/**
80
+	 * If you are caching content that pertains to a Post of any type,
81
+	 * then it is recommended to pass the post id and cache id prefix to this method
82
+	 * so that it can be added to the post related cache tracking.
83
+	 * Then, whenever that post is updated, the cache will automatically be deleted,
84
+	 * which helps to ensure that outdated cache content will not be served
85
+	 *
86
+	 * @param int    $post_ID    [required]
87
+	 * @param string $id_prefix  [required] Appended to all cache IDs. Can be helpful in finding specific cache types.
88
+	 *                           May also be helpful to include an additional specific identifier,
89
+	 *                           such as a post ID as part of the $id_prefix so that individual caches
90
+	 *                           can be found and/or cleared. ex: "venue-28", or "shortcode-156".
91
+	 *                           BasicCacheManager::CACHE_PREFIX will also be prepended to the cache id.
92
+	 */
93
+	public function clearPostRelatedCacheOnUpdate($post_ID, $id_prefix)
94
+	{
95
+		$post_related_cache = $this->getPostRelatedCache();
96
+		// if post is not already being tracked
97
+		if (! isset($post_related_cache[ $post_ID ])) {
98
+			// add array to add cache ids to
99
+			$post_related_cache[ $post_ID ] = array();
100
+		}
101
+		if (! in_array($id_prefix, $post_related_cache[ $post_ID ], true)) {
102
+			// add cache id to be tracked
103
+			$post_related_cache[ $post_ID ][] = $id_prefix;
104
+			$this->updatePostRelatedCache($post_related_cache);
105
+		}
106
+	}
107
+
108
+
109
+	/**
110
+	 * callback hooked into the WordPress "save_post" action
111
+	 * deletes any cache content associated with the post
112
+	 *
113
+	 * @param int $post_ID [required]
114
+	 */
115
+	public function clearPostRelatedCache($post_ID)
116
+	{
117
+		$post_related_cache = $this->getPostRelatedCache();
118
+		// if post is not being tracked
119
+		if (! isset($post_related_cache[ $post_ID ])) {
120
+			// let's clean up some of the duplicate IDs that were getting added
121
+			foreach ($post_related_cache as $other_post_ID => $cache_IDs) {
122
+				// remove duplicates
123
+				$post_related_cache[ $other_post_ID ] = array_unique($post_related_cache[ $other_post_ID ]);
124
+			}
125
+			$this->updatePostRelatedCache($post_related_cache);
126
+			return;
127
+		}
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 ]);
131
+		$this->updatePostRelatedCache($post_related_cache);
132
+	}
133 133
 }
Please login to merge, or discard this patch.
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.
core/services/cache/TransientCacheStorage.php 2 patches
Indentation   +362 added lines, -362 removed lines patch added patch discarded remove patch
@@ -16,366 +16,366 @@
 block discarded – undo
16 16
 class TransientCacheStorage implements CacheStorageInterface
17 17
 {
18 18
 
19
-    /**
20
-     * wp-option option_name for tracking transients
21
-     *
22
-     * @type string
23
-     */
24
-    const TRANSIENT_SCHEDULE_OPTIONS_KEY = 'ee_transient_schedule';
25
-
26
-    /**
27
-     * @var int $current_time
28
-     */
29
-    private $current_time;
30
-
31
-    /**
32
-     * how often to perform transient cleanup
33
-     *
34
-     * @var string $transient_cleanup_frequency
35
-     */
36
-    private $transient_cleanup_frequency;
37
-
38
-    /**
39
-     * options for how often to perform transient cleanup
40
-     *
41
-     * @var array $transient_cleanup_frequency_options
42
-     */
43
-    private $transient_cleanup_frequency_options = array();
44
-
45
-    /**
46
-     * @var array $transients
47
-     */
48
-    private $transients;
49
-
50
-
51
-    /**
52
-     * TransientCacheStorage constructor.
53
-     */
54
-    public function __construct()
55
-    {
56
-        $this->transient_cleanup_frequency = $this->setTransientCleanupFrequency();
57
-        // round current time down to closest 5 minutes to simplify scheduling
58
-        $this->current_time = $this->roundTimestamp(time(), '5-minutes', false);
59
-        $this->transients = (array) get_option(TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY, array());
60
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && $this->transient_cleanup_frequency !== 'off') {
61
-            add_action('shutdown', array($this, 'checkTransientCleanupSchedule'), 999);
62
-        }
63
-    }
64
-
65
-
66
-    /**
67
-     * Sets how often transient cleanup occurs
68
-     *
69
-     * @return string
70
-     */
71
-    private function setTransientCleanupFrequency()
72
-    {
73
-        // sets how often transients are cleaned up
74
-        $this->transient_cleanup_frequency_options = apply_filters(
75
-            'FHEE__TransientCacheStorage__transient_cleanup_schedule_options',
76
-            array(
77
-                'off',
78
-                '15-minutes',
79
-                'hour',
80
-                '12-hours',
81
-                'day',
82
-            )
83
-        );
84
-        $transient_cleanup_frequency = apply_filters(
85
-            'FHEE__TransientCacheStorage__transient_cleanup_schedule',
86
-            'hour'
87
-        );
88
-        return in_array(
89
-            $transient_cleanup_frequency,
90
-            $this->transient_cleanup_frequency_options,
91
-            true
92
-        )
93
-            ? $transient_cleanup_frequency
94
-            : 'hour';
95
-    }
96
-
97
-
98
-    /**
99
-     * we need to be able to round timestamps off to match the set transient cleanup frequency
100
-     * so if a transient is set to expire at 1:17 pm for example, and our cleanup schedule is every hour,
101
-     * then that timestamp needs to be rounded up to 2:00 pm so that it is removed
102
-     * during the next scheduled cleanup after its expiration.
103
-     * We also round off the current time timestamp to the closest 5 minutes
104
-     * just to make the timestamps a little easier to round which helps with debugging.
105
-     *
106
-     * @param int    $timestamp [required]
107
-     * @param string $cleanup_frequency
108
-     * @param bool   $round_up
109
-     * @return int
110
-     */
111
-    private function roundTimestamp($timestamp, $cleanup_frequency = 'hour', $round_up = true)
112
-    {
113
-        $cleanup_frequency = $cleanup_frequency ? $cleanup_frequency : $this->transient_cleanup_frequency;
114
-        // in order to round the time to the closest xx minutes (or hours),
115
-        // we take the minutes (or hours) portion of the timestamp and divide it by xx,
116
-        // round down to a whole number, then multiply by xx to bring us almost back up to where we were
117
-        // why round down ? so the minutes (or hours) don't go over 60 (or 24)
118
-        // and bump the hour, which could bump the day, which could bump the month, etc,
119
-        // which would be bad because we don't always want to round up,
120
-        // but when we do we can easily achieve that by simply adding the desired offset,
121
-        $minutes = '00';
122
-        $hours = 'H';
123
-        switch ($cleanup_frequency) {
124
-            case '5-minutes':
125
-                $minutes = floor((int) date('i', $timestamp) / 5) * 5;
126
-                $minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
127
-                $offset = MINUTE_IN_SECONDS * 5;
128
-                break;
129
-            case '15-minutes':
130
-                $minutes = floor((int) date('i', $timestamp) / 15) * 15;
131
-                $minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
132
-                $offset = MINUTE_IN_SECONDS * 15;
133
-                break;
134
-            case '12-hours':
135
-                $hours = floor((int) date('H', $timestamp) / 12) * 12;
136
-                $hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
137
-                $offset = HOUR_IN_SECONDS * 12;
138
-                break;
139
-            case 'day':
140
-                $hours = '03'; // run cleanup at 3:00 am (or first site hit after that)
141
-                $offset = DAY_IN_SECONDS;
142
-                break;
143
-            case 'hour':
144
-            default:
145
-                $offset = HOUR_IN_SECONDS;
146
-                break;
147
-        }
148
-        $rounded_timestamp = (int) strtotime(date("Y-m-d {$hours}:{$minutes}:00", $timestamp));
149
-        $rounded_timestamp += $round_up ? $offset : 0;
150
-        return apply_filters(
151
-            'FHEE__TransientCacheStorage__roundTimestamp__timestamp',
152
-            $rounded_timestamp,
153
-            $timestamp,
154
-            $cleanup_frequency,
155
-            $round_up
156
-        );
157
-    }
158
-
159
-
160
-    /**
161
-     * Saves supplied data to a transient
162
-     * if an expiration is set, then it automatically schedules the transient for cleanup
163
-     *
164
-     * @param string $transient_key [required]
165
-     * @param string $data          [required]
166
-     * @param int    $expiration    number of seconds until the cache expires
167
-     * @return bool
168
-     */
169
-    public function add($transient_key, $data, $expiration = 0)
170
-    {
171
-        $expiration = (int) abs($expiration);
172
-        $saved = set_transient($transient_key, $data, $expiration);
173
-        if ($saved && $expiration) {
174
-            $this->scheduleTransientCleanup($transient_key, $expiration);
175
-        }
176
-        return $saved;
177
-    }
178
-
179
-
180
-    /**
181
-     * retrieves transient data
182
-     * automatically triggers early cache refresh for standard cache items
183
-     * in order to avoid cache stampedes on busy sites.
184
-     * For non-standard cache items like PHP Session data where early refreshing is not wanted,
185
-     * the $standard_cache parameter should be set to false when retrieving data
186
-     *
187
-     * @param string $transient_key [required]
188
-     * @param bool   $standard_cache
189
-     * @return mixed|null
190
-     */
191
-    public function get($transient_key, $standard_cache = true)
192
-    {
193
-        if (isset($this->transients[ $transient_key ])) {
194
-            // to avoid cache stampedes (AKA:dogpiles) for standard cache items,
195
-            // check if known cache expires within the next minute,
196
-            // and if so, remove it from our tracking and and return nothing.
197
-            // this should trigger the cache content to be regenerated during this request,
198
-            // while allowing any following requests to still access the existing cache
199
-            // until it gets replaced with the refreshed content
200
-            if ($standard_cache
201
-                && $this->transients[ $transient_key ] - time() <= MINUTE_IN_SECONDS
202
-            ) {
203
-                unset($this->transients[ $transient_key ]);
204
-                $this->updateTransients();
205
-                return null;
206
-            }
207
-
208
-            // for non standard cache items, remove the key from our tracking,
209
-            // but proceed to retrieve the transient so that it also gets removed from the db
210
-            if ($this->transients[ $transient_key ] <= time()) {
211
-                unset($this->transients[ $transient_key ]);
212
-                $this->updateTransients();
213
-            }
214
-        }
215
-
216
-        $content = get_transient($transient_key);
217
-        return $content !== false ? $content : null;
218
-    }
219
-
220
-
221
-    /**
222
-     * delete a single transient and remove tracking
223
-     *
224
-     * @param string $transient_key [required] full or partial transient key to be deleted
225
-     */
226
-    public function delete($transient_key)
227
-    {
228
-        $this->deleteMany(array($transient_key));
229
-    }
230
-
231
-
232
-    /**
233
-     * delete multiple transients and remove tracking
234
-     *
235
-     * @param array $transient_keys [required] array of full or partial transient keys to be deleted
236
-     * @param bool  $force_delete   [optional] if true, then will not check incoming keys against those being tracked
237
-     *                              and proceed directly to deleting those entries from the cache storage
238
-     */
239
-    public function deleteMany(array $transient_keys, $force_delete = false)
240
-    {
241
-        $full_transient_keys = $force_delete ? $transient_keys : array();
242
-        if (empty($full_transient_keys)) {
243
-            foreach ($this->transients as $transient_key => $expiration) {
244
-                foreach ($transient_keys as $transient_key_to_delete) {
245
-                    if (strpos($transient_key, $transient_key_to_delete) !== false) {
246
-                        $full_transient_keys[] = $transient_key;
247
-                    }
248
-                }
249
-            }
250
-        }
251
-        if ($this->deleteTransientKeys($full_transient_keys)) {
252
-            $this->updateTransients();
253
-        }
254
-    }
255
-
256
-
257
-    /**
258
-     * sorts transients numerically by timestamp
259
-     * then saves the transient schedule to a WP option
260
-     */
261
-    private function updateTransients()
262
-    {
263
-        asort($this->transients, SORT_NUMERIC);
264
-        update_option(
265
-            TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY,
266
-            $this->transients
267
-        );
268
-    }
269
-
270
-
271
-    /**
272
-     * schedules a transient for cleanup by adding it to the transient tracking
273
-     *
274
-     * @param string $transient_key [required]
275
-     * @param int    $expiration    [required]
276
-     */
277
-    private function scheduleTransientCleanup($transient_key, $expiration)
278
-    {
279
-        // make sure a valid future timestamp is set
280
-        $expiration += $expiration < time() ? time() : 0;
281
-        // and round to the closest 15 minutes
282
-        $expiration = $this->roundTimestamp($expiration);
283
-        // save transients to clear using their ID as the key to avoid duplicates
284
-        $this->transients[ $transient_key ] = $expiration;
285
-        $this->updateTransients();
286
-    }
287
-
288
-
289
-    /**
290
-     * Since our tracked transients are sorted by their timestamps
291
-     * we can grab the first transient and see when it is scheduled for cleanup.
292
-     * If that timestamp is less than or equal to the current time,
293
-     * then cleanup is triggered
294
-     */
295
-    public function checkTransientCleanupSchedule()
296
-    {
297
-        if (empty($this->transients)) {
298
-            return;
299
-        }
300
-        // when do we run the next cleanup job?
301
-        reset($this->transients);
302
-        $next_scheduled_cleanup = current($this->transients);
303
-        // if the next cleanup job is scheduled for the current hour
304
-        if ($next_scheduled_cleanup <= $this->current_time) {
305
-            if ($this->cleanupExpiredTransients()) {
306
-                $this->updateTransients();
307
-            }
308
-        }
309
-    }
310
-
311
-
312
-    /**
313
-     * loops through the array of tracked transients,
314
-     * compiles a list of those that have expired, and sends that list off for deletion.
315
-     * Also removes any bad records from the transients array
316
-     *
317
-     * @return bool
318
-     */
319
-    private function cleanupExpiredTransients()
320
-    {
321
-        $update = false;
322
-        // filter the query limit. Set to 0 to turn off garbage collection
323
-        $limit = (int) abs(
324
-            apply_filters(
325
-                'FHEE__TransientCacheStorage__clearExpiredTransients__limit',
326
-                50
327
-            )
328
-        );
329
-        // non-zero LIMIT means take out the trash
330
-        if ($limit) {
331
-            $transient_keys = array();
332
-            foreach ($this->transients as $transient_key => $expiration) {
333
-                if ($expiration > $this->current_time) {
334
-                    continue;
335
-                }
336
-                if (! $expiration || ! $transient_key) {
337
-                    unset($this->transients[ $transient_key ]);
338
-                    $update = true;
339
-                    continue;
340
-                }
341
-                $transient_keys[] = $transient_key;
342
-            }
343
-            // delete expired keys, but maintain value of $update if nothing is deleted
344
-            $update = $this->deleteTransientKeys($transient_keys, $limit) ? true : $update;
345
-            do_action('FHEE__TransientCacheStorage__clearExpiredTransients__end', $this);
346
-        }
347
-        return $update;
348
-    }
349
-
350
-
351
-    /**
352
-     * calls delete_transient() on each transient key provided, up to the specified limit
353
-     *
354
-     * @param array $transient_keys [required]
355
-     * @param int   $limit
356
-     * @return bool
357
-     */
358
-    private function deleteTransientKeys(array $transient_keys, $limit = 50)
359
-    {
360
-        if (empty($transient_keys)) {
361
-            return false;
362
-        }
363
-        $counter = 0;
364
-        foreach ($transient_keys as $transient_key) {
365
-            if ($counter === $limit) {
366
-                break;
367
-            }
368
-            // remove any transient prefixes
369
-            $transient_key = strpos($transient_key, '_transient_timeout_') === 0
370
-                ? str_replace('_transient_timeout_', '', $transient_key)
371
-                : $transient_key;
372
-            $transient_key = strpos($transient_key, '_transient_') === 0
373
-                ? str_replace('_transient_', '', $transient_key)
374
-                : $transient_key;
375
-            delete_transient($transient_key);
376
-            unset($this->transients[ $transient_key ]);
377
-            $counter++;
378
-        }
379
-        return $counter > 0;
380
-    }
19
+	/**
20
+	 * wp-option option_name for tracking transients
21
+	 *
22
+	 * @type string
23
+	 */
24
+	const TRANSIENT_SCHEDULE_OPTIONS_KEY = 'ee_transient_schedule';
25
+
26
+	/**
27
+	 * @var int $current_time
28
+	 */
29
+	private $current_time;
30
+
31
+	/**
32
+	 * how often to perform transient cleanup
33
+	 *
34
+	 * @var string $transient_cleanup_frequency
35
+	 */
36
+	private $transient_cleanup_frequency;
37
+
38
+	/**
39
+	 * options for how often to perform transient cleanup
40
+	 *
41
+	 * @var array $transient_cleanup_frequency_options
42
+	 */
43
+	private $transient_cleanup_frequency_options = array();
44
+
45
+	/**
46
+	 * @var array $transients
47
+	 */
48
+	private $transients;
49
+
50
+
51
+	/**
52
+	 * TransientCacheStorage constructor.
53
+	 */
54
+	public function __construct()
55
+	{
56
+		$this->transient_cleanup_frequency = $this->setTransientCleanupFrequency();
57
+		// round current time down to closest 5 minutes to simplify scheduling
58
+		$this->current_time = $this->roundTimestamp(time(), '5-minutes', false);
59
+		$this->transients = (array) get_option(TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY, array());
60
+		if (! (defined('DOING_AJAX') && DOING_AJAX) && $this->transient_cleanup_frequency !== 'off') {
61
+			add_action('shutdown', array($this, 'checkTransientCleanupSchedule'), 999);
62
+		}
63
+	}
64
+
65
+
66
+	/**
67
+	 * Sets how often transient cleanup occurs
68
+	 *
69
+	 * @return string
70
+	 */
71
+	private function setTransientCleanupFrequency()
72
+	{
73
+		// sets how often transients are cleaned up
74
+		$this->transient_cleanup_frequency_options = apply_filters(
75
+			'FHEE__TransientCacheStorage__transient_cleanup_schedule_options',
76
+			array(
77
+				'off',
78
+				'15-minutes',
79
+				'hour',
80
+				'12-hours',
81
+				'day',
82
+			)
83
+		);
84
+		$transient_cleanup_frequency = apply_filters(
85
+			'FHEE__TransientCacheStorage__transient_cleanup_schedule',
86
+			'hour'
87
+		);
88
+		return in_array(
89
+			$transient_cleanup_frequency,
90
+			$this->transient_cleanup_frequency_options,
91
+			true
92
+		)
93
+			? $transient_cleanup_frequency
94
+			: 'hour';
95
+	}
96
+
97
+
98
+	/**
99
+	 * we need to be able to round timestamps off to match the set transient cleanup frequency
100
+	 * so if a transient is set to expire at 1:17 pm for example, and our cleanup schedule is every hour,
101
+	 * then that timestamp needs to be rounded up to 2:00 pm so that it is removed
102
+	 * during the next scheduled cleanup after its expiration.
103
+	 * We also round off the current time timestamp to the closest 5 minutes
104
+	 * just to make the timestamps a little easier to round which helps with debugging.
105
+	 *
106
+	 * @param int    $timestamp [required]
107
+	 * @param string $cleanup_frequency
108
+	 * @param bool   $round_up
109
+	 * @return int
110
+	 */
111
+	private function roundTimestamp($timestamp, $cleanup_frequency = 'hour', $round_up = true)
112
+	{
113
+		$cleanup_frequency = $cleanup_frequency ? $cleanup_frequency : $this->transient_cleanup_frequency;
114
+		// in order to round the time to the closest xx minutes (or hours),
115
+		// we take the minutes (or hours) portion of the timestamp and divide it by xx,
116
+		// round down to a whole number, then multiply by xx to bring us almost back up to where we were
117
+		// why round down ? so the minutes (or hours) don't go over 60 (or 24)
118
+		// and bump the hour, which could bump the day, which could bump the month, etc,
119
+		// which would be bad because we don't always want to round up,
120
+		// but when we do we can easily achieve that by simply adding the desired offset,
121
+		$minutes = '00';
122
+		$hours = 'H';
123
+		switch ($cleanup_frequency) {
124
+			case '5-minutes':
125
+				$minutes = floor((int) date('i', $timestamp) / 5) * 5;
126
+				$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
127
+				$offset = MINUTE_IN_SECONDS * 5;
128
+				break;
129
+			case '15-minutes':
130
+				$minutes = floor((int) date('i', $timestamp) / 15) * 15;
131
+				$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
132
+				$offset = MINUTE_IN_SECONDS * 15;
133
+				break;
134
+			case '12-hours':
135
+				$hours = floor((int) date('H', $timestamp) / 12) * 12;
136
+				$hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
137
+				$offset = HOUR_IN_SECONDS * 12;
138
+				break;
139
+			case 'day':
140
+				$hours = '03'; // run cleanup at 3:00 am (or first site hit after that)
141
+				$offset = DAY_IN_SECONDS;
142
+				break;
143
+			case 'hour':
144
+			default:
145
+				$offset = HOUR_IN_SECONDS;
146
+				break;
147
+		}
148
+		$rounded_timestamp = (int) strtotime(date("Y-m-d {$hours}:{$minutes}:00", $timestamp));
149
+		$rounded_timestamp += $round_up ? $offset : 0;
150
+		return apply_filters(
151
+			'FHEE__TransientCacheStorage__roundTimestamp__timestamp',
152
+			$rounded_timestamp,
153
+			$timestamp,
154
+			$cleanup_frequency,
155
+			$round_up
156
+		);
157
+	}
158
+
159
+
160
+	/**
161
+	 * Saves supplied data to a transient
162
+	 * if an expiration is set, then it automatically schedules the transient for cleanup
163
+	 *
164
+	 * @param string $transient_key [required]
165
+	 * @param string $data          [required]
166
+	 * @param int    $expiration    number of seconds until the cache expires
167
+	 * @return bool
168
+	 */
169
+	public function add($transient_key, $data, $expiration = 0)
170
+	{
171
+		$expiration = (int) abs($expiration);
172
+		$saved = set_transient($transient_key, $data, $expiration);
173
+		if ($saved && $expiration) {
174
+			$this->scheduleTransientCleanup($transient_key, $expiration);
175
+		}
176
+		return $saved;
177
+	}
178
+
179
+
180
+	/**
181
+	 * retrieves transient data
182
+	 * automatically triggers early cache refresh for standard cache items
183
+	 * in order to avoid cache stampedes on busy sites.
184
+	 * For non-standard cache items like PHP Session data where early refreshing is not wanted,
185
+	 * the $standard_cache parameter should be set to false when retrieving data
186
+	 *
187
+	 * @param string $transient_key [required]
188
+	 * @param bool   $standard_cache
189
+	 * @return mixed|null
190
+	 */
191
+	public function get($transient_key, $standard_cache = true)
192
+	{
193
+		if (isset($this->transients[ $transient_key ])) {
194
+			// to avoid cache stampedes (AKA:dogpiles) for standard cache items,
195
+			// check if known cache expires within the next minute,
196
+			// and if so, remove it from our tracking and and return nothing.
197
+			// this should trigger the cache content to be regenerated during this request,
198
+			// while allowing any following requests to still access the existing cache
199
+			// until it gets replaced with the refreshed content
200
+			if ($standard_cache
201
+				&& $this->transients[ $transient_key ] - time() <= MINUTE_IN_SECONDS
202
+			) {
203
+				unset($this->transients[ $transient_key ]);
204
+				$this->updateTransients();
205
+				return null;
206
+			}
207
+
208
+			// for non standard cache items, remove the key from our tracking,
209
+			// but proceed to retrieve the transient so that it also gets removed from the db
210
+			if ($this->transients[ $transient_key ] <= time()) {
211
+				unset($this->transients[ $transient_key ]);
212
+				$this->updateTransients();
213
+			}
214
+		}
215
+
216
+		$content = get_transient($transient_key);
217
+		return $content !== false ? $content : null;
218
+	}
219
+
220
+
221
+	/**
222
+	 * delete a single transient and remove tracking
223
+	 *
224
+	 * @param string $transient_key [required] full or partial transient key to be deleted
225
+	 */
226
+	public function delete($transient_key)
227
+	{
228
+		$this->deleteMany(array($transient_key));
229
+	}
230
+
231
+
232
+	/**
233
+	 * delete multiple transients and remove tracking
234
+	 *
235
+	 * @param array $transient_keys [required] array of full or partial transient keys to be deleted
236
+	 * @param bool  $force_delete   [optional] if true, then will not check incoming keys against those being tracked
237
+	 *                              and proceed directly to deleting those entries from the cache storage
238
+	 */
239
+	public function deleteMany(array $transient_keys, $force_delete = false)
240
+	{
241
+		$full_transient_keys = $force_delete ? $transient_keys : array();
242
+		if (empty($full_transient_keys)) {
243
+			foreach ($this->transients as $transient_key => $expiration) {
244
+				foreach ($transient_keys as $transient_key_to_delete) {
245
+					if (strpos($transient_key, $transient_key_to_delete) !== false) {
246
+						$full_transient_keys[] = $transient_key;
247
+					}
248
+				}
249
+			}
250
+		}
251
+		if ($this->deleteTransientKeys($full_transient_keys)) {
252
+			$this->updateTransients();
253
+		}
254
+	}
255
+
256
+
257
+	/**
258
+	 * sorts transients numerically by timestamp
259
+	 * then saves the transient schedule to a WP option
260
+	 */
261
+	private function updateTransients()
262
+	{
263
+		asort($this->transients, SORT_NUMERIC);
264
+		update_option(
265
+			TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY,
266
+			$this->transients
267
+		);
268
+	}
269
+
270
+
271
+	/**
272
+	 * schedules a transient for cleanup by adding it to the transient tracking
273
+	 *
274
+	 * @param string $transient_key [required]
275
+	 * @param int    $expiration    [required]
276
+	 */
277
+	private function scheduleTransientCleanup($transient_key, $expiration)
278
+	{
279
+		// make sure a valid future timestamp is set
280
+		$expiration += $expiration < time() ? time() : 0;
281
+		// and round to the closest 15 minutes
282
+		$expiration = $this->roundTimestamp($expiration);
283
+		// save transients to clear using their ID as the key to avoid duplicates
284
+		$this->transients[ $transient_key ] = $expiration;
285
+		$this->updateTransients();
286
+	}
287
+
288
+
289
+	/**
290
+	 * Since our tracked transients are sorted by their timestamps
291
+	 * we can grab the first transient and see when it is scheduled for cleanup.
292
+	 * If that timestamp is less than or equal to the current time,
293
+	 * then cleanup is triggered
294
+	 */
295
+	public function checkTransientCleanupSchedule()
296
+	{
297
+		if (empty($this->transients)) {
298
+			return;
299
+		}
300
+		// when do we run the next cleanup job?
301
+		reset($this->transients);
302
+		$next_scheduled_cleanup = current($this->transients);
303
+		// if the next cleanup job is scheduled for the current hour
304
+		if ($next_scheduled_cleanup <= $this->current_time) {
305
+			if ($this->cleanupExpiredTransients()) {
306
+				$this->updateTransients();
307
+			}
308
+		}
309
+	}
310
+
311
+
312
+	/**
313
+	 * loops through the array of tracked transients,
314
+	 * compiles a list of those that have expired, and sends that list off for deletion.
315
+	 * Also removes any bad records from the transients array
316
+	 *
317
+	 * @return bool
318
+	 */
319
+	private function cleanupExpiredTransients()
320
+	{
321
+		$update = false;
322
+		// filter the query limit. Set to 0 to turn off garbage collection
323
+		$limit = (int) abs(
324
+			apply_filters(
325
+				'FHEE__TransientCacheStorage__clearExpiredTransients__limit',
326
+				50
327
+			)
328
+		);
329
+		// non-zero LIMIT means take out the trash
330
+		if ($limit) {
331
+			$transient_keys = array();
332
+			foreach ($this->transients as $transient_key => $expiration) {
333
+				if ($expiration > $this->current_time) {
334
+					continue;
335
+				}
336
+				if (! $expiration || ! $transient_key) {
337
+					unset($this->transients[ $transient_key ]);
338
+					$update = true;
339
+					continue;
340
+				}
341
+				$transient_keys[] = $transient_key;
342
+			}
343
+			// delete expired keys, but maintain value of $update if nothing is deleted
344
+			$update = $this->deleteTransientKeys($transient_keys, $limit) ? true : $update;
345
+			do_action('FHEE__TransientCacheStorage__clearExpiredTransients__end', $this);
346
+		}
347
+		return $update;
348
+	}
349
+
350
+
351
+	/**
352
+	 * calls delete_transient() on each transient key provided, up to the specified limit
353
+	 *
354
+	 * @param array $transient_keys [required]
355
+	 * @param int   $limit
356
+	 * @return bool
357
+	 */
358
+	private function deleteTransientKeys(array $transient_keys, $limit = 50)
359
+	{
360
+		if (empty($transient_keys)) {
361
+			return false;
362
+		}
363
+		$counter = 0;
364
+		foreach ($transient_keys as $transient_key) {
365
+			if ($counter === $limit) {
366
+				break;
367
+			}
368
+			// remove any transient prefixes
369
+			$transient_key = strpos($transient_key, '_transient_timeout_') === 0
370
+				? str_replace('_transient_timeout_', '', $transient_key)
371
+				: $transient_key;
372
+			$transient_key = strpos($transient_key, '_transient_') === 0
373
+				? str_replace('_transient_', '', $transient_key)
374
+				: $transient_key;
375
+			delete_transient($transient_key);
376
+			unset($this->transients[ $transient_key ]);
377
+			$counter++;
378
+		}
379
+		return $counter > 0;
380
+	}
381 381
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -57,7 +57,7 @@  discard block
 block discarded – undo
57 57
         // round current time down to closest 5 minutes to simplify scheduling
58 58
         $this->current_time = $this->roundTimestamp(time(), '5-minutes', false);
59 59
         $this->transients = (array) get_option(TransientCacheStorage::TRANSIENT_SCHEDULE_OPTIONS_KEY, array());
60
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && $this->transient_cleanup_frequency !== 'off') {
60
+        if ( ! (defined('DOING_AJAX') && DOING_AJAX) && $this->transient_cleanup_frequency !== 'off') {
61 61
             add_action('shutdown', array($this, 'checkTransientCleanupSchedule'), 999);
62 62
         }
63 63
     }
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
      */
191 191
     public function get($transient_key, $standard_cache = true)
192 192
     {
193
-        if (isset($this->transients[ $transient_key ])) {
193
+        if (isset($this->transients[$transient_key])) {
194 194
             // to avoid cache stampedes (AKA:dogpiles) for standard cache items,
195 195
             // check if known cache expires within the next minute,
196 196
             // and if so, remove it from our tracking and and return nothing.
@@ -198,17 +198,17 @@  discard block
 block discarded – undo
198 198
             // while allowing any following requests to still access the existing cache
199 199
             // until it gets replaced with the refreshed content
200 200
             if ($standard_cache
201
-                && $this->transients[ $transient_key ] - time() <= MINUTE_IN_SECONDS
201
+                && $this->transients[$transient_key] - time() <= MINUTE_IN_SECONDS
202 202
             ) {
203
-                unset($this->transients[ $transient_key ]);
203
+                unset($this->transients[$transient_key]);
204 204
                 $this->updateTransients();
205 205
                 return null;
206 206
             }
207 207
 
208 208
             // for non standard cache items, remove the key from our tracking,
209 209
             // but proceed to retrieve the transient so that it also gets removed from the db
210
-            if ($this->transients[ $transient_key ] <= time()) {
211
-                unset($this->transients[ $transient_key ]);
210
+            if ($this->transients[$transient_key] <= time()) {
211
+                unset($this->transients[$transient_key]);
212 212
                 $this->updateTransients();
213 213
             }
214 214
         }
@@ -281,7 +281,7 @@  discard block
 block discarded – undo
281 281
         // and round to the closest 15 minutes
282 282
         $expiration = $this->roundTimestamp($expiration);
283 283
         // save transients to clear using their ID as the key to avoid duplicates
284
-        $this->transients[ $transient_key ] = $expiration;
284
+        $this->transients[$transient_key] = $expiration;
285 285
         $this->updateTransients();
286 286
     }
287 287
 
@@ -333,8 +333,8 @@  discard block
 block discarded – undo
333 333
                 if ($expiration > $this->current_time) {
334 334
                     continue;
335 335
                 }
336
-                if (! $expiration || ! $transient_key) {
337
-                    unset($this->transients[ $transient_key ]);
336
+                if ( ! $expiration || ! $transient_key) {
337
+                    unset($this->transients[$transient_key]);
338 338
                     $update = true;
339 339
                     continue;
340 340
                 }
@@ -373,7 +373,7 @@  discard block
 block discarded – undo
373 373
                 ? str_replace('_transient_', '', $transient_key)
374 374
                 : $transient_key;
375 375
             delete_transient($transient_key);
376
-            unset($this->transients[ $transient_key ]);
376
+            unset($this->transients[$transient_key]);
377 377
             $counter++;
378 378
         }
379 379
         return $counter > 0;
Please login to merge, or discard this patch.
core/services/Benchmark.php 2 patches
Indentation   +320 added lines, -320 removed lines patch added patch discarded remove patch
@@ -15,324 +15,324 @@
 block discarded – undo
15 15
 class Benchmark
16 16
 {
17 17
 
18
-    /**
19
-     * @var string $output
20
-     */
21
-    private static $output;
22
-
23
-    /**
24
-     * @var array $start_times array containing the start time for the timers
25
-     */
26
-    private static $start_times;
27
-
28
-    /**
29
-     * @var array $times array containing all the timer'd times, which can be outputted via show_times()
30
-     */
31
-    private static $times = array();
32
-
33
-    /**
34
-     * @var array $memory_usage
35
-     */
36
-    protected static $memory_usage = array();
37
-
38
-
39
-    /**
40
-     * @param string $output
41
-     * @param bool   $formatted
42
-     */
43
-    public static function addOutput($output, $formatted = true)
44
-    {
45
-        Benchmark::$output .= $formatted
46
-            ? "<br />{$output}"
47
-            : "\n{$output}";
48
-    }
49
-
50
-
51
-    /**
52
-     * @return void
53
-     */
54
-    public static function resetOutput()
55
-    {
56
-        Benchmark::$output = '';
57
-    }
58
-
59
-    /**
60
-     * whether to benchmark code or not
61
-     */
62
-    public static function doNotRun()
63
-    {
64
-        return ! WP_DEBUG || (defined('DOING_AJAX') && DOING_AJAX);
65
-    }
66
-
67
-
68
-    /**
69
-     * resetTimes
70
-     */
71
-    public static function resetTimes()
72
-    {
73
-        Benchmark::$times = array();
74
-    }
75
-
76
-
77
-    /**
78
-     * Add Benchmark::startTimer() before a block of code you want to measure the performance of
79
-     *
80
-     * @param null $timer_name
81
-     */
82
-    public static function startTimer($timer_name = null)
83
-    {
84
-        if (Benchmark::doNotRun()) {
85
-            return;
86
-        }
87
-        $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
88
-        Benchmark::$start_times[ $timer_name ] = microtime(true);
89
-    }
90
-
91
-
92
-    /**
93
-     * Add Benchmark::stopTimer() after a block of code you want to measure the performance of
94
-     *
95
-     * @param string $timer_name
96
-     */
97
-    public static function stopTimer($timer_name = '')
98
-    {
99
-        if (Benchmark::doNotRun()) {
100
-            return;
101
-        }
102
-        $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
103
-        if (isset(Benchmark::$start_times[ $timer_name ])) {
104
-            $start_time = Benchmark::$start_times[ $timer_name ];
105
-            unset(Benchmark::$start_times[ $timer_name ]);
106
-        } else {
107
-            $start_time = array_pop(Benchmark::$start_times);
108
-        }
109
-        Benchmark::$times[ $timer_name ] = number_format(microtime(true) - $start_time, 8);
110
-    }
111
-
112
-
113
-    /**
114
-     * Measure the memory usage by PHP so far.
115
-     *
116
-     * @param string  $label      The label to show for this time eg "Start of calling Some_Class::some_function"
117
-     * @param boolean $output_now whether to echo now, or wait until EEH_Debug_Tools::show_times() is called
118
-     * @param bool    $formatted
119
-     * @return void
120
-     */
121
-    public static function measureMemory($label = 'memory usage', $output_now = false, $formatted = true)
122
-    {
123
-        if (Benchmark::doNotRun()) {
124
-            return;
125
-        }
126
-        $memory_used = Benchmark::convert(memory_get_usage(true));
127
-        Benchmark::$memory_usage[ $label ] = $memory_used;
128
-        if ($output_now) {
129
-            echo $formatted
130
-                ? "<br>{$label} : {$memory_used}"
131
-                : "\n {$label} : {$memory_used}";
132
-        }
133
-    }
134
-
135
-
136
-    /**
137
-     * will display the benchmarking results at shutdown
138
-     *
139
-     * @param bool $formatted
140
-     * @return void
141
-     */
142
-    public static function displayResultsAtShutdown($formatted = true)
143
-    {
144
-        Benchmark::resetOutput();
145
-        add_action(
146
-            'shutdown',
147
-            function () use ($formatted) {
148
-                Benchmark::displayResults(true, $formatted);
149
-            },
150
-            999999
151
-        );
152
-    }
153
-
154
-
155
-    /**
156
-     * will display the benchmarking results at shutdown
157
-     *
158
-     * @param string $filepath
159
-     * @param bool   $formatted
160
-     * @param bool   $append
161
-     * @return void
162
-     */
163
-    public static function writeResultsAtShutdown($filepath = '', $formatted = true, $append = true)
164
-    {
165
-        Benchmark::resetOutput();
166
-        add_action(
167
-            'shutdown',
168
-            function () use ($filepath, $formatted, $append) {
169
-                Benchmark::writeResultsToFile($filepath, $formatted, $append);
170
-            },
171
-            999999
172
-        );
173
-    }
174
-
175
-
176
-    /**
177
-     * @param bool $formatted
178
-     * @return string
179
-     */
180
-    private static function generateResults($formatted = true)
181
-    {
182
-        if (Benchmark::doNotRun()) {
183
-            return '';
184
-        }
185
-        if (! empty(Benchmark::$times)) {
186
-            $total = 0;
187
-            Benchmark::$output .= $formatted
188
-                ? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
189
-                : '';
190
-            foreach (Benchmark::$times as $timer_name => $total_time) {
191
-                Benchmark::$output .= Benchmark::formatTime($timer_name, $total_time, $formatted);
192
-                Benchmark::$output .= $formatted ? '<br />' : "\n";
193
-                $total += $total_time;
194
-            }
195
-            if ($formatted) {
196
-                Benchmark::$output .= '<br />';
197
-                Benchmark::$output .= '<h4>TOTAL TIME</h4>';
198
-                Benchmark::$output .= Benchmark::formatTime('', $total, $formatted);
199
-                Benchmark::$output .= '<span style="color:#999999; font-size:.8em;"> milliseconds</span><br />';
200
-                Benchmark::$output .= '<br />';
201
-                Benchmark::$output .= '<h5>Performance scale (from best to worse)</h5>';
202
-                Benchmark::$output .= '<span style="color:mediumpurple">Like wow! How about a Scooby snack?</span><br />';
203
-                Benchmark::$output .= '<span style="color:deepskyblue">Like...no way man!</span><br />';
204
-                Benchmark::$output .= '<span style="color:limegreen">Like...groovy!</span><br />';
205
-                Benchmark::$output .= '<span style="color:gold">Ruh Oh</span><br />';
206
-                Benchmark::$output .= '<span style="color:darkorange">Zoinks!</span><br />';
207
-                Benchmark::$output .= '<span style="color:red">Like...HEEELLLP</span><br />';
208
-            }
209
-        }
210
-        if (! empty(Benchmark::$memory_usage)) {
211
-            Benchmark::$output .= $formatted
212
-                ? '<h5>Memory</h5>'
213
-                : "\nMemory";
214
-            foreach (Benchmark::$memory_usage as $label => $memory_usage) {
215
-                Benchmark::$output .= $formatted
216
-                    ? "<br />{$memory_usage} : {$label}"
217
-                    : "\n{$memory_usage} : {$label}";
218
-            }
219
-        }
220
-        if (empty(Benchmark::$output)) {
221
-            return '';
222
-        }
223
-        Benchmark::$output = $formatted
224
-            ? '<div style="border:1px solid #dddddd; background-color:#ffffff;'
225
-              . (is_admin()
226
-                ? ' margin:2em 2em 2em 180px;'
227
-                : ' margin:2em;')
228
-              . ' padding:2em;">'
229
-              . '<h4>BENCHMARKING</h4>'
230
-              . Benchmark::$output
231
-              . '</div>'
232
-            : Benchmark::$output;
233
-        return Benchmark::$output;
234
-    }
235
-
236
-
237
-    /**
238
-     * @param bool $echo
239
-     * @param bool $formatted
240
-     * @return string
241
-     */
242
-    public static function displayResults($echo = true, $formatted = true)
243
-    {
244
-        $results = Benchmark::generateResults($formatted);
245
-        if ($echo) {
246
-            echo $results;
247
-            $results = '';
248
-        }
249
-        return $results;
250
-    }
251
-
252
-
253
-    /**
254
-     * @param string $filepath
255
-     * @param bool   $formatted
256
-     * @param bool   $append
257
-     * @throws EE_Error
258
-     */
259
-    public static function writeResultsToFile($filepath = '', $formatted = true, $append = true)
260
-    {
261
-        $filepath = ! empty($filepath) && is_readable(dirname($filepath))
262
-            ? $filepath
263
-            : '';
264
-        if (empty($filepath)) {
265
-            $filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
266
-        }
267
-        EEH_File::ensure_file_exists_and_is_writable($filepath);
268
-        file_put_contents(
269
-            $filepath,
270
-            "\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
271
-            $append ? FILE_APPEND | LOCK_EX : LOCK_EX
272
-        );
273
-    }
274
-
275
-
276
-    /**
277
-     * Converts a measure of memory bytes into the most logical units (eg kb, mb, etc)
278
-     *
279
-     * @param int $size
280
-     * @return string
281
-     */
282
-    public static function convert($size)
283
-    {
284
-        $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
285
-        return round(
286
-            $size / pow(1024, $i = floor(log($size, 1024))),
287
-            2
288
-        ) . ' ' . $unit[ absint($i) ];
289
-    }
290
-
291
-
292
-    /**
293
-     * @param string $timer_name
294
-     * @param float  $total_time
295
-     * @param bool   $formatted
296
-     * @return string
297
-     */
298
-    public static function formatTime($timer_name, $total_time, $formatted = true)
299
-    {
300
-        $total_time *= 1000;
301
-        switch ($total_time) {
302
-            case $total_time > 12500:
303
-                $color = 'red';
304
-                $bold = 'bold';
305
-                break;
306
-            case $total_time > 2500:
307
-                $color = 'darkorange';
308
-                $bold = 'bold';
309
-                break;
310
-            case $total_time > 500:
311
-                $color = 'gold';
312
-                $bold = 'bold';
313
-                break;
314
-            case $total_time > 100:
315
-                $color = 'limegreen';
316
-                $bold = 'normal';
317
-                break;
318
-            case $total_time > 20:
319
-                $color = 'deepskyblue';
320
-                $bold = 'normal';
321
-                break;
322
-            default:
323
-                $color = 'mediumpurple';
324
-                $bold = 'normal';
325
-                break;
326
-        }
327
-        return $formatted
328
-            ? '<span style="min-width: 10px; margin:0 1em; color:'
329
-              . $color
330
-              . '; font-weight:'
331
-              . $bold
332
-              . '; font-size:1.2em;">'
333
-              . str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT)
334
-              . '</span> '
335
-              . $timer_name
336
-            : str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT);
337
-    }
18
+	/**
19
+	 * @var string $output
20
+	 */
21
+	private static $output;
22
+
23
+	/**
24
+	 * @var array $start_times array containing the start time for the timers
25
+	 */
26
+	private static $start_times;
27
+
28
+	/**
29
+	 * @var array $times array containing all the timer'd times, which can be outputted via show_times()
30
+	 */
31
+	private static $times = array();
32
+
33
+	/**
34
+	 * @var array $memory_usage
35
+	 */
36
+	protected static $memory_usage = array();
37
+
38
+
39
+	/**
40
+	 * @param string $output
41
+	 * @param bool   $formatted
42
+	 */
43
+	public static function addOutput($output, $formatted = true)
44
+	{
45
+		Benchmark::$output .= $formatted
46
+			? "<br />{$output}"
47
+			: "\n{$output}";
48
+	}
49
+
50
+
51
+	/**
52
+	 * @return void
53
+	 */
54
+	public static function resetOutput()
55
+	{
56
+		Benchmark::$output = '';
57
+	}
58
+
59
+	/**
60
+	 * whether to benchmark code or not
61
+	 */
62
+	public static function doNotRun()
63
+	{
64
+		return ! WP_DEBUG || (defined('DOING_AJAX') && DOING_AJAX);
65
+	}
66
+
67
+
68
+	/**
69
+	 * resetTimes
70
+	 */
71
+	public static function resetTimes()
72
+	{
73
+		Benchmark::$times = array();
74
+	}
75
+
76
+
77
+	/**
78
+	 * Add Benchmark::startTimer() before a block of code you want to measure the performance of
79
+	 *
80
+	 * @param null $timer_name
81
+	 */
82
+	public static function startTimer($timer_name = null)
83
+	{
84
+		if (Benchmark::doNotRun()) {
85
+			return;
86
+		}
87
+		$timer_name = $timer_name !== '' ? $timer_name : get_called_class();
88
+		Benchmark::$start_times[ $timer_name ] = microtime(true);
89
+	}
90
+
91
+
92
+	/**
93
+	 * Add Benchmark::stopTimer() after a block of code you want to measure the performance of
94
+	 *
95
+	 * @param string $timer_name
96
+	 */
97
+	public static function stopTimer($timer_name = '')
98
+	{
99
+		if (Benchmark::doNotRun()) {
100
+			return;
101
+		}
102
+		$timer_name = $timer_name !== '' ? $timer_name : get_called_class();
103
+		if (isset(Benchmark::$start_times[ $timer_name ])) {
104
+			$start_time = Benchmark::$start_times[ $timer_name ];
105
+			unset(Benchmark::$start_times[ $timer_name ]);
106
+		} else {
107
+			$start_time = array_pop(Benchmark::$start_times);
108
+		}
109
+		Benchmark::$times[ $timer_name ] = number_format(microtime(true) - $start_time, 8);
110
+	}
111
+
112
+
113
+	/**
114
+	 * Measure the memory usage by PHP so far.
115
+	 *
116
+	 * @param string  $label      The label to show for this time eg "Start of calling Some_Class::some_function"
117
+	 * @param boolean $output_now whether to echo now, or wait until EEH_Debug_Tools::show_times() is called
118
+	 * @param bool    $formatted
119
+	 * @return void
120
+	 */
121
+	public static function measureMemory($label = 'memory usage', $output_now = false, $formatted = true)
122
+	{
123
+		if (Benchmark::doNotRun()) {
124
+			return;
125
+		}
126
+		$memory_used = Benchmark::convert(memory_get_usage(true));
127
+		Benchmark::$memory_usage[ $label ] = $memory_used;
128
+		if ($output_now) {
129
+			echo $formatted
130
+				? "<br>{$label} : {$memory_used}"
131
+				: "\n {$label} : {$memory_used}";
132
+		}
133
+	}
134
+
135
+
136
+	/**
137
+	 * will display the benchmarking results at shutdown
138
+	 *
139
+	 * @param bool $formatted
140
+	 * @return void
141
+	 */
142
+	public static function displayResultsAtShutdown($formatted = true)
143
+	{
144
+		Benchmark::resetOutput();
145
+		add_action(
146
+			'shutdown',
147
+			function () use ($formatted) {
148
+				Benchmark::displayResults(true, $formatted);
149
+			},
150
+			999999
151
+		);
152
+	}
153
+
154
+
155
+	/**
156
+	 * will display the benchmarking results at shutdown
157
+	 *
158
+	 * @param string $filepath
159
+	 * @param bool   $formatted
160
+	 * @param bool   $append
161
+	 * @return void
162
+	 */
163
+	public static function writeResultsAtShutdown($filepath = '', $formatted = true, $append = true)
164
+	{
165
+		Benchmark::resetOutput();
166
+		add_action(
167
+			'shutdown',
168
+			function () use ($filepath, $formatted, $append) {
169
+				Benchmark::writeResultsToFile($filepath, $formatted, $append);
170
+			},
171
+			999999
172
+		);
173
+	}
174
+
175
+
176
+	/**
177
+	 * @param bool $formatted
178
+	 * @return string
179
+	 */
180
+	private static function generateResults($formatted = true)
181
+	{
182
+		if (Benchmark::doNotRun()) {
183
+			return '';
184
+		}
185
+		if (! empty(Benchmark::$times)) {
186
+			$total = 0;
187
+			Benchmark::$output .= $formatted
188
+				? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
189
+				: '';
190
+			foreach (Benchmark::$times as $timer_name => $total_time) {
191
+				Benchmark::$output .= Benchmark::formatTime($timer_name, $total_time, $formatted);
192
+				Benchmark::$output .= $formatted ? '<br />' : "\n";
193
+				$total += $total_time;
194
+			}
195
+			if ($formatted) {
196
+				Benchmark::$output .= '<br />';
197
+				Benchmark::$output .= '<h4>TOTAL TIME</h4>';
198
+				Benchmark::$output .= Benchmark::formatTime('', $total, $formatted);
199
+				Benchmark::$output .= '<span style="color:#999999; font-size:.8em;"> milliseconds</span><br />';
200
+				Benchmark::$output .= '<br />';
201
+				Benchmark::$output .= '<h5>Performance scale (from best to worse)</h5>';
202
+				Benchmark::$output .= '<span style="color:mediumpurple">Like wow! How about a Scooby snack?</span><br />';
203
+				Benchmark::$output .= '<span style="color:deepskyblue">Like...no way man!</span><br />';
204
+				Benchmark::$output .= '<span style="color:limegreen">Like...groovy!</span><br />';
205
+				Benchmark::$output .= '<span style="color:gold">Ruh Oh</span><br />';
206
+				Benchmark::$output .= '<span style="color:darkorange">Zoinks!</span><br />';
207
+				Benchmark::$output .= '<span style="color:red">Like...HEEELLLP</span><br />';
208
+			}
209
+		}
210
+		if (! empty(Benchmark::$memory_usage)) {
211
+			Benchmark::$output .= $formatted
212
+				? '<h5>Memory</h5>'
213
+				: "\nMemory";
214
+			foreach (Benchmark::$memory_usage as $label => $memory_usage) {
215
+				Benchmark::$output .= $formatted
216
+					? "<br />{$memory_usage} : {$label}"
217
+					: "\n{$memory_usage} : {$label}";
218
+			}
219
+		}
220
+		if (empty(Benchmark::$output)) {
221
+			return '';
222
+		}
223
+		Benchmark::$output = $formatted
224
+			? '<div style="border:1px solid #dddddd; background-color:#ffffff;'
225
+			  . (is_admin()
226
+				? ' margin:2em 2em 2em 180px;'
227
+				: ' margin:2em;')
228
+			  . ' padding:2em;">'
229
+			  . '<h4>BENCHMARKING</h4>'
230
+			  . Benchmark::$output
231
+			  . '</div>'
232
+			: Benchmark::$output;
233
+		return Benchmark::$output;
234
+	}
235
+
236
+
237
+	/**
238
+	 * @param bool $echo
239
+	 * @param bool $formatted
240
+	 * @return string
241
+	 */
242
+	public static function displayResults($echo = true, $formatted = true)
243
+	{
244
+		$results = Benchmark::generateResults($formatted);
245
+		if ($echo) {
246
+			echo $results;
247
+			$results = '';
248
+		}
249
+		return $results;
250
+	}
251
+
252
+
253
+	/**
254
+	 * @param string $filepath
255
+	 * @param bool   $formatted
256
+	 * @param bool   $append
257
+	 * @throws EE_Error
258
+	 */
259
+	public static function writeResultsToFile($filepath = '', $formatted = true, $append = true)
260
+	{
261
+		$filepath = ! empty($filepath) && is_readable(dirname($filepath))
262
+			? $filepath
263
+			: '';
264
+		if (empty($filepath)) {
265
+			$filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
266
+		}
267
+		EEH_File::ensure_file_exists_and_is_writable($filepath);
268
+		file_put_contents(
269
+			$filepath,
270
+			"\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
271
+			$append ? FILE_APPEND | LOCK_EX : LOCK_EX
272
+		);
273
+	}
274
+
275
+
276
+	/**
277
+	 * Converts a measure of memory bytes into the most logical units (eg kb, mb, etc)
278
+	 *
279
+	 * @param int $size
280
+	 * @return string
281
+	 */
282
+	public static function convert($size)
283
+	{
284
+		$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
285
+		return round(
286
+			$size / pow(1024, $i = floor(log($size, 1024))),
287
+			2
288
+		) . ' ' . $unit[ absint($i) ];
289
+	}
290
+
291
+
292
+	/**
293
+	 * @param string $timer_name
294
+	 * @param float  $total_time
295
+	 * @param bool   $formatted
296
+	 * @return string
297
+	 */
298
+	public static function formatTime($timer_name, $total_time, $formatted = true)
299
+	{
300
+		$total_time *= 1000;
301
+		switch ($total_time) {
302
+			case $total_time > 12500:
303
+				$color = 'red';
304
+				$bold = 'bold';
305
+				break;
306
+			case $total_time > 2500:
307
+				$color = 'darkorange';
308
+				$bold = 'bold';
309
+				break;
310
+			case $total_time > 500:
311
+				$color = 'gold';
312
+				$bold = 'bold';
313
+				break;
314
+			case $total_time > 100:
315
+				$color = 'limegreen';
316
+				$bold = 'normal';
317
+				break;
318
+			case $total_time > 20:
319
+				$color = 'deepskyblue';
320
+				$bold = 'normal';
321
+				break;
322
+			default:
323
+				$color = 'mediumpurple';
324
+				$bold = 'normal';
325
+				break;
326
+		}
327
+		return $formatted
328
+			? '<span style="min-width: 10px; margin:0 1em; color:'
329
+			  . $color
330
+			  . '; font-weight:'
331
+			  . $bold
332
+			  . '; font-size:1.2em;">'
333
+			  . str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT)
334
+			  . '</span> '
335
+			  . $timer_name
336
+			: str_pad(number_format($total_time, 3), 9, '0', STR_PAD_LEFT);
337
+	}
338 338
 }
Please login to merge, or discard this patch.
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -85,7 +85,7 @@  discard block
 block discarded – undo
85 85
             return;
86 86
         }
87 87
         $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
88
-        Benchmark::$start_times[ $timer_name ] = microtime(true);
88
+        Benchmark::$start_times[$timer_name] = microtime(true);
89 89
     }
90 90
 
91 91
 
@@ -100,13 +100,13 @@  discard block
 block discarded – undo
100 100
             return;
101 101
         }
102 102
         $timer_name = $timer_name !== '' ? $timer_name : get_called_class();
103
-        if (isset(Benchmark::$start_times[ $timer_name ])) {
104
-            $start_time = Benchmark::$start_times[ $timer_name ];
105
-            unset(Benchmark::$start_times[ $timer_name ]);
103
+        if (isset(Benchmark::$start_times[$timer_name])) {
104
+            $start_time = Benchmark::$start_times[$timer_name];
105
+            unset(Benchmark::$start_times[$timer_name]);
106 106
         } else {
107 107
             $start_time = array_pop(Benchmark::$start_times);
108 108
         }
109
-        Benchmark::$times[ $timer_name ] = number_format(microtime(true) - $start_time, 8);
109
+        Benchmark::$times[$timer_name] = number_format(microtime(true) - $start_time, 8);
110 110
     }
111 111
 
112 112
 
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
             return;
125 125
         }
126 126
         $memory_used = Benchmark::convert(memory_get_usage(true));
127
-        Benchmark::$memory_usage[ $label ] = $memory_used;
127
+        Benchmark::$memory_usage[$label] = $memory_used;
128 128
         if ($output_now) {
129 129
             echo $formatted
130 130
                 ? "<br>{$label} : {$memory_used}"
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
         Benchmark::resetOutput();
145 145
         add_action(
146 146
             'shutdown',
147
-            function () use ($formatted) {
147
+            function() use ($formatted) {
148 148
                 Benchmark::displayResults(true, $formatted);
149 149
             },
150 150
             999999
@@ -165,7 +165,7 @@  discard block
 block discarded – undo
165 165
         Benchmark::resetOutput();
166 166
         add_action(
167 167
             'shutdown',
168
-            function () use ($filepath, $formatted, $append) {
168
+            function() use ($filepath, $formatted, $append) {
169 169
                 Benchmark::writeResultsToFile($filepath, $formatted, $append);
170 170
             },
171 171
             999999
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
         if (Benchmark::doNotRun()) {
183 183
             return '';
184 184
         }
185
-        if (! empty(Benchmark::$times)) {
185
+        if ( ! empty(Benchmark::$times)) {
186 186
             $total = 0;
187 187
             Benchmark::$output .= $formatted
188 188
                 ? '<span style="color:#999999; font-size:.8em;">( time in milliseconds )</span><br />'
@@ -207,7 +207,7 @@  discard block
 block discarded – undo
207 207
                 Benchmark::$output .= '<span style="color:red">Like...HEEELLLP</span><br />';
208 208
             }
209 209
         }
210
-        if (! empty(Benchmark::$memory_usage)) {
210
+        if ( ! empty(Benchmark::$memory_usage)) {
211 211
             Benchmark::$output .= $formatted
212 212
                 ? '<h5>Memory</h5>'
213 213
                 : "\nMemory";
@@ -262,12 +262,12 @@  discard block
 block discarded – undo
262 262
             ? $filepath
263 263
             : '';
264 264
         if (empty($filepath)) {
265
-            $filepath = EVENT_ESPRESSO_UPLOAD_DIR . 'logs/benchmarking-' . date('Y-m-d') . '.html';
265
+            $filepath = EVENT_ESPRESSO_UPLOAD_DIR.'logs/benchmarking-'.date('Y-m-d').'.html';
266 266
         }
267 267
         EEH_File::ensure_file_exists_and_is_writable($filepath);
268 268
         file_put_contents(
269 269
             $filepath,
270
-            "\n" . date('Y-m-d H:i:s') . Benchmark::generateResults($formatted),
270
+            "\n".date('Y-m-d H:i:s').Benchmark::generateResults($formatted),
271 271
             $append ? FILE_APPEND | LOCK_EX : LOCK_EX
272 272
         );
273 273
     }
@@ -285,7 +285,7 @@  discard block
 block discarded – undo
285 285
         return round(
286 286
             $size / pow(1024, $i = floor(log($size, 1024))),
287 287
             2
288
-        ) . ' ' . $unit[ absint($i) ];
288
+        ).' '.$unit[absint($i)];
289 289
     }
290 290
 
291 291
 
Please login to merge, or discard this patch.
core/services/container/DependencyInjector.php 2 patches
Indentation   +205 added lines, -205 removed lines patch added patch discarded remove patch
@@ -21,209 +21,209 @@
 block discarded – undo
21 21
 class DependencyInjector implements InjectorInterface
22 22
 {
23 23
 
24
-    /**
25
-     * @var CoffeePotInterface $coffee_pot
26
-     */
27
-    private $coffee_pot;
28
-
29
-    /**
30
-     * @var EEH_Array $array_helper
31
-     */
32
-    private $array_helper;
33
-
34
-    /**
35
-     * @var ReflectionClass[] $reflectors
36
-     */
37
-    private $reflectors;
38
-
39
-    /**
40
-     * @var ReflectionMethod[] $constructors
41
-     */
42
-    private $constructors;
43
-
44
-    /**
45
-     * @var ReflectionParameter[] $parameters
46
-     */
47
-    private $parameters;
48
-
49
-
50
-    /**
51
-     * DependencyInjector constructor
52
-     *
53
-     * @param CoffeePotInterface $coffee_pot
54
-     * @param EEH_Array          $array_helper
55
-     */
56
-    public function __construct(CoffeePotInterface $coffee_pot, EEH_Array $array_helper)
57
-    {
58
-        $this->coffee_pot = $coffee_pot;
59
-        $this->array_helper = $array_helper;
60
-    }
61
-
62
-
63
-    /**
64
-     * getReflectionClass
65
-     * checks if a ReflectionClass object has already been generated for a class
66
-     * and returns that instead of creating a new one
67
-     *
68
-     * @param string $class_name
69
-     * @return ReflectionClass
70
-     */
71
-    public function getReflectionClass($class_name)
72
-    {
73
-        if (! isset($this->reflectors[ $class_name ])
74
-            || ! $this->reflectors[ $class_name ] instanceof ReflectionClass
75
-        ) {
76
-            $this->reflectors[ $class_name ] = new ReflectionClass($class_name);
77
-        }
78
-        return $this->reflectors[ $class_name ];
79
-    }
80
-
81
-
82
-    /**
83
-     * getConstructor
84
-     * checks if a ReflectionMethod object has already been generated for the class constructor
85
-     * and returns that instead of creating a new one
86
-     *
87
-     * @param ReflectionClass $reflector
88
-     * @return ReflectionMethod
89
-     */
90
-    protected function getConstructor(ReflectionClass $reflector)
91
-    {
92
-        if (! isset($this->constructors[ $reflector->getName() ])
93
-            || ! $this->constructors[ $reflector->getName() ] instanceof ReflectionMethod
94
-        ) {
95
-            $this->constructors[ $reflector->getName() ] = $reflector->getConstructor();
96
-        }
97
-        return $this->constructors[ $reflector->getName() ];
98
-    }
99
-
100
-
101
-    /**
102
-     * getParameters
103
-     * checks if an array of ReflectionParameter objects has already been generated for the class constructor
104
-     * and returns that instead of creating a new one
105
-     *
106
-     * @param ReflectionMethod $constructor
107
-     * @return ReflectionParameter[]
108
-     */
109
-    protected function getParameters(ReflectionMethod $constructor)
110
-    {
111
-        if (! isset($this->parameters[ $constructor->class ])) {
112
-            $this->parameters[ $constructor->class ] = $constructor->getParameters();
113
-        }
114
-        return $this->parameters[ $constructor->class ];
115
-    }
116
-
117
-
118
-    /**
119
-     * resolveDependencies
120
-     * examines the constructor for the requested class to determine
121
-     * if any dependencies exist, and if they can be injected.
122
-     * If so, then those classes will be added to the array of arguments passed to the constructor
123
-     * PLZ NOTE: this is achieved by type hinting the constructor params
124
-     * For example:
125
-     *        if attempting to load a class "Foo" with the following constructor:
126
-     *        __construct( Bar $bar_class, Fighter $grohl_class )
127
-     *        then $bar_class and $grohl_class will be added to the $arguments array,
128
-     *        but only IF they are NOT already present in the incoming arguments array,
129
-     *        and the correct classes can be loaded
130
-     *
131
-     * @param RecipeInterface $recipe
132
-     * @param ReflectionClass $reflector
133
-     * @param array           $arguments
134
-     * @return array
135
-     * @throws UnexpectedValueException
136
-     */
137
-    public function resolveDependencies(RecipeInterface $recipe, ReflectionClass $reflector, $arguments = array())
138
-    {
139
-        // if arguments array is numerically and sequentially indexed, then we want it to remain as is,
140
-        // else wrap it in an additional array so that it doesn't get split into multiple parameters
141
-        $arguments = $this->array_helper->is_array_numerically_and_sequentially_indexed($arguments)
142
-            ? $arguments
143
-            : array($arguments);
144
-        $resolved_parameters = array();
145
-        // let's examine the constructor
146
-        // let's examine the constructor
147
-        $constructor = $this->getConstructor($reflector);
148
-        // whu? huh? nothing?
149
-        if (! $constructor) {
150
-            return $arguments;
151
-        }
152
-        // get constructor parameters
153
-        $params = $this->getParameters($constructor);
154
-        if (empty($params)) {
155
-            return $resolved_parameters;
156
-        }
157
-        $ingredients = $recipe->ingredients();
158
-        // and the keys for the incoming arguments array so that we can compare existing arguments with what is expected
159
-        $argument_keys = array_keys($arguments);
160
-        // now loop thru all of the constructors expected parameters
161
-        foreach ($params as $index => $param) {
162
-            if (! $param instanceof ReflectionParameter) {
163
-                continue;
164
-            }
165
-            // is this a dependency for a specific class ?
166
-            $param_class = $param->getClass() ? $param->getClass()->name : '';
167
-            $param_name = $param->getName() ? $param->getName() : '';
168
-            if (// param is not a class but is specified in the list of ingredients for this Recipe
169
-                is_string($param_name) && isset($ingredients[ $param_name ])
170
-            ) {
171
-                // attempt to inject the dependency
172
-                $resolved_parameters[ $index ] = $ingredients[ $param_name ];
173
-            } elseif (// param is specified in the list of ingredients for this Recipe
174
-            isset($ingredients[ $param_class ])
175
-            ) { // attempt to inject the dependency
176
-                $resolved_parameters[ $index ] = $this->injectDependency($reflector, $ingredients[ $param_class ]);
177
-            } elseif (// param is not even a class
178
-                empty($param_class)
179
-                // and something already exists in the incoming arguments for this param
180
-                && isset($argument_keys[ $index ], $arguments[ $argument_keys[ $index ] ])
181
-            ) {
182
-                // add parameter from incoming arguments
183
-                $resolved_parameters[ $index ] = $arguments[ $argument_keys[ $index ] ];
184
-            } elseif (// parameter is type hinted as a class, exists as an incoming argument, AND it's the correct class
185
-                ! empty($param_class)
186
-                && isset($argument_keys[ $index ], $arguments[ $argument_keys[ $index ] ])
187
-                && $arguments[ $argument_keys[ $index ] ] instanceof $param_class
188
-            ) {
189
-                // add parameter from incoming arguments
190
-                $resolved_parameters[ $index ] = $arguments[ $argument_keys[ $index ] ];
191
-            } elseif (// parameter is type hinted as a class, and should be injected
192
-            ! empty($param_class)
193
-            ) {
194
-                // attempt to inject the dependency
195
-                $resolved_parameters[ $index ] = $this->injectDependency($reflector, $param_class);
196
-            } elseif ($param->isOptional()) {
197
-                $resolved_parameters[ $index ] = $param->getDefaultValue();
198
-            } else {
199
-                $resolved_parameters[ $index ] = null;
200
-            }
201
-        }
202
-        return $resolved_parameters;
203
-    }
204
-
205
-
206
-    /**
207
-     * @param ReflectionClass $reflector
208
-     * @param string          $param_class
209
-     * @return mixed
210
-     * @throws UnexpectedValueException
211
-     */
212
-    private function injectDependency(ReflectionClass $reflector, $param_class)
213
-    {
214
-        $dependency = $this->coffee_pot->brew($param_class);
215
-        if (! $dependency instanceof $param_class) {
216
-            throw new UnexpectedValueException(
217
-                sprintf(
218
-                    esc_html__(
219
-                        'Could not resolve dependency for "%1$s" for the "%2$s" class constructor.',
220
-                        'event_espresso'
221
-                    ),
222
-                    $param_class,
223
-                    $reflector->getName()
224
-                )
225
-            );
226
-        }
227
-        return $dependency;
228
-    }
24
+	/**
25
+	 * @var CoffeePotInterface $coffee_pot
26
+	 */
27
+	private $coffee_pot;
28
+
29
+	/**
30
+	 * @var EEH_Array $array_helper
31
+	 */
32
+	private $array_helper;
33
+
34
+	/**
35
+	 * @var ReflectionClass[] $reflectors
36
+	 */
37
+	private $reflectors;
38
+
39
+	/**
40
+	 * @var ReflectionMethod[] $constructors
41
+	 */
42
+	private $constructors;
43
+
44
+	/**
45
+	 * @var ReflectionParameter[] $parameters
46
+	 */
47
+	private $parameters;
48
+
49
+
50
+	/**
51
+	 * DependencyInjector constructor
52
+	 *
53
+	 * @param CoffeePotInterface $coffee_pot
54
+	 * @param EEH_Array          $array_helper
55
+	 */
56
+	public function __construct(CoffeePotInterface $coffee_pot, EEH_Array $array_helper)
57
+	{
58
+		$this->coffee_pot = $coffee_pot;
59
+		$this->array_helper = $array_helper;
60
+	}
61
+
62
+
63
+	/**
64
+	 * getReflectionClass
65
+	 * checks if a ReflectionClass object has already been generated for a class
66
+	 * and returns that instead of creating a new one
67
+	 *
68
+	 * @param string $class_name
69
+	 * @return ReflectionClass
70
+	 */
71
+	public function getReflectionClass($class_name)
72
+	{
73
+		if (! isset($this->reflectors[ $class_name ])
74
+			|| ! $this->reflectors[ $class_name ] instanceof ReflectionClass
75
+		) {
76
+			$this->reflectors[ $class_name ] = new ReflectionClass($class_name);
77
+		}
78
+		return $this->reflectors[ $class_name ];
79
+	}
80
+
81
+
82
+	/**
83
+	 * getConstructor
84
+	 * checks if a ReflectionMethod object has already been generated for the class constructor
85
+	 * and returns that instead of creating a new one
86
+	 *
87
+	 * @param ReflectionClass $reflector
88
+	 * @return ReflectionMethod
89
+	 */
90
+	protected function getConstructor(ReflectionClass $reflector)
91
+	{
92
+		if (! isset($this->constructors[ $reflector->getName() ])
93
+			|| ! $this->constructors[ $reflector->getName() ] instanceof ReflectionMethod
94
+		) {
95
+			$this->constructors[ $reflector->getName() ] = $reflector->getConstructor();
96
+		}
97
+		return $this->constructors[ $reflector->getName() ];
98
+	}
99
+
100
+
101
+	/**
102
+	 * getParameters
103
+	 * checks if an array of ReflectionParameter objects has already been generated for the class constructor
104
+	 * and returns that instead of creating a new one
105
+	 *
106
+	 * @param ReflectionMethod $constructor
107
+	 * @return ReflectionParameter[]
108
+	 */
109
+	protected function getParameters(ReflectionMethod $constructor)
110
+	{
111
+		if (! isset($this->parameters[ $constructor->class ])) {
112
+			$this->parameters[ $constructor->class ] = $constructor->getParameters();
113
+		}
114
+		return $this->parameters[ $constructor->class ];
115
+	}
116
+
117
+
118
+	/**
119
+	 * resolveDependencies
120
+	 * examines the constructor for the requested class to determine
121
+	 * if any dependencies exist, and if they can be injected.
122
+	 * If so, then those classes will be added to the array of arguments passed to the constructor
123
+	 * PLZ NOTE: this is achieved by type hinting the constructor params
124
+	 * For example:
125
+	 *        if attempting to load a class "Foo" with the following constructor:
126
+	 *        __construct( Bar $bar_class, Fighter $grohl_class )
127
+	 *        then $bar_class and $grohl_class will be added to the $arguments array,
128
+	 *        but only IF they are NOT already present in the incoming arguments array,
129
+	 *        and the correct classes can be loaded
130
+	 *
131
+	 * @param RecipeInterface $recipe
132
+	 * @param ReflectionClass $reflector
133
+	 * @param array           $arguments
134
+	 * @return array
135
+	 * @throws UnexpectedValueException
136
+	 */
137
+	public function resolveDependencies(RecipeInterface $recipe, ReflectionClass $reflector, $arguments = array())
138
+	{
139
+		// if arguments array is numerically and sequentially indexed, then we want it to remain as is,
140
+		// else wrap it in an additional array so that it doesn't get split into multiple parameters
141
+		$arguments = $this->array_helper->is_array_numerically_and_sequentially_indexed($arguments)
142
+			? $arguments
143
+			: array($arguments);
144
+		$resolved_parameters = array();
145
+		// let's examine the constructor
146
+		// let's examine the constructor
147
+		$constructor = $this->getConstructor($reflector);
148
+		// whu? huh? nothing?
149
+		if (! $constructor) {
150
+			return $arguments;
151
+		}
152
+		// get constructor parameters
153
+		$params = $this->getParameters($constructor);
154
+		if (empty($params)) {
155
+			return $resolved_parameters;
156
+		}
157
+		$ingredients = $recipe->ingredients();
158
+		// and the keys for the incoming arguments array so that we can compare existing arguments with what is expected
159
+		$argument_keys = array_keys($arguments);
160
+		// now loop thru all of the constructors expected parameters
161
+		foreach ($params as $index => $param) {
162
+			if (! $param instanceof ReflectionParameter) {
163
+				continue;
164
+			}
165
+			// is this a dependency for a specific class ?
166
+			$param_class = $param->getClass() ? $param->getClass()->name : '';
167
+			$param_name = $param->getName() ? $param->getName() : '';
168
+			if (// param is not a class but is specified in the list of ingredients for this Recipe
169
+				is_string($param_name) && isset($ingredients[ $param_name ])
170
+			) {
171
+				// attempt to inject the dependency
172
+				$resolved_parameters[ $index ] = $ingredients[ $param_name ];
173
+			} elseif (// param is specified in the list of ingredients for this Recipe
174
+			isset($ingredients[ $param_class ])
175
+			) { // attempt to inject the dependency
176
+				$resolved_parameters[ $index ] = $this->injectDependency($reflector, $ingredients[ $param_class ]);
177
+			} elseif (// param is not even a class
178
+				empty($param_class)
179
+				// and something already exists in the incoming arguments for this param
180
+				&& isset($argument_keys[ $index ], $arguments[ $argument_keys[ $index ] ])
181
+			) {
182
+				// add parameter from incoming arguments
183
+				$resolved_parameters[ $index ] = $arguments[ $argument_keys[ $index ] ];
184
+			} elseif (// parameter is type hinted as a class, exists as an incoming argument, AND it's the correct class
185
+				! empty($param_class)
186
+				&& isset($argument_keys[ $index ], $arguments[ $argument_keys[ $index ] ])
187
+				&& $arguments[ $argument_keys[ $index ] ] instanceof $param_class
188
+			) {
189
+				// add parameter from incoming arguments
190
+				$resolved_parameters[ $index ] = $arguments[ $argument_keys[ $index ] ];
191
+			} elseif (// parameter is type hinted as a class, and should be injected
192
+			! empty($param_class)
193
+			) {
194
+				// attempt to inject the dependency
195
+				$resolved_parameters[ $index ] = $this->injectDependency($reflector, $param_class);
196
+			} elseif ($param->isOptional()) {
197
+				$resolved_parameters[ $index ] = $param->getDefaultValue();
198
+			} else {
199
+				$resolved_parameters[ $index ] = null;
200
+			}
201
+		}
202
+		return $resolved_parameters;
203
+	}
204
+
205
+
206
+	/**
207
+	 * @param ReflectionClass $reflector
208
+	 * @param string          $param_class
209
+	 * @return mixed
210
+	 * @throws UnexpectedValueException
211
+	 */
212
+	private function injectDependency(ReflectionClass $reflector, $param_class)
213
+	{
214
+		$dependency = $this->coffee_pot->brew($param_class);
215
+		if (! $dependency instanceof $param_class) {
216
+			throw new UnexpectedValueException(
217
+				sprintf(
218
+					esc_html__(
219
+						'Could not resolve dependency for "%1$s" for the "%2$s" class constructor.',
220
+						'event_espresso'
221
+					),
222
+					$param_class,
223
+					$reflector->getName()
224
+				)
225
+			);
226
+		}
227
+		return $dependency;
228
+	}
229 229
 }
Please login to merge, or discard this patch.
Spacing   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -70,12 +70,12 @@  discard block
 block discarded – undo
70 70
      */
71 71
     public function getReflectionClass($class_name)
72 72
     {
73
-        if (! isset($this->reflectors[ $class_name ])
74
-            || ! $this->reflectors[ $class_name ] instanceof ReflectionClass
73
+        if ( ! isset($this->reflectors[$class_name])
74
+            || ! $this->reflectors[$class_name] instanceof ReflectionClass
75 75
         ) {
76
-            $this->reflectors[ $class_name ] = new ReflectionClass($class_name);
76
+            $this->reflectors[$class_name] = new ReflectionClass($class_name);
77 77
         }
78
-        return $this->reflectors[ $class_name ];
78
+        return $this->reflectors[$class_name];
79 79
     }
80 80
 
81 81
 
@@ -89,12 +89,12 @@  discard block
 block discarded – undo
89 89
      */
90 90
     protected function getConstructor(ReflectionClass $reflector)
91 91
     {
92
-        if (! isset($this->constructors[ $reflector->getName() ])
93
-            || ! $this->constructors[ $reflector->getName() ] instanceof ReflectionMethod
92
+        if ( ! isset($this->constructors[$reflector->getName()])
93
+            || ! $this->constructors[$reflector->getName()] instanceof ReflectionMethod
94 94
         ) {
95
-            $this->constructors[ $reflector->getName() ] = $reflector->getConstructor();
95
+            $this->constructors[$reflector->getName()] = $reflector->getConstructor();
96 96
         }
97
-        return $this->constructors[ $reflector->getName() ];
97
+        return $this->constructors[$reflector->getName()];
98 98
     }
99 99
 
100 100
 
@@ -108,10 +108,10 @@  discard block
 block discarded – undo
108 108
      */
109 109
     protected function getParameters(ReflectionMethod $constructor)
110 110
     {
111
-        if (! isset($this->parameters[ $constructor->class ])) {
112
-            $this->parameters[ $constructor->class ] = $constructor->getParameters();
111
+        if ( ! isset($this->parameters[$constructor->class])) {
112
+            $this->parameters[$constructor->class] = $constructor->getParameters();
113 113
         }
114
-        return $this->parameters[ $constructor->class ];
114
+        return $this->parameters[$constructor->class];
115 115
     }
116 116
 
117 117
 
@@ -146,7 +146,7 @@  discard block
 block discarded – undo
146 146
         // let's examine the constructor
147 147
         $constructor = $this->getConstructor($reflector);
148 148
         // whu? huh? nothing?
149
-        if (! $constructor) {
149
+        if ( ! $constructor) {
150 150
             return $arguments;
151 151
         }
152 152
         // get constructor parameters
@@ -159,44 +159,44 @@  discard block
 block discarded – undo
159 159
         $argument_keys = array_keys($arguments);
160 160
         // now loop thru all of the constructors expected parameters
161 161
         foreach ($params as $index => $param) {
162
-            if (! $param instanceof ReflectionParameter) {
162
+            if ( ! $param instanceof ReflectionParameter) {
163 163
                 continue;
164 164
             }
165 165
             // is this a dependency for a specific class ?
166 166
             $param_class = $param->getClass() ? $param->getClass()->name : '';
167 167
             $param_name = $param->getName() ? $param->getName() : '';
168 168
             if (// param is not a class but is specified in the list of ingredients for this Recipe
169
-                is_string($param_name) && isset($ingredients[ $param_name ])
169
+                is_string($param_name) && isset($ingredients[$param_name])
170 170
             ) {
171 171
                 // attempt to inject the dependency
172
-                $resolved_parameters[ $index ] = $ingredients[ $param_name ];
172
+                $resolved_parameters[$index] = $ingredients[$param_name];
173 173
             } elseif (// param is specified in the list of ingredients for this Recipe
174
-            isset($ingredients[ $param_class ])
174
+            isset($ingredients[$param_class])
175 175
             ) { // attempt to inject the dependency
176
-                $resolved_parameters[ $index ] = $this->injectDependency($reflector, $ingredients[ $param_class ]);
176
+                $resolved_parameters[$index] = $this->injectDependency($reflector, $ingredients[$param_class]);
177 177
             } elseif (// param is not even a class
178 178
                 empty($param_class)
179 179
                 // and something already exists in the incoming arguments for this param
180
-                && isset($argument_keys[ $index ], $arguments[ $argument_keys[ $index ] ])
180
+                && isset($argument_keys[$index], $arguments[$argument_keys[$index]])
181 181
             ) {
182 182
                 // add parameter from incoming arguments
183
-                $resolved_parameters[ $index ] = $arguments[ $argument_keys[ $index ] ];
183
+                $resolved_parameters[$index] = $arguments[$argument_keys[$index]];
184 184
             } elseif (// parameter is type hinted as a class, exists as an incoming argument, AND it's the correct class
185 185
                 ! empty($param_class)
186
-                && isset($argument_keys[ $index ], $arguments[ $argument_keys[ $index ] ])
187
-                && $arguments[ $argument_keys[ $index ] ] instanceof $param_class
186
+                && isset($argument_keys[$index], $arguments[$argument_keys[$index]])
187
+                && $arguments[$argument_keys[$index]] instanceof $param_class
188 188
             ) {
189 189
                 // add parameter from incoming arguments
190
-                $resolved_parameters[ $index ] = $arguments[ $argument_keys[ $index ] ];
190
+                $resolved_parameters[$index] = $arguments[$argument_keys[$index]];
191 191
             } elseif (// parameter is type hinted as a class, and should be injected
192 192
             ! empty($param_class)
193 193
             ) {
194 194
                 // attempt to inject the dependency
195
-                $resolved_parameters[ $index ] = $this->injectDependency($reflector, $param_class);
195
+                $resolved_parameters[$index] = $this->injectDependency($reflector, $param_class);
196 196
             } elseif ($param->isOptional()) {
197
-                $resolved_parameters[ $index ] = $param->getDefaultValue();
197
+                $resolved_parameters[$index] = $param->getDefaultValue();
198 198
             } else {
199
-                $resolved_parameters[ $index ] = null;
199
+                $resolved_parameters[$index] = null;
200 200
             }
201 201
         }
202 202
         return $resolved_parameters;
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
     private function injectDependency(ReflectionClass $reflector, $param_class)
213 213
     {
214 214
         $dependency = $this->coffee_pot->brew($param_class);
215
-        if (! $dependency instanceof $param_class) {
215
+        if ( ! $dependency instanceof $param_class) {
216 216
             throw new UnexpectedValueException(
217 217
                 sprintf(
218 218
                     esc_html__(
Please login to merge, or discard this patch.
core/services/container/RegistryContainer.php 2 patches
Indentation   +126 added lines, -126 removed lines patch added patch discarded remove patch
@@ -17,130 +17,130 @@
 block discarded – undo
17 17
 class RegistryContainer implements ArrayAccess, CountableTraversableAggregate
18 18
 {
19 19
 
20
-    /**
21
-     * @var array $container
22
-     */
23
-    private $container;
24
-
25
-    /**
26
-     * RegistryContainer constructor.
27
-     * Container data can be seeded by passing parameters to constructor.
28
-     * Each parameter will become its own element in the container
29
-     */
30
-    public function __construct()
31
-    {
32
-        $this->container = func_get_args();
33
-        if (func_num_args() === 0) {
34
-            $this->container = array();
35
-        }
36
-    }
37
-
38
-
39
-    /**
40
-     * @param mixed $offset
41
-     * @param mixed $value
42
-     */
43
-    public function offsetSet($offset, $value)
44
-    {
45
-        $this->container[ $offset ] = $value;
46
-    }
47
-
48
-
49
-    /**
50
-     * @param mixed $offset
51
-     * @return bool
52
-     */
53
-    public function offsetExists($offset)
54
-    {
55
-        return isset($this->container[ $offset ]);
56
-    }
57
-
58
-
59
-    /**
60
-     * @param mixed $offset
61
-     */
62
-    public function offsetUnset($offset)
63
-    {
64
-        unset($this->container[ $offset ]);
65
-    }
66
-
67
-
68
-    /**
69
-     * @param mixed $offset
70
-     * @return mixed|null
71
-     */
72
-    public function offsetGet($offset)
73
-    {
74
-        return isset($this->container[ $offset ]) ? $this->container[ $offset ] : null;
75
-    }
76
-
77
-
78
-    /**
79
-     * @return int
80
-     */
81
-    public function count()
82
-    {
83
-        return count($this->container);
84
-    }
85
-
86
-
87
-    /**
88
-     * @return ArrayIterator
89
-     */
90
-    public function getIterator()
91
-    {
92
-        return new ArrayIterator($this->container);
93
-    }
94
-
95
-
96
-    /**
97
-     * @param $offset
98
-     * @param $value
99
-     */
100
-    public function __set($offset, $value)
101
-    {
102
-        $this->container[ $offset ] = $value;
103
-    }
104
-
105
-
106
-    /**
107
-     * @param $offset
108
-     * @return mixed
109
-     * @throws OutOfBoundsException
110
-     */
111
-    public function __get($offset)
112
-    {
113
-        if (array_key_exists($offset, $this->container)) {
114
-            return $this->container[ $offset ];
115
-        }
116
-        $trace = debug_backtrace();
117
-        throw new OutOfBoundsException(
118
-            sprintf(
119
-                esc_html__('Invalid offset: %1$s %2$sCalled from %3$s on line %4$d', 'event_espresso'),
120
-                $offset,
121
-                '<br  />',
122
-                $trace[0]['file'],
123
-                $trace[0]['line']
124
-            )
125
-        );
126
-    }
127
-
128
-
129
-    /**
130
-     * @param $offset
131
-     * @return bool
132
-     */
133
-    public function __isset($offset)
134
-    {
135
-        return isset($this->container[ $offset ]);
136
-    }
137
-
138
-
139
-    /**
140
-     * @param $offset
141
-     */
142
-    public function __unset($offset)
143
-    {
144
-        unset($this->container[ $offset ]);
145
-    }
20
+	/**
21
+	 * @var array $container
22
+	 */
23
+	private $container;
24
+
25
+	/**
26
+	 * RegistryContainer constructor.
27
+	 * Container data can be seeded by passing parameters to constructor.
28
+	 * Each parameter will become its own element in the container
29
+	 */
30
+	public function __construct()
31
+	{
32
+		$this->container = func_get_args();
33
+		if (func_num_args() === 0) {
34
+			$this->container = array();
35
+		}
36
+	}
37
+
38
+
39
+	/**
40
+	 * @param mixed $offset
41
+	 * @param mixed $value
42
+	 */
43
+	public function offsetSet($offset, $value)
44
+	{
45
+		$this->container[ $offset ] = $value;
46
+	}
47
+
48
+
49
+	/**
50
+	 * @param mixed $offset
51
+	 * @return bool
52
+	 */
53
+	public function offsetExists($offset)
54
+	{
55
+		return isset($this->container[ $offset ]);
56
+	}
57
+
58
+
59
+	/**
60
+	 * @param mixed $offset
61
+	 */
62
+	public function offsetUnset($offset)
63
+	{
64
+		unset($this->container[ $offset ]);
65
+	}
66
+
67
+
68
+	/**
69
+	 * @param mixed $offset
70
+	 * @return mixed|null
71
+	 */
72
+	public function offsetGet($offset)
73
+	{
74
+		return isset($this->container[ $offset ]) ? $this->container[ $offset ] : null;
75
+	}
76
+
77
+
78
+	/**
79
+	 * @return int
80
+	 */
81
+	public function count()
82
+	{
83
+		return count($this->container);
84
+	}
85
+
86
+
87
+	/**
88
+	 * @return ArrayIterator
89
+	 */
90
+	public function getIterator()
91
+	{
92
+		return new ArrayIterator($this->container);
93
+	}
94
+
95
+
96
+	/**
97
+	 * @param $offset
98
+	 * @param $value
99
+	 */
100
+	public function __set($offset, $value)
101
+	{
102
+		$this->container[ $offset ] = $value;
103
+	}
104
+
105
+
106
+	/**
107
+	 * @param $offset
108
+	 * @return mixed
109
+	 * @throws OutOfBoundsException
110
+	 */
111
+	public function __get($offset)
112
+	{
113
+		if (array_key_exists($offset, $this->container)) {
114
+			return $this->container[ $offset ];
115
+		}
116
+		$trace = debug_backtrace();
117
+		throw new OutOfBoundsException(
118
+			sprintf(
119
+				esc_html__('Invalid offset: %1$s %2$sCalled from %3$s on line %4$d', 'event_espresso'),
120
+				$offset,
121
+				'<br  />',
122
+				$trace[0]['file'],
123
+				$trace[0]['line']
124
+			)
125
+		);
126
+	}
127
+
128
+
129
+	/**
130
+	 * @param $offset
131
+	 * @return bool
132
+	 */
133
+	public function __isset($offset)
134
+	{
135
+		return isset($this->container[ $offset ]);
136
+	}
137
+
138
+
139
+	/**
140
+	 * @param $offset
141
+	 */
142
+	public function __unset($offset)
143
+	{
144
+		unset($this->container[ $offset ]);
145
+	}
146 146
 }
Please login to merge, or discard this patch.
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -42,7 +42,7 @@  discard block
 block discarded – undo
42 42
      */
43 43
     public function offsetSet($offset, $value)
44 44
     {
45
-        $this->container[ $offset ] = $value;
45
+        $this->container[$offset] = $value;
46 46
     }
47 47
 
48 48
 
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
      */
53 53
     public function offsetExists($offset)
54 54
     {
55
-        return isset($this->container[ $offset ]);
55
+        return isset($this->container[$offset]);
56 56
     }
57 57
 
58 58
 
@@ -61,7 +61,7 @@  discard block
 block discarded – undo
61 61
      */
62 62
     public function offsetUnset($offset)
63 63
     {
64
-        unset($this->container[ $offset ]);
64
+        unset($this->container[$offset]);
65 65
     }
66 66
 
67 67
 
@@ -71,7 +71,7 @@  discard block
 block discarded – undo
71 71
      */
72 72
     public function offsetGet($offset)
73 73
     {
74
-        return isset($this->container[ $offset ]) ? $this->container[ $offset ] : null;
74
+        return isset($this->container[$offset]) ? $this->container[$offset] : null;
75 75
     }
76 76
 
77 77
 
@@ -99,7 +99,7 @@  discard block
 block discarded – undo
99 99
      */
100 100
     public function __set($offset, $value)
101 101
     {
102
-        $this->container[ $offset ] = $value;
102
+        $this->container[$offset] = $value;
103 103
     }
104 104
 
105 105
 
@@ -111,7 +111,7 @@  discard block
 block discarded – undo
111 111
     public function __get($offset)
112 112
     {
113 113
         if (array_key_exists($offset, $this->container)) {
114
-            return $this->container[ $offset ];
114
+            return $this->container[$offset];
115 115
         }
116 116
         $trace = debug_backtrace();
117 117
         throw new OutOfBoundsException(
@@ -132,7 +132,7 @@  discard block
 block discarded – undo
132 132
      */
133 133
     public function __isset($offset)
134 134
     {
135
-        return isset($this->container[ $offset ]);
135
+        return isset($this->container[$offset]);
136 136
     }
137 137
 
138 138
 
@@ -141,6 +141,6 @@  discard block
 block discarded – undo
141 141
      */
142 142
     public function __unset($offset)
143 143
     {
144
-        unset($this->container[ $offset ]);
144
+        unset($this->container[$offset]);
145 145
     }
146 146
 }
Please login to merge, or discard this patch.
core/services/container/Recipe.php 2 patches
Indentation   +306 added lines, -306 removed lines patch added patch discarded remove patch
@@ -19,310 +19,310 @@
 block discarded – undo
19 19
 class Recipe implements RecipeInterface
20 20
 {
21 21
 
22
-    /**
23
-     * A default Recipe to use if none is specified for a class
24
-     */
25
-    const DEFAULT_ID = '*';
26
-
27
-    /**
28
-     * Identifier for the entity class to be constructed.
29
-     * Typically a Fully Qualified Class Name
30
-     *
31
-     * @var string $identifier
32
-     */
33
-    private $identifier;
34
-
35
-    /**
36
-     * Fully Qualified Class Name
37
-     *
38
-     * @var string $fqcn
39
-     */
40
-    private $fqcn;
41
-
42
-    /**
43
-     * a dependency class map array
44
-     * If a Recipe is for a single class (or group of classes that shares the EXACT SAME constructor arguments),
45
-     * and that class type hints for an interface, then this property allows you to configure what dependencies
46
-     * get used when instantiating the class.
47
-     * For example:
48
-     *  There's a class called Coffee, and one of its constructor arguments is BeanInterface
49
-     *  There are two implementations of BeanInterface: HonduranBean, and KenyanBean
50
-     *  We want one Coffee object to use HonduranBean for its BeanInterface,
51
-     *  and the 2nd Coffee object to use KenyanBean for its BeanInterface.
52
-     *  To do this, we need to create two Recipes:
53
-     *      one with an identifier of 'HonduranCoffee' using the following ingredients :
54
-     *          array('BeanInterface' => 'HonduranBean')
55
-     *      and the other with an identifier of 'KenyanCoffee' using the following ingredients :
56
-     *          array('BeanInterface' => 'KenyanBean')
57
-     *  Then, whenever the CoffeeShop brews an instance of HonduranCoffee,
58
-     *  an instance of HonduranBean will get injected for the BeanInterface dependency,
59
-     *  and whenever the CoffeeShop brews an instance of KenyanCoffee,
60
-     *  an instance of KenyanBean will get injected for the BeanInterface dependency
61
-     *
62
-     * @var array $ingredients
63
-     */
64
-    private $ingredients = array();
65
-
66
-    /**
67
-     * one of the class constants from CoffeeShop:
68
-     *  CoffeeMaker::BREW_NEW - creates a new instance
69
-     *  CoffeeMaker::BREW_SHARED - creates a shared instance
70
-     *  CoffeeMaker::BREW_LOAD_ONLY - loads but does not instantiate
71
-     *
72
-     * @var string $type
73
-     */
74
-    private $type;
75
-
76
-    /**
77
-     * class name aliases - typically a Fully Qualified Interface that the class implements
78
-     * identifiers passed to the CoffeeShop will be run through the filters to find the correct class name
79
-     *
80
-     * @var array $filters
81
-     */
82
-    private $filters = array();
83
-
84
-    /**
85
-     * array of full server filepaths to files that may contain the class
86
-     *
87
-     * @var array $paths
88
-     */
89
-    private $paths = array();
90
-
91
-
92
-    /**
93
-     * Recipe constructor.
94
-     *
95
-     * @param string $identifier    class identifier, can be an alias, or FQCN, or whatever
96
-     * @param string $fqcn          \Fully\Qualified\ClassName, optional if $identifier is FQCN
97
-     * @param array  $ingredients   array of dependencies that can not be resolved automatically,
98
-     *                              used for resolving concrete classes for type hinted interfaces
99
-     *                              for the dependencies of THIS class
100
-     * @param string $type          recipe type: one of the class constants on
101
-     *                              \EventEspresso\core\services\container\CoffeeMaker
102
-     * @param array  $filters       array of class aliases, or class interfaces
103
-     *                              this works somewhat opposite to the $ingredients array above,
104
-     *                              in that this array specifies interfaces or aliases
105
-     *                              that this Recipe can be used for when resolving OTHER class's dependencies
106
-     * @param array  $paths         if class can not be loaded via PSR-4 autoloading,
107
-     *                              then supply a filepath, or array of filepaths, so that it can be included
108
-     * @throws InvalidIdentifierException
109
-     * @throws RuntimeException
110
-     * @throws InvalidInterfaceException
111
-     * @throws InvalidClassException
112
-     * @throws InvalidDataTypeException
113
-     */
114
-    public function __construct(
115
-        $identifier,
116
-        $fqcn = '',
117
-        array $filters = array(),
118
-        array $ingredients = array(),
119
-        $type = CoffeeMaker::BREW_NEW,
120
-        array $paths = array()
121
-    ) {
122
-        $this->setIdentifier($identifier);
123
-        $this->setFilters($filters);
124
-        $this->setIngredients($ingredients);
125
-        $this->setType($type);
126
-        $this->setPaths($paths);
127
-        $this->setFqcn($fqcn);
128
-    }
129
-
130
-
131
-    /**
132
-     * @return string
133
-     */
134
-    public function identifier()
135
-    {
136
-        return $this->identifier;
137
-    }
138
-
139
-
140
-    /**
141
-     * @return string
142
-     */
143
-    public function fqcn()
144
-    {
145
-        return $this->fqcn;
146
-    }
147
-
148
-
149
-    /**
150
-     * @return array
151
-     */
152
-    public function filters()
153
-    {
154
-        return $this->filters;
155
-    }
156
-
157
-
158
-    /**
159
-     * @return array
160
-     */
161
-    public function ingredients()
162
-    {
163
-        return $this->ingredients;
164
-    }
165
-
166
-
167
-    /**
168
-     * @return string
169
-     */
170
-    public function type()
171
-    {
172
-        return $this->type;
173
-    }
174
-
175
-
176
-    /**
177
-     * @return array
178
-     */
179
-    public function paths()
180
-    {
181
-        return $this->paths;
182
-    }
183
-
184
-
185
-    /**
186
-     * @param  string $identifier Identifier for the entity class that the Recipe applies to
187
-     *                            Typically a Fully Qualified Class Name
188
-     * @throws InvalidIdentifierException
189
-     */
190
-    public function setIdentifier($identifier)
191
-    {
192
-        if (! is_string($identifier) || empty($identifier)) {
193
-            throw new InvalidIdentifierException(
194
-                is_object($identifier) ? get_class($identifier) : gettype($identifier),
195
-                __('class identifier (typically a \Fully\Qualified\ClassName)', 'event_espresso')
196
-            );
197
-        }
198
-        $this->identifier = $identifier;
199
-    }
200
-
201
-
202
-    /**
203
-     * Ensures incoming string is a valid Fully Qualified Class Name,
204
-     * except if this is the default wildcard Recipe ( * ),
205
-     * or it's NOT an actual FQCN because the Recipe is using filepaths
206
-     * for classes that are not PSR-4 compatible
207
-     * PLZ NOTE:
208
-     *  Recipe::setFqcn() has a check to see if Recipe::$paths is empty or not,
209
-     *  therefore you should always call Recipe::setPaths() before Recipe::setFqcn()
210
-     *
211
-     * @param string $fqcn
212
-     * @throws InvalidDataTypeException
213
-     * @throws InvalidClassException
214
-     * @throws InvalidInterfaceException
215
-     */
216
-    public function setFqcn($fqcn)
217
-    {
218
-        $fqcn = ! empty($fqcn) ? $fqcn : $this->identifier;
219
-        if (! is_string($fqcn)) {
220
-            throw new InvalidDataTypeException(
221
-                '$fqcn',
222
-                is_object($fqcn) ? get_class($fqcn) : gettype($fqcn),
223
-                __('string (Fully\Qualified\ClassName)', 'event_espresso')
224
-            );
225
-        }
226
-        $fqcn = ltrim($fqcn, '\\');
227
-        if ($fqcn !== Recipe::DEFAULT_ID
228
-            && ! empty($fqcn)
229
-            && empty($this->paths)
230
-            && ! (class_exists($fqcn) || interface_exists($fqcn))
231
-        ) {
232
-            throw new InvalidClassException($fqcn);
233
-        }
234
-        $this->fqcn = $fqcn;
235
-    }
236
-
237
-
238
-    /**
239
-     * @param array $ingredients    an array of dependencies where keys are the aliases and values are the FQCNs
240
-     *                              example:
241
-     *                              array( 'ClassInterface' => 'Fully\Qualified\ClassName' )
242
-     * @throws InvalidDataTypeException
243
-     */
244
-    public function setIngredients(array $ingredients)
245
-    {
246
-        if (empty($ingredients)) {
247
-            return;
248
-        }
249
-        if (! is_array($ingredients)) {
250
-            throw new InvalidDataTypeException(
251
-                '$ingredients',
252
-                is_object($ingredients) ? get_class($ingredients) : gettype($ingredients),
253
-                __('array of class dependencies', 'event_espresso')
254
-            );
255
-        }
256
-        $this->ingredients = array_merge($this->ingredients, $ingredients);
257
-    }
258
-
259
-
260
-    /**
261
-     * @param string $type one of the class constants returned from CoffeeMaker::getTypes()
262
-     * @throws InvalidIdentifierException
263
-     */
264
-    public function setType($type = CoffeeMaker::BREW_NEW)
265
-    {
266
-        $this->type = CoffeeMaker::validateType($type);
267
-    }
268
-
269
-
270
-    /**
271
-     * @param array $filters    an array of filters where keys are the aliases and values are the FQCNs
272
-     *                          example:
273
-     *                          array( 'ClassInterface' => 'Fully\Qualified\ClassName' )
274
-     * @throws InvalidDataTypeException
275
-     */
276
-    public function setFilters(array $filters)
277
-    {
278
-        if (empty($filters)) {
279
-            return;
280
-        }
281
-        if (! is_array($filters)) {
282
-            throw new InvalidDataTypeException(
283
-                '$filters',
284
-                is_object($filters) ? get_class($filters) : gettype($filters),
285
-                __('array of class aliases', 'event_espresso')
286
-            );
287
-        }
288
-        $this->filters = array_merge($this->filters, $filters);
289
-    }
290
-
291
-
292
-    /**
293
-     * Ensures incoming paths is a valid filepath, or array of valid filepaths,
294
-     * and merges them in with any existing filepaths
295
-     * PLZ NOTE:
296
-     *  Recipe::setFqcn() has a check to see if Recipe::$paths is empty or not,
297
-     *  therefore you should always call Recipe::setPaths() before Recipe::setFqcn()
298
-     *
299
-     * @param string|array $paths
300
-     * @throws RuntimeException
301
-     * @throws InvalidDataTypeException
302
-     */
303
-    public function setPaths($paths = array())
304
-    {
305
-        if (empty($paths)) {
306
-            return;
307
-        }
308
-        if (! (is_string($paths) || is_array($paths))) {
309
-            throw new InvalidDataTypeException(
310
-                '$path',
311
-                is_object($paths) ? get_class($paths) : gettype($paths),
312
-                __('string or array of strings (full server filepath(s))', 'event_espresso')
313
-            );
314
-        }
315
-        $paths = (array) $paths;
316
-        foreach ($paths as $path) {
317
-            if (strpos($path, '*') === false && ! is_readable($path)) {
318
-                throw new RuntimeException(
319
-                    sprintf(
320
-                        __('The following filepath is not readable: "%1$s"', 'event_espresso'),
321
-                        $path
322
-                    )
323
-                );
324
-            }
325
-        }
326
-        $this->paths = array_merge($this->paths, $paths);
327
-    }
22
+	/**
23
+	 * A default Recipe to use if none is specified for a class
24
+	 */
25
+	const DEFAULT_ID = '*';
26
+
27
+	/**
28
+	 * Identifier for the entity class to be constructed.
29
+	 * Typically a Fully Qualified Class Name
30
+	 *
31
+	 * @var string $identifier
32
+	 */
33
+	private $identifier;
34
+
35
+	/**
36
+	 * Fully Qualified Class Name
37
+	 *
38
+	 * @var string $fqcn
39
+	 */
40
+	private $fqcn;
41
+
42
+	/**
43
+	 * a dependency class map array
44
+	 * If a Recipe is for a single class (or group of classes that shares the EXACT SAME constructor arguments),
45
+	 * and that class type hints for an interface, then this property allows you to configure what dependencies
46
+	 * get used when instantiating the class.
47
+	 * For example:
48
+	 *  There's a class called Coffee, and one of its constructor arguments is BeanInterface
49
+	 *  There are two implementations of BeanInterface: HonduranBean, and KenyanBean
50
+	 *  We want one Coffee object to use HonduranBean for its BeanInterface,
51
+	 *  and the 2nd Coffee object to use KenyanBean for its BeanInterface.
52
+	 *  To do this, we need to create two Recipes:
53
+	 *      one with an identifier of 'HonduranCoffee' using the following ingredients :
54
+	 *          array('BeanInterface' => 'HonduranBean')
55
+	 *      and the other with an identifier of 'KenyanCoffee' using the following ingredients :
56
+	 *          array('BeanInterface' => 'KenyanBean')
57
+	 *  Then, whenever the CoffeeShop brews an instance of HonduranCoffee,
58
+	 *  an instance of HonduranBean will get injected for the BeanInterface dependency,
59
+	 *  and whenever the CoffeeShop brews an instance of KenyanCoffee,
60
+	 *  an instance of KenyanBean will get injected for the BeanInterface dependency
61
+	 *
62
+	 * @var array $ingredients
63
+	 */
64
+	private $ingredients = array();
65
+
66
+	/**
67
+	 * one of the class constants from CoffeeShop:
68
+	 *  CoffeeMaker::BREW_NEW - creates a new instance
69
+	 *  CoffeeMaker::BREW_SHARED - creates a shared instance
70
+	 *  CoffeeMaker::BREW_LOAD_ONLY - loads but does not instantiate
71
+	 *
72
+	 * @var string $type
73
+	 */
74
+	private $type;
75
+
76
+	/**
77
+	 * class name aliases - typically a Fully Qualified Interface that the class implements
78
+	 * identifiers passed to the CoffeeShop will be run through the filters to find the correct class name
79
+	 *
80
+	 * @var array $filters
81
+	 */
82
+	private $filters = array();
83
+
84
+	/**
85
+	 * array of full server filepaths to files that may contain the class
86
+	 *
87
+	 * @var array $paths
88
+	 */
89
+	private $paths = array();
90
+
91
+
92
+	/**
93
+	 * Recipe constructor.
94
+	 *
95
+	 * @param string $identifier    class identifier, can be an alias, or FQCN, or whatever
96
+	 * @param string $fqcn          \Fully\Qualified\ClassName, optional if $identifier is FQCN
97
+	 * @param array  $ingredients   array of dependencies that can not be resolved automatically,
98
+	 *                              used for resolving concrete classes for type hinted interfaces
99
+	 *                              for the dependencies of THIS class
100
+	 * @param string $type          recipe type: one of the class constants on
101
+	 *                              \EventEspresso\core\services\container\CoffeeMaker
102
+	 * @param array  $filters       array of class aliases, or class interfaces
103
+	 *                              this works somewhat opposite to the $ingredients array above,
104
+	 *                              in that this array specifies interfaces or aliases
105
+	 *                              that this Recipe can be used for when resolving OTHER class's dependencies
106
+	 * @param array  $paths         if class can not be loaded via PSR-4 autoloading,
107
+	 *                              then supply a filepath, or array of filepaths, so that it can be included
108
+	 * @throws InvalidIdentifierException
109
+	 * @throws RuntimeException
110
+	 * @throws InvalidInterfaceException
111
+	 * @throws InvalidClassException
112
+	 * @throws InvalidDataTypeException
113
+	 */
114
+	public function __construct(
115
+		$identifier,
116
+		$fqcn = '',
117
+		array $filters = array(),
118
+		array $ingredients = array(),
119
+		$type = CoffeeMaker::BREW_NEW,
120
+		array $paths = array()
121
+	) {
122
+		$this->setIdentifier($identifier);
123
+		$this->setFilters($filters);
124
+		$this->setIngredients($ingredients);
125
+		$this->setType($type);
126
+		$this->setPaths($paths);
127
+		$this->setFqcn($fqcn);
128
+	}
129
+
130
+
131
+	/**
132
+	 * @return string
133
+	 */
134
+	public function identifier()
135
+	{
136
+		return $this->identifier;
137
+	}
138
+
139
+
140
+	/**
141
+	 * @return string
142
+	 */
143
+	public function fqcn()
144
+	{
145
+		return $this->fqcn;
146
+	}
147
+
148
+
149
+	/**
150
+	 * @return array
151
+	 */
152
+	public function filters()
153
+	{
154
+		return $this->filters;
155
+	}
156
+
157
+
158
+	/**
159
+	 * @return array
160
+	 */
161
+	public function ingredients()
162
+	{
163
+		return $this->ingredients;
164
+	}
165
+
166
+
167
+	/**
168
+	 * @return string
169
+	 */
170
+	public function type()
171
+	{
172
+		return $this->type;
173
+	}
174
+
175
+
176
+	/**
177
+	 * @return array
178
+	 */
179
+	public function paths()
180
+	{
181
+		return $this->paths;
182
+	}
183
+
184
+
185
+	/**
186
+	 * @param  string $identifier Identifier for the entity class that the Recipe applies to
187
+	 *                            Typically a Fully Qualified Class Name
188
+	 * @throws InvalidIdentifierException
189
+	 */
190
+	public function setIdentifier($identifier)
191
+	{
192
+		if (! is_string($identifier) || empty($identifier)) {
193
+			throw new InvalidIdentifierException(
194
+				is_object($identifier) ? get_class($identifier) : gettype($identifier),
195
+				__('class identifier (typically a \Fully\Qualified\ClassName)', 'event_espresso')
196
+			);
197
+		}
198
+		$this->identifier = $identifier;
199
+	}
200
+
201
+
202
+	/**
203
+	 * Ensures incoming string is a valid Fully Qualified Class Name,
204
+	 * except if this is the default wildcard Recipe ( * ),
205
+	 * or it's NOT an actual FQCN because the Recipe is using filepaths
206
+	 * for classes that are not PSR-4 compatible
207
+	 * PLZ NOTE:
208
+	 *  Recipe::setFqcn() has a check to see if Recipe::$paths is empty or not,
209
+	 *  therefore you should always call Recipe::setPaths() before Recipe::setFqcn()
210
+	 *
211
+	 * @param string $fqcn
212
+	 * @throws InvalidDataTypeException
213
+	 * @throws InvalidClassException
214
+	 * @throws InvalidInterfaceException
215
+	 */
216
+	public function setFqcn($fqcn)
217
+	{
218
+		$fqcn = ! empty($fqcn) ? $fqcn : $this->identifier;
219
+		if (! is_string($fqcn)) {
220
+			throw new InvalidDataTypeException(
221
+				'$fqcn',
222
+				is_object($fqcn) ? get_class($fqcn) : gettype($fqcn),
223
+				__('string (Fully\Qualified\ClassName)', 'event_espresso')
224
+			);
225
+		}
226
+		$fqcn = ltrim($fqcn, '\\');
227
+		if ($fqcn !== Recipe::DEFAULT_ID
228
+			&& ! empty($fqcn)
229
+			&& empty($this->paths)
230
+			&& ! (class_exists($fqcn) || interface_exists($fqcn))
231
+		) {
232
+			throw new InvalidClassException($fqcn);
233
+		}
234
+		$this->fqcn = $fqcn;
235
+	}
236
+
237
+
238
+	/**
239
+	 * @param array $ingredients    an array of dependencies where keys are the aliases and values are the FQCNs
240
+	 *                              example:
241
+	 *                              array( 'ClassInterface' => 'Fully\Qualified\ClassName' )
242
+	 * @throws InvalidDataTypeException
243
+	 */
244
+	public function setIngredients(array $ingredients)
245
+	{
246
+		if (empty($ingredients)) {
247
+			return;
248
+		}
249
+		if (! is_array($ingredients)) {
250
+			throw new InvalidDataTypeException(
251
+				'$ingredients',
252
+				is_object($ingredients) ? get_class($ingredients) : gettype($ingredients),
253
+				__('array of class dependencies', 'event_espresso')
254
+			);
255
+		}
256
+		$this->ingredients = array_merge($this->ingredients, $ingredients);
257
+	}
258
+
259
+
260
+	/**
261
+	 * @param string $type one of the class constants returned from CoffeeMaker::getTypes()
262
+	 * @throws InvalidIdentifierException
263
+	 */
264
+	public function setType($type = CoffeeMaker::BREW_NEW)
265
+	{
266
+		$this->type = CoffeeMaker::validateType($type);
267
+	}
268
+
269
+
270
+	/**
271
+	 * @param array $filters    an array of filters where keys are the aliases and values are the FQCNs
272
+	 *                          example:
273
+	 *                          array( 'ClassInterface' => 'Fully\Qualified\ClassName' )
274
+	 * @throws InvalidDataTypeException
275
+	 */
276
+	public function setFilters(array $filters)
277
+	{
278
+		if (empty($filters)) {
279
+			return;
280
+		}
281
+		if (! is_array($filters)) {
282
+			throw new InvalidDataTypeException(
283
+				'$filters',
284
+				is_object($filters) ? get_class($filters) : gettype($filters),
285
+				__('array of class aliases', 'event_espresso')
286
+			);
287
+		}
288
+		$this->filters = array_merge($this->filters, $filters);
289
+	}
290
+
291
+
292
+	/**
293
+	 * Ensures incoming paths is a valid filepath, or array of valid filepaths,
294
+	 * and merges them in with any existing filepaths
295
+	 * PLZ NOTE:
296
+	 *  Recipe::setFqcn() has a check to see if Recipe::$paths is empty or not,
297
+	 *  therefore you should always call Recipe::setPaths() before Recipe::setFqcn()
298
+	 *
299
+	 * @param string|array $paths
300
+	 * @throws RuntimeException
301
+	 * @throws InvalidDataTypeException
302
+	 */
303
+	public function setPaths($paths = array())
304
+	{
305
+		if (empty($paths)) {
306
+			return;
307
+		}
308
+		if (! (is_string($paths) || is_array($paths))) {
309
+			throw new InvalidDataTypeException(
310
+				'$path',
311
+				is_object($paths) ? get_class($paths) : gettype($paths),
312
+				__('string or array of strings (full server filepath(s))', 'event_espresso')
313
+			);
314
+		}
315
+		$paths = (array) $paths;
316
+		foreach ($paths as $path) {
317
+			if (strpos($path, '*') === false && ! is_readable($path)) {
318
+				throw new RuntimeException(
319
+					sprintf(
320
+						__('The following filepath is not readable: "%1$s"', 'event_espresso'),
321
+						$path
322
+					)
323
+				);
324
+			}
325
+		}
326
+		$this->paths = array_merge($this->paths, $paths);
327
+	}
328 328
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
      */
190 190
     public function setIdentifier($identifier)
191 191
     {
192
-        if (! is_string($identifier) || empty($identifier)) {
192
+        if ( ! is_string($identifier) || empty($identifier)) {
193 193
             throw new InvalidIdentifierException(
194 194
                 is_object($identifier) ? get_class($identifier) : gettype($identifier),
195 195
                 __('class identifier (typically a \Fully\Qualified\ClassName)', 'event_espresso')
@@ -216,7 +216,7 @@  discard block
 block discarded – undo
216 216
     public function setFqcn($fqcn)
217 217
     {
218 218
         $fqcn = ! empty($fqcn) ? $fqcn : $this->identifier;
219
-        if (! is_string($fqcn)) {
219
+        if ( ! is_string($fqcn)) {
220 220
             throw new InvalidDataTypeException(
221 221
                 '$fqcn',
222 222
                 is_object($fqcn) ? get_class($fqcn) : gettype($fqcn),
@@ -246,7 +246,7 @@  discard block
 block discarded – undo
246 246
         if (empty($ingredients)) {
247 247
             return;
248 248
         }
249
-        if (! is_array($ingredients)) {
249
+        if ( ! is_array($ingredients)) {
250 250
             throw new InvalidDataTypeException(
251 251
                 '$ingredients',
252 252
                 is_object($ingredients) ? get_class($ingredients) : gettype($ingredients),
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
         if (empty($filters)) {
279 279
             return;
280 280
         }
281
-        if (! is_array($filters)) {
281
+        if ( ! is_array($filters)) {
282 282
             throw new InvalidDataTypeException(
283 283
                 '$filters',
284 284
                 is_object($filters) ? get_class($filters) : gettype($filters),
@@ -305,7 +305,7 @@  discard block
 block discarded – undo
305 305
         if (empty($paths)) {
306 306
             return;
307 307
         }
308
-        if (! (is_string($paths) || is_array($paths))) {
308
+        if ( ! (is_string($paths) || is_array($paths))) {
309 309
             throw new InvalidDataTypeException(
310 310
                 '$path',
311 311
                 is_object($paths) ? get_class($paths) : gettype($paths),
Please login to merge, or discard this patch.
core/services/formatters/Windows1252.php 1 patch
Indentation   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -17,34 +17,34 @@
 block discarded – undo
17 17
 class Windows1252 extends FormatterBase
18 18
 {
19 19
 
20
-    /**
21
-     * Converts the string to windows-1252 encoding.
22
-     *
23
-     * @param string|int|float $input anything easily cast into a string
24
-     * @return string
25
-     */
26
-    public function format($input)
27
-    {
28
-        // in case an int or float etc was passed in
29
-        $input = (string) $input;
30
-        if (function_exists('iconv')) {
31
-            $input = iconv('utf-8', 'cp1252//TRANSLIT', $input);
32
-        } elseif (WP_DEBUG) {
33
-            trigger_error(
34
-                sprintf(
35
-                // @codingStandardsIgnoreStart
36
-                    esc_html__(
37
-                        '%1$s could not format the string "%2$s" because the function "%3$s" does not exist. Please verify PHP is installed with this function, see %4$s',
38
-                        'event_espresso'
39
-                    ),
40
-                    // @codingStandardsIgnoreEnd
41
-                    get_class($this),
42
-                    $input,
43
-                    'iconv',
44
-                    '<a href="http://php.net/manual/en/iconv.installation.php">http://php.net/manual/en/iconv.installation.php</a>'
45
-                )
46
-            );
47
-        }
48
-        return $input;
49
-    }
20
+	/**
21
+	 * Converts the string to windows-1252 encoding.
22
+	 *
23
+	 * @param string|int|float $input anything easily cast into a string
24
+	 * @return string
25
+	 */
26
+	public function format($input)
27
+	{
28
+		// in case an int or float etc was passed in
29
+		$input = (string) $input;
30
+		if (function_exists('iconv')) {
31
+			$input = iconv('utf-8', 'cp1252//TRANSLIT', $input);
32
+		} elseif (WP_DEBUG) {
33
+			trigger_error(
34
+				sprintf(
35
+				// @codingStandardsIgnoreStart
36
+					esc_html__(
37
+						'%1$s could not format the string "%2$s" because the function "%3$s" does not exist. Please verify PHP is installed with this function, see %4$s',
38
+						'event_espresso'
39
+					),
40
+					// @codingStandardsIgnoreEnd
41
+					get_class($this),
42
+					$input,
43
+					'iconv',
44
+					'<a href="http://php.net/manual/en/iconv.installation.php">http://php.net/manual/en/iconv.installation.php</a>'
45
+				)
46
+			);
47
+		}
48
+		return $input;
49
+	}
50 50
 }
Please login to merge, or discard this patch.