aboutsummaryrefslogblamecommitdiffhomepage
path: root/application/CachedPage.php
blob: e11cc52d01e3aeac07142c476d76e35bf7b88229 (plain) (tree)
1
2
3
4
5
6
7
8
9







                                                     















                                                                         





                                                                              
                                                                               























                                                         
<?php
/**
 * Simple cache system, mainly for the RSS/ATOM feeds
 */
class CachedPage
{
    // Directory containing page caches
    private $cacheDir;

    // Should this URL be cached (boolean)?
    private $shouldBeCached;

    // Name of the cache file for this URL
    private $filename;

    /**
     * Creates a new CachedPage
     *
     * @param string $cacheDir       page cache directory
     * @param string $url            page URL
     * @param bool   $shouldBeCached whether this page needs to be cached
     */
    public function __construct($cacheDir, $url, $shouldBeCached)
    {
        // TODO: check write access to the cache directory
        $this->cacheDir = $cacheDir;
        $this->filename = $this->cacheDir.'/'.sha1($url).'.cache';
        $this->shouldBeCached = $shouldBeCached;
    }

    /**
     * Returns the cached version of a page, if it exists and should be cached
     *
     * @return string a cached version of the page if it exists, null otherwise
     */
    public function cachedVersion()
    {
        if (!$this->shouldBeCached) {
            return null;
        }
        if (is_file($this->filename)) {
            return file_get_contents($this->filename);
        }
        return null;
    }

    /**
     * Puts a page in the cache
     *
     * @param string $pageContent XML content to cache
     */
    public function cache($pageContent)
    {
        if (!$this->shouldBeCached) {
            return;
        }
        file_put_contents($this->filename, $pageContent);
    }
}