%PDF- %PDF-
| Direktori : /home/lightco1/www/lightcolab.com/plugins/system/cache/ |
| Current File : /home/lightco1/www/lightcolab.com/plugins/system/cache/cache.php |
<?php
/**
* @package Joomla.Plugin
* @subpackage System.cache
*
* @copyright Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Joomla! Page Cache Plugin.
*
* @since 1.5
*/
class PlgSystemCache extends JPlugin
{
/**
* Cache instance.
*
* @var JCache
* @since 1.5
*/
public $_cache;
/**
* Cache key
*
* @var string
* @since 3.0
*/
public $_cache_key;
/**
* Application object.
*
* @var JApplicationCms
* @since 3.8.0
*/
protected $app;
/**
* Constructor.
*
* @param object &$subject The object to observe.
* @param array $config An optional associative array of configuration settings.
*
* @since 1.5
*/
public function __construct(& $subject, $config)
{
parent::__construct($subject, $config);
// Set the language in the class.
$options = array(
'defaultgroup' => 'page',
'browsercache' => $this->params->get('browsercache', false),
'caching' => false,
);
// Get the application if not done by JPlugin. This may happen during upgrades from Joomla 2.5.
if (!$this->app)
{
$this->app = JFactory::getApplication();
}
$this->_cache = JCache::getInstance('page', $options);
}
/**
* Get a cache key for the current page based on the url and possible other factors.
*
* @return string
*
* @since 3.7
*/
protected function getCacheKey()
{
static $key;
if (!$key)
{
JPluginHelper::importPlugin('pagecache');
$parts = JEventDispatcher::getInstance()->trigger('onPageCacheGetKey');
$parts[] = JUri::getInstance()->toString();
$key = md5(serialize($parts));
}
return $key;
}
/**
* Converting the site URL to fit to the HTTP request.
*
* @return void
*
* @since 1.5
*/
public function onAfterInitialise()
{
$app = $this->app;
$user = JFactory::getUser();
if ($app->isClient('administrator'))
{
return;
}
if (count($app->getMessageQueue()))
{
return;
}
// If any pagecache plugins return false for onPageCacheSetCaching, do not use the cache.
JPluginHelper::importPlugin('pagecache');
$results = JEventDispatcher::getInstance()->trigger('onPageCacheSetCaching');
$caching = !in_array(false, $results, true);
if ($caching && $user->get('guest') && $app->input->getMethod() == 'GET')
{
$this->_cache->setCaching(true);
}
$data = $this->_cache->get($this->getCacheKey());
if ($data !== false)
{
// Set cached body.
$app->setBody($data);
echo $app->toString();
if (JDEBUG)
{
JProfiler::getInstance('Application')->mark('afterCache');
}
$app->close();
}
}
/**
* After render.
*
* @return void
*
* @since 1.5
*/
public function onAfterRespond()
{
$app = $this->app;
if ($app->isClient('administrator'))
{
return;
}
if (count($app->getMessageQueue()))
{
return;
}
$user = JFactory::getUser();
if ($user->get('guest') && !$this->isExcluded())
{
// We need to check again here, because auto-login plugins have not been fired before the first aid check.
$this->_cache->store(null, $this->getCacheKey());
}
}
/**
* Check if the page is excluded from the cache or not.
*
* @return boolean True if the page is excluded else false
*
* @since 3.5
*/
protected function isExcluded()
{
// Check if menu items have been excluded
if ($exclusions = $this->params->get('exclude_menu_items', array()))
{
// Get the current menu item
$active = $this->app->getMenu()->getActive();
if ($active && $active->id && in_array($active->id, (array) $exclusions, true))
{
return true;
}
}
// Check if regular expressions are being used
if ($exclusions = $this->params->get('exclude', ''))
{
// Normalize line endings
$exclusions = str_replace(array("\r\n", "\r"), "\n", $exclusions);
// Split them
$exclusions = explode("\n", $exclusions);
// Get current path to match against
$path = JUri::getInstance()->toString(array('path', 'query', 'fragment'));
// Loop through each pattern
if ($exclusions)
{
foreach ($exclusions as $exclusion)
{
// Make sure the exclusion has some content
if ($exclusion !== '')
{
if (preg_match('/' . $exclusion . '/is', $path, $match))
{
return true;
}
}
}
}
}
// If any pagecache plugins return true for onPageCacheIsExcluded, exclude.
JPluginHelper::importPlugin('pagecache');
$results = JEventDispatcher::getInstance()->trigger('onPageCacheIsExcluded');
if (in_array(true, $results, true))
{
return true;
}
return false;
}
}