<?php 
/** 
 * Smarty Resource Plugin 
 * 
 * @package    Smarty 
 * @subpackage TemplateResources 
 * @author     Rodney Rehm 
 */ 
 
/** 
 * Smarty Resource Plugin 
 * Wrapper Implementation for custom resource plugins 
 * 
 * @package    Smarty 
 * @subpackage TemplateResources 
 */ 
abstract class Smarty_Resource_Custom extends Smarty_Resource 
{ 
    /** 
     * fetch template and its modification time from data source 
     * 
     * @param string  $name    template name 
     * @param string  &$source template source 
     * @param integer &$mtime  template modification timestamp (epoch) 
     */ 
    abstract protected function fetch($name, &$source, &$mtime); 
 
    /** 
     * Fetch template's modification timestamp from data source 
     * {@internal implementing this method is optional. 
     *  Only implement it if modification times can be accessed faster than loading the complete template source.}} 
     * 
     * @param  string $name template name 
     * 
     * @return integer|boolean timestamp (epoch) the template was modified, or false if not found 
     */ 
    protected function fetchTimestamp($name) 
    { 
        return null; 
    } 
 
    /** 
     * populate Source Object with meta data from Resource 
     * 
     * @param Smarty_Template_Source   $source    source object 
     * @param Smarty_Internal_Template $_template template object 
     */ 
    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) 
    { 
        $source->filepath = $source->type . ':' . $source->name; 
        $source->uid = sha1($source->type . ':' . $source->name); 
 
        $mtime = $this->fetchTimestamp($source->name); 
        if ($mtime !== null) { 
            $source->timestamp = $mtime; 
        } else { 
            $this->fetch($source->name, $content, $timestamp); 
            $source->timestamp = isset($timestamp) ? $timestamp : false; 
            if (isset($content)) { 
                $source->content = $content; 
            } 
        } 
        $source->exists = !!$source->timestamp; 
    } 
 
    /** 
     * Load template's source into current template object 
     * 
     * @param  Smarty_Template_Source $source source object 
     * 
     * @return string                 template source 
     * @throws SmartyException        if source cannot be loaded 
     */ 
    public function getContent(Smarty_Template_Source $source) 
    { 
        $this->fetch($source->name, $content, $timestamp); 
        if (isset($content)) { 
            return $content; 
        } 
 
        throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); 
    } 
 
    /** 
     * Determine basename for compiled filename 
     * 
     * @param  Smarty_Template_Source $source source object 
     * 
     * @return string                 resource's basename 
     */ 
    protected function getBasename(Smarty_Template_Source $source) 
    { 
        return basename($source->name); 
    } 
} 
 
 |