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_section.php (7555B)


      1 <?php
      2 /**
      3  * Smarty Internal Plugin Compile Section
      4  * Compiles the {section} {sectionelse} {/section} tags
      5  *
      6  * @package    Smarty
      7  * @subpackage Compiler
      8  * @author     Uwe Tews
      9  */
     10 
     11 /**
     12  * Smarty Internal Plugin Compile Section Class
     13  *
     14  * @package    Smarty
     15  * @subpackage Compiler
     16  */
     17 class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase
     18 {
     19     /**
     20      * Attribute definition: Overwrites base class.
     21      *
     22      * @var array
     23      * @see Smarty_Internal_CompileBase
     24      */
     25     public $required_attributes = array('name', 'loop');
     26     /**
     27      * Attribute definition: Overwrites base class.
     28      *
     29      * @var array
     30      * @see Smarty_Internal_CompileBase
     31      */
     32     public $shorttag_order = array('name', 'loop');
     33     /**
     34      * Attribute definition: Overwrites base class.
     35      *
     36      * @var array
     37      * @see Smarty_Internal_CompileBase
     38      */
     39     public $optional_attributes = array('start', 'step', 'max', 'show');
     40 
     41     /**
     42      * Compiles code for the {section} tag
     43      *
     44      * @param  array  $args     array with attributes from parser
     45      * @param  object $compiler compiler object
     46      *
     47      * @return string compiled code
     48      */
     49     public function compile($args, $compiler)
     50     {
     51         // check and get attributes
     52         $_attr = $this->getAttributes($compiler, $args);
     53 
     54         $this->openTag($compiler, 'section', array('section', $compiler->nocache));
     55         // maybe nocache because of nocache variables
     56         $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
     57 
     58         $output = "<?php ";
     59 
     60         $section_name = $_attr['name'];
     61 
     62         $output .= "if (isset(\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name])) unset(\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name]);\n";
     63         $section_props = "\$_smarty_tpl->tpl_vars['smarty']->value['section'][$section_name]";
     64 
     65         foreach ($_attr as $attr_name => $attr_value) {
     66             switch ($attr_name) {
     67                 case 'loop':
     68                     $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop); unset(\$_loop);\n";
     69                     break;
     70 
     71                 case 'show':
     72                     if (is_bool($attr_value)) {
     73                         $show_attr_value = $attr_value ? 'true' : 'false';
     74                     } else {
     75                         $show_attr_value = "(bool) $attr_value";
     76                     }
     77                     $output .= "{$section_props}['show'] = $show_attr_value;\n";
     78                     break;
     79 
     80                 case 'name':
     81                     $output .= "{$section_props}['$attr_name'] = $attr_value;\n";
     82                     break;
     83 
     84                 case 'max':
     85                 case 'start':
     86                     $output .= "{$section_props}['$attr_name'] = (int) $attr_value;\n";
     87                     break;
     88 
     89                 case 'step':
     90                     $output .= "{$section_props}['$attr_name'] = ((int) $attr_value) == 0 ? 1 : (int) $attr_value;\n";
     91                     break;
     92             }
     93         }
     94 
     95         if (!isset($_attr['show'])) {
     96             $output .= "{$section_props}['show'] = true;\n";
     97         }
     98 
     99         if (!isset($_attr['loop'])) {
    100             $output .= "{$section_props}['loop'] = 1;\n";
    101         }
    102 
    103         if (!isset($_attr['max'])) {
    104             $output .= "{$section_props}['max'] = {$section_props}['loop'];\n";
    105         } else {
    106             $output .= "if ({$section_props}['max'] < 0)\n" . "    {$section_props}['max'] = {$section_props}['loop'];\n";
    107         }
    108 
    109         if (!isset($_attr['step'])) {
    110             $output .= "{$section_props}['step'] = 1;\n";
    111         }
    112 
    113         if (!isset($_attr['start'])) {
    114             $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n";
    115         } else {
    116             $output .= "if ({$section_props}['start'] < 0)\n" . "    {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . "else\n" . "    {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n";
    117         }
    118 
    119         $output .= "if ({$section_props}['show']) {\n";
    120         if (!isset($_attr['start']) && !isset($_attr['step']) && !isset($_attr['max'])) {
    121             $output .= "    {$section_props}['total'] = {$section_props}['loop'];\n";
    122         } else {
    123             $output .= "    {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n";
    124         }
    125         $output .= "    if ({$section_props}['total'] == 0)\n" . "        {$section_props}['show'] = false;\n" . "} else\n" . "    {$section_props}['total'] = 0;\n";
    126 
    127         $output .= "if ({$section_props}['show']):\n";
    128         $output .= "
    129             for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1;
    130                  {$section_props}['iteration'] <= {$section_props}['total'];
    131                  {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n";
    132         $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n";
    133         $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n";
    134         $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n";
    135         $output .= "{$section_props}['first']      = ({$section_props}['iteration'] == 1);\n";
    136         $output .= "{$section_props}['last']       = ({$section_props}['iteration'] == {$section_props}['total']);\n";
    137 
    138         $output .= "?>";
    139 
    140         return $output;
    141     }
    142 }
    143 
    144 /**
    145  * Smarty Internal Plugin Compile Sectionelse Class
    146  *
    147  * @package    Smarty
    148  * @subpackage Compiler
    149  */
    150 class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase
    151 {
    152     /**
    153      * Compiles code for the {sectionelse} tag
    154      *
    155      * @param  array  $args     array with attributes from parser
    156      * @param  object $compiler compiler object
    157      *
    158      * @return string compiled code
    159      */
    160     public function compile($args, $compiler)
    161     {
    162         // check and get attributes
    163         $_attr = $this->getAttributes($compiler, $args);
    164 
    165         list($openTag, $nocache) = $this->closeTag($compiler, array('section'));
    166         $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache));
    167 
    168         return "<?php endfor; else: ?>";
    169     }
    170 }
    171 
    172 /**
    173  * Smarty Internal Plugin Compile Sectionclose Class
    174  *
    175  * @package    Smarty
    176  * @subpackage Compiler
    177  */
    178 class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase
    179 {
    180     /**
    181      * Compiles code for the {/section} tag
    182      *
    183      * @param  array  $args     array with attributes from parser
    184      * @param  object $compiler compiler object
    185      *
    186      * @return string compiled code
    187      */
    188     public function compile($args, $compiler)
    189     {
    190         // check and get attributes
    191         $_attr = $this->getAttributes($compiler, $args);
    192 
    193         // must endblock be nocache?
    194         if ($compiler->nocache) {
    195             $compiler->tag_nocache = true;
    196         }
    197 
    198         list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('section', 'sectionelse'));
    199 
    200         if ($openTag == 'sectionelse') {
    201             return "<?php endif; ?>";
    202         } else {
    203             return "<?php endfor; endif; ?>";
    204         }
    205     }
    206 }