Completed
Push — master ( da58d4...61a0f7 )
by Henry
06:34
created

includes/Admin/View/ArticleTable.php (1 issue)

call_checks.maybe_mismatching_type_passed

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\Admin\View;
3
4
use Redaxscript\Admin;
5
use Redaxscript\Html;
6
use Redaxscript\Module;
7
use function count;
8
9
/**
10
 * children class to create the admin article table
11
 *
12
 * @since 4.0.0
13
 *
14
 * @package Redaxscript
15
 * @category View
16
 * @author Henry Ruhs
17
 */
18
19
class ArticleTable extends ViewAbstract
20
{
21
	/**
22
	 * render the view
23
	 *
24
	 * @since 4.0.0
25
	 *
26
	 * @return string
27
	 */
28
29 2
	public function render() : string
30
	{
31 2
		$output = Module\Hook::trigger('adminArticleTableStart');
32 2
		$parameterRoute = $this->_registry->get('parameterRoute');
33 2
		$articlesNew = $this->_registry->get('articlesNew');
34
35
		/* html element */
36
37 2
		$element = new Html\Element();
38
		$titleElement = $element
39 2
			->copy()
40 2
			->init('h2',
41
			[
42 2
				'class' => 'rs-admin-title-content',
43
			])
44 2
			->text($this->_language->get('articles'));
45
		$linkElement = $element
46 2
			->copy()
47 2
			->init('a',
48
			[
49 2
				'class' => 'rs-admin-button-default rs-admin-button-create',
50 2
				'href' => $parameterRoute . 'admin/new/articles'
51
			])
52 2
			->text($this->_language->get('article_new'));
53
54
		/* collect output */
55
56 2
		$output .= $titleElement;
57 2
		if ($articlesNew)
58
		{
59 1
			$output .= $linkElement;
60
		}
61 2
		$output .= $this->_renderTable();
62 2
		$output .= Module\Hook::trigger('adminArticleTableEnd');
63 2
		return $output;
64
	}
65
66
	/**
67
	 * render the table
68
	 *
69
	 * @since 4.0.0
70
	 *
71
	 * @return string|null
72
	 */
73
74 2
	protected function _renderTable() : ?string
75
	{
76 2
		$output = null;
77 2
		$outputHead = null;
78 2
		$outputBody = null;
79 2
		$outputFoot = null;
80
		$tableArray =
81
		[
82 2
			'title' => $this->_language->get('title'),
83 2
			'alias' => $this->_language->get('alias'),
84 2
			'language' => $this->_language->get('language'),
85 2
			'category' => $this->_language->get('category'),
86 2
			'rank' => $this->_language->get('rank')
87
		];
88 2
		$adminControl = new Helper\Control($this->_registry, $this->_language);
89 2
		$adminControl->init();
90 2
		$categoryModel = new Admin\Model\Category();
91 2
		$articleModel = new Admin\Model\Article();
92 2
		$articles = $articleModel->getAllByOrder('rank');
93 2
		$articlesTotal = $articles->count();
94 2
		$parameterRoute = $this->_registry->get('parameterRoute');
95
96
		/* html element */
97
98 2
		$element = new Html\Element();
99
		$wrapperElement = $element
100 2
			->copy()
101 2
			->init('div',
102
			[
103 2
				'class' => 'rs-admin-wrapper-table'
104
			]);
105
		$tableElement = $element
106 2
			->copy()
107 2
			->init('table',
108
			[
109 2
				'class' => 'rs-admin-js-sort rs-admin-table-default'
110
			]);
111
		$linkElement = $element
112 2
			->copy()
113 2
			->init('a',
114
			[
115 2
				'class' => 'rs-admin-link-default'
116
			]);
117 2
		$theadElement = $element->copy()->init('thead');
118 2
		$tbodyElement = $element->copy()->init('tbody');
119 2
		$tfootElement = $element->copy()->init('tfoot');
120 2
		$trElement = $element->copy()->init('tr');
121 2
		$thElement = $element->copy()->init('th');
122 2
		$tdElement = $element->copy()->init('td');
123
124
		/* process table */
125
126 2
		foreach ($tableArray as $key => $value)
127
		{
128 2
			$outputHead .= $thElement->copy()->text($value);
129 2
			$outputFoot .= $tdElement->copy()->text($value);
130
		}
131
132
		/* process categories */
133
134 2
		if ($articlesTotal)
135
		{
136 2
			foreach ($articles as $key => $value)
137
			{
138
				$outputBody .= $trElement
139 2
					->copy()
140 2
					->attr('id', 'row-' . $value->id)
141 2
					->addClass(!$value->status ? 'rs-admin-is-disabled' : null)
142 2
					->html(
143 2
						$tdElement->copy()->html(
144
							$linkElement
145 2
								->attr('href', $parameterRoute . $articleModel->getRouteById($value->id))
146 2
								->text($value->title) .
147 2
							$adminControl->render('articles', $value->id, $value->alias, $value->status)
148
						) .
149 2
						$tdElement->copy()->text($value->alias) .
150 2
						$tdElement->copy()->text($value->language ? $this->_language->get($value->language, '_index') : $this->_language->get('all')) .
0 ignored issues
show
It seems like $value->language ? $this...->_language->get('all') can also be of type array; however, Redaxscript\Html\Element::text() does only seem to accept string|integer|null, 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...
151 2
						$tdElement->copy()->text($value->category ? $categoryModel->getById($value->category)->title : $this->_language->get('uncategorized')) .
152
						$tdElement
153 2
							->copy()
154 2
							->addClass('rs-admin-js-move rs-admin-col-move')
155 2
							->addClass($articlesTotal > 1 ? 'rs-admin-is-active' : null)
156 2
							->text($value->rank)
157
				);
158
			}
159
		}
160
		else
161
		{
162
			$outputBody .= $trElement
163
				->copy()
164
				->html(
165
					$tdElement
166
						->copy()
167
						->attr('colspan', count($tableArray))
168
						->text($this->_language->get('article_no'))
169
				);
170
		}
171
172
		/* collect output */
173
174 2
		$outputHead = $theadElement->html(
175 2
			$trElement->html($outputHead)
176
		);
177 2
		$outputBody = $tbodyElement->html($outputBody);
178 2
		$outputFoot = $tfootElement->html(
179 2
			$trElement->html($outputFoot)
180
		);
181 2
		$output .= $wrapperElement->copy()->html(
182 2
			$tableElement->html($outputHead . $outputBody . $outputFoot)
183
		);
184 2
		return $output;
185
	}
186
}
187