Completed
Branch Gutenberg/model-select-folders (c9f0f6)
by
unknown
555:08 queued 545:22
created
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/shortcodes/LegacyShortcodesManager.php 2 patches
Indentation   +405 added lines, -405 removed lines patch added patch discarded remove patch
@@ -21,409 +21,409 @@
 block discarded – undo
21 21
 class LegacyShortcodesManager
22 22
 {
23 23
 
24
-    /**
25
-     * @var EE_Registry $registry
26
-     */
27
-    private $registry;
28
-
29
-
30
-    /**
31
-     * LegacyShortcodesManager constructor.
32
-     *
33
-     * @param \EE_Registry $registry
34
-     */
35
-    public function __construct(EE_Registry $registry)
36
-    {
37
-        $this->registry = $registry;
38
-    }
39
-
40
-
41
-    /**
42
-     * @return EE_Registry
43
-     */
44
-    public function registry()
45
-    {
46
-        return $this->registry;
47
-    }
48
-
49
-
50
-    /**
51
-     * registerShortcodes
52
-     *
53
-     * @return void
54
-     */
55
-    public function registerShortcodes()
56
-    {
57
-        $this->registry->shortcodes = $this->getShortcodes();
58
-    }
59
-
60
-
61
-    /**
62
-     * getShortcodes
63
-     *
64
-     * @return array
65
-     */
66
-    public function getShortcodes()
67
-    {
68
-        // previously this method would glob the shortcodes directory
69
-        // then filter that list of shortcodes to register,
70
-        // but now we are going to just supply an empty array.
71
-        // this allows any shortcodes that have not yet been converted to the new system
72
-        // to still get loaded and processed, albeit using the same legacy logic as before
73
-        $shortcodes_to_register = apply_filters(
74
-            'FHEE__EE_Config__register_shortcodes__shortcodes_to_register',
75
-            array()
76
-        );
77
-        if (! empty($shortcodes_to_register)) {
78
-            // cycle thru shortcode folders
79
-            foreach ($shortcodes_to_register as $shortcode_path) {
80
-                // add to list of installed shortcode modules
81
-                $this->registerShortcode($shortcode_path);
82
-            }
83
-        }
84
-        // filter list of installed modules
85
-        return apply_filters(
86
-            'FHEE__EE_Config___register_shortcodes__installed_shortcodes',
87
-            ! empty($this->registry->shortcodes)
88
-                ? $this->registry->shortcodes
89
-                : array()
90
-        );
91
-    }
92
-
93
-
94
-    /**
95
-     *    register_shortcode - makes core aware of this shortcode
96
-     *
97
-     * @access    public
98
-     * @param    string $shortcode_path - full path up to and including shortcode folder
99
-     * @return    bool
100
-     */
101
-    public function registerShortcode($shortcode_path = null)
102
-    {
103
-        do_action('AHEE__EE_Config__register_shortcode__begin', $shortcode_path);
104
-        $shortcode_ext = '.shortcode.php';
105
-        // make all separators match
106
-        $shortcode_path = str_replace(array('\\', '/'), DS, $shortcode_path);
107
-        // does the file path INCLUDE the actual file name as part of the path ?
108
-        if (strpos($shortcode_path, $shortcode_ext) !== false) {
109
-            // grab shortcode file name from directory name and break apart at dots
110
-            $shortcode_file = explode('.', basename($shortcode_path));
111
-            // take first segment from file name pieces and remove class prefix if it exists
112
-            $shortcode = strpos($shortcode_file[0], 'EES_') === 0
113
-                ? substr($shortcode_file[0], 4)
114
-                : $shortcode_file[0];
115
-            // sanitize shortcode directory name
116
-            $shortcode = sanitize_key($shortcode);
117
-            // now we need to rebuild the shortcode path
118
-            $shortcode_path = explode(DS, $shortcode_path);
119
-            // remove last segment
120
-            array_pop($shortcode_path);
121
-            // glue it back together
122
-            $shortcode_path = implode(DS, $shortcode_path) . DS;
123
-        } else {
124
-            // we need to generate the filename based off of the folder name
125
-            // grab and sanitize shortcode directory name
126
-            $shortcode = sanitize_key(basename($shortcode_path));
127
-            $shortcode_path = rtrim($shortcode_path, DS) . DS;
128
-        }
129
-        // create classname from shortcode directory or file name
130
-        $shortcode = str_replace(' ', '_', ucwords(str_replace('_', ' ', $shortcode)));
131
-        // add class prefix
132
-        $shortcode_class = 'EES_' . $shortcode;
133
-        // does the shortcode exist ?
134
-        if (! is_readable($shortcode_path . DS . $shortcode_class . $shortcode_ext)) {
135
-            $msg = sprintf(
136
-                esc_html__(
137
-                    'The requested %1$s shortcode file could not be found or is not readable due to file permissions. It should be in %2$s',
138
-                    'event_espresso'
139
-                ),
140
-                $shortcode_class,
141
-                $shortcode_path . DS . $shortcode_class . $shortcode_ext
142
-            );
143
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
144
-            return false;
145
-        }
146
-        // load the shortcode class file
147
-        require_once($shortcode_path . $shortcode_class . $shortcode_ext);
148
-        // verify that class exists
149
-        if (! class_exists($shortcode_class)) {
150
-            $msg = sprintf(
151
-                esc_html__('The requested %s shortcode class does not exist.', 'event_espresso'),
152
-                $shortcode_class
153
-            );
154
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
155
-            return false;
156
-        }
157
-        $shortcode = strtoupper($shortcode);
158
-        // add to array of registered shortcodes
159
-        $this->registry->shortcodes->{$shortcode} = $shortcode_path . $shortcode_class . $shortcode_ext;
160
-        return true;
161
-    }
162
-
163
-
164
-    /**
165
-     *    _initialize_shortcodes
166
-     *    allow shortcodes to set hooks for the rest of the system
167
-     *
168
-     * @access private
169
-     * @return void
170
-     */
171
-    public function addShortcodes()
172
-    {
173
-        // cycle thru shortcode folders
174
-        foreach ($this->registry->shortcodes as $shortcode => $shortcode_path) {
175
-            // add class prefix
176
-            $shortcode_class = 'EES_' . $shortcode;
177
-            // fire the shortcode class's set_hooks methods in case it needs to hook into other parts of the system
178
-            // which set hooks ?
179
-            if (is_admin()) {
180
-                // fire immediately
181
-                call_user_func(array($shortcode_class, 'set_hooks_admin'));
182
-            } else {
183
-                // delay until other systems are online
184
-                add_action(
185
-                    'AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons',
186
-                    array($shortcode_class, 'set_hooks')
187
-                );
188
-                // convert classname to UPPERCASE and create WP shortcode.
189
-                $shortcode_tag = strtoupper($shortcode);
190
-                // but first check if the shortcode has already
191
-                // been added before assigning 'fallback_shortcode_processor'
192
-                if (! shortcode_exists($shortcode_tag)) {
193
-                    // NOTE: this shortcode declaration will get overridden if the shortcode
194
-                    // is successfully detected in the post content in initializeShortcode()
195
-                    add_shortcode($shortcode_tag, array($shortcode_class, 'fallback_shortcode_processor'));
196
-                }
197
-            }
198
-        }
199
-    }
200
-
201
-
202
-    /**
203
-     * callback for the WP "get_header" hook point
204
-     * checks posts for EE shortcodes, and initializes them,
205
-     * then toggles filter switch that loads core default assets
206
-     *
207
-     * @param \WP_Query $wp_query
208
-     * @return void
209
-     */
210
-    public function initializeShortcodes(WP_Query $wp_query)
211
-    {
212
-        if (empty($this->registry->shortcodes) || ! $wp_query->is_main_query() || is_admin()) {
213
-            return;
214
-        }
215
-        global $wp;
216
-        /** @var EE_Front_controller $Front_Controller */
217
-        $Front_Controller = $this->registry->load_core('Front_Controller', array(), false);
218
-        do_action('AHEE__EE_Front_Controller__initialize_shortcodes__begin', $wp, $Front_Controller);
219
-        $Front_Controller->Request_Handler()->set_request_vars();
220
-        // grab post_name from request
221
-        $current_post = apply_filters(
222
-            'FHEE__EE_Front_Controller__initialize_shortcodes__current_post_name',
223
-            $Front_Controller->Request_Handler()->get('post_name')
224
-        );
225
-        $show_on_front = get_option('show_on_front');
226
-        // if it's not set, then check if frontpage is blog
227
-        if (empty($current_post)) {
228
-            // yup.. this is the posts page, prepare to load all shortcode modules
229
-            $current_post = 'posts';
230
-            // unless..
231
-            if ($show_on_front === 'page') {
232
-                // some other page is set as the homepage
233
-                $page_on_front = get_option('page_on_front');
234
-                if ($page_on_front) {
235
-                    // k now we need to find the post_name for this page
236
-                    global $wpdb;
237
-                    $page_on_front = $wpdb->get_var(
238
-                        $wpdb->prepare(
239
-                            "SELECT post_name from {$wpdb->posts} WHERE post_type='page' AND post_status NOT IN ('auto-draft', 'inherit', 'trash') AND ID=%d",
240
-                            $page_on_front
241
-                        )
242
-                    );
243
-                    // set the current post slug to what it actually is
244
-                    $current_post = $page_on_front ? $page_on_front : $current_post;
245
-                }
246
-            }
247
-        }
248
-        // in case $current_post is hierarchical like: /parent-page/current-page
249
-        $current_post = basename($current_post);
250
-        if (// is current page/post the "blog" page ?
251
-            $current_post === EE_Config::get_page_for_posts()
252
-            // or are we on a category page?
253
-            || (
254
-                is_array(term_exists($current_post, 'category'))
255
-                || array_key_exists('category_name', $wp->query_vars)
256
-            )
257
-        ) {
258
-            // initialize all legacy shortcodes
259
-            $load_assets = $this->parseContentForShortcodes('', true);
260
-        } else {
261
-            global $wpdb;
262
-            $post_content = $wpdb->get_var(
263
-                $wpdb->prepare(
264
-                    "SELECT post_content from {$wpdb->posts} WHERE post_status NOT IN ('auto-draft', 'inherit', 'trash') AND post_name=%s",
265
-                    $current_post
266
-                )
267
-            );
268
-            $load_assets = $this->parseContentForShortcodes($post_content);
269
-        }
270
-        if ($load_assets) {
271
-            $this->registry->REQ->set_espresso_page(true);
272
-            add_filter('FHEE_load_css', '__return_true');
273
-            add_filter('FHEE_load_js', '__return_true');
274
-        }
275
-        do_action('AHEE__EE_Front_Controller__initialize_shortcodes__end', $Front_Controller);
276
-    }
277
-
278
-
279
-    /**
280
-     * checks supplied content against list of legacy shortcodes,
281
-     * then initializes any found shortcodes, and returns true.
282
-     * returns false if no shortcodes found.
283
-     *
284
-     * @param string $content
285
-     * @param bool   $load_all if true, then ALL active legacy shortcodes will be initialized
286
-     * @return bool
287
-     */
288
-    public function parseContentForShortcodes($content = '', $load_all = false)
289
-    {
290
-        $has_shortcode = false;
291
-        foreach ($this->registry->shortcodes as $shortcode_class => $shortcode) {
292
-            if ($load_all || has_shortcode($content, $shortcode_class)) {
293
-                // load up the shortcode
294
-                $this->initializeShortcode($shortcode_class);
295
-                $has_shortcode = true;
296
-            }
297
-        }
298
-        return $has_shortcode;
299
-    }
300
-
301
-
302
-    /**
303
-     * given a shortcode name, will instantiate the shortcode and call it's run() method
304
-     *
305
-     * @param string $shortcode_class
306
-     * @param WP     $wp
307
-     */
308
-    public function initializeShortcode($shortcode_class = '', WP $wp = null)
309
-    {
310
-        // don't do anything if shortcode is already initialized
311
-        if (empty($this->registry->shortcodes->{$shortcode_class})
312
-            || ! is_string($this->registry->shortcodes->{$shortcode_class})
313
-        ) {
314
-            return;
315
-        }
316
-        // let's pause to reflect on this...
317
-        $sc_reflector = new ReflectionClass(LegacyShortcodesManager::addShortcodeClassPrefix($shortcode_class));
318
-        // ensure that class is actually a shortcode
319
-        if (defined('WP_DEBUG')
320
-            && WP_DEBUG === true
321
-            && ! $sc_reflector->isSubclassOf('EES_Shortcode')
322
-        ) {
323
-            EE_Error::add_error(
324
-                sprintf(
325
-                    esc_html__(
326
-                        'The requested %s shortcode is not of the class "EES_Shortcode". Please check your files.',
327
-                        'event_espresso'
328
-                    ),
329
-                    $shortcode_class
330
-                ),
331
-                __FILE__,
332
-                __FUNCTION__,
333
-                __LINE__
334
-            );
335
-            add_filter('FHEE_run_EE_the_content', '__return_true');
336
-            return;
337
-        }
338
-        global $wp;
339
-        // and pass the request object to the run method
340
-        $this->registry->shortcodes->{$shortcode_class} = $sc_reflector->newInstance();
341
-        // fire the shortcode class's run method, so that it can activate resources
342
-        $this->registry->shortcodes->{$shortcode_class}->run($wp);
343
-    }
344
-
345
-
346
-    /**
347
-     * get classname, remove EES_prefix, and convert to UPPERCASE
348
-     *
349
-     * @param string $class_name
350
-     * @return string
351
-     */
352
-    public static function generateShortcodeTagFromClassName($class_name)
353
-    {
354
-        return strtoupper(str_replace('EES_', '', $class_name));
355
-    }
356
-
357
-
358
-    /**
359
-     * add EES_prefix and Capitalize words
360
-     *
361
-     * @param string $tag
362
-     * @return string
363
-     */
364
-    public static function generateShortcodeClassNameFromTag($tag)
365
-    {
366
-        // order of operation runs from inside to out
367
-        // 5) maybe add prefix
368
-        return LegacyShortcodesManager::addShortcodeClassPrefix(
369
-            // 4) find spaces, replace with underscores
370
-            str_replace(
371
-                ' ',
372
-                '_',
373
-                // 3) capitalize first letter of each word
374
-                ucwords(
375
-                    // 2) also change to lowercase so ucwords() will work
376
-                    strtolower(
377
-                        // 1) find underscores, replace with spaces so ucwords() will work
378
-                        str_replace(
379
-                            '_',
380
-                            ' ',
381
-                            $tag
382
-                        )
383
-                    )
384
-                )
385
-            )
386
-        );
387
-    }
388
-
389
-
390
-    /**
391
-     * maybe add EES_prefix
392
-     *
393
-     * @param string $class_name
394
-     * @return string
395
-     */
396
-    public static function addShortcodeClassPrefix($class_name)
397
-    {
398
-        return strpos($class_name, 'EES_') === 0 ? $class_name : 'EES_' . $class_name;
399
-    }
400
-
401
-
402
-    /**
403
-     * @return array
404
-     */
405
-    public function getEspressoShortcodeTags()
406
-    {
407
-        static $shortcode_tags = array();
408
-        if (empty($shortcode_tags)) {
409
-            $shortcode_tags = array_keys((array) $this->registry->shortcodes);
410
-        }
411
-        return $shortcode_tags;
412
-    }
413
-
414
-
415
-    /**
416
-     * @param string $content
417
-     * @return string
418
-     */
419
-    public function doShortcode($content)
420
-    {
421
-        foreach ($this->getEspressoShortcodeTags() as $shortcode_tag) {
422
-            if (strpos($content, $shortcode_tag) !== false) {
423
-                $shortcode_class = LegacyShortcodesManager::generateShortcodeClassNameFromTag($shortcode_tag);
424
-                $this->initializeShortcode($shortcode_class);
425
-            }
426
-        }
427
-        return do_shortcode($content);
428
-    }
24
+	/**
25
+	 * @var EE_Registry $registry
26
+	 */
27
+	private $registry;
28
+
29
+
30
+	/**
31
+	 * LegacyShortcodesManager constructor.
32
+	 *
33
+	 * @param \EE_Registry $registry
34
+	 */
35
+	public function __construct(EE_Registry $registry)
36
+	{
37
+		$this->registry = $registry;
38
+	}
39
+
40
+
41
+	/**
42
+	 * @return EE_Registry
43
+	 */
44
+	public function registry()
45
+	{
46
+		return $this->registry;
47
+	}
48
+
49
+
50
+	/**
51
+	 * registerShortcodes
52
+	 *
53
+	 * @return void
54
+	 */
55
+	public function registerShortcodes()
56
+	{
57
+		$this->registry->shortcodes = $this->getShortcodes();
58
+	}
59
+
60
+
61
+	/**
62
+	 * getShortcodes
63
+	 *
64
+	 * @return array
65
+	 */
66
+	public function getShortcodes()
67
+	{
68
+		// previously this method would glob the shortcodes directory
69
+		// then filter that list of shortcodes to register,
70
+		// but now we are going to just supply an empty array.
71
+		// this allows any shortcodes that have not yet been converted to the new system
72
+		// to still get loaded and processed, albeit using the same legacy logic as before
73
+		$shortcodes_to_register = apply_filters(
74
+			'FHEE__EE_Config__register_shortcodes__shortcodes_to_register',
75
+			array()
76
+		);
77
+		if (! empty($shortcodes_to_register)) {
78
+			// cycle thru shortcode folders
79
+			foreach ($shortcodes_to_register as $shortcode_path) {
80
+				// add to list of installed shortcode modules
81
+				$this->registerShortcode($shortcode_path);
82
+			}
83
+		}
84
+		// filter list of installed modules
85
+		return apply_filters(
86
+			'FHEE__EE_Config___register_shortcodes__installed_shortcodes',
87
+			! empty($this->registry->shortcodes)
88
+				? $this->registry->shortcodes
89
+				: array()
90
+		);
91
+	}
92
+
93
+
94
+	/**
95
+	 *    register_shortcode - makes core aware of this shortcode
96
+	 *
97
+	 * @access    public
98
+	 * @param    string $shortcode_path - full path up to and including shortcode folder
99
+	 * @return    bool
100
+	 */
101
+	public function registerShortcode($shortcode_path = null)
102
+	{
103
+		do_action('AHEE__EE_Config__register_shortcode__begin', $shortcode_path);
104
+		$shortcode_ext = '.shortcode.php';
105
+		// make all separators match
106
+		$shortcode_path = str_replace(array('\\', '/'), DS, $shortcode_path);
107
+		// does the file path INCLUDE the actual file name as part of the path ?
108
+		if (strpos($shortcode_path, $shortcode_ext) !== false) {
109
+			// grab shortcode file name from directory name and break apart at dots
110
+			$shortcode_file = explode('.', basename($shortcode_path));
111
+			// take first segment from file name pieces and remove class prefix if it exists
112
+			$shortcode = strpos($shortcode_file[0], 'EES_') === 0
113
+				? substr($shortcode_file[0], 4)
114
+				: $shortcode_file[0];
115
+			// sanitize shortcode directory name
116
+			$shortcode = sanitize_key($shortcode);
117
+			// now we need to rebuild the shortcode path
118
+			$shortcode_path = explode(DS, $shortcode_path);
119
+			// remove last segment
120
+			array_pop($shortcode_path);
121
+			// glue it back together
122
+			$shortcode_path = implode(DS, $shortcode_path) . DS;
123
+		} else {
124
+			// we need to generate the filename based off of the folder name
125
+			// grab and sanitize shortcode directory name
126
+			$shortcode = sanitize_key(basename($shortcode_path));
127
+			$shortcode_path = rtrim($shortcode_path, DS) . DS;
128
+		}
129
+		// create classname from shortcode directory or file name
130
+		$shortcode = str_replace(' ', '_', ucwords(str_replace('_', ' ', $shortcode)));
131
+		// add class prefix
132
+		$shortcode_class = 'EES_' . $shortcode;
133
+		// does the shortcode exist ?
134
+		if (! is_readable($shortcode_path . DS . $shortcode_class . $shortcode_ext)) {
135
+			$msg = sprintf(
136
+				esc_html__(
137
+					'The requested %1$s shortcode file could not be found or is not readable due to file permissions. It should be in %2$s',
138
+					'event_espresso'
139
+				),
140
+				$shortcode_class,
141
+				$shortcode_path . DS . $shortcode_class . $shortcode_ext
142
+			);
143
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
144
+			return false;
145
+		}
146
+		// load the shortcode class file
147
+		require_once($shortcode_path . $shortcode_class . $shortcode_ext);
148
+		// verify that class exists
149
+		if (! class_exists($shortcode_class)) {
150
+			$msg = sprintf(
151
+				esc_html__('The requested %s shortcode class does not exist.', 'event_espresso'),
152
+				$shortcode_class
153
+			);
154
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
155
+			return false;
156
+		}
157
+		$shortcode = strtoupper($shortcode);
158
+		// add to array of registered shortcodes
159
+		$this->registry->shortcodes->{$shortcode} = $shortcode_path . $shortcode_class . $shortcode_ext;
160
+		return true;
161
+	}
162
+
163
+
164
+	/**
165
+	 *    _initialize_shortcodes
166
+	 *    allow shortcodes to set hooks for the rest of the system
167
+	 *
168
+	 * @access private
169
+	 * @return void
170
+	 */
171
+	public function addShortcodes()
172
+	{
173
+		// cycle thru shortcode folders
174
+		foreach ($this->registry->shortcodes as $shortcode => $shortcode_path) {
175
+			// add class prefix
176
+			$shortcode_class = 'EES_' . $shortcode;
177
+			// fire the shortcode class's set_hooks methods in case it needs to hook into other parts of the system
178
+			// which set hooks ?
179
+			if (is_admin()) {
180
+				// fire immediately
181
+				call_user_func(array($shortcode_class, 'set_hooks_admin'));
182
+			} else {
183
+				// delay until other systems are online
184
+				add_action(
185
+					'AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons',
186
+					array($shortcode_class, 'set_hooks')
187
+				);
188
+				// convert classname to UPPERCASE and create WP shortcode.
189
+				$shortcode_tag = strtoupper($shortcode);
190
+				// but first check if the shortcode has already
191
+				// been added before assigning 'fallback_shortcode_processor'
192
+				if (! shortcode_exists($shortcode_tag)) {
193
+					// NOTE: this shortcode declaration will get overridden if the shortcode
194
+					// is successfully detected in the post content in initializeShortcode()
195
+					add_shortcode($shortcode_tag, array($shortcode_class, 'fallback_shortcode_processor'));
196
+				}
197
+			}
198
+		}
199
+	}
200
+
201
+
202
+	/**
203
+	 * callback for the WP "get_header" hook point
204
+	 * checks posts for EE shortcodes, and initializes them,
205
+	 * then toggles filter switch that loads core default assets
206
+	 *
207
+	 * @param \WP_Query $wp_query
208
+	 * @return void
209
+	 */
210
+	public function initializeShortcodes(WP_Query $wp_query)
211
+	{
212
+		if (empty($this->registry->shortcodes) || ! $wp_query->is_main_query() || is_admin()) {
213
+			return;
214
+		}
215
+		global $wp;
216
+		/** @var EE_Front_controller $Front_Controller */
217
+		$Front_Controller = $this->registry->load_core('Front_Controller', array(), false);
218
+		do_action('AHEE__EE_Front_Controller__initialize_shortcodes__begin', $wp, $Front_Controller);
219
+		$Front_Controller->Request_Handler()->set_request_vars();
220
+		// grab post_name from request
221
+		$current_post = apply_filters(
222
+			'FHEE__EE_Front_Controller__initialize_shortcodes__current_post_name',
223
+			$Front_Controller->Request_Handler()->get('post_name')
224
+		);
225
+		$show_on_front = get_option('show_on_front');
226
+		// if it's not set, then check if frontpage is blog
227
+		if (empty($current_post)) {
228
+			// yup.. this is the posts page, prepare to load all shortcode modules
229
+			$current_post = 'posts';
230
+			// unless..
231
+			if ($show_on_front === 'page') {
232
+				// some other page is set as the homepage
233
+				$page_on_front = get_option('page_on_front');
234
+				if ($page_on_front) {
235
+					// k now we need to find the post_name for this page
236
+					global $wpdb;
237
+					$page_on_front = $wpdb->get_var(
238
+						$wpdb->prepare(
239
+							"SELECT post_name from {$wpdb->posts} WHERE post_type='page' AND post_status NOT IN ('auto-draft', 'inherit', 'trash') AND ID=%d",
240
+							$page_on_front
241
+						)
242
+					);
243
+					// set the current post slug to what it actually is
244
+					$current_post = $page_on_front ? $page_on_front : $current_post;
245
+				}
246
+			}
247
+		}
248
+		// in case $current_post is hierarchical like: /parent-page/current-page
249
+		$current_post = basename($current_post);
250
+		if (// is current page/post the "blog" page ?
251
+			$current_post === EE_Config::get_page_for_posts()
252
+			// or are we on a category page?
253
+			|| (
254
+				is_array(term_exists($current_post, 'category'))
255
+				|| array_key_exists('category_name', $wp->query_vars)
256
+			)
257
+		) {
258
+			// initialize all legacy shortcodes
259
+			$load_assets = $this->parseContentForShortcodes('', true);
260
+		} else {
261
+			global $wpdb;
262
+			$post_content = $wpdb->get_var(
263
+				$wpdb->prepare(
264
+					"SELECT post_content from {$wpdb->posts} WHERE post_status NOT IN ('auto-draft', 'inherit', 'trash') AND post_name=%s",
265
+					$current_post
266
+				)
267
+			);
268
+			$load_assets = $this->parseContentForShortcodes($post_content);
269
+		}
270
+		if ($load_assets) {
271
+			$this->registry->REQ->set_espresso_page(true);
272
+			add_filter('FHEE_load_css', '__return_true');
273
+			add_filter('FHEE_load_js', '__return_true');
274
+		}
275
+		do_action('AHEE__EE_Front_Controller__initialize_shortcodes__end', $Front_Controller);
276
+	}
277
+
278
+
279
+	/**
280
+	 * checks supplied content against list of legacy shortcodes,
281
+	 * then initializes any found shortcodes, and returns true.
282
+	 * returns false if no shortcodes found.
283
+	 *
284
+	 * @param string $content
285
+	 * @param bool   $load_all if true, then ALL active legacy shortcodes will be initialized
286
+	 * @return bool
287
+	 */
288
+	public function parseContentForShortcodes($content = '', $load_all = false)
289
+	{
290
+		$has_shortcode = false;
291
+		foreach ($this->registry->shortcodes as $shortcode_class => $shortcode) {
292
+			if ($load_all || has_shortcode($content, $shortcode_class)) {
293
+				// load up the shortcode
294
+				$this->initializeShortcode($shortcode_class);
295
+				$has_shortcode = true;
296
+			}
297
+		}
298
+		return $has_shortcode;
299
+	}
300
+
301
+
302
+	/**
303
+	 * given a shortcode name, will instantiate the shortcode and call it's run() method
304
+	 *
305
+	 * @param string $shortcode_class
306
+	 * @param WP     $wp
307
+	 */
308
+	public function initializeShortcode($shortcode_class = '', WP $wp = null)
309
+	{
310
+		// don't do anything if shortcode is already initialized
311
+		if (empty($this->registry->shortcodes->{$shortcode_class})
312
+			|| ! is_string($this->registry->shortcodes->{$shortcode_class})
313
+		) {
314
+			return;
315
+		}
316
+		// let's pause to reflect on this...
317
+		$sc_reflector = new ReflectionClass(LegacyShortcodesManager::addShortcodeClassPrefix($shortcode_class));
318
+		// ensure that class is actually a shortcode
319
+		if (defined('WP_DEBUG')
320
+			&& WP_DEBUG === true
321
+			&& ! $sc_reflector->isSubclassOf('EES_Shortcode')
322
+		) {
323
+			EE_Error::add_error(
324
+				sprintf(
325
+					esc_html__(
326
+						'The requested %s shortcode is not of the class "EES_Shortcode". Please check your files.',
327
+						'event_espresso'
328
+					),
329
+					$shortcode_class
330
+				),
331
+				__FILE__,
332
+				__FUNCTION__,
333
+				__LINE__
334
+			);
335
+			add_filter('FHEE_run_EE_the_content', '__return_true');
336
+			return;
337
+		}
338
+		global $wp;
339
+		// and pass the request object to the run method
340
+		$this->registry->shortcodes->{$shortcode_class} = $sc_reflector->newInstance();
341
+		// fire the shortcode class's run method, so that it can activate resources
342
+		$this->registry->shortcodes->{$shortcode_class}->run($wp);
343
+	}
344
+
345
+
346
+	/**
347
+	 * get classname, remove EES_prefix, and convert to UPPERCASE
348
+	 *
349
+	 * @param string $class_name
350
+	 * @return string
351
+	 */
352
+	public static function generateShortcodeTagFromClassName($class_name)
353
+	{
354
+		return strtoupper(str_replace('EES_', '', $class_name));
355
+	}
356
+
357
+
358
+	/**
359
+	 * add EES_prefix and Capitalize words
360
+	 *
361
+	 * @param string $tag
362
+	 * @return string
363
+	 */
364
+	public static function generateShortcodeClassNameFromTag($tag)
365
+	{
366
+		// order of operation runs from inside to out
367
+		// 5) maybe add prefix
368
+		return LegacyShortcodesManager::addShortcodeClassPrefix(
369
+			// 4) find spaces, replace with underscores
370
+			str_replace(
371
+				' ',
372
+				'_',
373
+				// 3) capitalize first letter of each word
374
+				ucwords(
375
+					// 2) also change to lowercase so ucwords() will work
376
+					strtolower(
377
+						// 1) find underscores, replace with spaces so ucwords() will work
378
+						str_replace(
379
+							'_',
380
+							' ',
381
+							$tag
382
+						)
383
+					)
384
+				)
385
+			)
386
+		);
387
+	}
388
+
389
+
390
+	/**
391
+	 * maybe add EES_prefix
392
+	 *
393
+	 * @param string $class_name
394
+	 * @return string
395
+	 */
396
+	public static function addShortcodeClassPrefix($class_name)
397
+	{
398
+		return strpos($class_name, 'EES_') === 0 ? $class_name : 'EES_' . $class_name;
399
+	}
400
+
401
+
402
+	/**
403
+	 * @return array
404
+	 */
405
+	public function getEspressoShortcodeTags()
406
+	{
407
+		static $shortcode_tags = array();
408
+		if (empty($shortcode_tags)) {
409
+			$shortcode_tags = array_keys((array) $this->registry->shortcodes);
410
+		}
411
+		return $shortcode_tags;
412
+	}
413
+
414
+
415
+	/**
416
+	 * @param string $content
417
+	 * @return string
418
+	 */
419
+	public function doShortcode($content)
420
+	{
421
+		foreach ($this->getEspressoShortcodeTags() as $shortcode_tag) {
422
+			if (strpos($content, $shortcode_tag) !== false) {
423
+				$shortcode_class = LegacyShortcodesManager::generateShortcodeClassNameFromTag($shortcode_tag);
424
+				$this->initializeShortcode($shortcode_class);
425
+			}
426
+		}
427
+		return do_shortcode($content);
428
+	}
429 429
 }
Please login to merge, or discard this patch.
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -74,7 +74,7 @@  discard block
 block discarded – undo
74 74
             'FHEE__EE_Config__register_shortcodes__shortcodes_to_register',
75 75
             array()
76 76
         );
77
-        if (! empty($shortcodes_to_register)) {
77
+        if ( ! empty($shortcodes_to_register)) {
78 78
             // cycle thru shortcode folders
79 79
             foreach ($shortcodes_to_register as $shortcode_path) {
80 80
                 // add to list of installed shortcode modules
@@ -119,44 +119,44 @@  discard block
 block discarded – undo
119 119
             // remove last segment
120 120
             array_pop($shortcode_path);
121 121
             // glue it back together
122
-            $shortcode_path = implode(DS, $shortcode_path) . DS;
122
+            $shortcode_path = implode(DS, $shortcode_path).DS;
123 123
         } else {
124 124
             // we need to generate the filename based off of the folder name
125 125
             // grab and sanitize shortcode directory name
126 126
             $shortcode = sanitize_key(basename($shortcode_path));
127
-            $shortcode_path = rtrim($shortcode_path, DS) . DS;
127
+            $shortcode_path = rtrim($shortcode_path, DS).DS;
128 128
         }
129 129
         // create classname from shortcode directory or file name
130 130
         $shortcode = str_replace(' ', '_', ucwords(str_replace('_', ' ', $shortcode)));
131 131
         // add class prefix
132
-        $shortcode_class = 'EES_' . $shortcode;
132
+        $shortcode_class = 'EES_'.$shortcode;
133 133
         // does the shortcode exist ?
134
-        if (! is_readable($shortcode_path . DS . $shortcode_class . $shortcode_ext)) {
134
+        if ( ! is_readable($shortcode_path.DS.$shortcode_class.$shortcode_ext)) {
135 135
             $msg = sprintf(
136 136
                 esc_html__(
137 137
                     'The requested %1$s shortcode file could not be found or is not readable due to file permissions. It should be in %2$s',
138 138
                     'event_espresso'
139 139
                 ),
140 140
                 $shortcode_class,
141
-                $shortcode_path . DS . $shortcode_class . $shortcode_ext
141
+                $shortcode_path.DS.$shortcode_class.$shortcode_ext
142 142
             );
143
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
143
+            EE_Error::add_error($msg.'||'.$msg, __FILE__, __FUNCTION__, __LINE__);
144 144
             return false;
145 145
         }
146 146
         // load the shortcode class file
147
-        require_once($shortcode_path . $shortcode_class . $shortcode_ext);
147
+        require_once($shortcode_path.$shortcode_class.$shortcode_ext);
148 148
         // verify that class exists
149
-        if (! class_exists($shortcode_class)) {
149
+        if ( ! class_exists($shortcode_class)) {
150 150
             $msg = sprintf(
151 151
                 esc_html__('The requested %s shortcode class does not exist.', 'event_espresso'),
152 152
                 $shortcode_class
153 153
             );
154
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
154
+            EE_Error::add_error($msg.'||'.$msg, __FILE__, __FUNCTION__, __LINE__);
155 155
             return false;
156 156
         }
157 157
         $shortcode = strtoupper($shortcode);
158 158
         // add to array of registered shortcodes
159
-        $this->registry->shortcodes->{$shortcode} = $shortcode_path . $shortcode_class . $shortcode_ext;
159
+        $this->registry->shortcodes->{$shortcode} = $shortcode_path.$shortcode_class.$shortcode_ext;
160 160
         return true;
161 161
     }
162 162
 
@@ -173,7 +173,7 @@  discard block
 block discarded – undo
173 173
         // cycle thru shortcode folders
174 174
         foreach ($this->registry->shortcodes as $shortcode => $shortcode_path) {
175 175
             // add class prefix
176
-            $shortcode_class = 'EES_' . $shortcode;
176
+            $shortcode_class = 'EES_'.$shortcode;
177 177
             // fire the shortcode class's set_hooks methods in case it needs to hook into other parts of the system
178 178
             // which set hooks ?
179 179
             if (is_admin()) {
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
                 $shortcode_tag = strtoupper($shortcode);
190 190
                 // but first check if the shortcode has already
191 191
                 // been added before assigning 'fallback_shortcode_processor'
192
-                if (! shortcode_exists($shortcode_tag)) {
192
+                if ( ! shortcode_exists($shortcode_tag)) {
193 193
                     // NOTE: this shortcode declaration will get overridden if the shortcode
194 194
                     // is successfully detected in the post content in initializeShortcode()
195 195
                     add_shortcode($shortcode_tag, array($shortcode_class, 'fallback_shortcode_processor'));
@@ -395,7 +395,7 @@  discard block
 block discarded – undo
395 395
      */
396 396
     public static function addShortcodeClassPrefix($class_name)
397 397
     {
398
-        return strpos($class_name, 'EES_') === 0 ? $class_name : 'EES_' . $class_name;
398
+        return strpos($class_name, 'EES_') === 0 ? $class_name : 'EES_'.$class_name;
399 399
     }
400 400
 
401 401
 
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.
core/services/collections/CollectionDetails.php 2 patches
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -192,7 +192,7 @@  discard block
 block discarded – undo
192 192
      */
193 193
     protected function setCollectionInterface($collection_interface)
194 194
     {
195
-        if (! (interface_exists($collection_interface) || class_exists($collection_interface))) {
195
+        if ( ! (interface_exists($collection_interface) || class_exists($collection_interface))) {
196 196
             throw new InvalidInterfaceException($collection_interface);
197 197
         }
198 198
         $this->collection_interface = $collection_interface;
@@ -220,7 +220,7 @@  discard block
 block discarded – undo
220 220
      */
221 221
     protected function setCollectionName($collection_name)
222 222
     {
223
-        if (! is_string($collection_name)) {
223
+        if ( ! is_string($collection_name)) {
224 224
             throw new InvalidDataTypeException('$collection_name', $collection_name, 'string');
225 225
         }
226 226
         $this->collection_name = str_replace(
@@ -248,7 +248,7 @@  discard block
 block discarded – undo
248 248
      */
249 249
     protected function setIdentifierType($identifier_type)
250 250
     {
251
-        if (! ($identifier_type === CollectionDetails::ID_CLASS_NAME
251
+        if ( ! ($identifier_type === CollectionDetails::ID_CLASS_NAME
252 252
                || $identifier_type === CollectionDetails::ID_OBJECT_HASH
253 253
                || $identifier_type === CollectionDetails::ID_CALLBACK_METHOD
254 254
         )) {
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
      */
279 279
     protected function setIdentifierCallback($identifier_callback = 'identifier')
280 280
     {
281
-        if (! is_string($identifier_callback)) {
281
+        if ( ! is_string($identifier_callback)) {
282 282
             throw new InvalidDataTypeException('$identifier_callback', $identifier_callback, 'string');
283 283
         }
284 284
         $this->identifier_callback = $identifier_callback;
@@ -308,7 +308,7 @@  discard block
 block discarded – undo
308 308
         $this->file_mask = ! empty($file_mask) ? $file_mask : '*.php';
309 309
         // we know our default is a string, so if it's not a string now,
310 310
         // then that means the incoming parameter was something else
311
-        if (! is_string($this->file_mask)) {
311
+        if ( ! is_string($this->file_mask)) {
312 312
             throw new InvalidDataTypeException('$file_mask', $this->file_mask, 'string');
313 313
         }
314 314
     }
@@ -333,7 +333,7 @@  discard block
 block discarded – undo
333 333
     public function setCollectionFQCNs($collection_FQCNs)
334 334
     {
335 335
         foreach ((array) $collection_FQCNs as $collection_FQCN) {
336
-            if (! empty($collection_FQCN)) {
336
+            if ( ! empty($collection_FQCN)) {
337 337
                 if (class_exists($collection_FQCN)) {
338 338
                     $this->collection_FQCNs[] = $collection_FQCN;
339 339
                 } else {
@@ -355,7 +355,7 @@  discard block
 block discarded – undo
355 355
      */
356 356
     protected function getFQCNsFromPartialNamespace($partial_FQCN)
357 357
     {
358
-        if (! $this->file_locator instanceof FqcnLocator) {
358
+        if ( ! $this->file_locator instanceof FqcnLocator) {
359 359
             $this->file_locator = new FqcnLocator();
360 360
         }
361 361
         $this->file_locator->locate($partial_FQCN);
@@ -381,8 +381,8 @@  discard block
 block discarded – undo
381 381
     public function setCollectionPaths($collection_paths)
382 382
     {
383 383
         foreach ((array) $collection_paths as $collection_path) {
384
-            if (! empty($collection_path)) {
385
-                if (! is_readable($collection_path)) {
384
+            if ( ! empty($collection_path)) {
385
+                if ( ! is_readable($collection_path)) {
386 386
                     throw new InvalidFilePathException($collection_path);
387 387
                 }
388 388
                 $this->collection_paths[] = $collection_path;
Please login to merge, or discard this patch.
Indentation   +347 added lines, -347 removed lines patch added patch discarded remove patch
@@ -43,351 +43,351 @@
 block discarded – undo
43 43
 class CollectionDetails implements CollectionDetailsInterface
44 44
 {
45 45
 
46
-    /**
47
-     * if $identifier_type is set to this,
48
-     * then the collection will use each object's spl_object_hash() as it's identifier
49
-     */
50
-    const ID_OBJECT_HASH = 'identifier-uses-spl-object-hash';
51
-
52
-    /**
53
-     * if $identifier_type is set to this,
54
-     * then the collection will use each object's class name as it's identifier
55
-     */
56
-    const ID_CLASS_NAME = 'identifier-uses-object-class-name';
57
-
58
-    /**
59
-     * if $identifier_type is set to this,
60
-     * then the collection will use the return value from a specified callback method on each object
61
-     */
62
-    const ID_CALLBACK_METHOD = 'identifier-uses-callback-method';
63
-
64
-    /**
65
-     * The interface used for controlling what gets added to the collection
66
-     *
67
-     * @var string $collection_interface
68
-     */
69
-    protected $collection_interface = '';
70
-
71
-    /**
72
-     * a unique name used to identify the collection in filter names
73
-     * supplied value is run through sanitize_title_with_dashes(),
74
-     * but then also converts dashes to underscores
75
-     *
76
-     * @var string $collection_name
77
-     */
78
-    protected $collection_name = '';
79
-
80
-    /**
81
-     * what the collection uses for the object identifier.
82
-     * corresponds to one of the class constants above.
83
-     * CollectionDetails::ID_OBJECT_HASH will use spl_object_hash( object ) for the identifier
84
-     * CollectionDetails::ID_CLASS_NAME will use get_class( object ) for the identifier
85
-     * CollectionDetails::ID_CALLBACK_METHOD will use a callback for the identifier
86
-     * defaults to using spl_object_hash() so that multiple objects of the same class can be added
87
-     *
88
-     * @var string $identifier_type
89
-     */
90
-    protected $identifier_type = CollectionDetails::ID_OBJECT_HASH;
91
-
92
-    /**
93
-     * the pattern applied to paths when searching for class files to add to the collection
94
-     * ie: "My_Awesome_*.class.php"
95
-     * defaults to "*.php"
96
-     *
97
-     * @var string $file_mask
98
-     */
99
-    protected $file_mask = '';
100
-
101
-    /**
102
-     * if the $identifier_type above is set to CollectionDetails::ID_CALLBACK_METHOD,
103
-     * then this specifies the method to use on each entity.
104
-     * If the callback method does not exist, then an exception will be thrown
105
-     *
106
-     * @var string $identifier_callback
107
-     */
108
-    protected $identifier_callback = '';
109
-
110
-    /**
111
-     * an array of Fully Qualified Class Names
112
-     *  for example:
113
-     *  $FQCNs = array(
114
-     *      '/Fully/Qualified/ClassNameA'
115
-     *      '/Fully/Qualified/Other/ClassNameB'
116
-     *  );
117
-     *
118
-     * @var array $collection_FQCNs
119
-     */
120
-    protected $collection_FQCNs = array();
121
-
122
-    /**
123
-     * an array of full server paths to folders containing files to be loaded into collection
124
-     *  for example:
125
-     *  $paths = array(
126
-     *      '/full/server/path/to/ClassNameA.ext.php' // for class ClassNameA
127
-     *      '/full/server/path/to/other/ClassNameB.php' // for class ClassNameB
128
-     *  );
129
-     *
130
-     * @var array $collection_paths
131
-     */
132
-    protected $collection_paths = array();
133
-
134
-    /**
135
-     * @var LocatorInterface $file_locator
136
-     */
137
-    protected $file_locator;
138
-
139
-
140
-    /**
141
-     * CollectionDetails constructor.
142
-     *
143
-     * @access public
144
-     * @param string           $collection_name
145
-     * @param string           $collection_interface
146
-     * @param array            $collection_FQCNs
147
-     * @param array            $collection_paths
148
-     * @param string           $file_mask
149
-     * @param string           $identifier_type
150
-     * @param string           $identifier_callback
151
-     * @param LocatorInterface $file_locator
152
-     * @throws CollectionDetailsException
153
-     */
154
-    public function __construct(
155
-        $collection_name,
156
-        $collection_interface,
157
-        array $collection_FQCNs = array(),
158
-        array $collection_paths = array(),
159
-        $file_mask = '',
160
-        $identifier_type = CollectionDetails::ID_OBJECT_HASH,
161
-        $identifier_callback = '',
162
-        LocatorInterface $file_locator = null
163
-    ) {
164
-        try {
165
-            $this->setCollectionName($collection_name);
166
-            $this->setCollectionInterface($collection_interface);
167
-            $this->setCollectionFQCNs($collection_FQCNs);
168
-            $this->setCollectionPaths($collection_paths);
169
-            $this->setFileMasks($file_mask);
170
-            $this->setIdentifierType($identifier_type);
171
-            $this->setIdentifierCallback($identifier_callback);
172
-            $this->file_locator = $file_locator;
173
-        } catch (Exception $exception) {
174
-            throw new CollectionDetailsException($exception);
175
-        }
176
-    }
177
-
178
-
179
-    /**
180
-     * @access public
181
-     * @return mixed
182
-     */
183
-    public function getCollectionInterface()
184
-    {
185
-        return $this->collection_interface;
186
-    }
187
-
188
-
189
-    /**
190
-     * @access protected
191
-     * @param string $collection_interface
192
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
193
-     */
194
-    protected function setCollectionInterface($collection_interface)
195
-    {
196
-        if (! (interface_exists($collection_interface) || class_exists($collection_interface))) {
197
-            throw new InvalidInterfaceException($collection_interface);
198
-        }
199
-        $this->collection_interface = $collection_interface;
200
-    }
201
-
202
-
203
-    /**
204
-     * the collection name will be used for creating dynamic filters
205
-     *
206
-     * @access public
207
-     * @return string
208
-     */
209
-    public function collectionName()
210
-    {
211
-        return $this->collection_name;
212
-    }
213
-
214
-
215
-    /**
216
-     * sanitizes collection name and converts spaces and dashes to underscores
217
-     *
218
-     * @access protected
219
-     * @param string $collection_name
220
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
221
-     */
222
-    protected function setCollectionName($collection_name)
223
-    {
224
-        if (! is_string($collection_name)) {
225
-            throw new InvalidDataTypeException('$collection_name', $collection_name, 'string');
226
-        }
227
-        $this->collection_name = str_replace(
228
-            '-',
229
-            '_',
230
-            sanitize_title_with_dashes($collection_name, '', 'save')
231
-        );
232
-    }
233
-
234
-
235
-    /**
236
-     * @access public
237
-     * @return string
238
-     */
239
-    public function identifierType()
240
-    {
241
-        return $this->identifier_type;
242
-    }
243
-
244
-
245
-    /**
246
-     * @access protected
247
-     * @param string $identifier_type
248
-     * @throws InvalidIdentifierException
249
-     */
250
-    protected function setIdentifierType($identifier_type)
251
-    {
252
-        if (! ($identifier_type === CollectionDetails::ID_CLASS_NAME
253
-               || $identifier_type === CollectionDetails::ID_OBJECT_HASH
254
-               || $identifier_type === CollectionDetails::ID_CALLBACK_METHOD
255
-        )) {
256
-            throw new InvalidIdentifierException(
257
-                $identifier_type,
258
-                'CollectionDetails::ID_CLASS_NAME or CollectionDetails::ID_OBJECT_HASH or CollectionDetails::ID_CALLBACK_METHOD'
259
-            );
260
-        }
261
-        $this->identifier_type = $identifier_type;
262
-    }
263
-
264
-
265
-    /**
266
-     * @access public
267
-     * @return string
268
-     */
269
-    public function identifierCallback()
270
-    {
271
-        return $this->identifier_callback;
272
-    }
273
-
274
-
275
-    /**
276
-     * @access protected
277
-     * @param string $identifier_callback
278
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
279
-     */
280
-    protected function setIdentifierCallback($identifier_callback = 'identifier')
281
-    {
282
-        if (! is_string($identifier_callback)) {
283
-            throw new InvalidDataTypeException('$identifier_callback', $identifier_callback, 'string');
284
-        }
285
-        $this->identifier_callback = $identifier_callback;
286
-    }
287
-
288
-
289
-    /**
290
-     * @access public
291
-     * @return string
292
-     */
293
-    public function getFileMask()
294
-    {
295
-        return $this->file_mask;
296
-    }
297
-
298
-
299
-    /**
300
-     * sets the file mask which is then used to filter what files get loaded
301
-     * when searching for classes to add to the collection. Defaults to '*.php'
302
-     *
303
-     * @access protected
304
-     * @param string $file_mask
305
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
306
-     */
307
-    protected function setFileMasks($file_mask)
308
-    {
309
-        $this->file_mask = ! empty($file_mask) ? $file_mask : '*.php';
310
-        // we know our default is a string, so if it's not a string now,
311
-        // then that means the incoming parameter was something else
312
-        if (! is_string($this->file_mask)) {
313
-            throw new InvalidDataTypeException('$file_mask', $this->file_mask, 'string');
314
-        }
315
-    }
316
-
317
-
318
-    /**
319
-     * @access public
320
-     * @return array
321
-     */
322
-    public function getCollectionFQCNs()
323
-    {
324
-        return $this->collection_FQCNs;
325
-    }
326
-
327
-
328
-    /**
329
-     * @access public
330
-     * @param string|array $collection_FQCNs
331
-     * @throws \EventEspresso\core\exceptions\InvalidClassException
332
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
333
-     */
334
-    public function setCollectionFQCNs($collection_FQCNs)
335
-    {
336
-        foreach ((array) $collection_FQCNs as $collection_FQCN) {
337
-            if (! empty($collection_FQCN)) {
338
-                if (class_exists($collection_FQCN)) {
339
-                    $this->collection_FQCNs[] = $collection_FQCN;
340
-                } else {
341
-                    foreach ($this->getFQCNsFromPartialNamespace($collection_FQCN) as $FQCN) {
342
-                        $this->collection_FQCNs[] = $FQCN;
343
-                    }
344
-                }
345
-            }
346
-        }
347
-    }
348
-
349
-
350
-    /**
351
-     * @access protected
352
-     * @param  string $partial_FQCN
353
-     * @return array
354
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
355
-     * @throws \EventEspresso\core\exceptions\InvalidClassException
356
-     */
357
-    protected function getFQCNsFromPartialNamespace($partial_FQCN)
358
-    {
359
-        if (! $this->file_locator instanceof FqcnLocator) {
360
-            $this->file_locator = new FqcnLocator();
361
-        }
362
-        $this->file_locator->locate($partial_FQCN);
363
-        return $this->file_locator->getFQCNs();
364
-    }
365
-
366
-
367
-    /**
368
-     * @access public
369
-     * @return array
370
-     */
371
-    public function getCollectionPaths()
372
-    {
373
-        return $this->collection_paths;
374
-    }
375
-
376
-
377
-    /**
378
-     * @access public
379
-     * @param string|array $collection_paths
380
-     * @throws \EventEspresso\core\exceptions\InvalidFilePathException
381
-     */
382
-    public function setCollectionPaths($collection_paths)
383
-    {
384
-        foreach ((array) $collection_paths as $collection_path) {
385
-            if (! empty($collection_path)) {
386
-                if (! is_readable($collection_path)) {
387
-                    throw new InvalidFilePathException($collection_path);
388
-                }
389
-                $this->collection_paths[] = $collection_path;
390
-            }
391
-        }
392
-    }
46
+	/**
47
+	 * if $identifier_type is set to this,
48
+	 * then the collection will use each object's spl_object_hash() as it's identifier
49
+	 */
50
+	const ID_OBJECT_HASH = 'identifier-uses-spl-object-hash';
51
+
52
+	/**
53
+	 * if $identifier_type is set to this,
54
+	 * then the collection will use each object's class name as it's identifier
55
+	 */
56
+	const ID_CLASS_NAME = 'identifier-uses-object-class-name';
57
+
58
+	/**
59
+	 * if $identifier_type is set to this,
60
+	 * then the collection will use the return value from a specified callback method on each object
61
+	 */
62
+	const ID_CALLBACK_METHOD = 'identifier-uses-callback-method';
63
+
64
+	/**
65
+	 * The interface used for controlling what gets added to the collection
66
+	 *
67
+	 * @var string $collection_interface
68
+	 */
69
+	protected $collection_interface = '';
70
+
71
+	/**
72
+	 * a unique name used to identify the collection in filter names
73
+	 * supplied value is run through sanitize_title_with_dashes(),
74
+	 * but then also converts dashes to underscores
75
+	 *
76
+	 * @var string $collection_name
77
+	 */
78
+	protected $collection_name = '';
79
+
80
+	/**
81
+	 * what the collection uses for the object identifier.
82
+	 * corresponds to one of the class constants above.
83
+	 * CollectionDetails::ID_OBJECT_HASH will use spl_object_hash( object ) for the identifier
84
+	 * CollectionDetails::ID_CLASS_NAME will use get_class( object ) for the identifier
85
+	 * CollectionDetails::ID_CALLBACK_METHOD will use a callback for the identifier
86
+	 * defaults to using spl_object_hash() so that multiple objects of the same class can be added
87
+	 *
88
+	 * @var string $identifier_type
89
+	 */
90
+	protected $identifier_type = CollectionDetails::ID_OBJECT_HASH;
91
+
92
+	/**
93
+	 * the pattern applied to paths when searching for class files to add to the collection
94
+	 * ie: "My_Awesome_*.class.php"
95
+	 * defaults to "*.php"
96
+	 *
97
+	 * @var string $file_mask
98
+	 */
99
+	protected $file_mask = '';
100
+
101
+	/**
102
+	 * if the $identifier_type above is set to CollectionDetails::ID_CALLBACK_METHOD,
103
+	 * then this specifies the method to use on each entity.
104
+	 * If the callback method does not exist, then an exception will be thrown
105
+	 *
106
+	 * @var string $identifier_callback
107
+	 */
108
+	protected $identifier_callback = '';
109
+
110
+	/**
111
+	 * an array of Fully Qualified Class Names
112
+	 *  for example:
113
+	 *  $FQCNs = array(
114
+	 *      '/Fully/Qualified/ClassNameA'
115
+	 *      '/Fully/Qualified/Other/ClassNameB'
116
+	 *  );
117
+	 *
118
+	 * @var array $collection_FQCNs
119
+	 */
120
+	protected $collection_FQCNs = array();
121
+
122
+	/**
123
+	 * an array of full server paths to folders containing files to be loaded into collection
124
+	 *  for example:
125
+	 *  $paths = array(
126
+	 *      '/full/server/path/to/ClassNameA.ext.php' // for class ClassNameA
127
+	 *      '/full/server/path/to/other/ClassNameB.php' // for class ClassNameB
128
+	 *  );
129
+	 *
130
+	 * @var array $collection_paths
131
+	 */
132
+	protected $collection_paths = array();
133
+
134
+	/**
135
+	 * @var LocatorInterface $file_locator
136
+	 */
137
+	protected $file_locator;
138
+
139
+
140
+	/**
141
+	 * CollectionDetails constructor.
142
+	 *
143
+	 * @access public
144
+	 * @param string           $collection_name
145
+	 * @param string           $collection_interface
146
+	 * @param array            $collection_FQCNs
147
+	 * @param array            $collection_paths
148
+	 * @param string           $file_mask
149
+	 * @param string           $identifier_type
150
+	 * @param string           $identifier_callback
151
+	 * @param LocatorInterface $file_locator
152
+	 * @throws CollectionDetailsException
153
+	 */
154
+	public function __construct(
155
+		$collection_name,
156
+		$collection_interface,
157
+		array $collection_FQCNs = array(),
158
+		array $collection_paths = array(),
159
+		$file_mask = '',
160
+		$identifier_type = CollectionDetails::ID_OBJECT_HASH,
161
+		$identifier_callback = '',
162
+		LocatorInterface $file_locator = null
163
+	) {
164
+		try {
165
+			$this->setCollectionName($collection_name);
166
+			$this->setCollectionInterface($collection_interface);
167
+			$this->setCollectionFQCNs($collection_FQCNs);
168
+			$this->setCollectionPaths($collection_paths);
169
+			$this->setFileMasks($file_mask);
170
+			$this->setIdentifierType($identifier_type);
171
+			$this->setIdentifierCallback($identifier_callback);
172
+			$this->file_locator = $file_locator;
173
+		} catch (Exception $exception) {
174
+			throw new CollectionDetailsException($exception);
175
+		}
176
+	}
177
+
178
+
179
+	/**
180
+	 * @access public
181
+	 * @return mixed
182
+	 */
183
+	public function getCollectionInterface()
184
+	{
185
+		return $this->collection_interface;
186
+	}
187
+
188
+
189
+	/**
190
+	 * @access protected
191
+	 * @param string $collection_interface
192
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
193
+	 */
194
+	protected function setCollectionInterface($collection_interface)
195
+	{
196
+		if (! (interface_exists($collection_interface) || class_exists($collection_interface))) {
197
+			throw new InvalidInterfaceException($collection_interface);
198
+		}
199
+		$this->collection_interface = $collection_interface;
200
+	}
201
+
202
+
203
+	/**
204
+	 * the collection name will be used for creating dynamic filters
205
+	 *
206
+	 * @access public
207
+	 * @return string
208
+	 */
209
+	public function collectionName()
210
+	{
211
+		return $this->collection_name;
212
+	}
213
+
214
+
215
+	/**
216
+	 * sanitizes collection name and converts spaces and dashes to underscores
217
+	 *
218
+	 * @access protected
219
+	 * @param string $collection_name
220
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
221
+	 */
222
+	protected function setCollectionName($collection_name)
223
+	{
224
+		if (! is_string($collection_name)) {
225
+			throw new InvalidDataTypeException('$collection_name', $collection_name, 'string');
226
+		}
227
+		$this->collection_name = str_replace(
228
+			'-',
229
+			'_',
230
+			sanitize_title_with_dashes($collection_name, '', 'save')
231
+		);
232
+	}
233
+
234
+
235
+	/**
236
+	 * @access public
237
+	 * @return string
238
+	 */
239
+	public function identifierType()
240
+	{
241
+		return $this->identifier_type;
242
+	}
243
+
244
+
245
+	/**
246
+	 * @access protected
247
+	 * @param string $identifier_type
248
+	 * @throws InvalidIdentifierException
249
+	 */
250
+	protected function setIdentifierType($identifier_type)
251
+	{
252
+		if (! ($identifier_type === CollectionDetails::ID_CLASS_NAME
253
+			   || $identifier_type === CollectionDetails::ID_OBJECT_HASH
254
+			   || $identifier_type === CollectionDetails::ID_CALLBACK_METHOD
255
+		)) {
256
+			throw new InvalidIdentifierException(
257
+				$identifier_type,
258
+				'CollectionDetails::ID_CLASS_NAME or CollectionDetails::ID_OBJECT_HASH or CollectionDetails::ID_CALLBACK_METHOD'
259
+			);
260
+		}
261
+		$this->identifier_type = $identifier_type;
262
+	}
263
+
264
+
265
+	/**
266
+	 * @access public
267
+	 * @return string
268
+	 */
269
+	public function identifierCallback()
270
+	{
271
+		return $this->identifier_callback;
272
+	}
273
+
274
+
275
+	/**
276
+	 * @access protected
277
+	 * @param string $identifier_callback
278
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
279
+	 */
280
+	protected function setIdentifierCallback($identifier_callback = 'identifier')
281
+	{
282
+		if (! is_string($identifier_callback)) {
283
+			throw new InvalidDataTypeException('$identifier_callback', $identifier_callback, 'string');
284
+		}
285
+		$this->identifier_callback = $identifier_callback;
286
+	}
287
+
288
+
289
+	/**
290
+	 * @access public
291
+	 * @return string
292
+	 */
293
+	public function getFileMask()
294
+	{
295
+		return $this->file_mask;
296
+	}
297
+
298
+
299
+	/**
300
+	 * sets the file mask which is then used to filter what files get loaded
301
+	 * when searching for classes to add to the collection. Defaults to '*.php'
302
+	 *
303
+	 * @access protected
304
+	 * @param string $file_mask
305
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
306
+	 */
307
+	protected function setFileMasks($file_mask)
308
+	{
309
+		$this->file_mask = ! empty($file_mask) ? $file_mask : '*.php';
310
+		// we know our default is a string, so if it's not a string now,
311
+		// then that means the incoming parameter was something else
312
+		if (! is_string($this->file_mask)) {
313
+			throw new InvalidDataTypeException('$file_mask', $this->file_mask, 'string');
314
+		}
315
+	}
316
+
317
+
318
+	/**
319
+	 * @access public
320
+	 * @return array
321
+	 */
322
+	public function getCollectionFQCNs()
323
+	{
324
+		return $this->collection_FQCNs;
325
+	}
326
+
327
+
328
+	/**
329
+	 * @access public
330
+	 * @param string|array $collection_FQCNs
331
+	 * @throws \EventEspresso\core\exceptions\InvalidClassException
332
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
333
+	 */
334
+	public function setCollectionFQCNs($collection_FQCNs)
335
+	{
336
+		foreach ((array) $collection_FQCNs as $collection_FQCN) {
337
+			if (! empty($collection_FQCN)) {
338
+				if (class_exists($collection_FQCN)) {
339
+					$this->collection_FQCNs[] = $collection_FQCN;
340
+				} else {
341
+					foreach ($this->getFQCNsFromPartialNamespace($collection_FQCN) as $FQCN) {
342
+						$this->collection_FQCNs[] = $FQCN;
343
+					}
344
+				}
345
+			}
346
+		}
347
+	}
348
+
349
+
350
+	/**
351
+	 * @access protected
352
+	 * @param  string $partial_FQCN
353
+	 * @return array
354
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
355
+	 * @throws \EventEspresso\core\exceptions\InvalidClassException
356
+	 */
357
+	protected function getFQCNsFromPartialNamespace($partial_FQCN)
358
+	{
359
+		if (! $this->file_locator instanceof FqcnLocator) {
360
+			$this->file_locator = new FqcnLocator();
361
+		}
362
+		$this->file_locator->locate($partial_FQCN);
363
+		return $this->file_locator->getFQCNs();
364
+	}
365
+
366
+
367
+	/**
368
+	 * @access public
369
+	 * @return array
370
+	 */
371
+	public function getCollectionPaths()
372
+	{
373
+		return $this->collection_paths;
374
+	}
375
+
376
+
377
+	/**
378
+	 * @access public
379
+	 * @param string|array $collection_paths
380
+	 * @throws \EventEspresso\core\exceptions\InvalidFilePathException
381
+	 */
382
+	public function setCollectionPaths($collection_paths)
383
+	{
384
+		foreach ((array) $collection_paths as $collection_path) {
385
+			if (! empty($collection_path)) {
386
+				if (! is_readable($collection_path)) {
387
+					throw new InvalidFilePathException($collection_path);
388
+				}
389
+				$this->collection_paths[] = $collection_path;
390
+			}
391
+		}
392
+	}
393 393
 }
Please login to merge, or discard this patch.
core/services/licensing/LicenseService.php 2 patches
Indentation   +90 added lines, -90 removed lines patch added patch discarded remove patch
@@ -15,94 +15,94 @@
 block discarded – undo
15 15
  */
16 16
 class LicenseService
17 17
 {
18
-    /**
19
-     * @var Config
20
-     */
21
-    private $config;
22
-
23
-
24
-    /**
25
-     * @var Stats
26
-     */
27
-    private $stats_collection;
28
-
29
-    public function __construct(Stats $stats_collection, Config $config)
30
-    {
31
-        $this->config = $config;
32
-        $this->stats_collection = $stats_collection;
33
-        $this->loadPueClient();
34
-    }
35
-
36
-    private function loadPueClient()
37
-    {
38
-        // PUE Auto Upgrades stuff
39
-        if (is_readable(EE_THIRD_PARTY . 'pue/pue-client.php')) { // include the file
40
-            require_once(EE_THIRD_PARTY . 'pue/pue-client.php');
41
-
42
-            // $options needs to be an array with the included keys as listed.
43
-            $options = array(
44
-                // 'optionName' => '', //(optional) - used as the reference for saving update information in the
45
-                // clients options table.  Will be automatically set if left blank.
46
-                'apikey'                => $this->config->siteLicenseKey(),
47
-                // (required), you will need to obtain the apikey that the client gets from your site and
48
-                // then saves in their sites options table (see 'getting an api-key' below)
49
-                'lang_domain'           => $this->config->i18nDomain(),
50
-                // (optional) - put here whatever reference you are using for the localization of your plugin (if it's
51
-                // localized).  That way strings in this file will be included in the translation for your plugin.
52
-                'checkPeriod'           => $this->config->checkPeriod(),
53
-                // (optional) - use this parameter to indicate how often you want the client's install to ping your
54
-                // server for update checks.  The integer indicates hours.  If you don't include this parameter it will
55
-                // default to 12 hours.
56
-                'option_key'            => $this->config->optionKey(),
57
-                // this is what is used to reference the api_key in your plugin options.  PUE uses this to trigger
58
-                // updating your information message whenever this option_key is modified.
59
-                'options_page_slug'     => $this->config->optionsPageSlug(),
60
-                'plugin_basename'       => EE_PLUGIN_BASENAME,
61
-                'use_wp_update'         => true,
62
-                // if TRUE then you want FREE versions of the plugin to be updated from WP
63
-                'extra_stats'           => $this->stats_collection->statsCallback(),
64
-                'turn_on_notices_saved' => true,
65
-            );
66
-            // initiate the class and start the plugin update engine!
67
-            new PluginUpdateEngineChecker(
68
-                $this->config->hostServerUrl(),
69
-                $this->config->pluginSlug(),
70
-                $options
71
-            );
72
-        }
73
-    }
74
-
75
-
76
-    /**
77
-     * This is a handy helper method for retrieving whether there is an update available for the given plugin.
78
-     *
79
-     * @param  string $basename Use the equivalent result from plugin_basename() for this param as WP uses that to
80
-     *                          identify plugins. Defaults to core update
81
-     * @return boolean           True if update available, false if not.
82
-     */
83
-    public static function isUpdateAvailable($basename = '')
84
-    {
85
-        $basename = ! empty($basename) ? $basename : EE_PLUGIN_BASENAME;
86
-
87
-        $update = false;
88
-
89
-        // should take "event-espresso-core/espresso.php" and change to "/event-espresso-core"
90
-        $folder = DS . dirname($basename);
91
-
92
-        $plugins = get_plugins($folder);
93
-        $current = get_site_transient('update_plugins');
94
-
95
-        foreach ((array) $plugins as $plugin_file => $plugin_data) {
96
-            if (isset($current->response['plugin_file'])) {
97
-                $update = true;
98
-            }
99
-        }
100
-
101
-        // it's possible that there is an update but an invalid site-license-key is in use
102
-        if (get_site_option('pue_json_error_' . $basename)) {
103
-            $update = true;
104
-        }
105
-
106
-        return $update;
107
-    }
18
+	/**
19
+	 * @var Config
20
+	 */
21
+	private $config;
22
+
23
+
24
+	/**
25
+	 * @var Stats
26
+	 */
27
+	private $stats_collection;
28
+
29
+	public function __construct(Stats $stats_collection, Config $config)
30
+	{
31
+		$this->config = $config;
32
+		$this->stats_collection = $stats_collection;
33
+		$this->loadPueClient();
34
+	}
35
+
36
+	private function loadPueClient()
37
+	{
38
+		// PUE Auto Upgrades stuff
39
+		if (is_readable(EE_THIRD_PARTY . 'pue/pue-client.php')) { // include the file
40
+			require_once(EE_THIRD_PARTY . 'pue/pue-client.php');
41
+
42
+			// $options needs to be an array with the included keys as listed.
43
+			$options = array(
44
+				// 'optionName' => '', //(optional) - used as the reference for saving update information in the
45
+				// clients options table.  Will be automatically set if left blank.
46
+				'apikey'                => $this->config->siteLicenseKey(),
47
+				// (required), you will need to obtain the apikey that the client gets from your site and
48
+				// then saves in their sites options table (see 'getting an api-key' below)
49
+				'lang_domain'           => $this->config->i18nDomain(),
50
+				// (optional) - put here whatever reference you are using for the localization of your plugin (if it's
51
+				// localized).  That way strings in this file will be included in the translation for your plugin.
52
+				'checkPeriod'           => $this->config->checkPeriod(),
53
+				// (optional) - use this parameter to indicate how often you want the client's install to ping your
54
+				// server for update checks.  The integer indicates hours.  If you don't include this parameter it will
55
+				// default to 12 hours.
56
+				'option_key'            => $this->config->optionKey(),
57
+				// this is what is used to reference the api_key in your plugin options.  PUE uses this to trigger
58
+				// updating your information message whenever this option_key is modified.
59
+				'options_page_slug'     => $this->config->optionsPageSlug(),
60
+				'plugin_basename'       => EE_PLUGIN_BASENAME,
61
+				'use_wp_update'         => true,
62
+				// if TRUE then you want FREE versions of the plugin to be updated from WP
63
+				'extra_stats'           => $this->stats_collection->statsCallback(),
64
+				'turn_on_notices_saved' => true,
65
+			);
66
+			// initiate the class and start the plugin update engine!
67
+			new PluginUpdateEngineChecker(
68
+				$this->config->hostServerUrl(),
69
+				$this->config->pluginSlug(),
70
+				$options
71
+			);
72
+		}
73
+	}
74
+
75
+
76
+	/**
77
+	 * This is a handy helper method for retrieving whether there is an update available for the given plugin.
78
+	 *
79
+	 * @param  string $basename Use the equivalent result from plugin_basename() for this param as WP uses that to
80
+	 *                          identify plugins. Defaults to core update
81
+	 * @return boolean           True if update available, false if not.
82
+	 */
83
+	public static function isUpdateAvailable($basename = '')
84
+	{
85
+		$basename = ! empty($basename) ? $basename : EE_PLUGIN_BASENAME;
86
+
87
+		$update = false;
88
+
89
+		// should take "event-espresso-core/espresso.php" and change to "/event-espresso-core"
90
+		$folder = DS . dirname($basename);
91
+
92
+		$plugins = get_plugins($folder);
93
+		$current = get_site_transient('update_plugins');
94
+
95
+		foreach ((array) $plugins as $plugin_file => $plugin_data) {
96
+			if (isset($current->response['plugin_file'])) {
97
+				$update = true;
98
+			}
99
+		}
100
+
101
+		// it's possible that there is an update but an invalid site-license-key is in use
102
+		if (get_site_option('pue_json_error_' . $basename)) {
103
+			$update = true;
104
+		}
105
+
106
+		return $update;
107
+	}
108 108
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -36,8 +36,8 @@  discard block
 block discarded – undo
36 36
     private function loadPueClient()
37 37
     {
38 38
         // PUE Auto Upgrades stuff
39
-        if (is_readable(EE_THIRD_PARTY . 'pue/pue-client.php')) { // include the file
40
-            require_once(EE_THIRD_PARTY . 'pue/pue-client.php');
39
+        if (is_readable(EE_THIRD_PARTY.'pue/pue-client.php')) { // include the file
40
+            require_once(EE_THIRD_PARTY.'pue/pue-client.php');
41 41
 
42 42
             // $options needs to be an array with the included keys as listed.
43 43
             $options = array(
@@ -87,7 +87,7 @@  discard block
 block discarded – undo
87 87
         $update = false;
88 88
 
89 89
         // should take "event-espresso-core/espresso.php" and change to "/event-espresso-core"
90
-        $folder = DS . dirname($basename);
90
+        $folder = DS.dirname($basename);
91 91
 
92 92
         $plugins = get_plugins($folder);
93 93
         $current = get_site_transient('update_plugins');
@@ -99,7 +99,7 @@  discard block
 block discarded – undo
99 99
         }
100 100
 
101 101
         // it's possible that there is an update but an invalid site-license-key is in use
102
-        if (get_site_option('pue_json_error_' . $basename)) {
102
+        if (get_site_option('pue_json_error_'.$basename)) {
103 103
             $update = true;
104 104
         }
105 105
 
Please login to merge, or discard this patch.
core/services/address/formatters/MultiLineAddressFormatter.php 2 patches
Indentation   +35 added lines, -35 removed lines patch added patch discarded remove patch
@@ -15,39 +15,39 @@
 block discarded – undo
15 15
 {
16 16
 
17 17
 
18
-    /**
19
-     * @param string $address
20
-     * @param string $address2
21
-     * @param string $city
22
-     * @param string $state
23
-     * @param string $zip
24
-     * @param string $country
25
-     * @param string $CNT_ISO
26
-     * @return string
27
-     */
28
-    public function format($address, $address2, $city, $state, $zip, $country, $CNT_ISO)
29
-    {
30
-        $address_formats = apply_filters(
31
-            'FHEE__EE_MultiLine_Address_Formatter__address_formats',
32
-            array(
33
-                'CA' => "{address}%{address2}%{city}%{state}%{country}%{zip}",
34
-                'GB' => "{address}%{address2}%{city}%{state}%{zip}%{country}",
35
-                'US' => "{address}%{address2}%{city}%{state}%{zip}%{country}",
36
-                'ZZ' => "{address}%{address2}%{city}%{state}%{zip}%{country}",
37
-            )
38
-        );
39
-        // if the incoming country has a set format, use that, else use the default
40
-        $formatted_address = isset($address_formats[ $CNT_ISO ]) ? $address_formats[ $CNT_ISO ]
41
-            : $address_formats['ZZ'];
42
-        return $this->parse_formatted_address(
43
-            $address,
44
-            $address2,
45
-            $city,
46
-            $state,
47
-            $zip,
48
-            $country,
49
-            $formatted_address,
50
-            '<br />'
51
-        );
52
-    }
18
+	/**
19
+	 * @param string $address
20
+	 * @param string $address2
21
+	 * @param string $city
22
+	 * @param string $state
23
+	 * @param string $zip
24
+	 * @param string $country
25
+	 * @param string $CNT_ISO
26
+	 * @return string
27
+	 */
28
+	public function format($address, $address2, $city, $state, $zip, $country, $CNT_ISO)
29
+	{
30
+		$address_formats = apply_filters(
31
+			'FHEE__EE_MultiLine_Address_Formatter__address_formats',
32
+			array(
33
+				'CA' => "{address}%{address2}%{city}%{state}%{country}%{zip}",
34
+				'GB' => "{address}%{address2}%{city}%{state}%{zip}%{country}",
35
+				'US' => "{address}%{address2}%{city}%{state}%{zip}%{country}",
36
+				'ZZ' => "{address}%{address2}%{city}%{state}%{zip}%{country}",
37
+			)
38
+		);
39
+		// if the incoming country has a set format, use that, else use the default
40
+		$formatted_address = isset($address_formats[ $CNT_ISO ]) ? $address_formats[ $CNT_ISO ]
41
+			: $address_formats['ZZ'];
42
+		return $this->parse_formatted_address(
43
+			$address,
44
+			$address2,
45
+			$city,
46
+			$state,
47
+			$zip,
48
+			$country,
49
+			$formatted_address,
50
+			'<br />'
51
+		);
52
+	}
53 53
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -37,7 +37,7 @@
 block discarded – undo
37 37
             )
38 38
         );
39 39
         // if the incoming country has a set format, use that, else use the default
40
-        $formatted_address = isset($address_formats[ $CNT_ISO ]) ? $address_formats[ $CNT_ISO ]
40
+        $formatted_address = isset($address_formats[$CNT_ISO]) ? $address_formats[$CNT_ISO]
41 41
             : $address_formats['ZZ'];
42 42
         return $this->parse_formatted_address(
43 43
             $address,
Please login to merge, or discard this patch.
core/services/address/formatters/InlineAddressFormatter.php 2 patches
Indentation   +35 added lines, -35 removed lines patch added patch discarded remove patch
@@ -14,39 +14,39 @@
 block discarded – undo
14 14
 class InlineAddressFormatter extends AddressFormatter implements \EEI_Address_Formatter
15 15
 {
16 16
 
17
-    /**
18
-     * @param string $address
19
-     * @param string $address2
20
-     * @param string $city
21
-     * @param string $state
22
-     * @param string $zip
23
-     * @param string $country
24
-     * @param string $CNT_ISO
25
-     * @return string
26
-     */
27
-    public function format($address, $address2, $city, $state, $zip, $country, $CNT_ISO)
28
-    {
29
-        $address_formats = apply_filters(
30
-            'FHEE__EE_Inline_Address_Formatter__address_formats',
31
-            array(
32
-                'CA'  => "{address}%{address2}%{city}%{state}%{country}%{zip}",
33
-                'GB'  => "{address}%{address2}%{city}%{state}%{zip}%{country}",
34
-                'US'  => "{address}%{address2}%{city}%{state}%{zip}%{country}",
35
-                'ZZZ' => "{address}%{address2}%{city}%{state}%{zip}%{country}",
36
-            )
37
-        );
38
-        // if the incoming country has a set format, use that, else use the default
39
-        $formatted_address = isset($address_formats[ $CNT_ISO ]) ? $address_formats[ $CNT_ISO ]
40
-            : $address_formats['ZZZ'];
41
-        return $this->parse_formatted_address(
42
-            $address,
43
-            $address2,
44
-            $city,
45
-            $state,
46
-            $zip,
47
-            $country,
48
-            $formatted_address,
49
-            ', '
50
-        );
51
-    }
17
+	/**
18
+	 * @param string $address
19
+	 * @param string $address2
20
+	 * @param string $city
21
+	 * @param string $state
22
+	 * @param string $zip
23
+	 * @param string $country
24
+	 * @param string $CNT_ISO
25
+	 * @return string
26
+	 */
27
+	public function format($address, $address2, $city, $state, $zip, $country, $CNT_ISO)
28
+	{
29
+		$address_formats = apply_filters(
30
+			'FHEE__EE_Inline_Address_Formatter__address_formats',
31
+			array(
32
+				'CA'  => "{address}%{address2}%{city}%{state}%{country}%{zip}",
33
+				'GB'  => "{address}%{address2}%{city}%{state}%{zip}%{country}",
34
+				'US'  => "{address}%{address2}%{city}%{state}%{zip}%{country}",
35
+				'ZZZ' => "{address}%{address2}%{city}%{state}%{zip}%{country}",
36
+			)
37
+		);
38
+		// if the incoming country has a set format, use that, else use the default
39
+		$formatted_address = isset($address_formats[ $CNT_ISO ]) ? $address_formats[ $CNT_ISO ]
40
+			: $address_formats['ZZZ'];
41
+		return $this->parse_formatted_address(
42
+			$address,
43
+			$address2,
44
+			$city,
45
+			$state,
46
+			$zip,
47
+			$country,
48
+			$formatted_address,
49
+			', '
50
+		);
51
+	}
52 52
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -36,7 +36,7 @@
 block discarded – undo
36 36
             )
37 37
         );
38 38
         // if the incoming country has a set format, use that, else use the default
39
-        $formatted_address = isset($address_formats[ $CNT_ISO ]) ? $address_formats[ $CNT_ISO ]
39
+        $formatted_address = isset($address_formats[$CNT_ISO]) ? $address_formats[$CNT_ISO]
40 40
             : $address_formats['ZZZ'];
41 41
         return $this->parse_formatted_address(
42 42
             $address,
Please login to merge, or discard this patch.
core/services/locators/FileLocator.php 2 patches
Indentation   +73 added lines, -73 removed lines patch added patch discarded remove patch
@@ -17,88 +17,88 @@
 block discarded – undo
17 17
 class FileLocator extends Locator
18 18
 {
19 19
 
20
-    /**
21
-     * @var string $file_mask
22
-     */
23
-    protected $file_mask = '*.php';
20
+	/**
21
+	 * @var string $file_mask
22
+	 */
23
+	protected $file_mask = '*.php';
24 24
 
25
-    /**
26
-     * @var array $filepaths
27
-     */
28
-    protected $filepaths = array();
25
+	/**
26
+	 * @var array $filepaths
27
+	 */
28
+	protected $filepaths = array();
29 29
 
30 30
 
31
-    /**
32
-     * @param string $file_mask
33
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
34
-     */
35
-    public function setFileMask($file_mask)
36
-    {
37
-        if (! is_string($file_mask)) {
38
-            throw new InvalidDataTypeException('$file_mask', $file_mask, 'string');
39
-        }
40
-        $this->file_mask = $file_mask;
41
-    }
31
+	/**
32
+	 * @param string $file_mask
33
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
34
+	 */
35
+	public function setFileMask($file_mask)
36
+	{
37
+		if (! is_string($file_mask)) {
38
+			throw new InvalidDataTypeException('$file_mask', $file_mask, 'string');
39
+		}
40
+		$this->file_mask = $file_mask;
41
+	}
42 42
 
43 43
 
44
-    /**
45
-     * @access public
46
-     * @return array
47
-     */
48
-    public function getFilePaths()
49
-    {
50
-        return $this->filepaths;
51
-    }
44
+	/**
45
+	 * @access public
46
+	 * @return array
47
+	 */
48
+	public function getFilePaths()
49
+	{
50
+		return $this->filepaths;
51
+	}
52 52
 
53 53
 
54
-    /**
55
-     * @access public
56
-     * @return int
57
-     */
58
-    public function count()
59
-    {
60
-        return count($this->filepaths);
61
-    }
54
+	/**
55
+	 * @access public
56
+	 * @return int
57
+	 */
58
+	public function count()
59
+	{
60
+		return count($this->filepaths);
61
+	}
62 62
 
63 63
 
64
-    /**
65
-     * given a path to a valid directory, or an array of valid paths,
66
-     * will find all files that match the provided mask
67
-     *
68
-     * @access public
69
-     * @param array|string $directory_paths
70
-     * @return \FilesystemIterator
71
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
72
-     */
73
-    public function locate($directory_paths)
74
-    {
75
-        if (! (is_string($directory_paths) || is_array($directory_paths))) {
76
-            throw new InvalidDataTypeException('$directory_paths', $directory_paths, 'string or array');
77
-        }
78
-        foreach ((array) $directory_paths as $directory_path) {
79
-            foreach ($this->findFilesByPath($directory_path) as $key => $file) {
80
-                $this->filepaths[ $key ] = \EEH_File::standardise_directory_separators($file);
81
-            }
82
-        }
83
-        return $this->filepaths;
84
-    }
64
+	/**
65
+	 * given a path to a valid directory, or an array of valid paths,
66
+	 * will find all files that match the provided mask
67
+	 *
68
+	 * @access public
69
+	 * @param array|string $directory_paths
70
+	 * @return \FilesystemIterator
71
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
72
+	 */
73
+	public function locate($directory_paths)
74
+	{
75
+		if (! (is_string($directory_paths) || is_array($directory_paths))) {
76
+			throw new InvalidDataTypeException('$directory_paths', $directory_paths, 'string or array');
77
+		}
78
+		foreach ((array) $directory_paths as $directory_path) {
79
+			foreach ($this->findFilesByPath($directory_path) as $key => $file) {
80
+				$this->filepaths[ $key ] = \EEH_File::standardise_directory_separators($file);
81
+			}
82
+		}
83
+		return $this->filepaths;
84
+	}
85 85
 
86 86
 
87
-    /**
88
-     * given a path to a valid directory, will find all files that match the provided mask
89
-     *
90
-     * @access protected
91
-     * @param string $directory_path
92
-     * @return \FilesystemIterator
93
-     */
94
-    protected function findFilesByPath($directory_path = '')
95
-    {
96
-        $iterator = new GlobIterator(
97
-            \EEH_File::end_with_directory_separator($directory_path) . $this->file_mask
98
-        );
99
-        foreach ($this->flags as $flag) {
100
-            $iterator->setFlags($flag);
101
-        }
102
-        return $iterator;
103
-    }
87
+	/**
88
+	 * given a path to a valid directory, will find all files that match the provided mask
89
+	 *
90
+	 * @access protected
91
+	 * @param string $directory_path
92
+	 * @return \FilesystemIterator
93
+	 */
94
+	protected function findFilesByPath($directory_path = '')
95
+	{
96
+		$iterator = new GlobIterator(
97
+			\EEH_File::end_with_directory_separator($directory_path) . $this->file_mask
98
+		);
99
+		foreach ($this->flags as $flag) {
100
+			$iterator->setFlags($flag);
101
+		}
102
+		return $iterator;
103
+	}
104 104
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -34,7 +34,7 @@  discard block
 block discarded – undo
34 34
      */
35 35
     public function setFileMask($file_mask)
36 36
     {
37
-        if (! is_string($file_mask)) {
37
+        if ( ! is_string($file_mask)) {
38 38
             throw new InvalidDataTypeException('$file_mask', $file_mask, 'string');
39 39
         }
40 40
         $this->file_mask = $file_mask;
@@ -72,12 +72,12 @@  discard block
 block discarded – undo
72 72
      */
73 73
     public function locate($directory_paths)
74 74
     {
75
-        if (! (is_string($directory_paths) || is_array($directory_paths))) {
75
+        if ( ! (is_string($directory_paths) || is_array($directory_paths))) {
76 76
             throw new InvalidDataTypeException('$directory_paths', $directory_paths, 'string or array');
77 77
         }
78 78
         foreach ((array) $directory_paths as $directory_path) {
79 79
             foreach ($this->findFilesByPath($directory_path) as $key => $file) {
80
-                $this->filepaths[ $key ] = \EEH_File::standardise_directory_separators($file);
80
+                $this->filepaths[$key] = \EEH_File::standardise_directory_separators($file);
81 81
             }
82 82
         }
83 83
         return $this->filepaths;
@@ -94,7 +94,7 @@  discard block
 block discarded – undo
94 94
     protected function findFilesByPath($directory_path = '')
95 95
     {
96 96
         $iterator = new GlobIterator(
97
-            \EEH_File::end_with_directory_separator($directory_path) . $this->file_mask
97
+            \EEH_File::end_with_directory_separator($directory_path).$this->file_mask
98 98
         );
99 99
         foreach ($this->flags as $flag) {
100 100
             $iterator->setFlags($flag);
Please login to merge, or discard this patch.
core/services/database/TableManager.php 2 patches
Indentation   +225 added lines, -225 removed lines patch added patch discarded remove patch
@@ -13,248 +13,248 @@
 block discarded – undo
13 13
 class TableManager extends \EE_Base
14 14
 {
15 15
 
16
-    /**
17
-     * @var TableAnalysis $table_analysis
18
-     */
19
-    private $table_analysis;
16
+	/**
17
+	 * @var TableAnalysis $table_analysis
18
+	 */
19
+	private $table_analysis;
20 20
 
21 21
 
22
-    /**
23
-     * TableManager constructor.
24
-     *
25
-     * @param TableAnalysis $TableAnalysis
26
-     */
27
-    public function __construct(TableAnalysis $TableAnalysis)
28
-    {
29
-        $this->table_analysis = $TableAnalysis;
30
-    }
22
+	/**
23
+	 * TableManager constructor.
24
+	 *
25
+	 * @param TableAnalysis $TableAnalysis
26
+	 */
27
+	public function __construct(TableAnalysis $TableAnalysis)
28
+	{
29
+		$this->table_analysis = $TableAnalysis;
30
+	}
31 31
 
32 32
 
33
-    /**
34
-     * Gets the injected table analyzer, or throws an exception
35
-     *
36
-     * @return TableAnalysis
37
-     * @throws \EE_Error
38
-     */
39
-    protected function getTableAnalysis()
40
-    {
41
-        if ($this->table_analysis instanceof TableAnalysis) {
42
-            return $this->table_analysis;
43
-        } else {
44
-            throw new \EE_Error(
45
-                sprintf(
46
-                    __('Table analysis class on class %1$s is not set properly.', 'event_espresso'),
47
-                    get_class($this)
48
-                )
49
-            );
50
-        }
51
-    }
33
+	/**
34
+	 * Gets the injected table analyzer, or throws an exception
35
+	 *
36
+	 * @return TableAnalysis
37
+	 * @throws \EE_Error
38
+	 */
39
+	protected function getTableAnalysis()
40
+	{
41
+		if ($this->table_analysis instanceof TableAnalysis) {
42
+			return $this->table_analysis;
43
+		} else {
44
+			throw new \EE_Error(
45
+				sprintf(
46
+					__('Table analysis class on class %1$s is not set properly.', 'event_espresso'),
47
+					get_class($this)
48
+				)
49
+			);
50
+		}
51
+	}
52 52
 
53 53
 
54
-    /**
55
-     * @param string $table_name which can optionally start with $wpdb->prefix or not
56
-     * @param string $column_name
57
-     * @param string $column_info
58
-     * @return bool|false|int
59
-     */
60
-    public function addColumn($table_name, $column_name, $column_info = 'INT UNSIGNED NOT NULL')
61
-    {
62
-        if (apply_filters('FHEE__EEH_Activation__add_column_if_it_doesnt_exist__short_circuit', false)) {
63
-            return false;
64
-        }
65
-        global $wpdb;
66
-        $full_table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
67
-        $columns = $this->getTableColumns($table_name);
68
-        if (! in_array($column_name, $columns)) {
69
-            $alter_query = "ALTER TABLE {$full_table_name} ADD {$column_name} {$column_info}";
70
-            return $wpdb->query($alter_query);
71
-        }
72
-        return true;
73
-    }
54
+	/**
55
+	 * @param string $table_name which can optionally start with $wpdb->prefix or not
56
+	 * @param string $column_name
57
+	 * @param string $column_info
58
+	 * @return bool|false|int
59
+	 */
60
+	public function addColumn($table_name, $column_name, $column_info = 'INT UNSIGNED NOT NULL')
61
+	{
62
+		if (apply_filters('FHEE__EEH_Activation__add_column_if_it_doesnt_exist__short_circuit', false)) {
63
+			return false;
64
+		}
65
+		global $wpdb;
66
+		$full_table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
67
+		$columns = $this->getTableColumns($table_name);
68
+		if (! in_array($column_name, $columns)) {
69
+			$alter_query = "ALTER TABLE {$full_table_name} ADD {$column_name} {$column_info}";
70
+			return $wpdb->query($alter_query);
71
+		}
72
+		return true;
73
+	}
74 74
 
75 75
 
76
-    /**
77
-     * Gets the name of all columns on the  table. $table_name can
78
-     * optionally start with $wpdb->prefix or not
79
-     *
80
-     * @global \wpdb $wpdb
81
-     * @param string $table_name
82
-     * @return array
83
-     */
84
-    public function getTableColumns($table_name)
85
-    {
86
-        global $wpdb;
87
-        $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
88
-        $field_array = array();
89
-        if (! empty($table_name)) {
90
-            $columns = $wpdb->get_results("SHOW COLUMNS FROM {$table_name} ");
91
-            if ($columns !== false) {
92
-                foreach ($columns as $column) {
93
-                    $field_array[] = $column->Field;
94
-                }
95
-            }
96
-        }
97
-        return $field_array;
98
-    }
76
+	/**
77
+	 * Gets the name of all columns on the  table. $table_name can
78
+	 * optionally start with $wpdb->prefix or not
79
+	 *
80
+	 * @global \wpdb $wpdb
81
+	 * @param string $table_name
82
+	 * @return array
83
+	 */
84
+	public function getTableColumns($table_name)
85
+	{
86
+		global $wpdb;
87
+		$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
88
+		$field_array = array();
89
+		if (! empty($table_name)) {
90
+			$columns = $wpdb->get_results("SHOW COLUMNS FROM {$table_name} ");
91
+			if ($columns !== false) {
92
+				foreach ($columns as $column) {
93
+					$field_array[] = $column->Field;
94
+				}
95
+			}
96
+		}
97
+		return $field_array;
98
+	}
99 99
 
100 100
 
101
-    /**
102
-     * Drops the specified table from the database. $table_name can
103
-     * optionally start with $wpdb->prefix or not
104
-     *
105
-     * @global \wpdb $wpdb
106
-     * @param string $table_name
107
-     * @return int
108
-     */
109
-    public function dropTable($table_name)
110
-    {
111
-        global $wpdb;
112
-        if ($this->getTableAnalysis()->tableExists($table_name)) {
113
-            $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
114
-            return $wpdb->query("DROP TABLE IF EXISTS {$table_name}");
115
-        }
116
-        return 0;
117
-    }
101
+	/**
102
+	 * Drops the specified table from the database. $table_name can
103
+	 * optionally start with $wpdb->prefix or not
104
+	 *
105
+	 * @global \wpdb $wpdb
106
+	 * @param string $table_name
107
+	 * @return int
108
+	 */
109
+	public function dropTable($table_name)
110
+	{
111
+		global $wpdb;
112
+		if ($this->getTableAnalysis()->tableExists($table_name)) {
113
+			$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
114
+			return $wpdb->query("DROP TABLE IF EXISTS {$table_name}");
115
+		}
116
+		return 0;
117
+	}
118 118
 
119 119
 
120
-    /**
121
-     * Drops all the tables mentioned in a single MYSQL query. Double-checks
122
-     * each table name provided has a wpdb prefix attached, and that it exists.
123
-     * Returns the list actually deleted
124
-     *
125
-     * @global WPDB $wpdb
126
-     * @param array $table_names
127
-     * @return array of table names which we deleted
128
-     */
129
-    public function dropTables($table_names)
130
-    {
131
-        $tables_to_delete = array();
132
-        foreach ($table_names as $table_name) {
133
-            $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
134
-            if ($this->getTableAnalysis()->tableExists($table_name)) {
135
-                $tables_to_delete[ $table_name ] = $table_name;
136
-            }
137
-        }
138
-        if (! empty($tables_to_delete)) {
139
-            global $wpdb;
140
-            // make sure we only have a unique strings in the array.
141
-            $tables_to_delete = array_unique($tables_to_delete);
142
-            $wpdb->query('DROP TABLE ' . implode(', ', $tables_to_delete));
143
-        }
144
-        return $tables_to_delete;
145
-    }
120
+	/**
121
+	 * Drops all the tables mentioned in a single MYSQL query. Double-checks
122
+	 * each table name provided has a wpdb prefix attached, and that it exists.
123
+	 * Returns the list actually deleted
124
+	 *
125
+	 * @global WPDB $wpdb
126
+	 * @param array $table_names
127
+	 * @return array of table names which we deleted
128
+	 */
129
+	public function dropTables($table_names)
130
+	{
131
+		$tables_to_delete = array();
132
+		foreach ($table_names as $table_name) {
133
+			$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
134
+			if ($this->getTableAnalysis()->tableExists($table_name)) {
135
+				$tables_to_delete[ $table_name ] = $table_name;
136
+			}
137
+		}
138
+		if (! empty($tables_to_delete)) {
139
+			global $wpdb;
140
+			// make sure we only have a unique strings in the array.
141
+			$tables_to_delete = array_unique($tables_to_delete);
142
+			$wpdb->query('DROP TABLE ' . implode(', ', $tables_to_delete));
143
+		}
144
+		return $tables_to_delete;
145
+	}
146 146
 
147 147
 
148
-    /**
149
-     * Drops the specified index from the specified table. $table_name can
150
-     * optionally start with $wpdb->prefix or not
151
-     *
152
-     * @global \wpdb $wpdb
153
-     * @param string $table_name
154
-     * @param string $index_name
155
-     * @return int the number of indexes dropped. False if there was a datbase error
156
-     */
157
-    public function dropIndex($table_name, $index_name)
158
-    {
159
-        if (apply_filters('FHEE__EEH_Activation__drop_index__short_circuit', false)) {
160
-            return 0;
161
-        }
162
-        global $wpdb;
163
-        $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
164
-        $index_exists_query = "SHOW INDEX FROM {$table_name} WHERE key_name = '{$index_name}'";
165
-        if ($this->getTableAnalysis()->tableExists($table_name)
166
-            && $wpdb->get_var($index_exists_query)
167
-               === $table_name // using get_var with the $index_exists_query returns the table's name
168
-        ) {
169
-            return $wpdb->query("ALTER TABLE {$table_name} DROP INDEX {$index_name}");
170
-        }
171
-        return 0;
172
-    }
148
+	/**
149
+	 * Drops the specified index from the specified table. $table_name can
150
+	 * optionally start with $wpdb->prefix or not
151
+	 *
152
+	 * @global \wpdb $wpdb
153
+	 * @param string $table_name
154
+	 * @param string $index_name
155
+	 * @return int the number of indexes dropped. False if there was a datbase error
156
+	 */
157
+	public function dropIndex($table_name, $index_name)
158
+	{
159
+		if (apply_filters('FHEE__EEH_Activation__drop_index__short_circuit', false)) {
160
+			return 0;
161
+		}
162
+		global $wpdb;
163
+		$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
164
+		$index_exists_query = "SHOW INDEX FROM {$table_name} WHERE key_name = '{$index_name}'";
165
+		if ($this->getTableAnalysis()->tableExists($table_name)
166
+			&& $wpdb->get_var($index_exists_query)
167
+			   === $table_name // using get_var with the $index_exists_query returns the table's name
168
+		) {
169
+			return $wpdb->query("ALTER TABLE {$table_name} DROP INDEX {$index_name}");
170
+		}
171
+		return 0;
172
+	}
173 173
 
174 174
 
175
-    /**
176
-     * Just creates the requested table. $table_name can
177
-     * optionally start with $wpdb->prefix or not
178
-     *
179
-     * @param string $table_name
180
-     * @param string $create_sql defining the table's columns and indexes
181
-     * @param string $engine     (no need to specify "ENGINE=", that's implied)
182
-     * @return void
183
-     * @throws \EE_Error
184
-     */
185
-    public function createTable($table_name, $create_sql, $engine = 'MyISAM')
186
-    {
187
-        // does $sql contain valid column information? ( LPT: https://regex101.com/ is great for working out regex patterns )
188
-        if (preg_match('((((.*?))(,\s))+)', $create_sql, $valid_column_data)) {
189
-            $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
190
-            /** @var \wpdb $wpdb */
191
-            global $wpdb;
192
-            $SQL = "CREATE TABLE {$table_name} ( {$create_sql} ) ENGINE={$engine} " . $wpdb->get_charset_collate();
175
+	/**
176
+	 * Just creates the requested table. $table_name can
177
+	 * optionally start with $wpdb->prefix or not
178
+	 *
179
+	 * @param string $table_name
180
+	 * @param string $create_sql defining the table's columns and indexes
181
+	 * @param string $engine     (no need to specify "ENGINE=", that's implied)
182
+	 * @return void
183
+	 * @throws \EE_Error
184
+	 */
185
+	public function createTable($table_name, $create_sql, $engine = 'MyISAM')
186
+	{
187
+		// does $sql contain valid column information? ( LPT: https://regex101.com/ is great for working out regex patterns )
188
+		if (preg_match('((((.*?))(,\s))+)', $create_sql, $valid_column_data)) {
189
+			$table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
190
+			/** @var \wpdb $wpdb */
191
+			global $wpdb;
192
+			$SQL = "CREATE TABLE {$table_name} ( {$create_sql} ) ENGINE={$engine} " . $wpdb->get_charset_collate();
193 193
 
194
-            // get $wpdb to echo errors, but buffer them. This way at least WE know an error
195
-            // happened. And then we can choose to tell the end user
196
-            $old_show_errors_policy = $wpdb->show_errors(true);
197
-            $old_error_suppression_policy = $wpdb->suppress_errors(false);
198
-            ob_start();
199
-            dbDelta($SQL);
200
-            $output = ob_get_contents();
201
-            ob_end_clean();
202
-            $wpdb->show_errors($old_show_errors_policy);
203
-            $wpdb->suppress_errors($old_error_suppression_policy);
204
-            if (! empty($output)) {
205
-                throw new \EE_Error($output);
206
-            }
207
-        } else {
208
-            throw new \EE_Error(
209
-                sprintf(
210
-                    __(
211
-                        'The following table creation SQL does not contain valid information about the table columns: %1$s %2$s',
212
-                        'event_espresso'
213
-                    ),
214
-                    '<br />',
215
-                    $create_sql
216
-                )
217
-            );
218
-        }
219
-    }
194
+			// get $wpdb to echo errors, but buffer them. This way at least WE know an error
195
+			// happened. And then we can choose to tell the end user
196
+			$old_show_errors_policy = $wpdb->show_errors(true);
197
+			$old_error_suppression_policy = $wpdb->suppress_errors(false);
198
+			ob_start();
199
+			dbDelta($SQL);
200
+			$output = ob_get_contents();
201
+			ob_end_clean();
202
+			$wpdb->show_errors($old_show_errors_policy);
203
+			$wpdb->suppress_errors($old_error_suppression_policy);
204
+			if (! empty($output)) {
205
+				throw new \EE_Error($output);
206
+			}
207
+		} else {
208
+			throw new \EE_Error(
209
+				sprintf(
210
+					__(
211
+						'The following table creation SQL does not contain valid information about the table columns: %1$s %2$s',
212
+						'event_espresso'
213
+					),
214
+					'<br />',
215
+					$create_sql
216
+				)
217
+			);
218
+		}
219
+	}
220 220
 
221 221
 
222
-    /**
223
-     * Drops the specified index if it's size differs from $desired_index_size.
224
-     * WordPress' dbdelta method doesn't automatically change index sizes, so this
225
-     * method can be used to only drop the index if needed, and afterwards dbdelta can be used as normal.
226
-     * If the table doesn't exist, or it exists but the index does not, or returns false
227
-     *
228
-     * @param string     $table_name
229
-     * @param string     $index_name
230
-     * @param string     $column_name        if none is provided, we assume the column name matches the index (often
231
-     *                                       true in EE)
232
-     * @param string|int $desired_index_size defaults to TableAnalysis::index_col_size, the max for utf8mb4.
233
-     * @return bool whether an index was dropped or not
234
-     * @throws /EE_Error if table analysis object isn't defined
235
-     */
236
-    public function dropIndexIfSizeNot(
237
-        $table_name,
238
-        $index_name,
239
-        $column_name = null,
240
-        $desired_index_size = TableAnalysis::INDEX_COLUMN_SIZE
241
-    ) {
242
-        if ($column_name === null) {
243
-            $column_name = $index_name;
244
-        }
245
-        if (! $this->getTableAnalysis()->tableExists($table_name)) {
246
-            return false;
247
-        }
248
-        $index_entries = $this->getTableAnalysis()->showIndexes($table_name, $index_name);
249
-        if (empty($index_entries)) {
250
-            return false;
251
-        }
252
-        foreach ($index_entries as $index_entry) {
253
-            if ($column_name === $index_entry->Column_name
254
-                && (string) $desired_index_size !== $index_entry->Sub_part) {
255
-                return $this->dropIndex($table_name, $index_name);
256
-            }
257
-        }
258
-        return false;
259
-    }
222
+	/**
223
+	 * Drops the specified index if it's size differs from $desired_index_size.
224
+	 * WordPress' dbdelta method doesn't automatically change index sizes, so this
225
+	 * method can be used to only drop the index if needed, and afterwards dbdelta can be used as normal.
226
+	 * If the table doesn't exist, or it exists but the index does not, or returns false
227
+	 *
228
+	 * @param string     $table_name
229
+	 * @param string     $index_name
230
+	 * @param string     $column_name        if none is provided, we assume the column name matches the index (often
231
+	 *                                       true in EE)
232
+	 * @param string|int $desired_index_size defaults to TableAnalysis::index_col_size, the max for utf8mb4.
233
+	 * @return bool whether an index was dropped or not
234
+	 * @throws /EE_Error if table analysis object isn't defined
235
+	 */
236
+	public function dropIndexIfSizeNot(
237
+		$table_name,
238
+		$index_name,
239
+		$column_name = null,
240
+		$desired_index_size = TableAnalysis::INDEX_COLUMN_SIZE
241
+	) {
242
+		if ($column_name === null) {
243
+			$column_name = $index_name;
244
+		}
245
+		if (! $this->getTableAnalysis()->tableExists($table_name)) {
246
+			return false;
247
+		}
248
+		$index_entries = $this->getTableAnalysis()->showIndexes($table_name, $index_name);
249
+		if (empty($index_entries)) {
250
+			return false;
251
+		}
252
+		foreach ($index_entries as $index_entry) {
253
+			if ($column_name === $index_entry->Column_name
254
+				&& (string) $desired_index_size !== $index_entry->Sub_part) {
255
+				return $this->dropIndex($table_name, $index_name);
256
+			}
257
+		}
258
+		return false;
259
+	}
260 260
 }
Please login to merge, or discard this patch.
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -65,7 +65,7 @@  discard block
 block discarded – undo
65 65
         global $wpdb;
66 66
         $full_table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
67 67
         $columns = $this->getTableColumns($table_name);
68
-        if (! in_array($column_name, $columns)) {
68
+        if ( ! in_array($column_name, $columns)) {
69 69
             $alter_query = "ALTER TABLE {$full_table_name} ADD {$column_name} {$column_info}";
70 70
             return $wpdb->query($alter_query);
71 71
         }
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
         global $wpdb;
87 87
         $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
88 88
         $field_array = array();
89
-        if (! empty($table_name)) {
89
+        if ( ! empty($table_name)) {
90 90
             $columns = $wpdb->get_results("SHOW COLUMNS FROM {$table_name} ");
91 91
             if ($columns !== false) {
92 92
                 foreach ($columns as $column) {
@@ -132,14 +132,14 @@  discard block
 block discarded – undo
132 132
         foreach ($table_names as $table_name) {
133 133
             $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
134 134
             if ($this->getTableAnalysis()->tableExists($table_name)) {
135
-                $tables_to_delete[ $table_name ] = $table_name;
135
+                $tables_to_delete[$table_name] = $table_name;
136 136
             }
137 137
         }
138
-        if (! empty($tables_to_delete)) {
138
+        if ( ! empty($tables_to_delete)) {
139 139
             global $wpdb;
140 140
             // make sure we only have a unique strings in the array.
141 141
             $tables_to_delete = array_unique($tables_to_delete);
142
-            $wpdb->query('DROP TABLE ' . implode(', ', $tables_to_delete));
142
+            $wpdb->query('DROP TABLE '.implode(', ', $tables_to_delete));
143 143
         }
144 144
         return $tables_to_delete;
145 145
     }
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
             $table_name = $this->getTableAnalysis()->ensureTableNameHasPrefix($table_name);
190 190
             /** @var \wpdb $wpdb */
191 191
             global $wpdb;
192
-            $SQL = "CREATE TABLE {$table_name} ( {$create_sql} ) ENGINE={$engine} " . $wpdb->get_charset_collate();
192
+            $SQL = "CREATE TABLE {$table_name} ( {$create_sql} ) ENGINE={$engine} ".$wpdb->get_charset_collate();
193 193
 
194 194
             // get $wpdb to echo errors, but buffer them. This way at least WE know an error
195 195
             // happened. And then we can choose to tell the end user
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
             ob_end_clean();
202 202
             $wpdb->show_errors($old_show_errors_policy);
203 203
             $wpdb->suppress_errors($old_error_suppression_policy);
204
-            if (! empty($output)) {
204
+            if ( ! empty($output)) {
205 205
                 throw new \EE_Error($output);
206 206
             }
207 207
         } else {
@@ -242,7 +242,7 @@  discard block
 block discarded – undo
242 242
         if ($column_name === null) {
243 243
             $column_name = $index_name;
244 244
         }
245
-        if (! $this->getTableAnalysis()->tableExists($table_name)) {
245
+        if ( ! $this->getTableAnalysis()->tableExists($table_name)) {
246 246
             return false;
247 247
         }
248 248
         $index_entries = $this->getTableAnalysis()->showIndexes($table_name, $index_name);
Please login to merge, or discard this patch.