Completed
Push — master ( 0ea243...da58d4 )
by Henry
10:25 queued 33s
created

includes/Admin/View/Helper/Notification.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\Admin\View\Helper;
3
4
use Redaxscript\Admin\View\ViewInterface;
5
use Redaxscript\Html;
6
use Redaxscript\Language;
7
use Redaxscript\Module;
8
use function array_key_exists;
9
use function array_replace_recursive;
10
use function is_array;
11
12
/**
13
 * helper class to create the admin notification
14
 *
15
 * @since 4.0.0
16
 *
17
 * @package Redaxscript
18
 * @category View
19
 * @author Henry Ruhs
20
 */
21
22
class Notification implements ViewInterface
23
{
24
	/**
25
	 * instance of the language class
26
	 *
27
	 * @var Language
28
	 */
29
30
	protected $_language;
31
32
	/**
33
	 * array of the notification
34
	 *
35
	 * @var array
36
	 */
37
38
	protected $_notificationArray = [];
39
40
	/**
41
	 * options of the notification
42
	 *
43
	 * @var array
44
	 */
45
46
	protected $_optionArray =
47
	[
48
		'className' =>
49
		[
50
			'list' => 'rs-admin-list-notification',
51
			'item' => 'rs-admin-item-notification rs-admin-item-note',
52
			'title' => 'rs-admin-title-notification',
53
			'link' => 'rs-admin-link-notification',
54
			'text' => 'rs-admin-text-notification',
55
			'note' =>
56
			[
57
				'success' => 'rs-admin-is-success',
58
				'warning' => 'rs-admin-is-warning',
59
				'error' => 'rs-admin-is-error',
60
				'info' => 'rs-admin-is-info'
61
			]
62
		]
63
	];
64
65
	/**
66
	 * constructor of the class
67
	 *
68
	 * @since 4.0.0
69
	 *
70
	 * @param Language $language instance of the language class
71
	 */
72
73 1
	public function __construct(Language $language)
74
	{
75 1
		$this->_language = $language;
76 1
	}
77
78
	/**
79
	 * init the class
80
	 *
81
	 * @since 4.0.0
82
	 *
83
	 * @param array $optionArray options of the notification
84
	 */
85
86 1
	public function init(array $optionArray = []) : void
87
	{
88 1
		$this->_optionArray = array_replace_recursive($this->_optionArray, $optionArray);
89 1
		$this->_notificationArray = Module\Hook::collect('adminNotification');
90 1
	}
91
92
	/**
93
	 * render the view
94
	 *
95
	 * @since 4.0.0
96
	 *
97
	 * @return string|null
98
	 */
99
100 1
	public function render() : ?string
101
	{
102 1
		$output = null;
103 1
		$outputItem = null;
104
105
		/* html element */
106
107 1
		$element = new Html\Element();
108
		$titleElement = $element
109 1
			->copy()
110 1
			->init('h3',
111
			[
112 1
				'class' => $this->_optionArray['className']['title']
113
			]);
114
		$listElement = $element
115 1
			->copy()
116 1
			->init('ul',
117
			[
118 1
				'class' => $this->_optionArray['className']['list']
119
			]);
120
		$itemElement = $element
121 1
			->copy()
122 1
			->init('li',
123
			[
124 1
				'class' => $this->_optionArray['className']['item']
125
			]);
126
		$linkElement = $element
127 1
			->copy()
128 1
			->init('a',
129
			[
130 1
				'class' => $this->_optionArray['className']['link']
131
			]);
132
		$textElement = $element
133 1
			->copy()
134 1
			->init('span',
135
			[
136 1
				'class' => $this->_optionArray['className']['text']
137
			]);
138
139
		/* process notification */
140
141 1
		foreach ($this->_notificationArray as $typeKey => $typeValue)
142
		{
143 1
			foreach ($typeValue as $notificationKey => $notificationValue)
144
			{
145 1
				foreach ($notificationValue as $value)
146
				{
147
					$outputItem .= $itemElement
148 1
						->copy()
149 1
						->addClass($this->_optionArray['className']['note'][$typeKey])
150 1
						->html(
151 1
							$titleElement->text($notificationKey)
152
						)
153 1
						->append(
154 1
							is_array($value) &&
155 1
							array_key_exists('text', $value) &&
156 1
							array_key_exists('attr', $value) ? $linkElement->attr($value['attr'])->text($value['text']) : $textElement->text($value)
157
						);
158
				}
159
			}
160
		}
161 1
		if ($outputItem)
0 ignored issues
show
Bug Best Practice introduced by
The expression $outputItem of type string|null is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
162
		{
163 1
			$output .= $listElement->html($outputItem);
164
		}
165 1
		return $output;
166
	}
167
168
	/**
169
	 * get the meta array
170
	 *
171
	 * @since 4.0.0
172
	 *
173
	 * @return array
174
	 */
175
176
	public function getMetaArray() : array
177
	{
178
		$metaArray = [];
179
180
		/* process notification */
181
182
		foreach ($this->_notificationArray as $typeKey => $typeValue)
183
		{
184
			foreach ($typeValue as $notificationKey => $notificationValue)
185
			{
186
				$metaArray[$typeKey]++;
187
				$metaArray['total']++;
188
			}
189
		}
190
		return $metaArray;
191
	}
192
}
193