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

includes/Bootstrap/Content.php (1 issue)

call_checks.maybe_mismatching_type_passed_with_def

Bug Minor

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