diff --git a/manual/new/Cache.php b/manual/new/Cache.php new file mode 100644 index 000000000..7f6c96465 --- /dev/null +++ b/manual/new/Cache.php @@ -0,0 +1,84 @@ +_dir = $dir; + $this->_ext = $ext; + $this->_timeToLive = $timeToLive; + + $this->_page = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + $this->_file = $this->_dir . md5($this->_page) . '.' . $this->_ext; + } + + /** + * Begins caching the output. + * + * @return A boolean value indicating whether a valid cached version of the + * page was found and echoed (false), or not (true). + */ + public function begin() + { + $showCache = (file_exists($this->_file) && $this->isValid()); + clearstatcache(); + + if ($showCache) { + readfile($this->_file); + return false; + } else { + ob_start(); + return true; + } + } + + /** + * Ends caching the output and saves it to a cache file. + * + */ + public function end() + { + // Generate a new cache file + $fp = @fopen($this->_file, 'w'); + + // Save the contents of output buffer to the file + @fwrite($fp, ob_get_contents()); + @fclose($fp); + + ob_end_flush(); + } + + /** + * Deletes all files in the cache directory. + */ + public function clear() + { + if ($handle = opendir($this->dir)) { + while ($file = readdir($handle)) { + if ($file !== '.' && $file !== '..') { + unlink($this->dir . '/' . $file); + } + } + closedir($handle); + } + } + + /** + * This method is used to check whether the cache file is valid to use. + * + * Currently it compares the modification date of the cache file to the + * time-to-live value. + * + * @return True, if cache file is valid; false otherwise. + */ + protected function isValid() + { + return (time() - filemtime($this->_file)) < $this->_timeToLive; + } +} \ No newline at end of file diff --git a/manual/new/index.php b/manual/new/index.php index bac1941d3..3793bc2f3 100644 --- a/manual/new/index.php +++ b/manual/new/index.php @@ -7,47 +7,66 @@ set_include_path($includePath); require_once('Sensei/Sensei.php'); require_once('DocTool.php'); +require_once('Cache.php'); spl_autoload_register(array('Sensei', 'autoload')); -$tool = new DocTool('docs/en/root.txt'); -// $tool->setOption('clean-url', true); - -$supportedLangs = array('en', 'fi'); -foreach ($supportedLangs as $language) { - include "lang/$language.php"; - $tool->addLanguage($lang[$language], $language); -} - -$baseUrl = ''; -$title = 'Doctrine Manual'; -$section = null; - -if (isset($_GET['chapter'])) { - $section = $tool->findByPath($_GET['chapter']); - if ($tool->getOption('clean-url')) { - $baseUrl = '../'; +// Executes the svn info command for the current directory and parses the last +// changed date in order to calculate the time-to-live value for cache. +$timeToLive = 0; +exec('svn info .', $output); +foreach ($output as $line) { + if (preg_match('/^Last Changed Date: (.*) \(.*\)$/', $line, $matches)) { + $timeToLive = time() - strtotime($matches[1]); + break; } } -if (isset($_GET['one-page'])) { - $tool->setOption('one-page', true); - $tool->setOption('max-level', 0); - $section = null; +$cache = new Cache('./cache/', 'cache', $timeToLive); + +if ($cache->begin()) { + + $tool = new DocTool('docs/en/root.txt'); + // $tool->setOption('clean-url', true); + + $supportedLangs = array('en', 'fi'); + foreach ($supportedLangs as $language) { + include "lang/$language.php"; + $tool->addLanguage($lang[$language], $language); + } + $baseUrl = ''; -} - -if ($section) { - while ($section->getLevel() > 1) { - $section = $section->getParent(); + $title = 'Doctrine Manual'; + $section = null; + + if (isset($_GET['chapter'])) { + $section = $tool->findByPath($_GET['chapter']); + if ($tool->getOption('clean-url')) { + $baseUrl = '../'; + } } - - $tool->setOption('section', $section); - $title .= ' - Chapter ' . $section->getIndex() . ' ' . $section->getName(); + + if (isset($_GET['one-page'])) { + $tool->setOption('one-page', true); + $tool->setOption('max-level', 0); + $section = null; + $baseUrl = ''; + } + + if ($section) { + while ($section->getLevel() > 1) { + $section = $section->getParent(); + } + + $tool->setOption('section', $section); + $title .= ' - Chapter ' . $section->getIndex() . ' ' . $section->getName(); + } + + if ($tool->getOption('clean-url')) { + $tool->setOption('base-url', $baseUrl); + } + + include 'template.php'; + + $cache->end(); } - -if ($tool->getOption('clean-url')) { - $tool->setOption('base-url', $baseUrl); -} - -include 'template.php';