Completed
Push — master ( 113b98...ac9af8 )
by Henry
10:09
created

includes/Bootstrap/Content.php (1 issue)

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
98
		/* set the registry */
99
100 5
		if ($thirdParameter)
101
		{
102 1
			$this->_registry->set('thirdTable', $contentModel->getTableByAlias($thirdParameter));
103 1
			if ($this->_registry->get('thirdTable'))
104
			{
105 1
				$this->_registry->set('lastTable', $this->_registry->get('thirdTable'));
106 1
				$this->_registry->set('secondTable', $contentModel->getTableByAlias($secondParameter));
107 1
				if ($this->_registry->get('secondTable'))
108
				{
109 1
					$this->_registry->set('firstTable', $contentModel->getTableByAlias($firstParameter));
110
				}
111
			}
112
		}
113 4
		else if ($secondParameter)
114
		{
115 2
			$this->_registry->set('secondTable', $contentModel->getTableByAlias($secondParameter));
116 2
			if ($this->_registry->get('secondTable'))
117
			{
118 2
				$this->_registry->set('lastTable', $this->_registry->get('secondTable'));
119 2
				$this->_registry->set('firstTable', $contentModel->getTableByAlias($firstParameter));
120
			}
121
		}
122 2
		else if ($firstParameter)
123
		{
124 2
			$this->_registry->set('firstTable', $contentModel->getTableByAlias($firstParameter));
125 2
			if ($this->_registry->get('firstTable'))
126
			{
127 1
				$this->_registry->set('lastTable', $this->_registry->get('firstTable'));
128
			}
129
		}
130 5
	}
131
132
	/**
133
	 * set the id by root
134
	 *
135
	 * @since 3.3.0
136
	 */
137
138 3
	protected function _setIdByRoot() : void
139
	{
140 3
		$settingModel = new Model\Setting();
141 3
		$homepageId = $settingModel->get('homepage');
142 3
		$order = $settingModel->get('order');
143 3
		$lastTable = $this->_registry->get('lastTable');
144 3
		$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 3
		if ($homepageId > 0)
149
		{
150 1
			$this->_registry->set('articleId', $homepageId);
151 1
			$this->_registry->set('lastId', $homepageId);
152
		}
153
154
		/* set by order */
155
156 2
		else if ($order === 'asc')
157
		{
158 1
			$this->_setId($lastTable,
159
			[
160 1
				'rank' => $content->min('rank')
161
			]);
162
		}
163 1
		else if ($order === 'desc')
164
		{
165 1
			$this->_setId($lastTable,
166
			[
167 1
				'rank' => $content->max('rank')
168
			]);
169
		}
170 3
	}
171
172
	/**
173
	 * set the id by parameter
174
	 *
175
	 * @since 3.1.0
176
	 */
177
178 5
	protected function _setIdByParameter() : void
179
	{
180 5
		$categoryModel = new Model\Category();
181 5
		$firstTable = $this->_registry->get('firstTable');
182 5
		$secondTable = $this->_registry->get('secondTable');
183 5
		$thirdTable = $this->_registry->get('thirdTable');
184 5
		$firstParameter = $this->_registry->get('firstParameter');
185 5
		$secondParameter = $this->_registry->get('secondParameter');
186 5
		$thirdParameter = $this->_registry->get('thirdParameter');
187
188
		/* set by third table */
189
190 5
		if ($thirdTable === 'articles')
191
		{
192 1
			$this->_setId('articles',
193
			[
194 1
				'alias' => $thirdParameter,
195 1
				'category' => $categoryModel->query()->where('alias', $secondParameter)->findOne()->id
196
			]);
197
		}
198
199
		/* set by second table */
200
201 4
		else if ($secondTable === 'categories')
202
		{
203 1
			$this->_setId('categories',
204
			[
205 1
				'alias' => $secondParameter,
206 1
				'parent' => $categoryModel->query()->where('alias', $firstParameter)->findOne()->id
207
			]);
208
		}
209 3
		else if ($secondTable === 'articles')
210
		{
211 1
			$this->_setId('articles',
212
			[
213 1
				'alias' => $secondParameter,
214 1
				'category' => $categoryModel->query()->where('alias', $firstParameter)->findOne()->id
215
			]);
216
		}
217
218
		/* set by first table */
219
220 2
		else if ($firstTable === 'categories')
221
		{
222 1
			$this->_setId('categories',
223
			[
224 1
				'alias' => $firstParameter
225 1
			], 'parent');
226
		}
227 1
		else if ($firstTable === 'articles')
228
		{
229
			$this->_setId('articles',
230
			[
231
				'alias' => $firstParameter
232
			], 'category');
233
		}
234 5
	}
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 6
	protected function _setId(string $table = null, array $whereArray = [], string $whereNull = null) : void
247
	{
248 6
		$categoryModel = new Model\Category();
249 6
		$articleModel = new Model\Article();
250
251
		/* set the registry */
252
253 6
		if ($table === 'categories')
254
		{
255 4
			$category = $categoryModel->query()->where($whereArray)->where('status', 1);
256 4
			if ($whereNull)
257
			{
258 1
				$category->whereNull($whereNull);
259
			}
260 4
			$category = $category->findOne();
261 4
			$this->_registry->set('categoryId', $category->id);
262 4
			$this->_registry->set('lastId', $category->id);
263
		}
264 6
		if ($table === 'articles')
265
		{
266 2
			$article = $articleModel->query()->where($whereArray)->where('status', 1);
267 2
			if ($whereNull)
268
			{
269
				$article->whereNull($whereNull);
270
			}
271 2
			$article = $article->findOne();
272 2
			$this->_registry->set('articleId', $article->id);
273 2
			$this->_registry->set('lastId', $article->id);
274
		}
275 6
	}
276
}
277