Completed
Push — master ( 0ea243...da58d4 )
by Henry
10:25 queued 33s
created

includes/Admin/Controller/Common.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
namespace Redaxscript\Admin\Controller;
3
4
use Redaxscript\Admin;
5
use function method_exists;
6
7
/**
8
 * children class to handle common
9
 *
10
 * @since 4.0.0
11
 *
12
 * @package Redaxscript
13
 * @category Controller
14
 * @author Henry Ruhs
15
 */
16
17
class Common extends ControllerAbstract
18
{
19
	/**
20
	 * process the class
21
	 *
22
	 * @since 4.0.0
23
	 *
24
	 * @param string $action action to process
25
	 *
26
	 * @return string
27
	 */
28
29
	public function process(string $action = null) : string
30
	{
31
		$table = $this->_registry->get('tableParameter');
32
		$id = $this->_registry->get('idParameter');
33
		$alias = $this->_registry->get('aliasParameter');
34
35
		/* handle publish */
36
37
		if ($action === 'publish')
38
		{
39
			if ($this->_publish($table, $id))
40
			{
41
				return $this->_success(
42
				[
43
					'route' => $this->_getRoute($table, $id),
44
					'timeout' => 0
45
				]);
46
			}
47
		}
48
49
		/* handle unpublish */
50
51
		if ($action === 'unpublish')
52
		{
53
			if ($this->_unpublish($table, $id))
54
			{
55
				return $this->_success(
56
				[
57
					'route' => $this->_getRoute($table, $id),
58
					'timeout' => 0
59
				]);
60
			}
61
		}
62
63
		/* handle enable */
64
65
		if ($action === 'enable')
66
		{
67
			if ($this->_enable($table, $id))
68
			{
69
				return $this->_success(
70
				[
71
					'route' => $this->_getRoute($table, $id),
72
					'timeout' => 0
73
				]);
74
			}
75
		}
76
77
		/* handle disable */
78
79
		if ($action === 'disable')
80
		{
81
			if ($this->_disable($table, $id))
82
			{
83
				return $this->_success(
84
				[
85
					'route' => $this->_getRoute($table, $id),
86
					'timeout' => 0
87
				]);
88
			}
89
		}
90
91
		/* handle install */
92
93
		if ($action === 'install')
94
		{
95
			if ($this->_install($table, $alias))
96
			{
97
				return $this->_success(
98
				[
99
					'route' => $this->_getRoute($table),
100
					'timeout' => 0
101
				]);
102
			}
103
		}
104
105
		/* handle uninstall */
106
107
		if ($action === 'uninstall')
108
		{
109
			if ($this->_uninstall($table, $alias))
110
			{
111
				return $this->_success(
112
				[
113
					'route' => $this->_getRoute($table),
114
					'timeout' => 0
115
				]);
116
			}
117
		}
118
119
		/* handle delete */
120
121
		if ($action === 'delete')
122
		{
123
			if ($this->_delete($table, $id))
124
			{
125
				return $this->_success(
126
				[
127
					'route' => $this->_getRoute($table, $id),
128
					'timeout' => 0
129
				]);
130
			}
131
		}
132
133
		/* handle error */
134
135
		return $this->_error(
136
		[
137
			'route' => $this->_getRoute($table, $id)
138
		]);
139
	}
140
141
	/**
142
	 * publish the item
143
	 *
144
	 * @since 4.0.0
145
	 *
146
	 * @param string $table name of the table
147
	 * @param int $id identifier of the item
148
	 *
149
	 * @return bool
150
	 */
151
152
	protected function _publish(string $table = null, int $id = null) : bool
153
	{
154
		if ($table === 'categories')
155
		{
156
			$categoryModel = new Admin\Model\Category();
157
			$articleModel = new Admin\Model\Article();
158
			$commentModel = new Admin\Model\Comment();
159
			return $categoryModel->publishById($id) && $articleModel->publishByCategory($id) && $commentModel->publishByCategory($id);
160
		}
161
		if ($table === 'articles')
162
		{
163
			$articleModel = new Admin\Model\Article();
164
			$commentModel = new Admin\Model\Comment();
165
			return $articleModel->publishById($id) && $commentModel->publishByArticle($id);
166
		}
167
		if ($table === 'extras')
168
		{
169
			$extraModel = new Admin\Model\Extra();
170
			return $extraModel->publishById($id);
171
		}
172
		if ($table === 'comments')
173
		{
174
			$commentModel = new Admin\Model\Comment();
175
			return $commentModel->publishById($id);
176
		}
177
		return false;
178
	}
179
180
	/**
181
	 * unpublish the item
182
	 *
183
	 * @since 4.0.0
184
	 *
185
	 * @param string $table name of the table
186
	 * @param int $id identifier of the item
187
	 *
188
	 * @return bool
189
	 */
190
191
	protected function _unpublish(string $table = null, int $id = null) : bool
192
	{
193
		if ($table === 'categories')
194
		{
195
			$categoryModel = new Admin\Model\Category();
196
			$articleModel = new Admin\Model\Article();
197
			$commentModel = new Admin\Model\Comment();
198
			return $categoryModel->unpublishById($id) && $articleModel->unpublishByCategory($id) && $commentModel->unpublishByCategory($id);
199
		}
200
		if ($table === 'articles')
201
		{
202
			$articleModel = new Admin\Model\Article();
203
			$commentModel = new Admin\Model\Comment();
204
			return $articleModel->unpublishById($id) && $commentModel->unpublishByArticle($id);
205
		}
206
		if ($table === 'extras')
207
		{
208
			$extraModel = new Admin\Model\Extra();
209
			return $extraModel->unpublishById($id);
210
		}
211
		if ($table === 'comments')
212
		{
213
			$commentModel = new Admin\Model\Comment();
214
			return $commentModel->unpublishById($id);
215
		}
216
		return false;
217
	}
218
219
	/**
220
	 * enable the item
221
	 *
222
	 * @since 4.0.0
223
	 *
224
	 * @param string $table name of the table
225
	 * @param int $id identifier of the item
226
	 *
227
	 * @return bool
228
	 */
229
230
	protected function _enable(string $table = null, int $id = null) : bool
231
	{
232
		if ($table === 'groups')
233
		{
234
			$groupModel = new Admin\Model\Group();
235
			return $groupModel->enableById($id);
236
		}
237
		if ($table === 'users')
238
		{
239
			$userModel = new Admin\Model\User();
240
			return $userModel->enableById($id);
241
		}
242
		if ($table === 'modules')
243
		{
244
			$moduleModel = new Admin\Model\Module();
245
			return $moduleModel->enableById($id);
246
		}
247
		return false;
248
	}
249
250
	/**
251
	 * disable the item
252
	 *
253
	 * @since 4.0.0
254
	 *
255
	 * @param string $table name of the table
256
	 * @param int $id identifier of the item
257
	 *
258
	 * @return bool
259
	 */
260
261
	protected function _disable(string $table = null, int $id = null) : bool
262
	{
263
		if ($table === 'groups')
264
		{
265
			$groupModel = new Admin\Model\Group();
266
			return $groupModel->disableById($id);
267
		}
268
		if ($table === 'users')
269
		{
270
			$userModel = new Admin\Model\User();
271
			return $userModel->disableById($id);
272
		}
273
		if ($table === 'modules')
274
		{
275
			$moduleModel = new Admin\Model\Module();
276
			return $moduleModel->disableById($id);
277
		}
278
		return false;
279
	}
280
281
	/**
282
	 * install the item
283
	 *
284
	 * @since 4.0.0
285
	 *
286
	 * @param string $table name of the table
287
	 * @param string $alias alias of the item
288
	 *
289
	 * @return bool
290
	 */
291
292
	protected function _install(string $table = null, string $alias = null) : bool
293
	{
294
		if ($table === 'modules')
295
		{
296
			$moduleClass = 'Redaxscript\Modules\\' . $alias . '\\' . $alias;
297
			if (method_exists($moduleClass, 'install'))
298
			{
299
				$module = new $moduleClass($this->_registry, $this->_request, $this->_language, $this->_config);
300
				return $module->install();
301
			}
302
		}
303
		return false;
304
	}
305
306
	/**
307
	 * uninstall the item
308
	 *
309
	 * @since 4.0.0
310
	 *
311
	 * @param string $table name of the table
312
	 * @param string $alias alias of the item
313
	 *
314
	 * @return bool
315
	 */
316
317
	protected function _uninstall(string $table = null, string $alias = null) : bool
318
	{
319
		if ($table === 'modules')
320
		{
321
			$moduleClass = 'Redaxscript\Modules\\' . $alias . '\\' . $alias;
322
			if (method_exists($moduleClass, 'uninstall'))
323
			{
324
				$module = new $moduleClass($this->_registry, $this->_request, $this->_language, $this->_config);
325
				return $module->uninstall();
326
			}
327
		}
328
		return false;
329
	}
330
331
	/**
332
	 * delete the item
333
	 *
334
	 * @since 4.0.0
335
	 *
336
	 * @param string $table name of the table
337
	 * @param int $id identifier of the item
338
	 *
339
	 * @return bool
340
	 */
341
342
	protected function _delete(string $table = null, int $id = null) : bool
343
	{
344
		if ($table === 'categories')
345
		{
346
			$categoryModel = new Admin\Model\Category();
347
			$articleModel = new Admin\Model\Article();
348
			$commentModel = new Admin\Model\Comment();
349
			return $commentModel->deleteByCategory($id) && $articleModel->deleteByCategory($id) && $categoryModel->deleteById($id);
350
		}
351
		if ($table === 'articles')
352
		{
353
			$articleModel = new Admin\Model\Article();
354
			$commentModel = new Admin\Model\Comment();
355
			return $commentModel->deleteByArticle($id) && $articleModel->deleteById($id);
356
		}
357
		if ($table === 'extras')
358
		{
359
			$extraModel = new Admin\Model\Extra();
360
			return $extraModel->deleteById($id);
361
		}
362
		if ($table === 'comments')
363
		{
364
			$commentModel = new Admin\Model\Comment();
365
			return $commentModel->deleteById($id);
366
		}
367
		if ($table === 'groups')
368
		{
369
			$groupModel = new Admin\Model\Group();
370
			return $groupModel->deleteById($id);
371
		}
372
		if ($table === 'users')
373
		{
374
			$userModel = new Admin\Model\User();
375
			return $userModel->deleteById($id);
376
		}
377
		return false;
378
	}
379
380
	/**
381
	 * get the route
382
	 *
383
	 * @since 4.0.0
384
	 *
385
	 * @param string $table name of the table
386
	 * @param int $id identifier of the item
387
	 *
388
	 * @return string
389
	 */
390
391
	protected function _getRoute(string $table = null, int $id = null) : string
392
	{
393
		if ($this->_registry->get($table . 'Edit'))
394
		{
395
			if ($id)
0 ignored issues
show
Bug Best Practice introduced by redaxmedia
The expression $id of type null|integer is loosely compared to true; this is ambiguous if the integer can be zero. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
396
			{
397
				return 'admin/view/' . $table . '#row-' . $id;
398
			}
399
			if ($table)
0 ignored issues
show
Bug Best Practice introduced by redaxmedia
The expression $table of type null|string is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
400
			{
401
				return 'admin/view/' . $table;
402
			}
403
		}
404
		return 'admin';
405
	}
406
}
407