1<?php
2/**
3 * Smarty Internal Plugin Resource Eval
4 *
5 * @package    Smarty
6 * @subpackage TemplateResources
7 * @author     Uwe Tews
8 * @author     Rodney Rehm
9 */
10
11/**
12 * Smarty Internal Plugin Resource Eval
13 * Implements the strings as resource for Smarty template
14 * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}}
15 *
16 * @package    Smarty
17 * @subpackage TemplateResources
18 */
19class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled
20{
21    /**
22     * populate Source Object with meta data from Resource
23     *
24     * @param Smarty_Template_Source   $source    source object
25     * @param Smarty_Internal_Template $_template template object
26     *
27     * @return void
28     */
29    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
30    {
31        $source->uid = $source->filepath = sha1($source->name);
32        $source->timestamp = $source->exists = true;
33    }
34
35    /**
36     * Load template's source from $resource_name into current template object
37     *
38     * @uses decode() to decode base64 and urlencoded template_resources
39     *
40     * @param Smarty_Template_Source $source source object
41     *
42     * @return string                 template source
43     */
44    public function getContent(Smarty_Template_Source $source)
45    {
46        return $this->decode($source->name);
47    }
48
49    /**
50     * decode base64 and urlencode
51     *
52     * @param string $string template_resource to decode
53     *
54     * @return string decoded template_resource
55     */
56    protected function decode($string)
57    {
58        // decode if specified
59        if (($pos = strpos($string, ':')) !== false) {
60            if (!strncmp($string, 'base64', 6)) {
61                return base64_decode(substr($string, 7));
62            } elseif (!strncmp($string, 'urlencode', 9)) {
63                return urldecode(substr($string, 10));
64            }
65        }
66        return $string;
67    }
68
69    /**
70     * modify resource_name according to resource handlers specifications
71     *
72     * @param Smarty  $smarty        Smarty instance
73     * @param string  $resource_name resource_name to make unique
74     * @param boolean $isConfig      flag for config resource
75     *
76     * @return string unique resource name
77     */
78    public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
79    {
80        return get_class($this) . '#' . $this->decode($resource_name);
81    }
82
83    /**
84     * Determine basename for compiled filename
85     *
86     * @param Smarty_Template_Source $source source object
87     *
88     * @return string                 resource's basename
89     */
90    public function getBasename(Smarty_Template_Source $source)
91    {
92        return '';
93    }
94}
95