* * @author Double Bastion LLC * * @license GNU AGPL version 3 or any later version * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this program. If not, see . * */ declare(strict_types=1); namespace OCA\SMSRelentless; use OCA\SMSRelentless\AppInfo\Application; use OCP\IConfig; class AppConfig { private $appName = 'sms_relentless'; /** @var IConfig */ private $config; /** * AppConfig constructor. * * @param IConfig $config */ public function __construct(IConfig $config) { $this->config = $config; } /** * Get all setting values as an array * @return array */ public function getAllValues() { $keys = array_keys($this->defaults); $values = array_map([$this, 'getAppValue'], $keys); $preparedKeys = array_map([$this, 'camelCase'], $keys); return array_combine($preparedKeys, $values); } /** * Get a value by key * @param string $key * @return string */ public function getAppValue($key) { $defaultValue = null; if (array_key_exists($key, $this->defaults)){ $defaultValue = $this->defaults[$key]; } return $this->config->getAppValue($this->appName, $key, $defaultValue); } /** * Set a value by key * @param string $key * @param string $value */ public function setAppValue($key, $value) { $this->config->setAppValue($this->appName, $key, $value); } /** * Set a value with magic __call invocation * @param string $key * @param array $args * @throws \BadFunctionCallException */ protected function setter($key, $args) { if (array_key_exists($key, $this->defaults)) { $this->setAppValue($key, $args[0]); } else { throw new \BadFunctionCallException($key . ' is not a valid key'); } } /** * Get a value with magic __call invocation * @param string $key * @return string * @throws \BadFunctionCallException */ protected function getter($key) { if (array_key_exists($key, $this->defaults)) { return $this->getAppValue($key); } throw new \BadFunctionCallException($key . ' is not a valid key'); } /** * Translates property_name into propertyName * @param string $property * @return string */ protected function camelCase($property){ $split = explode('_', $property); $ucFirst = implode('', array_map('ucfirst', $split)); return lcfirst($ucFirst); } /** * Does all the someConfig to some_config magic * @param string $property * @return string */ protected function propertyToKey($property){ $parts = preg_split('/(?=[A-Z])/', $property); $column = null; foreach($parts as $part){ if($column === null){ $column = $part; } else { $column .= '_' . lcfirst($part); } } return $column; } /** * Get/set an option value by calling getSomeOption method * @param string $methodName * @param array $args * @return string|null * @throws \BadFunctionCallException */ public function __call($methodName, $args){ $attr = lcfirst( substr($methodName, 3) ); $key = $this->propertyToKey($attr); if(strpos($methodName, 'set') === 0){ $this->setter($key, $args); } elseif(strpos($methodName, 'get') === 0) { return $this->getter($key); } else { throw new \BadFunctionCallException($methodName . ' does not exist'); } } }