Completed
Push — master ( c3c208...858dca )
by Henry
08:18
created

UserForm   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 282
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 12

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 19
lcom 1
cbo 12
dl 0
loc 282
c 0
b 0
f 0
ccs 131
cts 131
cp 1
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
F render() 0 269 19
1
<?php
2
namespace Redaxscript\Admin\View;
3
4
use Redaxscript\Admin;
5
use Redaxscript\Html;
6
use Redaxscript\Module;
7
use Redaxscript\Validator;
8
use function count;
9
use function json_decode;
10
11
/**
12
 * children class to create the user form
13
 *
14
 * @since 3.0.0
15
 *
16
 * @package Redaxscript
17
 * @category View
18
 * @author Henry Ruhs
19
 */
20
21
class UserForm extends ViewAbstract
22
{
23
	/**
24
	 * render the view
25
	 *
26
	 * @since 3.0.0
27
	 *
28
	 * @param int $userId identifier of the user
29
	 *
30
	 * @return string
31
	 */
32
33 4
	public function render(int $userId = null) : string
34
	{
35 4
		$output = Module\Hook::trigger('adminUserFormStart');
36 4
		$userModel = new Admin\Model\User();
37 4
		$user = $userModel->getById($userId);
38 4
		$nameValidator = new Validator\Name();
39 4
		$userValidator = new Validator\User();
40 4
		$passwordValidator = new Validator\Password();
41 4
		$helperOption = new Helper\Option($this->_language);
42
43
		/* html element */
44
45 4
		$titleElement = new Html\Element();
46
		$titleElement
47 4
			->init('h2',
48
			[
49 4
				'class' => 'rs-admin-title-content',
50
			])
51 4
			->text($user->name ? : $this->_language->get('user_new'));
52 4
		$formElement = new Admin\Html\Form($this->_registry, $this->_language);
53 4
		$formElement->init(
54
		[
55 4
			'form' =>
56
			[
57
				'class' => 'rs-admin-js-validate rs-admin-fn-tab rs-admin-component-tab rs-admin-form-default rs-admin-form-user'
58
			],
59
			'button' =>
60
			[
61
				'create' =>
62
				[
63
					'name' => self::class
64
				],
65
				'save' =>
66
				[
67
					'name' => self::class
68
				]
69
			],
70
			'link' =>
71
			[
72
				'cancel' =>
73
				[
74 4
					'href' => $this->_registry->get('usersEdit') && $this->_registry->get('usersDelete') ? $this->_registry->get('parameterRoute') . 'admin/view/users' : $this->_registry->get('parameterRoute') . 'admin'
75
				],
76
				'delete' =>
77
				[
78 4
					'href' => $user->id ? $this->_registry->get('parameterRoute') . 'admin/delete/users/' . $user->id . '/' . $this->_registry->get('token') : null
79
				]
80
			]
81
		]);
82
83
		/* create the form */
84
85
		$formElement
86
87
			/* user */
88
89 4
			->radio(
90
			[
91 4
				'id' => self::class . '\User',
92
				'class' => 'rs-admin-fn-status-tab',
93
				'name' => self::class . '\Tab',
94
				'checked' => 'checked'
95
			])
96 4
			->label($this->_language->get('user'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('user') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
97
			[
98 4
				'class' => 'rs-admin-fn-toggle-tab rs-admin-label-tab',
99
				'for' => self::class . '\User'
100
			])
101 4
			->append('<ul class="rs-admin-fn-content-tab rs-admin-box-tab"><li>')
102 4
			->label($this->_language->get('name'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('name') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
103
			[
104 4
				'for' => 'name'
105
			])
106 4
			->text(
107
			[
108 4
				'autofocus' => 'autofocus',
109 4
				'id' => 'name',
110 4
				'name' => 'name',
111 4
				'pattern' => $nameValidator->getPattern(),
112 4
				'required' => 'required',
113 4
				'value' => $user->name
114
			])
115 4
			->append('</li>');
116 4
		if (!$user->id)
117
		{
118
			$formElement
119 2
				->append('<li>')
120 2
				->label($this->_language->get('user'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('user') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
121
				[
122 2
					'for' => 'user'
123
				])
124 2
				->text(
125
				[
126 2
					'id' => 'user',
127 2
					'name' => 'user',
128 2
					'pattern' => $userValidator->getPattern(),
129 2
					'required' => 'required',
130 2
					'value' => $user->user
131
				])
132 2
				->append('</li>');
133
		}
134
		$formElement
135 4
			->append('<li>')
136 4
			->label($this->_language->get('description'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('description') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
137
			[
138 4
				'for' => 'description'
139
			])
140 4
			->textarea(
141
			[
142 4
				'class' => 'rs-admin-js-resize rs-admin-field-textarea rs-admin-field-small',
143 4
				'id' => 'description',
144 4
				'name' => 'description',
145 4
				'rows' => 1,
146 4
				'value' => $user->description
147
			])
148 4
			->append('</li><li>')
149 4
			->label($this->_language->get('password'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('password') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
150
			[
151 4
				'for' => 'password'
152
			])
153 4
			->password(!$user->id ?
154
			[
155 2
				'id' => 'password',
156 2
				'name' => 'password',
157 2
				'pattern' => $passwordValidator->getPattern(),
158 2
				'autocomplete' => 'new-password',
159 2
				'required' => 'required'
160
			] :
161
			[
162 2
				'id' => 'password',
163 2
				'name' => 'password',
164 2
				'pattern' => $passwordValidator->getPattern(),
165 4
				'autocomplete' => 'new-password'
166
			])
167 4
			->append('</li><li>')
168 4
			->label($this->_language->get('email'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('email') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
169
			[
170 4
				'for' => 'email'
171
			])
172 4
			->email(
173
			[
174 4
				'id' => 'email',
175 4
				'name' => 'email',
176 4
				'required' => 'required',
177 4
				'value' => $user->email
178
			])
179 4
			->append('</li></ul>')
180
181
			/* general */
182
183 4
			->radio(
184
			[
185 4
				'id' => self::class . '\General',
186
				'class' => 'rs-admin-fn-status-tab',
187
				'name' => self::class . '\Tab'
188
			])
189 4
			->label($this->_language->get('general'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('general') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
190
			[
191 4
				'class' => 'rs-admin-fn-toggle-tab rs-admin-label-tab',
192
				'for' => self::class . '\General'
193
			])
194 4
			->append('<ul class="rs-admin-fn-content-tab rs-admin-box-tab"><li>')
195 4
			->label($this->_language->get('language'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('language') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
196
			[
197 4
				'for' => 'language'
198
			])
199 4
			->select($helperOption->getLanguageArray(),
200
			[
201 4
				$user->language
202
			],
203
			[
204 4
				'id' => 'language',
205
				'name' => 'language'
206
			])
207 4
			->append('</li></ul>');
208 4
		if (!$user->id || $user->id > 1)
209
		{
210
			$formElement
211
212
				/* customize */
213
214 3
				->radio(
215
				[
216 3
					'id' => self::class . '\Customize',
217
					'class' => 'rs-admin-fn-status-tab',
218
					'name' => self::class . '\Tab'
219
				])
220 3
				->label($this->_language->get('customize'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('customize') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
221
				[
222 3
					'class' => 'rs-admin-fn-toggle-tab rs-admin-label-tab',
223
					'for' => self::class . '\Customize'
224
				])
225 3
				->append('<ul class="rs-admin-fn-content-tab rs-admin-box-tab"><li>')
226 3
				->label($this->_language->get('status'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('status') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
227
				[
228 3
					'for' => 'status'
229
				])
230 3
				->checkbox(!$user->id || $user->status ?
231
				[
232 3
					'id' => 'status',
233
					'class' => 'rs-admin-fn-status-switch',
234
					'name' => 'status',
235
					'checked' => 'checked'
236
				] :
237
				[
238 3
					'id' => 'status',
239
					'class' => 'rs-admin-fn-status-switch',
240
					'name' => 'status'
241
				])
242 3
				->label(null,
243
				[
244 3
					'class' => 'rs-admin-label-switch',
245 3
					'for' => 'status',
246 3
					'data-on' => $this->_language->get('enable'),
247 3
					'data-off' => $this->_language->get('disable')
248
				])
249 3
				->append('</li>');
250 3
			if ($this->_registry->get('groupsEdit'))
251
			{
252
				$formElement
253 1
					->append('<li>')
254 1
					->label($this->_language->get('groups'),
0 ignored issues
show
Bug introduced by
It seems like $this->_language->get('groups') targeting Redaxscript\Language::get() can also be of type array; however, Redaxscript\Html\Form::label() does only seem to accept null|string, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
255
					[
256 1
						'for' => 'groups'
257
					])
258 1
					->select($helperOption->getGroupArray(),
259 1
					(array)json_decode($user->groups),
260
					[
261 1
						'id' => 'groups',
262 1
						'name' => 'groups[]',
263 1
						'multiple' => 'multiple',
264 1
						'size' => count($helperOption->getGroupArray())
265
					])
266 1
					->append('</li>');
267
			}
268 3
			$formElement->append('</ul>');
269
		}
270
		$formElement
271 4
			->hidden(
272
			[
273 4
				'name' => 'id',
274 4
				'value' => $user->id
275
			])
276 4
			->token()
277 4
			->append('<div class="rs-admin-wrapper-button">')
278 4
			->cancel();
279 4
		if ($user->id)
280
		{
281 2
			if (($this->_registry->get('usersDelete') || $this->_registry->get('myId') === $user->id) && $user->id > 1)
282
			{
283 1
				$formElement->delete();
284
			}
285 2
			if ($this->_registry->get('usersEdit') || $this->_registry->get('myId') === $user->id)
286
			{
287 2
				$formElement->save();
288
			}
289
		}
290 2
		else if ($this->_registry->get('usersNew'))
291
		{
292 1
			$formElement->create();
293
		}
294 4
		$formElement->append('</div>');
295
296
		/* collect output */
297
298 4
		$output .= $titleElement . $formElement;
299 4
		$output .= Module\Hook::trigger('adminUserFormEnd');
300 4
		return $output;
301
	}
302
}
303