* Copyright (c) 2006, Cake Software Foundation, Inc. * 1785 E. Sahara Avenue, Suite 490-204 * Las Vegas, Nevada 89104 * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright Copyright (c) 2006, Cake Software Foundation, Inc. * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project * @package cake * @subpackage cake.cake.libs.view.helpers * @since CakePHP v 1.0.0.2277 * @version $Revision$ * @modifiedby $LastChangedBy$ * @lastmodified $Date$ * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ /** * Short description for file. * * Long description for file * * @package cake * @subpackage cake.cake.libs.view.helpers * @since CakePHP v 1.0.0.2277 * */ class CacheHelper extends Helper { var $replace = array(); var $match = array(); var $view; function cache($file, $out, $cache = false) { if(is_array($this->cacheAction)) { $check = str_replace('/', '_', $this->here); $replace = str_replace('/', '_', $this->base); $match = str_replace($this->base, '', $this->here); $match = str_replace('//', '/', $match); $match = str_replace('/'.$this->controllerName.'/', '', $match); $check = str_replace($replace, '', $check); $check = str_replace('_'.$this->controllerName.'_', '', $check); $check = convertSlash($check); $keys = str_replace('/', '_', array_keys($this->cacheAction)); $found = array_keys($this->cacheAction); $index = null; $count = 0; foreach ($keys as $key => $value) { if(strpos($check, $value) === 0) { $index = $found[$count]; break; } $count++; } if(isset($index)) { $pos1 = strrpos($match, '/'); $char = strlen($match) -1; if($pos1 == $char) { $match = substr($match, 0, $char); } $key = $match; } elseif ($this->action == 'index') { $index = 'index'; } if(isset($this->cacheAction[$index])) { $cacheTime = $this->cacheAction[$index]; } else { $cacheTime = 0; } } else { $cacheTime = $this->cacheAction; } if($cacheTime != '' && $cacheTime > 0) { $this->__parseFile($file, $out); if($cache === true) { $cached = $this->__parseOutput($out); $this->__writeFile($cached, $cacheTime); } return $out; } else { return $out; } } function __parseFile($file, $cache) { if(is_file($file)) { $file = file_get_contents($file); } else if($file = fileExistsInPath($file)) { $file = file_get_contents($file); } preg_match_all('/(?P(?<=)[\\s\\S]*?(?=<\/cake:nocache>)<\/cake:nocache>)/i', $cache, $oresult, PREG_PATTERN_ORDER); preg_match_all('/(?<=)(?P[\\s\\S]*?)(?=<\/cake:nocache>)/i', $file, $result, PREG_PATTERN_ORDER); if(!empty($result['replace'])) { $count = 0; foreach($result['replace'] as $result) { if(isset($oresult['found'][$count])) { $this->replace[] = $result; $this->match[] = $oresult['found'][$count]; } $count++; } } } function __parseOutput($cache) { $count = 0; if(!empty($this->match)) { foreach($this->match as $found) { $cache = str_replace($found, $this->replace[$count], $cache); $count++; } return $cache; } return $cache; } function __writeFile($file, $timestamp) { $now = time(); if (is_numeric($timestamp)) { $cacheTime = $now + $timestamp; } else { $cacheTime = $now + strtotime($timestamp); } $cache = convertSlash($this->here).'.php'; $file = ' view->name.'\'); $this->controller = new '.$this->view->name.'Controller(); $this->helpers = unserialize(\''. serialize($this->view->helpers).'\'); $this->webroot = \''. $this->view->webroot.'\'; $this->data = unserialize(\''. serialize($this->view->data).'\'); $loadedHelpers = array(); $loadedHelpers = $this->_loadHelpers($loadedHelpers, $this->helpers); foreach(array_keys($loadedHelpers) as $helper) { $replace = strtolower(substr($helper, 0, 1)); $camelBackedHelper = preg_replace(\'/\\w/\', $replace, $helper, 1); ${$camelBackedHelper} =& $loadedHelpers[$helper]; if(isset(${$camelBackedHelper}->helpers) && is_array(${$camelBackedHelper}->helpers)) { foreach(${$camelBackedHelper}->helpers as $subHelper) { ${$camelBackedHelper}->{$subHelper} =& $loadedHelpers[$subHelper]; } } $this->loaded[$camelBackedHelper] = (${$camelBackedHelper}); } ?> '.$file; return cache('views'.DS.$cache, $file, $timestamp); } } ?>