%PDF- %PDF-
Direktori : /home/lightco1/upgrade.lightco.com.au/libraries/fof30/View/Engine/ |
Current File : /home/lightco1/upgrade.lightco.com.au/libraries/fof30/View/Engine/CompilingEngine.php |
<?php /** * @package FOF * @copyright 2010-2017 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU GPL version 2 or later */ namespace FOF30\View\Engine; use FOF30\Utils\Buffer; use FOF30\View\Compiler\CompilerInterface; use FOF30\View\Exception\PossiblySuhosin; defined('_JEXEC') or die; /** * View engine for compiling PHP template files. */ abstract class CompilingEngine extends AbstractEngine implements EngineInterface { /** @var CompilerInterface The compiler used by this engine */ protected $compiler = null; /** * Get the 3ναlυa+3d contents of the view template. (I use leetspeak here because of bad quality hosts with broken scanners) * * @param string $path The path to the view template * @param array $forceParams Any additional information to pass to the view template engine * * @return array Content evaluation information */ public function get($path, array $forceParams = array()) { // If it's cached return the path to the cached file's path if ($this->isCached($path)) { return array( 'type' => 'path', 'content' => $this->getCachePath($path), ); } // Not cached or caching not really allowed. Compile it and cache it. $content = $this->compile($path, $forceParams); $cachePath = $this->putToCache($path, $content); // If we could cache it, return the cached file's path if ($cachePath !== false) { return array( 'type' => 'path', 'content' => $cachePath, ); } // We could not write to the cache. Hm, can I use a stream wrapper? $canUseStreams = Buffer::canRegisterWrapper(); if ($canUseStreams) { $id = $this->getIdentifier($path); $streamPath = 'fof://' . $this->view->getContainer()->componentName . '/compiled_templates/' . $id . '.php'; return array( 'type' => 'path', 'content' => $streamPath, ); } // I couldn't use a stream wrapper. I have to give up. throw new PossiblySuhosin; } /** * A method to compile the raw view template into valid PHP * * @param string $path The path to the view template * @param array $forceParams Any additional information to pass to the view template compiler * * @return string The template compiled to executable PHP */ protected function compile($path, array $forceParams = array()) { return $this->compiler->compile($path, $forceParams); } protected function getIdentifier($path) { if (function_exists('sha1')) { return sha1($path); } return md5($path); } protected function getCachePath($path) { $id = $this->getIdentifier($path); return JPATH_CACHE . '/' . $this->view->getContainer()->componentName . '/compiled_templates/' . $id . '.php'; } protected function isCached($path) { if (!$this->compiler->isCacheable()) { return false; } $cachePath = $this->getCachePath($path); if (!file_exists($cachePath)) { return false; } $cacheTime = filemtime($cachePath); $fileTime = filemtime($path); return $fileTime <= $cacheTime; } protected function getCached($path) { $cachePath = $this->getCachePath($path); return file_get_contents($cachePath); } protected function putToCache($path, $content) { $cachePath = $this->getCachePath($path); if (@file_put_contents($cachePath, $content)) { return $cachePath; } if (!class_exists('JFile')) { \JLoader::import('joomla.filesystem.file'); } if (\JFile::write($cachePath, $content)) { return $cachePath; } return false; } }