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

includes/Config.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;
3
4
use function array_key_exists;
5
use function array_keys;
6
use function basename;
7
use function dirname;
8
use function end;
9
use function is_array;
10
use function is_file;
11
use function parse_url;
12
use function str_replace;
13
use function trim;
14
15
/**
16
 * children class to store database config
17
 *
18
 * @since 2.4.0
19
 *
20
 * @package Redaxscript
21
 * @category Config
22
 * @author Henry Ruhs
23
 */
24
25
class Config extends Singleton
26
{
27
	/**
28
	 * path to the config
29
	 *
30
	 * @var string
31
	 */
32
33
	protected static $_configPath = 'config.php';
34
35
	/**
36
	 * array of the config
37
	 *
38
	 * @var array
39
	 */
40
41
	protected static $_configArray = [];
42
43
	/**
44
	 * init the class
45
	 *
46
	 * @since 2.4.0
47
	 *
48
	 * @param string $configPath path to the config
49
	 */
50
51 6
	public function init(string $configPath = null) : void
52
	{
53 6
		if (is_file($configPath))
54
		{
55 6
			self::$_configPath = $configPath;
56
		}
57
58
		/* load config */
59
60 6
		$configArray = include(self::$_configPath);
61 6
		if (is_array($configArray))
62
		{
63 1
			self::$_configArray = $configArray;
64
		}
65 6
	}
66
67
	/**
68
	 * get the value from config
69
	 *
70
	 * @since 2.2.0
71
	 *
72
	 * @param string $key key of the item
73
	 *
74
	 * @return string|array|null
75
	 */
76
77 8
	public function get(string $key = null)
78
	{
79 8
		if (is_array(self::$_configArray) && array_key_exists($key, self::$_configArray))
80
		{
81 1
			return self::$_configArray[$key];
82
		}
83 8
		if (!$key)
0 ignored issues
show
Bug Best Practice introduced by redaxmedia
The expression $key of type null|string is loosely compared to false; 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...
84
		{
85 8
			return self::$_configArray;
86
		}
87
		return null;
88
	}
89
90
	/**
91
	 * set the value to config
92
	 *
93
	 * @since 2.2.0
94
	 *
95
	 * @param string $key key of the item
96
	 * @param string $value value of the item
97
	 */
98
99 8
	public function set(string $key = null, string $value = null) : void
100
	{
101 8
		self::$_configArray[$key] = $value;
102 8
	}
103
104
	/**
105
	 * parse from database url
106
	 *
107
	 * @since 3.0.0
108
	 *
109
	 * @param string $dbUrl database url to be parsed
110
	 */
111
112 4
	public function parse(string $dbUrl = null) : void
113
	{
114 4
		$dbUrl = parse_url($dbUrl);
115 4
		$this->clear();
116 4
		$this->set('dbType', str_replace('postgres', 'pgsql', $dbUrl['scheme']));
117 4
		$this->set('dbHost', $dbUrl['port'] ? $dbUrl['host'] . ':' . $dbUrl['port'] : $dbUrl['host']);
118 4
		$this->set('dbName', trim($dbUrl['path'], '/'));
119 4
		$this->set('dbUser', $dbUrl['user']);
120 4
		$this->set('dbPassword', $dbUrl['pass']);
121 4
	}
122
123
	/**
124
	 * write the config
125
	 *
126
	 * @since 2.4.0
127
	 *
128
	 * @return bool
129
	 */
130
131 1
	public function write() : bool
132
	{
133 1
		$configKeys = array_keys(self::$_configArray);
134 1
		$lastKey = end($configKeys);
135
136
		/* collect content */
137
138 1
		$content = '<?php' . PHP_EOL . 'return' . PHP_EOL . '[' . PHP_EOL;
139 1
		foreach (self::$_configArray as $key => $value)
140
		{
141 1
			if ($value)
142
			{
143 1
				$content .= '	\'' . $key . '\' => \'' . $value . '\'';
144
			}
145
			else
146
			{
147 1
				$content .= '	\'' . $key . '\' => null';
148
			}
149 1
			if ($key !== $lastKey)
150
			{
151 1
				$content .= ',';
152
			}
153 1
			$content .= PHP_EOL;
154
		}
155 1
		$content .= '];';
156
157
		/* write content */
158
159 1
		return $this->_writeContent($content);
160
	}
161
162
	/**
163
	 * clear the config
164
	 *
165
	 * @since 3.0.0
166
	 */
167
168 4
	public function clear() : void
169
	{
170 4
		self::$_configArray = [];
171 4
	}
172
173
	/**
174
	 * write content to file
175
	 *
176
	 * @since 2.4.0
177
	 *
178
	 * @param string|null $content
179
	 *
180
	 * @return bool
181
	 */
182
183 1
	protected function _writeContent(string $content = null) : bool
184
	{
185 1
		$filesystem = new Filesystem\File();
186 1
		$filesystem->init(dirname(self::$_configPath));
187 1
		return $filesystem->writeFile(basename (self::$_configPath), $content);
188
	}
189
}
190