gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

smarty_template_source.php (8459B)


      1 <?php
      2 
      3 /**
      4  * Smarty Resource Data Object
      5  * Meta Data Container for Template Files
      6  *
      7  * @package    Smarty
      8  * @subpackage TemplateResources
      9  * @author     Rodney Rehm
     10  * @property integer $timestamp Source Timestamp
     11  * @property boolean $exists    Source Existence
     12  * @property boolean $template  Extended Template reference
     13  * @property string  $content   Source Content
     14  */
     15 class Smarty_Template_Source
     16 {
     17     /**
     18      * Name of the Class to compile this resource's contents with
     19      *
     20      * @var string
     21      */
     22     public $compiler_class = null;
     23 
     24     /**
     25      * Name of the Class to tokenize this resource's contents with
     26      *
     27      * @var string
     28      */
     29     public $template_lexer_class = null;
     30 
     31     /**
     32      * Name of the Class to parse this resource's contents with
     33      *
     34      * @var string
     35      */
     36     public $template_parser_class = null;
     37 
     38     /**
     39      * Unique Template ID
     40      *
     41      * @var string
     42      */
     43     public $uid = null;
     44 
     45     /**
     46      * Template Resource (Smarty_Internal_Template::$template_resource)
     47      *
     48      * @var string
     49      */
     50     public $resource = null;
     51 
     52     /**
     53      * Resource Type
     54      *
     55      * @var string
     56      */
     57     public $type = null;
     58 
     59     /**
     60      * Resource Name
     61      *
     62      * @var string
     63      */
     64     public $name = null;
     65 
     66     /**
     67      * Unique Resource Name
     68      *
     69      * @var string
     70      */
     71     public $unique_resource = null;
     72 
     73     /**
     74      * Source Filepath
     75      *
     76      * @var string
     77      */
     78     public $filepath = null;
     79     /**
     80      * Source File Base name
     81      *
     82      * @var string
     83      */
     84     public $basename = null;
     85 
     86     /**
     87      * The Components an extended template is made of
     88      *
     89      * @var array
     90      */
     91     public $components = null;
     92 
     93     /**
     94      * Resource Handler
     95      *
     96      * @var Smarty_Resource
     97      */
     98     public $handler = null;
     99 
    100     /**
    101      * Smarty instance
    102      *
    103      * @var Smarty
    104      */
    105     public $smarty = null;
    106     /**
    107      * Resource is source
    108      *
    109      * @var bool
    110      */
    111     public $isConfig = false;
    112     /**
    113      * Source is bypassing compiler
    114      *
    115      * @var boolean
    116      */
    117     public $uncompiled = false;
    118 
    119     /**
    120      * Source must be recompiled on every occasion
    121      *
    122      * @var boolean
    123      */
    124     public $recompiled = false;
    125     /**
    126      * cache for Smarty_Template_Compiled instances
    127      *
    128      * @var array
    129      */
    130     public $compileds = array();
    131 
    132     /**
    133      * create Source Object container
    134      *
    135      * @param Smarty_Resource $handler  Resource Handler this source object communicates with
    136      * @param Smarty          $smarty   Smarty instance this source object belongs to
    137      * @param string          $resource full template_resource
    138      * @param string          $type     type of resource
    139      * @param string          $name     resource name
    140      *
    141      * @internal param string $unique_resource unique resource name
    142      */
    143     public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name)
    144     {
    145         $this->handler = $handler; // Note: prone to circular references
    146 
    147         $this->recompiled = $handler->recompiled;
    148         $this->uncompiled = $handler->uncompiled;
    149         $this->compiler_class = $handler->compiler_class;
    150         $this->template_lexer_class = $handler->template_lexer_class;
    151         $this->template_parser_class = $handler->template_parser_class;
    152 
    153         $this->smarty = $smarty;
    154         $this->resource = $resource;
    155         $this->type = $type;
    156         $this->name = $name;
    157     }
    158 
    159     /**
    160      * initialize Source Object for given resource
    161      * Either [$_template] or [$smarty, $template_resource] must be specified
    162      *
    163      * @param  Smarty_Internal_Template $_template         template object
    164      * @param  Smarty                   $smarty            smarty object
    165      * @param  string                   $template_resource resource identifier
    166      *
    167      * @return Smarty_Template_Source Source Object
    168      * @throws SmartyException
    169      */
    170     public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null)
    171     {
    172         if ($_template) {
    173             $smarty = $_template->smarty;
    174             $template_resource = $_template->template_resource;
    175         }
    176         if (empty($template_resource)) {
    177             throw new SmartyException('Missing template name');
    178         }
    179         // parse resource_name, load resource handler, identify unique resource name
    180         list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $smarty->default_resource_type);
    181         $resource = Smarty_Resource::load($smarty, $type);
    182         // if resource is not recompiling and resource name is not dotted we can check the source cache
    183         if ($smarty->resource_caching && !$resource->recompiled && !(isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/'))) {
    184             $unique_resource = $resource->buildUniqueResourceName($smarty, $name);
    185             if (isset($smarty->source_objects[$unique_resource])) {
    186                 return $smarty->source_objects[$unique_resource];
    187             }
    188         } else {
    189             $unique_resource = null;
    190         }
    191         // create new source  object
    192         $source = new Smarty_Template_Source($resource, $smarty, $template_resource, $type, $name);
    193         $resource->populate($source, $_template);
    194         if ((!isset($source->exists) || !$source->exists) && isset($_template->smarty->default_template_handler_func)) {
    195             Smarty_Internal_Extension_DefaultTemplateHandler::_getDefault($_template, $source, $resObj);
    196         }
    197         // on recompiling resources we are done
    198         if ($smarty->resource_caching && !$resource->recompiled) {
    199             // may by we have already $unique_resource
    200             $is_relative = false;
    201             if (!isset($unique_resource)) {
    202                 $is_relative = isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/') &&
    203                     ($type == 'file' || (isset($_template->parent->source) && $_template->parent->source->type == 'extends'));
    204                 $unique_resource = $resource->buildUniqueResourceName($smarty, $is_relative ? $source->filepath . $name : $name);
    205             }
    206             $source->unique_resource = $unique_resource;
    207             // save in runtime cache if not relative
    208             if (!$is_relative) {
    209                 $smarty->source_objects[$unique_resource] = $source;
    210             }
    211         }
    212         return $source;
    213     }
    214 
    215     /**
    216      * render the uncompiled source
    217      *
    218      * @param Smarty_Internal_Template $_template template object
    219      */
    220     public function renderUncompiled(Smarty_Internal_Template $_template)
    221     {
    222         $level = ob_get_level();
    223         ob_start();
    224         try {
    225             $this->handler->renderUncompiled($_template->source, $_template);
    226             return ob_get_clean();
    227         }
    228         catch (Exception $e) {
    229             while (ob_get_level() > $level) {
    230                 ob_end_clean();
    231             }
    232             throw $e;
    233         }
    234     }
    235 
    236     /**
    237      * <<magic>> Generic Setter.
    238      *
    239      * @param  string $property_name valid: timestamp, exists, content, template
    240      * @param  mixed  $value         new value (is not checked)
    241      *
    242      * @throws SmartyException if $property_name is not valid
    243      */
    244     public function __set($property_name, $value)
    245     {
    246         switch ($property_name) {
    247             // regular attributes
    248             case 'timestamp':
    249             case 'exists':
    250             case 'content':
    251                 // required for extends: only
    252             case 'template':
    253                 $this->$property_name = $value;
    254                 break;
    255 
    256             default:
    257                 throw new SmartyException("source property '$property_name' does not exist.");
    258         }
    259     }
    260 
    261     /**
    262      * <<magic>> Generic getter.
    263      *
    264      * @param  string $property_name valid: timestamp, exists, content
    265      *
    266      * @return mixed
    267      * @throws SmartyException if $property_name is not valid
    268      */
    269     public function __get($property_name)
    270     {
    271         switch ($property_name) {
    272             case 'timestamp':
    273             case 'exists':
    274                 $this->handler->populateTimestamp($this);
    275 
    276                 return $this->$property_name;
    277 
    278             case 'content':
    279                 return $this->content = $this->handler->getContent($this);
    280 
    281             default:
    282                 throw new SmartyException("source property '$property_name' does not exist.");
    283         }
    284     }
    285 }