1
0
This repository has been archived on 2021-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
gallery3-contrib/3.0/obsolete/web_client/system/libraries/drivers/Config.php

257 lines
5.2 KiB
PHP

<?php defined('SYSPATH') or die('No direct script access.');
/**
* Kohana_Config abstract driver to get and set
* configuration options.
*
* Specific drivers should implement caching and encryption
* as they deem appropriate.
*
* $Id: Config.php 4679 2009-11-10 01:45:52Z isaiah $
*
* @package Kohana_Config
* @author Kohana Team
* @copyright (c) 2007-2009 Kohana Team
* @license http://kohanaphp.com/license
* @abstract
*/
abstract class Config_Driver {
/**
* Internal caching
*
* @var Cache
*/
protected $cache;
/**
* The name of the internal cache
*
* @var string
*/
protected $cache_name = 'Kohana_Config_Cache';
/**
* Cache Lifetime
*
* @var mixed
*/
protected $cache_lifetime = FALSE;
/**
* The Encryption library
*
* @var Encrypt
*/
protected $encrypt;
/**
* The config loaded
*
* @var array
*/
protected $config = array();
/**
* The changed status of configuration values,
* current state versus the stored state.
*
* @var bool
*/
protected $changed = FALSE;
/**
* Determines if any config has been loaded yet
*/
public $loaded = FALSE;
/**
* Array driver constructor. Sets up the PHP array
* driver, including caching and encryption if
* required
*
* @access public
*/
public function __construct($config)
{
if (($cache_setting = $config['internal_cache']) !== FALSE)
{
$this->cache_lifetime = $cache_setting;
// Restore the cached configuration
$this->config = $this->load_cache();
if (count($this->config) > 0)
$this->loaded = TRUE;
// Add the save cache method to system.shutshut event
Event::add('system.shutdown', array($this, 'save_cache'));
}
}
/**
* Gets a value from config. If required is TRUE
* then get will throw an exception if value cannot
* be loaded.
*
* @param string key the setting to get
* @param bool slash remove trailing slashes
* @param bool required is setting required?
* @return mixed
* @access public
*/
public function get($key, $slash = FALSE, $required = FALSE)
{
// Get the group name from the key
$group = explode('.', $key, 2);
$group = $group[0];
// Check for existing value and load it dynamically if required
if ( ! isset($this->config[$group]))
$this->config[$group] = $this->load($group, $required);
// Get the value of the key string
$value = Kohana::key_string($this->config, $key);
if ($slash === TRUE AND is_string($value) AND $value !== '')
{
// Force the value to end with "/"
$value = rtrim($value, '/').'/';
}
if (($required === TRUE) AND ($value === null))
throw new Kohana_Config_Exception('Value not found in config driver');
$this->loaded = TRUE;
return $value;
}
/**
* Sets a new value to the configuration
*
* @param string key
* @param mixed value
* @return bool
* @access public
*/
public function set($key, $value)
{
// Do this to make sure that the config array is already loaded
$this->get($key);
if (substr($key, 0, 7) === 'routes.')
{
// Routes cannot contain sub keys due to possible dots in regex
$keys = explode('.', $key, 2);
}
else
{
// Convert dot-noted key string to an array
$keys = explode('.', $key);
}
// Used for recursion
$conf =& $this->config;
$last = count($keys) - 1;
foreach ($keys as $i => $k)
{
if ($i === $last)
{
$conf[$k] = $value;
}
else
{
$conf =& $conf[$k];
}
}
if (substr($key,0,12) === 'core.modules')
{
// Reprocess the include paths
Kohana::include_paths(TRUE);
}
// Set config to changed
return $this->changed = TRUE;
}
/**
* Clear the configuration
*
* @param string group
* @return bool
* @access public
*/
public function clear($group)
{
// Remove the group from config
unset($this->config[$group]);
// Set config to changed
return $this->changed = TRUE;
}
/**
* Checks whether the setting exists in
* config
*
* @param string $key
* @return bool
* @access public
*/
public function setting_exists($key)
{
return $this->get($key) === NULL;
}
/**
* Loads a configuration group based on the setting
*
* @param string group
* @param bool required
* @return array
* @access public
* @abstract
*/
abstract public function load($group, $required = FALSE);
/**
* Loads the cached version of this configuration driver
*
* @return array
* @access public
*/
public function load_cache()
{
// Load the cache for this configuration
$cached_config = Kohana::cache($this->cache_name, $this->cache_lifetime);
// If the configuration wasn't loaded from the cache
if ($cached_config === NULL)
$cached_config = array();
// Return the cached config
return $cached_config;
}
/**
* Saves a cached version of this configuration driver
*
* @return bool
* @access public
*/
public function save_cache()
{
// If this configuration has changed
if ($this->get('core.internal_cache') !== FALSE AND $this->changed)
{
$data = $this->config;
// Save the cache
return Kohana::cache_save($this->cache_name, $data, $this->cache_lifetime);
}
return TRUE;
}
} // End Kohana_Config_Driver