1<?php 2/** 3 * Smarty Internal Plugin Resource Stream 4 * Implements the streams as resource for Smarty template 5 * 6 * @package Smarty 7 * @subpackage TemplateResources 8 * @author Uwe Tews 9 * @author Rodney Rehm 10 */ 11 12/** 13 * Smarty Internal Plugin Resource Stream 14 * Implements the streams as resource for Smarty template 15 * 16 * @link http://php.net/streams 17 * @package Smarty 18 * @subpackage TemplateResources 19 */ 20class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled 21{ 22 /** 23 * populate Source Object with meta data from Resource 24 * 25 * @param Smarty_Template_Source $source source object 26 * @param Smarty_Internal_Template $_template template object 27 * 28 * @return void 29 */ 30 public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) 31 { 32 if (strpos($source->resource, '://') !== false) { 33 $source->filepath = $source->resource; 34 } else { 35 $source->filepath = str_replace(':', '://', $source->resource); 36 } 37 $source->uid = false; 38 $source->content = $this->getContent($source); 39 $source->timestamp = $source->exists = !!$source->content; 40 } 41 42 /** 43 * Load template's source from stream into current template object 44 * 45 * @param Smarty_Template_Source $source source object 46 * 47 * @return string template source 48 */ 49 public function getContent(Smarty_Template_Source $source) 50 { 51 $t = ''; 52 // the availability of the stream has already been checked in Smarty_Resource::fetch() 53 $fp = fopen($source->filepath, 'r+'); 54 if ($fp) { 55 while (!feof($fp) && ($current_line = fgets($fp)) !== false) { 56 $t .= $current_line; 57 } 58 fclose($fp); 59 return $t; 60 } else { 61 return false; 62 } 63 } 64 65 /** 66 * modify resource_name according to resource handlers specifications 67 * 68 * @param Smarty $smarty Smarty instance 69 * @param string $resource_name resource_name to make unique 70 * @param boolean $isConfig flag for config resource 71 * 72 * @return string unique resource name 73 */ 74 public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) 75 { 76 return get_class($this) . '#' . $resource_name; 77 } 78} 79