Mercurial > SimpleWebPresenter
diff FileCacheSet.inc @ 69:dd4ddedca4c5
Add convenience header ScriptIncludeCache
Split CacheTimeCheck and FileCacheSet
| author | Tom Fredrik "BFG" Klaussen <bfg@blenning.no> |
|---|---|
| date | Thu, 11 Oct 2012 23:32:14 +0200 |
| parents | |
| children | 62b9d7a35658 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FileCacheSet.inc Thu Oct 11 23:32:14 2012 +0200 @@ -0,0 +1,119 @@ +<?php +$baseDir = dirname(__FILE__); + +include_once 'Logger.inc'; +$cache = ScriptIncludeCache::instance(__FILE__); +$cache->cache_time("${baseDir}/Logger.inc"); + +class FileCacheSet { + private $newest = 0; + private $files = array(); + private $parentCaches = array(); + + protected function __construct($parent = null) { + if ($parent) { + $this->addParent($parent); + } + } + + protected function addParent($parent) + { + array_push($this->parentCaches, $parent); + } + + /** + * List a set of files which contributes to this pages cacheset. + * + * @param $humanReadable If the timestamp should be humand readable. + * + * @return an associative array of file, and timestamp + */ + function cacheSet($humanReadable = False) + { + $retVal = array(); + foreach ($this->parentCaches as $parent) { + $retVal = array_merge($retVal, $parent->cacheSet($humanReadable)); + } + foreach($this->files as $file) { + $mtime = filemtime($file); + if ($humanReadable) + $mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT'; + + $retVal[$file] = $mtime; + } + return $retVal; + } + + /** + * Include a file in the cacheset + * + * @param $path the path of the file + */ + function cache_time($path) + { + if (!file_exists($path)) { + Logger::warn("${path} does not exist"); + errorPage("Resource is not available"); + } + + array_push($this->files, $path); + $mtime = filemtime($path); + if ($mtime > $this->newest) { + $this->newest = $mtime; + } + } + + function getNewest() + { + $newest = 0; + foreach ($this->parentCaches as $parent) { + $newest = max($newest, $parent->getNewest()); + } + $newest = max($newest, $this->newest); + return $newest; + } +} + +class ScriptIncludeCache extends FileCacheSet +{ + private static $myInstance = 0; + + protected function __construct($filename = False) + { + parent::__construct(); + if ($filename) + $this->cache_time($filename); + $this->cache_time(__FILE__); + } + + /** + * Generates a singleton instance of this CacheTimeCheck + * + * @param $filename an optional file to include in the cacheset + * + * @return a CacheTimeCheck object + */ + function instance($filename = False) + { + if (! self::$myInstance) + self::$myInstance = new self($filename); + elseif ($filename) + self::$myInstance->cache_time($filename); + return self::$myInstance; + } + + /** + * Convenience function to include a file, and add it to the cacheset. + * + * @param $path path of the file + * @param $basedir a directory to prepend to the path + */ + function includeOnce($path, $basedir = false) + { + if ($basedir) + $path = $basedir . "/" . $path; + $this->cache_time($path); + include_once($path); + } +} +?> \ No newline at end of file
