Completed
Push — master ( 1da492...320203 )
by Henry
07:00
created

includes/Bootstrap/Content.php (1 issue)

Labels
Severity

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
	public function autorun() : void
27
	{
28
		if ($this->_registry->get('dbStatus') === 2)
29
		{
30
			$this->_setContent();
31
		}
32
	}
33
34
	/**
35
	 * set the content
36
	 *
37
	 * @since 3.1.0
38
	 */
39
40
	protected function _setContent() : void
41
	{
42
		$aliasValidator = new Validator\Alias();
43
		$firstParameter = $this->_registry->get('firstParameter');
44
		$secondParameter = $this->_registry->get('secondParameter');
45
		$lastParameter = $this->_registry->get('lastParameter');
46
		$lastSubParameter = $this->_registry->get('lastSubParameter');
47
		$isRoot = !$lastParameter && !$lastSubParameter;
48
		$isAdmin = $firstParameter === 'admin' && !$secondParameter;
49
50
		/* set by the root */
51
52
		if ($isRoot || $isAdmin)
53
		{
54
			$this->_setTableByRoot();
55
			$this->_setIdByRoot();
56
		}
57
58
		/* else set by the parameter */
59
60
		else if ($aliasValidator->validate($firstParameter, 'system'))
61
		{
62
			$this->_setTableByParameter();
63
			$this->_setIdByParameter();
64
		}
65
	}
66
67
	/**
68
	 * set the table by root
69
	 *
70
	 * @since 3.1.0
71
	 */
72
73
	protected function _setTableByRoot() : void
74
	{
75
		$settingModel = new Model\Setting();
76
		$homepageId = $settingModel->get('homepage');
77
		$table = $homepageId > 0 ? 'articles' : 'categories';
78
79
		/* set the registry */
80
81
		$this->_registry->set('firstTable', $table);
82
		$this->_registry->set('lastTable', $table);
83
	}
84
85
	/**
86
	 * set the table by parameter
87
	 *
88
	 * @since 3.1.0
89
	 */
90
91
	protected function _setTableByParameter() : void
92
	{
93
		$contentModel = new Model\Content();
94
		$firstParameter = $this->_registry->get('firstParameter');
95
		$secondParameter = $this->_registry->get('secondParameter');
96
		$thirdParameter = $this->_registry->get('thirdParameter');
97
98
		/* set the registry */
99
100
		if ($thirdParameter)
101
		{
102
			$this->_registry->set('thirdTable', $contentModel->getTableByAlias($thirdParameter));
103
			if ($this->_registry->get('thirdTable'))
104
			{
105
				$this->_registry->set('lastTable', $this->_registry->get('thirdTable'));
106
				$this->_registry->set('secondTable', $contentModel->getTableByAlias($secondParameter));
107
				if ($this->_registry->get('secondTable'))
108
				{
109
					$this->_registry->set('firstTable', $contentModel->getTableByAlias($firstParameter));
110
				}
111
			}
112
		}
113
		else if ($secondParameter)
114
		{
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
		else if ($firstParameter)
123
		{
124
			$this->_registry->set('firstTable', $contentModel->getTableByAlias($firstParameter));
125
			if ($this->_registry->get('firstTable'))
126
			{
127
				$this->_registry->set('lastTable', $this->_registry->get('firstTable'));
128
			}
129
		}
130
	}
131
132
	/**
133
	 * set the id by root
134
	 *
135
	 * @since 3.3.0
136
	 */
137
138
	protected function _setIdByRoot() : void
139
	{
140
		$settingModel = new Model\Setting();
141
		$homepageId = $settingModel->get('homepage');
142
		$order = $settingModel->get('order');
143
		$lastTable = $this->_registry->get('lastTable');
144
		$content = Db::forTablePrefix($lastTable);
0 ignored issues
show
It seems like $lastTable defined by $this->_registry->get('lastTable') on line 143 can also be of type array; however, Redaxscript\Db::forTablePrefix() does only seem to accept null|string, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
145
146
		/* set by homepage */
147
148
		if ($homepageId > 0)
149
		{
150
			$this->_registry->set('articleId', $homepageId);
151
			$this->_registry->set('lastId', $homepageId);
152
		}
153
154
		/* set by order */
155
156
		else if ($order === 'asc')
157
		{
158
			$this->_setId($lastTable,
159
			[
160
				'rank' => $content->min('rank')
161
			]);
162
		}
163
		else if ($order === 'desc')
164
		{
165
			$this->_setId($lastTable,
166
			[
167
				'rank' => $content->max('rank')
168
			]);
169
		}
170
	}
171
172
	/**
173
	 * set the id by parameter
174
	 *
175
	 * @since 3.1.0
176
	 */
177
178
	protected function _setIdByParameter() : void
179
	{
180
		$categoryModel = new Model\Category();
181
		$firstTable = $this->_registry->get('firstTable');
182
		$secondTable = $this->_registry->get('secondTable');
183
		$thirdTable = $this->_registry->get('thirdTable');
184
		$firstParameter = $this->_registry->get('firstParameter');
185
		$secondParameter = $this->_registry->get('secondParameter');
186
		$thirdParameter = $this->_registry->get('thirdParameter');
187
188
		/* set by third table */
189
190
		if ($thirdTable === 'articles')
191
		{
192
			$this->_setId('articles',
193
			[
194
				'alias' => $thirdParameter,
195
				'category' => $categoryModel->query()->where('alias', $secondParameter)->findOne()->id
196
			]);
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)
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)
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