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

includes/Asset/Transport.php (1 issue)

Check for loose comparison of strings.

Best Practice Bug Major

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\Asset;
3
4
use Redaxscript\Language;
5
use Redaxscript\Registry;
6
use function is_array;
7
use function json_encode;
8
9
/**
10
 * class to transport javascript variables
11
 *
12
 * @since 3.0.0
13
 *
14
 * @package Redaxscript
15
 * @category Asset
16
 * @author Henry Ruhs
17
 */
18
19
class Transport
20
{
21
	/**
22
	 * instance of the registry class
23
	 *
24
	 * @var Registry
25
	 */
26
27
	protected $_registry;
28
29
	/**
30
	 * instance of the language class
31
	 *
32
	 * @var Language
33
	 */
34
35
	protected $_language;
36
37
	/**
38
	 * registry array to be transported
39
	 *
40
	 * @since 3.0.0
41
	 *
42
	 * @var array
43
	 */
44
45
	protected $_registryArray =
46
	[
47
		'token',
48
		'loggedIn',
49
		'firstParameter',
50
		'secondParameter',
51
		'thirdParameter',
52
		'adminParameter',
53
		'tableParameter',
54
		'idParameter',
55
		'aliasParameter',
56
		'lastParameter',
57
		'firstTable',
58
		'secondTable',
59
		'thirdTable',
60
		'lastTable',
61
		'fullRoute',
62
		'fullTopRoute',
63
		'parameterRoute',
64
		'languageRoute',
65
		'templateRoute',
66
		'refreshRoute',
67
		'language',
68
		'template',
69
		'myBrowser',
70
		'myBrowserVersion',
71
		'myEngine',
72
		'myDesktop',
73
		'myMobile',
74
		'myTablet'
75
	];
76
77
	/**
78
	 * constructor of the class
79
	 *
80
	 * @since 2.4.0
81
	 *
82
	 * @param Registry $registry instance of the registry class
83
	 * @param Language $language instance of the language class
84
	 */
85
86 4
	public function __construct(Registry $registry, Language $language)
87
	{
88 4
		$this->_registry = $registry;
89 4
		$this->_language = $language;
90 4
	}
91
92
	/**
93
	 * get the array
94
	 *
95
	 * @since 3.0.0
96
	 *
97
	 * @return array
98
	 */
99
100 1
	public function getArray() : array
101
	{
102
		$transportArray =
103
		[
104 1
			'baseUrl' => $this->_registry->get('root') . '/',
105 1
			'generator' => $this->_language->get('name', '_package') . ' ' . $this->_language->get('version', '_package'),
106 1
			'language' => $this->_language->get(),
107 1
			'version' => $this->_language->get('version', '_package')
108
		];
109
110
		/* process registry */
111
112 1
		foreach ($this->_registryArray as $value)
113
		{
114 1
			$transportArray['registry'][$value] = $this->_registry->get($value);
115
		}
116 1
		return $transportArray;
117
	}
118
119
	/**
120
	 * render the javascript variables
121
	 *
122
	 * @since 3.0.0
123
	 *
124
	 * @param string $key
125
	 * @param string|array $value
126
	 *
127
	 * @return string|null
128
	 */
129
130 3
	public function render(string $key = null, $value = null) : ?string
131
	{
132 3
		$output = null;
133 3
		if (is_array($value))
134
		{
135 1
			foreach ($value as $keyChildren => $valueChildren)
136
			{
137 1
				$output .= 'window.' . $key . '.' . $keyChildren . ' = ' . json_encode($valueChildren) . ';';
138
			}
139
		}
140 2
		else if ($value)
0 ignored issues
show
Bug Best Practice introduced by
The expression $value 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...
141
		{
142 2
			$output = 'window.' . $key . ' = ' . json_encode($value) . ';';
143
		}
144 3
		return $output;
145
	}
146
}