| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- namespace clagiordano\weblibs\configmanager;
- use Exception;
- use RuntimeException;
- /**
- * Class AbstractConfigManager
- * @package clagiordano\weblibs\configmanager
- */
- abstract class AbstractConfigManager implements IConfigurable
- {
- /** @var array $configData */
- protected $configData = null;
- /** @var string $configFilePath */
- protected $configFilePath = null;
- /**
- * Create config object, optionally automatic load config
- * from argument $configFilePath
- *
- * @param string $configFilePath
- */
- public function __construct($configFilePath = null)
- {
- try {
- $this->loadConfig($configFilePath);
- } catch (Exception $exception) {
- /**
- * Allow not existent file name at construct
- */
- }
- }
- /**
- * Get value pointer from config for get/set value
- *
- * @param string $configPath
- *
- * @return mixed
- */
- protected function & getValuePointer($configPath)
- {
- $configData =& $this->configData;
- $parts = explode('.', $configPath);
- $length = count($parts);
- for ($i = 0; $i < $length; $i++) {
- if (!isset($configData[ $parts[ $i ] ])) {
- $configData[ $parts[ $i ] ] = ($i === $length) ? [] : null;
- }
- $configData = &$configData[ $parts[ $i ] ];
- }
- return $configData;
- }
- /**
- * Get value from config data throught keyValue path
- *
- * @param string $configPath
- * @param mixed $defaultValue
- *
- * @return mixed
- */
- public function getValue($configPath, $defaultValue = null)
- {
- $stored = $this->getValuePointer($configPath);
- return (is_null($stored)
- ? $defaultValue
- : $stored);
- }
- /**
- * Check if exist required config for keyValue
- *
- * @param string $keyValue
- *
- * @return mixed
- */
- public function existValue($keyValue)
- {
- return !is_null($this->getValue($keyValue));
- }
- /**
- * Set value in config path
- *
- * @param string $configPath
- * @param mixed $newValue
- *
- * @return IConfigurable
- */
- public function setValue($configPath, $newValue)
- {
- $configData = &$this->getValuePointer($configPath);
- $configData = $newValue;
- return $this;
- }
- /**
- * @inheritDoc
- */
- public function getConfig()
- {
- return $this->configData;
- }
- /**
- * @inheritDoc
- */
- public function setConfig($config)
- {
- $this->configData = (array)$config;
- return $this;
- }
- /**
- * @inheritDoc
- */
- public function convert(IConfigurable $target)
- {
- $target->setConfig($this->getConfig());
- return $target;
- }
- /**
- * Check if configFilePath exists and is readable
- * @return bool
- * @throws RuntimeException
- */
- protected function checkLoadable()
- {
- if ($this->configFilePath !== null) {
- if (file_exists($this->configFilePath) && is_readable($this->configFilePath)) {
- /**
- * Readable
- */
- return true;
- }
- /**
- * $configFilePath is not null, but not existent or not readable
- */
- throw new RuntimeException("Failed to read config file from path '{$this->configFilePath}'");
- }
- /**
- * $configFilePath is null
- */
- return false;
- }
- }
|