Viewing file: Cached.php (12.46 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Provides a cached version of System_Folders. * It also has methods to read folder settings from an ini file. * * Simpe example: * require_once 'System/Folders/Cached.php'; * $sf = new System_Folders_Cached(); * * //load the stored settings from last time * $sf->loadFromFile(); * echo $sf->getHome(); * * //Set an own documents directory * $sf->setDocuments('/home/cweiske/MyDocuments/'); * //Save the settings for next time * $sf->saveToFile(); * * PHP version 4 * * @category System * @package System_Folders * @author Christian Weiske <cweiske@php.net> * @license http://www.gnu.org/copyleft/lesser.html LGPL * @version CVS: $Id$ * @link http://pear.php.net/package/System_Folders */
require_once 'System/Folders.php'; require_once 'Config.php'; require_once 'Config/Container.php';
/** * Provides a cached version of System_Folders. * It also has methods to read folder settings from an ini file. * * Be very careful when overriding the AppData setting with * setAppData()! When loading a config file without specifying the file * name, the default app data directory will be used. After loading, * the file will be saved to the new app data directory, thus it won't * be available the next time, as the app data folder is the old one again. * * @category System * @package System_Folders * @author Christian Weiske <cweiske@php.net> * @license http://www.gnu.org/copyleft/lesser.html LGPL * @link http://pear.php.net/package/System_Folders */ class System_Folders_Cached extends System_Folders { /** * The cached paths will be hold here. * * @access protected * @var array */ var $arCache = array();
/** * The settings that are available. * * @access protected * @var array */ var $arSettings = array( 'AllUsers', 'AppData', 'Desktop', 'Documents', 'Home', 'Programs', 'Temp', 'SharedDocuments', 'Windows' );
/** * Create a new instance */ function System_Folders_Cached() { parent::System_Folders(); }//function System_Folders_Cached()
/** * Loads the directories from an ini file. * If you don't specify the config file, it will be determined * automatically. * * @param string $strFile The file to load the data from (ini file) * * @return mixed True on success, PEAR_Error on failure * * @access public */ function loadFromFile($strFile = null) { $strFile = $this->getDefaultConfigFile(); if (!file_exists($strFile)) { //Not existing config file isn't an error return true; } $conf = new Config(); $root =& $conf->parseConfig($strFile, 'inifile');
if (PEAR::isError($root)) { return $root; }
$arSettings = $root->toArray(); if (!isset($arSettings['root']['paths'])) { return true; }
foreach ($arSettings['root']['paths'] as $strId => $strValue) { if ($strValue != '') { $this->arCache[$strId] = $strValue; } }
return true; }//function loadFromFile($strFile = null)
/** * Saves the folders into a config file that can be edited by hand. * If you don't specify the config file, it will be determined * automatically. * Values that are NULL won't be saved. * * @param string $strFile The file to save the data into * (ini file) * @param boolean $bSaveAllSettings If all settings shall be saved * that can be loaded, or only that settings, * that have been retrieved by the user * * @return mixed True on success, PEAR_Error on failure * * @access public */ function saveToFile($strFile = null, $bSaveAllSettings = true) { $conf =& new Config_Container('section', 'paths');
if ($bSaveAllSettings) { foreach ($this->arSettings as $strSetting) { $strFunction = 'get' . $strSetting; $strValue = $this->$strFunction(); $conf->createDirective(strtolower($strSetting), $strValue); } } else { foreach ($this->arCache as $strId => $strValue) { $conf->createDirective($strId, $strValue); } }
$config = new Config(); $config->setRoot($conf); return $config->writeConfig($this->getDefaultConfigFile(), 'inifile'); }//function saveToFile($strFile = null, $bSaveAllSettings = true)
/** * Returns the path to the default config file. * It the one that's used if no filename is passed to the * saveToFile/loadFromFile methods. * * @return string The filename * * @access public */ function getDefaultConfigFile() { return $this->getAppData() . '/.net.php.pear.system.folders'; }//function getDefaultConfigFile()
/** * Returns a cached value. * If the cache doesn't exist, the cached value is empty or null, * the System_Folders method for the key is called to get the value. * * @param string $strKey The id of the value to get * * @return string The directory * * @access protected */ function getCachedValue($strKey) { $strKeyLower = strtolower($strKey); if (!isset($this->arCache[$strKeyLower])) { $strFunction = 'get' . $strKey; $this->arCache[$strKeyLower] = parent::$strFunction(); }
return $this->arCache[$strKeyLower]; }//function getCachedValue($strKey)
/** * Sets the cache of the given key to the given value. * Passing NULL removes the cache entry. * * @param string $strKey Id of the value to get * @param string $strValue Value to set. * * @return void * * @access protected */ function setCachedValue($strKey, $strValue) { if ($strValue === null) { unset($this->arCache[strtolower($strKey)]); } else { $this->arCache[strtolower($strKey)] = $strValue; } }//function setCachedValue($strKey, $strValue)
/* * Overriding the parent's methods to cache them */
/** * Cached version of getAllUsers(). * * @return string The all users directory * * @access public * * @see System_Folders::getAllUsers() */ function getAllUsers() { return $this->getCachedValue('AllUsers'); }//function getAllUsers()
/** * Cached version of getAppData(). * * @return string The application data directory * * @access public * * @see System_Folders::getAppData() */ function getAppData() { return $this->getCachedValue('AppData'); }//function getAppData()
/** * Cached version of getDesktop(). * * @return string The desktop directory * * @access public * * @see System_Folders::getDesktop() */ function getDesktop() { return $this->getCachedValue('Desktop'); }//function getDesktop()
/** * Cached version of getDocuments(). * * @return string The documents directory * * @access public * * @see System_Folders::getDocuments() */ function getDocuments() { return $this->getCachedValue('Documents'); }//function getDocuments()
/** * Cached version of getHome(). * * @return string The home directory * * @access public * * @see System_Folders::getHome() */ function getHome() { return $this->getCachedValue('Home'); }//function getHome()
/** * Cached version of getPrograms(). * * @return string The programs directory * * @access public * * @see System_Folders::getPrograms() */ function getPrograms() { return $this->getCachedValue('Programs'); }//function getPrograms()
/** * Cached version of getTemp(). * * @return string The temporary directory * * @access public * * @see System_Folders::getTemp() */ function getTemp() { return $this->getCachedValue('Temp'); }//function getTemp()
/** * Cached version of getSharedDocuments(). * * @return string The shared documents directory * * @access public * * @see System_Folders::getSharedDocuments() */ function getSharedDocuments() { return $this->getCachedValue('SharedDocuments'); }//function getSharedDocuments()
/** * Cached version of getWindows(). * * @return string The windows directory * * @access public * * @see System_Folders::getWindows() */ function getWindows() { return $this->getCachedValue('Windows'); }//function getWindows()
/* * Setter methods */
/** * Sets an own all users directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new all users directory * * @return void * * @access public * @see getAllUsers() */ function setAllUsers($value) { $this->setCachedValue('AllUsers', $value); }//function setAllUsers($value)
/** * Sets an own application data directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new app data directory * * @return void * * @access public * @see getAppData() */ function setAppData($value) { $this->setCachedValue('AppData', $value); }//function setAppData($value)
/** * Sets an own desktop directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new desktop directory * * @return void * * @access public * @see getDesktop() */ function setDesktop($value) { $this->setCachedValue('Desktop', $value); }//function setDesktop($value)
/** * Sets an own documents directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new documents directory * * @return void * * @access public * @see getDocuments() */ function setDocuments($value) { $this->setCachedValue('Documents', $value); }//function setDocuments($value)
/** * Sets an own home directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new home directory * * @return void * * @access public * @see getHome() */ function setHome($value) { $this->setCachedValue('Home', $value); }//function setHome($value)
/** * Sets an own programs directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new programs directory * * @return void * * @access public * @see getPrograms() */ function setPrograms($value) { $this->setCachedValue('Programs', $value); }//function setPrograms($value)
/** * Sets an own temp directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new temp directory * * @return void * * @access public * @see getTemp() */ function setTemp($value) { $this->setCachedValue('Temp', $value); }//function setTemp($value)
/** * Sets an own shared documents directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new shared documents directory * * @return void * * @access public * @see getSharedDocuments() */ function setSharedDocuments($value) { $this->setCachedValue('SharedDocuments', $value); }//function setSharedDocuments($value)
/** * Sets an own windows directory. * Set it to NULL to deactivate saving and * remove the value from the cache. * * @param string $value The new windows directory * * @return void * * @access public * @see getWindows() */ function setWindows($value) { $this->setCachedValue('Windows', $value); }//function setWindows($value)
}//class System_Folders_Cached extends System_Folders ?>
|