Source

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

Full commit
<?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;

/**
 * Joomla Cache output type object
 *
 * @package		Joomla.Platform
 * @subpackage	Cache
 * @since		11.1
 */
class JCacheControllerOutput extends JCacheController
{
	/**
	 * @since	11.1
	 */
	private $_id;

	/**
	 * @since	11.1
	 */
	private $_group;

	/**
	 * @since	11.1
	 */
	private $_locktest = null;

	/**
	 * Start the cache
	 *
	 * @param	string	$id		The cache data id
	 * @param	string	$group	The cache data group
	 * 
	 * @return	boolean	True if the cache is hit (false else)
	 * @since	11.1
	 */
	public function start($id, $group=null)
	{
		// If we have data in cache use that.
		$data = $this->cache->get($id, $group);

		$this->_locktest = new stdClass;
		$this->_locktest->locked = null;
		$this->_locktest->locklooped = null;

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

		if ($data !== false) {
			$data = unserialize(trim($data));
			echo $data;
			if ($this->_locktest->locked == true) {
				$this->cache->unlock($id, $group);
			}
			return true;
		} else {
			// Nothing in cache... let's start the output buffer and start collecting data for next time.
			if ($this->_locktest->locked == false) {
				$this->_locktest = $this->cache->lock($id, $group);
			}
			ob_start();
			ob_implicit_flush(false);

			// Set id and group placeholders
			$this->_id		= $id;
			$this->_group	= $group;

			return false;
		}
	}

	/**
	 * Stop the cache buffer and store the cached data
	 *
	 * @return	boolean	True if cache stored
	 * @since	11.1
	 */
	public function end()
	{
		// Get data from output buffer and echo it
		$data = ob_get_contents();
		ob_end_clean();
		echo $data;

		// Get id and group and reset them placeholders
		$id		= $this->_id;
		$group	= $this->_group;
		$this->_id		= null;
		$this->_group	= null;

		// Get the storage handler and store the cached data
		$ret = $this->cache->store(serialize($data), $id, $group);

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

		return $ret;
	}
}
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.