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

includes/Bootstrap/Content.php (2 issues)

Check for loose comparison of strings.

Best Practice Bug Major

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\Bootstrap;
3
4
use Redaxscript\Db;
5
use Redaxscript\Model;
6
use Redaxscript\Validator;
7
8
/**
9
 * children class to boot the content
10
 *
11
 * @since 3.1.0
12
 *
13
 * @package Redaxscript
14
 * @category Bootstrap
15
 * @author Henry Ruhs
16
 */
17
18
class Content extends BootstrapAbstract
19
{
20
	/**
21
	 * automate run
22
	 *
23
	 * @since 3.1.0
24
	 */
25
26 9
	public function autorun() : void
27
	{
28 9
		if ($this->_registry->get('dbStatus') === 2)
29
		{
30 9
			$this->_setContent();
31
		}
32 9
	}
33
34
	/**
35
	 * set the content
36
	 *
37
	 * @since 3.1.0
38
	 */
39
40 9
	protected function _setContent() : void
41
	{
42 9
		$aliasValidator = new Validator\Alias();
43 9
		$firstParameter = $this->_registry->get('firstParameter');
44 9
		$secondParameter = $this->_registry->get('secondParameter');
45 9
		$lastParameter = $this->_registry->get('lastParameter');
46 9
		$lastSubParameter = $this->_registry->get('lastSubParameter');
47 9
		$isRoot = !$lastParameter && !$lastSubParameter;
48 9
		$isAdmin = $firstParameter === 'admin' && !$secondParameter;
49
50
		/* set by the root */
51
52 9
		if ($isRoot || $isAdmin)
53
		{
54 3
			$this->_setTableByRoot();
55 3
			$this->_setIdByRoot();
56
		}
57
58
		/* else set by the parameter */
59
60 6
		else if (!$aliasValidator->validate($firstParameter, 'system'))
61
		{
62 5
			$this->_setTableByParameter();
63 5
			$this->_setIdByParameter();
64
		}
65 9
	}
66
67
	/**
68
	 * set the table by root
69
	 *
70
	 * @since 3.1.0
71
	 */
72
73 3
	protected function _setTableByRoot() : void
74
	{
75 3
		$settingModel = new Model\Setting();
76 3
		$homepageId = $settingModel->get('homepage');
77 3
		$table = $homepageId > 0 ? 'articles' : 'categories';
78
79
		/* set the registry */
80
81 3
		$this->_registry->set('firstTable', $table);
82 3
		$this->_registry->set('lastTable', $table);
83 3
	}
84
85
	/**
86
	 * set the table by parameter
87
	 *
88
	 * @since 3.1.0
89
	 */
90
91 5
	protected function _setTableByParameter() : void
92
	{
93 5
		$contentModel = new Model\Content();
94 5
		$firstParameter = $this->_registry->get('firstParameter');
95 5
		$secondParameter = $this->_registry->get('secondParameter');
96 5
		$thirdParameter = $this->_registry->get('thirdParameter');
97 5
98
		/* set the registry */
99
100
		if ($thirdParameter)
101 5
		{
102 5
			$this->_registry->set('thirdTable', $contentModel->getTableByAlias($thirdParameter));
103
			if ($this->_registry->get('thirdTable'))
104 4
			{
105
				$this->_registry->set('lastTable', $this->_registry->get('thirdTable'));
106 5
				$this->_registry->set('secondTable', $contentModel->getTableByAlias($secondParameter));
107
				if ($this->_registry->get('secondTable'))
108 3
				{
109
					$this->_registry->set('firstTable', $contentModel->getTableByAlias($firstParameter));
110 5
				}
111
			}
112 5
		}
113
		else if ($secondParameter)
114 5
		{
115
			$this->_registry->set('secondTable', $contentModel->getTableByAlias($secondParameter));
116
			if ($this->_registry->get('secondTable'))
117
			{
118
				$this->_registry->set('lastTable', $this->_registry->get('secondTable'));
119
				$this->_registry->set('firstTable', $contentModel->getTableByAlias($firstParameter));
120
			}
121
		}
122 3
		else if ($firstParameter)
123
		{
124 3
			$this->_registry->set('firstTable', $contentModel->getTableByAlias($firstParameter));
125 3
			if ($this->_registry->get('firstTable'))
126 3
			{
127 3
				$this->_registry->set('lastTable', $this->_registry->get('firstTable'));
128
			}
129
		}
130
	}
131 3
132
	/**
133 2
	 * set the id by root
134
	 *
135 2
	 * @since 3.3.0
136 2
	 */
137
138
	protected function _setIdByRoot() : void
139 3
	{
140
		$settingModel = new Model\Setting();
141 1
		$homepageId = $settingModel->get('homepage');
142
		$order = $settingModel->get('order');
143 1
		$lastTable = $this->_registry->get('lastTable');
144 1
		$content = Db::forTablePrefix($lastTable);
145
146
		/* set by homepage */
147 3
148
		if ($homepageId > 0)
149
		{
150
			$this->_registry->set('articleId', $homepageId);
151
			$this->_registry->set('lastId', $homepageId);
152
		}
153
154
		/* set by order */
155 5
156
		else if ($order === 'asc')
157 5
		{
158 5
			$this->_setId($lastTable,
159
			[
160 5
				'rank' => $content->min('rank')
161
			]);
162 5
		}
163 5
		else if ($order === 'desc')
164
		{
165
			$this->_setId($lastTable,
166 5
			[
167
				'rank' => $content->max('rank')
168
			]);
169
		}
170
	}
171
172
	/**
173
	 * set the id by parameter
174
	 *
175
	 * @since 3.1.0
176 8
	 */
177
178 8
	protected function _setIdByParameter() : void
179 8
	{
180 8
		$categoryModel = new Model\Category();
181
		$firstTable = $this->_registry->get('firstTable');
182
		$secondTable = $this->_registry->get('secondTable');
183
		$thirdTable = $this->_registry->get('thirdTable');
184 8
		$firstParameter = $this->_registry->get('firstParameter');
185
		$secondParameter = $this->_registry->get('secondParameter');
186 4
		$thirdParameter = $this->_registry->get('thirdParameter');
187 4
188 4
		/* set by third table */
189
190 8
		if ($thirdTable === 'articles')
191
		{
192 3
			$this->_setId('articles',
193 3
			[
194 3
				'alias' => $thirdParameter,
195
				'category' => $categoryModel->query()->where('alias', $secondParameter)->findOne()->id
196 8
			]);
197
		}
198
199
		/* set by second table */
200
201
		else if ($secondTable === 'categories')
202
		{
203
			$this->_setId('categories',
204
			[
205
				'alias' => $secondParameter,
206
				'parent' => $categoryModel->query()->where('alias', $firstParameter)->findOne()->id
207
			]);
208
		}
209
		else if ($secondTable === 'articles')
210
		{
211
			$this->_setId('articles',
212
			[
213
				'alias' => $secondParameter,
214
				'category' => $categoryModel->query()->where('alias', $firstParameter)->findOne()->id
215
			]);
216
		}
217
218
		/* set by first table */
219
220
		else if ($firstTable === 'categories')
221
		{
222
			$this->_setId('categories',
223
			[
224
				'alias' => $firstParameter
225
			], 'parent');
226
		}
227
		else if ($firstTable === 'articles')
228
		{
229
			$this->_setId('articles',
230
			[
231
				'alias' => $firstParameter
232
			], 'category');
233
		}
234
	}
235
236
	/**
237
	 * set the id
238
	 *
239
	 * @since 3.1.0
240
	 *
241
	 * @param string $table
242
	 * @param array $whereArray
243
	 * @param string $whereNull
244
	 */
245
246
	protected function _setId(string $table = null, array $whereArray = [], string $whereNull = null) : void
247
	{
248
		$categoryModel = new Model\Category();
249
		$articleModel = new Model\Article();
250
251
		/* set the registry */
252
253
		if ($table === 'categories')
254
		{
255
			$category = $categoryModel->query()->where($whereArray)->where('status', 1);
256
			if ($whereNull)
0 ignored issues
show
Bug Best Practice introduced by
The expression $whereNull 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...
257
			{
258
				$category->whereNull($whereNull);
259
			}
260
			$category = $category->findOne();
261
			$this->_registry->set('categoryId', $category->id);
262
			$this->_registry->set('lastId', $category->id);
263
		}
264
		if ($table === 'articles')
265
		{
266
			$article = $articleModel->query()->where($whereArray)->where('status', 1);
267
			if ($whereNull)
0 ignored issues
show
Bug Best Practice introduced by
The expression $whereNull 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...
268
			{
269
				$article->whereNull($whereNull);
270
			}
271
			$article = $article->findOne();
272
			$this->_registry->set('articleId', $article->id);
273
			$this->_registry->set('lastId', $article->id);
274
		}
275
	}
276
}
277