Source

joomla-platform / libraries / joomla / cache / controller.php

<?php
/**
 * @package     Joomla.Platform
 * @subpackage  Cache
 *
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 */

defined('JPATH_PLATFORM') or die;

/**
 * Public cache handler
 *
 * @abstract
 * @package		Joomla.Platform
 * @subpackage	Cache
 * @since		11.1
 */
class JCacheController
{
	/**
	 * @since	11.1
	 */
	public $cache;

	/**
	 * @since	11.1
	 */
	public $options;

	/**
	 * Constructor
	 *
	 * @param	array	$options	options
	 * @since	11.1
	 */
	public function __construct($options)
	{
		$this->cache 	= new JCache($options);
		$this->options 	= & $this->cache->_options;

		// Overwrite default options with given options
		foreach ($options AS $option=>$value) {
			if (isset($options[$option])) {
				$this->options[$option] = $options[$option];
			}
		}
	}

	/**
	 * @since	11.1
	 */
	public function __call ($name, $arguments)
	{
		$nazaj = call_user_func_array (array ($this->cache, $name), $arguments);
		return $nazaj;
	}

	/**
	 * Returns a reference to a cache adapter object, always creating it
	 *
	 * @param	string	$type	The cache object type to instantiate
	 * 
	 * @return	object	A JCache object
	 * @since	11.1
	 */
	public static function getInstance($type = 'output', $options = array())
	{
		JCacheController::addIncludePath(JPATH_PLATFORM.DS.'joomla'.DS.'cache'.DS.'controller');

		$type = strtolower(preg_replace('/[^A-Z0-9_\.-]/i', '', $type));

		$class = 'JCacheController'.ucfirst($type);

		if (!class_exists($class)) {
			// Search for the class file in the JCache include paths.
			jimport('joomla.filesystem.path');

			if ($path = JPath::find(JCacheController::addIncludePath(), strtolower($type).'.php')) {
				require_once $path;
			} else {
				JError::raiseError(500, 'Unable to load Cache Controller: '.$type);
			}
		}

		return new $class($options);
	}

	/**
	 * Set caching enabled state
	 *
	 * @param	boolean	$enabled	True to enable caching
	 * 
	 * @return	void
	 * @since	11.1
	 */
	public function setCaching($enabled)
	{
		$this->cache->setCaching($enabled);
	}

	/**
	 * Set cache lifetime
	 *
	 * @param	int		$lt	Cache lifetime
	 * 
	 * @return	void
	 * @since	11.1
	 */
	public function setLifeTime($lt)
	{
		$this->cache->setLifeTime($lt);
	}

	/**
	 * Add a directory where JCache should search for controllers. You may
	 * either pass a string or an array of directories.
	 *
	 * @param	string	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;
	}

	/**
	 * Get stored cached data by id and group
	 *
	 * @param	string	$id		The cache data id
	 * @param	string	$group	The cache data group
	 * @return	mixed	False on no result, cached object otherwise
	 * @since	11.1
	 */
	public function get($id, $group=null)
	{
		$data = false;
		$data = $this->cache->get($id, $group);

		if ($data === false) {
			$locktest = new stdClass;
			$locktest->locked = null;
			$locktest->locklooped = null;
			$locktest = $this->cache->lock($id, $group);
			if ($locktest->locked == true && $locktest->locklooped == true) {
				$data = $this->cache->get($id, $group);
			}
			if ($locktest->locked == true) $this->cache->unlock($id, $group);
		}

		// Check again because we might get it from second attempt
		if ($data !== false) {
			$data = unserialize(trim($data));  // trim to fix unserialize errors
		}
		return $data;
	}

	/**
	 * Store data to cache by id and group
	 *
	 * @param	string	$id		The cache data id
	 * @param	string	$group	The cache data group
	 * @param	mixed	$data	The data to store
	 * @return	boolean	True if cache was stored
	 * @since	11.1
	 */
	public function store($data, $id, $group=null)
	{
		$locktest = new stdClass;
		$locktest->locked = null;
		$locktest->locklooped = null;

		$locktest = $this->cache->lock($id, $group);

		if ($locktest->locked == false && $locktest->locklooped == true) {
			$locktest = $this->cache->lock($id, $group);
		}

		$sucess = $this->cache->store(serialize($data), $id,  $group);

		if ($locktest->locked == true) $this->cache->unlock($id, $group);

		return $sucess;
	}
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.