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: */
20: class 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: