'darkroom', self::KEY_BOOTSWATCH_THEME => 'cerulean', self::KEY_MATERIAL_COLOR => 'teal', self::KEY_SLICK_ENABLED => true, self::KEY_SLICK_LAZYLOAD => 'ondemand', self::KEY_SLICK_INFINITE => false, self::KEY_SLICK_CENTERED => false, self::KEY_SHOW_JUMBOTRON => false, self::KEY_PICTURE_INFO => 'tabs', self::KEY_PHOTOSWIPE => true, self::KEY_PHOTOSWIPE_INTERVAL => '3500', self::KEY_PHOTOSWIPE_METADATA => false, self::KEY_THUMBNAIL_LINKTO => 'picture', self::KEY_THUMBNAIL_CAPTION => true, self::KEY_CATEGORY_WELLS => 'never', self::KEY_LOGO_IMAGE_ENABLED => false, self::KEY_LOGO_IMAGE_PATH => '', self::KEY_QUICKSEARCH_NAVBAR => false, self::KEY_CAT_DESCRIPTIONS => false ); private $types = array( self::KEY_BOOTSTRAP_THEME => self::TYPE_STRING, self::KEY_BOOTSWATCH_THEME => self::TYPE_STRING, self::KEY_MATERIAL_COLOR => self::TYPE_STRING, self::KEY_SLICK_ENABLED => self::TYPE_BOOL, self::KEY_SLICK_LAZYLOAD => self::TYPE_STRING, self::KEY_SLICK_INFINITE => self::TYPE_BOOL, self::KEY_SLICK_CENTERED => self::TYPE_BOOL, self::KEY_SHOW_JUMBOTRON => self::TYPE_BOOL, self::KEY_PICTURE_INFO => self::TYPE_STRING, self::KEY_PHOTOSWIPE => self::TYPE_BOOL, self::KEY_PHOTOSWIPE_INTERVAL => self::TYPE_NUM, self::KEY_PHOTOSWIPE_METADATA => self::TYPE_BOOL, self::KEY_THUMBNAIL_LINKTO => self::TYPE_STRING, self::KEY_THUMBNAIL_CAPTION => self::TYPE_BOOL, self::KEY_CATEGORY_WELLS => self::TYPE_STRING, self::KEY_LOGO_IMAGE_ENABLED => self::TYPE_BOOL, self::KEY_LOGO_IMAGE_PATH => self::TYPE_STRING, self::KEY_QUICKSEARCH_NAVBAR => self::TYPE_BOOL, self::KEY_CAT_DESCRIPTIONS => self::TYPE_BOOL ); private $config = array(); public function __construct() { global $conf; // Create initial config if necessary if (!isset($conf[self::CONF_PARAM])) { $this->createDefaultConfig(); return; } // Load and JSON decode the config $loaded = json_decode($conf[self::CONF_PARAM], true); // Check for current version if (isset($loaded[self::KEY_VERSION]) && $loaded[self::KEY_VERSION] == self::CONF_VERSION) { $this->config = $loaded; return; } // Invalid or old config, recreate $this->createDefaultConfig(); if (is_array($loaded)) { $this->populateConfig($loaded); } $this->save(); } public function __set($key, $value) { if (array_key_exists($key, $this->defaults)) { switch ($this->types[$key]) { case self::TYPE_STRING: $this->config[$key] = !empty($value) ? $value : null; break; case self::TYPE_BOOL: $this->config[$key] = $value ? true : false; break; case self::TYPE_NUM: $this->config[$key] = is_numeric($value) ? $value : $this->defaults[$key]; break; } } } public function __get($key) { if (array_key_exists($key, $this->defaults)) { switch ($this->types[$key]) { case self::TYPE_STRING: case self::TYPE_BOOL: case self::TYPE_NUM: return $this->config[$key]; } } else { return null; } } public function fromPost(array $post) { foreach (array_keys($this->defaults) as $key) { $this->__set($key, isset($post[$key]) ? stripslashes($post[$key]) : null); } } public function save() { conf_update_param(self::CONF_PARAM, json_encode($this->config)); } private function createDefaultConfig() { $this->config = $this->defaults; $this->config[self::KEY_VERSION] = self::CONF_VERSION; } private function populateConfig(array $config) { foreach (array_keys($this->defaults) as $key) { if (isset($config[$key])) { $this->config[$key] = $config[$key]; } } } } ?>