summaryrefslogtreecommitdiffstats
path: root/common/app/classes/PlanetConfig.php
diff options
context:
space:
mode:
Diffstat (limited to 'common/app/classes/PlanetConfig.php')
-rw-r--r--common/app/classes/PlanetConfig.php166
1 files changed, 136 insertions, 30 deletions
diff --git a/common/app/classes/PlanetConfig.php b/common/app/classes/PlanetConfig.php
index a31938e..f3928bc 100644
--- a/common/app/classes/PlanetConfig.php
+++ b/common/app/classes/PlanetConfig.php
@@ -6,32 +6,45 @@
class PlanetConfig
{
- public $conf;
-
- public function __construct($array)
- {
- $defaultConfig = array(
- 'url' => 'http://www.example.com/',
- 'name' => '',
- 'locale' => 'en',
- 'items' => 10,
- 'shuffle' => 0,
- 'refresh' => 240,
- 'cache' => 10,
- 'nohtml' => 0,
- 'postmaxlength' => 0,
- 'cachedir' => './cache',
- );
-
- // User config
- $this->conf = $array;
-
- // Complete config with default config
- foreach ($defaultConfig as $key => $value) {
- if (!isset($this->conf[$key])) {
- $this->conf[$key] = $value;
- }
- }
+ protected $conf = [];
+
+ public static $defaultConfig = [
+ 'url' => 'http://www.example.com/',
+ 'name' => '',
+ 'locale' => 'en',
+ 'items' => 10,
+ 'shuffle' => 0,
+ 'refresh' => 240,
+ 'cache' => 10,
+ 'nohtml' => 0,
+ 'postmaxlength' => 0,
+ 'categories' => '',
+ 'cachedir' => './cache',
+ 'debug' => false,
+ 'checkcerts' => true,
+ ];
+
+ /**
+ * PlanetConfig constructor.
+ * @param array $userConfig
+ * @param bool $useDefaultConfig
+ */
+ public function __construct($userConfig = [], $useDefaultConfig = true)
+ {
+ $default = $useDefaultConfig ? self::$defaultConfig : array();
+ $this->conf = $this->merge($default, $userConfig);
+ }
+
+ /**
+ * Merge the configuration of the user in the default one.
+ *
+ * @param array $default
+ * @param array $user
+ * @return array
+ */
+ protected function merge($default = [], $user = [])
+ {
+ return array_merge($default, $this->normalizeArrayKeys($user));
}
public function getUrl()
@@ -58,7 +71,10 @@ class PlanetConfig
return $this->conf['cache'];
}
- //@TODO: drop this pref
+ /**
+ * @deprecated
+ * @return mixed
+ */
public function getShuffle()
{
return $this->conf['shuffle'];
@@ -69,20 +85,110 @@ class PlanetConfig
return $this->conf['items'];
}
- //@TODO: drop this pref
+ /**
+ * @deprecated
+ * @return mixed
+ */
public function getNoHTML()
{
return $this->conf['nohtml'];
}
- //@TODO: drop this pref
+ /**
+ * @deprecated
+ * @return mixed
+ */
public function getPostMaxLength()
{
return $this->conf['postmaxlength'];
}
+ public function getCategories()
+ {
+ return $this->conf['categories'];
+ }
+
public function toYaml()
{
- return Spyc::YAMLDump($this->conf,4);
+ return Spyc::YAMLDump($this->conf, 4);
+ }
+
+ /**
+ * @return array
+ */
+ public function toArray()
+ {
+ return $this->conf;
+ }
+
+ public function getDebug()
+ {
+ return $this->conf['debug'];
+ }
+
+ /**
+ * @return array
+ */
+ public function getDefaultConfig()
+ {
+ return self::$defaultConfig;
+ }
+
+ /**
+ * Normalize the name of a configuration key.
+ *
+ * @param string $key
+ * @return string
+ */
+ protected function normalizeKeyName($key = null)
+ {
+ return strtolower($key);
+ }
+
+ /**
+ * Normalize all the keys of the array.
+ *
+ * @param array $array
+ * @return array
+ */
+ protected function normalizeArrayKeys($array = [])
+ {
+ foreach ($array as $key => $value) {
+ $normalized = $this->normalizeKeyName($key);
+ if ($normalized !== $key) {
+ $array[$this->normalizeKeyName($key)] = $value;
+ unset($array[$key]);
+ }
+ }
+
+ return $array;
}
+
+ /**
+ * Generic configuration getter.
+ *
+ * @return mixed|null
+ */
+ public function __get($key)
+ {
+ $key = $this->normalizeKeyName($key);
+
+ return array_key_exists($key, $this->conf) ?
+ $this->conf[$key] :
+ null;
+ }
+
+ /**
+ * Generic configuration setter.
+ *
+ * @param $key
+ * @param $value
+ */
+ public function __set($key, $value)
+ {
+ $key = $this->normalizeKeyName($key);
+
+ $this->conf[$key] = $value;
+ }
+
}