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_internal_compile_extends.php (2823B)


      1 <?php
      2 
      3 /**
      4  * Smarty Internal Plugin Compile extend
      5  * Compiles the {extends} tag
      6  *
      7  * @package    Smarty
      8  * @subpackage Compiler
      9  * @author     Uwe Tews
     10  */
     11 
     12 /**
     13  * Smarty Internal Plugin Compile extend Class
     14  *
     15  * @package    Smarty
     16  * @subpackage Compiler
     17  */
     18 class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
     19 {
     20     /**
     21      * Attribute definition: Overwrites base class.
     22      *
     23      * @var array
     24      * @see Smarty_Internal_CompileBase
     25      */
     26     public $required_attributes = array('file');
     27     /**
     28      * Attribute definition: Overwrites base class.
     29      *
     30      * @var array
     31      * @see Smarty_Internal_CompileBase
     32      */
     33     public $shorttag_order = array('file');
     34 
     35     /**
     36      * Compiles code for the {extends} tag
     37      *
     38      * @param array  $args     array with attributes from parser
     39      * @param object $compiler compiler object
     40      *
     41      * @return string compiled code
     42      */
     43     public function compile($args, $compiler)
     44     {
     45         // check and get attributes
     46         $_attr = $this->getAttributes($compiler, $args);
     47         if ($_attr['nocache'] === true) {
     48             $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
     49         }
     50         if (strpos($_attr['file'], '$_tmp') !== false) {
     51             $compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno);
     52         }
     53 
     54         $name = $_attr['file'];
     55         /** @var Smarty_Internal_Template $_smarty_tpl
     56          * used in evaluated code
     57          */
     58         $_smarty_tpl = $compiler->template;
     59         eval("\$tpl_name = $name;");
     60         // create template object
     61         $_template = new $compiler->smarty->template_class($tpl_name, $compiler->smarty, $compiler->template);
     62         // check for recursion
     63         $uid = $_template->source->uid;
     64         if (isset($compiler->extends_uid[$uid])) {
     65             $compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $compiler->lex->line - 1);
     66         }
     67         $compiler->extends_uid[$uid] = true;
     68         if (empty($_template->source->components)) {
     69             array_unshift($compiler->sources, $_template->source);
     70         } else {
     71             foreach ($_template->source->components as $source) {
     72                 array_unshift($compiler->sources, $source);
     73                 $uid = $source->uid;
     74                 if (isset($compiler->extends_uid[$uid])) {
     75                     $compiler->trigger_template_error("illegal recursive call of \"{$source->filepath}\"", $compiler->lex->line - 1);
     76                 }
     77                 $compiler->extends_uid[$uid] = true;
     78             }
     79         }
     80         unset ($_template);
     81         $compiler->inheritance_child = true;
     82         $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY);
     83         return '';
     84     }
     85 }