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 . ':' . substr(preg_replace('/[^A-Za-z0-9.]/', '', $source->name), 0, 25); 51 $source->uid = sha1($source->type . ':' . $source->name); 52 $mtime = $this->fetchTimestamp($source->name); 53 if ($mtime !== null) { 54 $source->timestamp = $mtime; 55 } else { 56 $this->fetch($source->name, $content, $timestamp); 57 $source->timestamp = isset($timestamp) ? $timestamp : false; 58 if (isset($content)) { 59 $source->content = $content; 60 } 61 } 62 $source->exists = !!$source->timestamp; 63 } 64 65 /** 66 * Load template's source into current template object 67 * 68 * @param Smarty_Template_Source $source source object 69 * 70 * @return string template source 71 * @throws SmartyException if source cannot be loaded 72 */ 73 public function getContent(Smarty_Template_Source $source) 74 { 75 $this->fetch($source->name, $content, $timestamp); 76 if (isset($content)) { 77 return $content; 78 } 79 throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); 80 } 81 82 /** 83 * Determine basename for compiled filename 84 * 85 * @param Smarty_Template_Source $source source object 86 * 87 * @return string resource's basename 88 */ 89 public function getBasename(Smarty_Template_Source $source) 90 { 91 return basename(substr(preg_replace('/[^A-Za-z0-9.]/', '', $source->name), 0, 25)); 92 } 93} 94