1<?php 2/** 3 * Smarty Resource Plugin 4 * 5 * @package Smarty 6 * @subpackage TemplateResources 7 * @author Rodney Rehm 8 */ 9 10/** 11 * Smarty Resource Plugin 12 * Wrapper Implementation for custom resource plugins 13 * 14 * @package Smarty 15 * @subpackage TemplateResources 16 */ 17abstract class Smarty_Resource_Custom extends Smarty_Resource 18{ 19 /** 20 * fetch template and its modification time from data source 21 * 22 * @param string $name template name 23 * @param string &$source template source 24 * @param integer &$mtime template modification timestamp (epoch) 25 */ 26 abstract protected function fetch($name, &$source, &$mtime); 27 28 /** 29 * Fetch template's modification timestamp from data source 30 * {@internal implementing this method is optional. 31 * Only implement it if modification times can be accessed faster than loading the complete template source.}} 32 * 33 * @param string $name template name 34 * 35 * @return integer|boolean timestamp (epoch) the template was modified, or false if not found 36 */ 37 protected function fetchTimestamp($name) 38 { 39 return null; 40 } 41 42 /** 43 * populate Source Object with meta data from Resource 44 * 45 * @param Smarty_Template_Source $source source object 46 * @param Smarty_Internal_Template $_template template object 47 */ 48 public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) 49 { 50 $source->filepath = $source->type . ':' . $source->name; 51 $source->uid = sha1($source->type . ':' . $source->name); 52 53 $mtime = $this->fetchTimestamp($source->name); 54 if ($mtime !== null) { 55 $source->timestamp = $mtime; 56 } else { 57 $this->fetch($source->name, $content, $timestamp); 58 $source->timestamp = isset($timestamp) ? $timestamp : false; 59 if (isset($content)) { 60 $source->content = $content; 61 } 62 } 63 $source->exists = !!$source->timestamp; 64 } 65 66 /** 67 * Load template's source into current template object 68 * 69 * @param Smarty_Template_Source $source source object 70 * 71 * @return string template source 72 * @throws SmartyException if source cannot be loaded 73 */ 74 public function getContent(Smarty_Template_Source $source) 75 { 76 $this->fetch($source->name, $content, $timestamp); 77 if (isset($content)) { 78 return $content; 79 } 80 81 throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); 82 } 83 84 /** 85 * Determine basename for compiled filename 86 * 87 * @param Smarty_Template_Source $source source object 88 * 89 * @return string resource's basename 90 */ 91 public function getBasename(Smarty_Template_Source $source) 92 { 93 return basename($source->name); 94 } 95} 96