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