/libraries/joomla/cache/storage.php
PHP | 327 lines | 125 code | 32 blank | 170 comment | 10 complexity | 277e25c60404aaf71b954f80ec7e33be MD5 | raw file
Possible License(s): LGPL-3.0, GPL-2.0, MIT, BSD-3-Clause, LGPL-2.1
- <?php
- /**
- * @package Joomla.Platform
- * @subpackage Cache
- *
- * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
- * @license GNU General Public License version 2 or later; see LICENSE
- */
- defined('JPATH_PLATFORM') or die;
- /**
- * Abstract cache storage handler
- *
- * @package Joomla.Platform
- * @subpackage Cache
- * @since 11.1
- */
- class JCacheStorage
- {
- /**
- * @var string Rawname
- * @since 11.1
- */
- protected $rawname;
- /**
- * @var datetime Now
- * @since 11.1
- */
- public $_now;
- /**
- * @var integer Cache lifetime
- * @since 11.1
- */
- public $_lifetime;
- /**
- * @var boolean Locking
- * @since 11.1
- */
- public $_locking;
- /**
- * @var string Language
- * @since 11.1
- */
- public $_language;
- /**
- * @var string Application name.
- * @since 11.1
- */
- public $_application;
- /**
- * @var string Hash
- * @since 11.1
- */
- public $_hash;
- /**
- * Constructor
- *
- * @param array $options Optional parameters
- *
- * @since 11.1
- */
- public function __construct($options = array())
- {
- $config = JFactory::getConfig();
- $this->_hash = md5($config->get('secret'));
- $this->_application = (isset($options['application'])) ? $options['application'] : null;
- $this->_language = (isset($options['language'])) ? $options['language'] : 'en-GB';
- $this->_locking = (isset($options['locking'])) ? $options['locking'] : true;
- $this->_lifetime = (isset($options['lifetime'])) ? $options['lifetime'] * 60 : $config->get('cachetime') * 60;
- $this->_now = (isset($options['now'])) ? $options['now'] : time();
- // Set time threshold value. If the lifetime is not set, default to 60 (0 is BAD)
- // _threshold is now available ONLY as a legacy (it's deprecated). It's no longer used in the core.
- if (empty($this->_lifetime))
- {
- $this->_threshold = $this->_now - 60;
- $this->_lifetime = 60;
- }
- else
- {
- $this->_threshold = $this->_now - $this->_lifetime;
- }
- }
- /**
- * Returns a cache storage handler object, only creating it
- * if it doesn't already exist.
- *
- * @param string $handler The cache storage handler to instantiate
- * @param array $options Array of handler options
- *
- * @return JCacheStorageHandler A JCacheStorageHandler object
- *
- * @since 11.1
- */
- public static function getInstance($handler = null, $options = array())
- {
- static $now = null;
- JCacheStorage::addIncludePath(JPATH_PLATFORM . '/joomla/cache/storage');
- if (!isset($handler))
- {
- $conf = JFactory::getConfig();
- $handler = $conf->get('cache_handler');
- if (empty($handler))
- {
- return JError::raiseWarning(500, JText::_('JLIB_CACHE_ERROR_CACHE_HANDLER_NOT_SET'));
- }
- }
- if (is_null($now))
- {
- $now = time();
- }
- $options['now'] = $now;
- //We can't cache this since options may change...
- $handler = strtolower(preg_replace('/[^A-Z0-9_\.-]/i', '', $handler));
- $class = 'JCacheStorage' . ucfirst($handler);
- if (!class_exists($class))
- {
- // Search for the class file in the JCacheStorage include paths.
- jimport('joomla.filesystem.path');
- if ($path = JPath::find(JCacheStorage::addIncludePath(), strtolower($handler) . '.php'))
- {
- include_once $path;
- }
- else
- {
- return JError::raiseWarning(500, JText::sprintf('JLIB_CACHE_ERROR_CACHE_STORAGE_LOAD', $handler));
- }
- }
- return new $class($options);
- }
- /**
- * Get cached data by id and group
- *
- * @param string $id The cache data id
- * @param string $group The cache data group
- * @param boolean $checkTime True to verify cache time expiration threshold
- *
- * @return mixed Boolean false on failure or a cached data object
- *
- * @since 11.1
- */
- public function get($id, $group, $checkTime = true)
- {
- return false;
- }
- /**
- * Get all cached data
- *
- * @return mixed Boolean false on failure or a cached data object
- *
- * @since 11.1
- */
- public function getAll()
- {
- if (!class_exists('JCacheStorageHelper', false))
- {
- include_once JPATH_PLATFORM . '/joomla/cache/storage/helpers/helper.php';
- }
- return;
- }
- /**
- * Store the data to cache by id and group
- *
- * @param string $id The cache data id
- * @param string $group The cache data group
- * @param string $data The data to store in cache
- *
- * @return boolean True on success, false otherwise
- *
- * @since 11.1
- */
- public function store($id, $group, $data)
- {
- return true;
- }
- /**
- * Remove a cached data entry by id and group
- *
- * @param string $id The cache data id
- * @param string $group The cache data group
- *
- * @return boolean True on success, false otherwise
- *
- * @since 11.1
- */
- public function remove($id, $group)
- {
- return true;
- }
- /**
- * Clean cache for a group given a mode.
- *
- * @param string $group The cache data group
- * @param string $mode The mode for cleaning cache [group|notgroup]
- * group mode : cleans all cache in the group
- * notgroup mode : cleans all cache not in the group
- *
- * @return boolean True on success, false otherwise
- *
- * @since 11.1
- */
- public function clean($group, $mode = null)
- {
- return true;
- }
- /**
- * Garbage collect expired cache data
- *
- * @return boolean True on success, false otherwise.
- *
- * @since 11.1
- */
- public function gc()
- {
- return true;
- }
- /**
- * Test to see if the storage handler is available.
- *
- * @return boolean True on success, false otherwise
- *
- * @since 11.1.
- */
- public static function test()
- {
- return true;
- }
- /**
- * Lock cached item
- *
- * @param string $id The cache data id
- * @param string $group The cache data group
- * @param integer $locktime Cached item max lock time
- *
- * @return boolean True on success, false otherwise.
- *
- * @since 11.1
- */
- public function lock($id, $group, $locktime)
- {
- return false;
- }
- /**
- * Unlock cached item
- *
- * @param string $id The cache data id
- * @param string $group The cache data group
- *
- * @return boolean True on success, false otherwise.
- *
- * @since 11.1
- */
- public function unlock($id, $group = null)
- {
- return false;
- }
- /**
- * Get a cache_id string from an id/group pair
- *
- * @param string $id The cache data id
- * @param string $group The cache data group
- *
- * @return string The cache_id string
- *
- * @since 11.1
- */
- protected function _getCacheId($id, $group)
- {
- $name = md5($this->_application . '-' . $id . '-' . $this->_language);
- $this->rawname = $this->_hash . '-' . $name;
- return $this->_hash . '-cache-' . $group . '-' . $name;
- }
- /**
- * Add a directory where JCacheStorage should search for handlers. You may
- * either pass a string or an array of directories.
- *
- * @param string $path A path to search.
- *
- * @return array An array with directory elements
- *
- * @since 11.1
- */
- public static function addIncludePath($path = '')
- {
- static $paths;
- if (!isset($paths))
- {
- $paths = array();
- }
- if (!empty($path) && !in_array($path, $paths))
- {
- jimport('joomla.filesystem.path');
- array_unshift($paths, JPath::clean($path));
- }
- return $paths;
- }
- }