PHP Classes

File: libs/smarty/sysplugins/smarty_internal_compile_private_print_expression.php

Recommend this page to a friend!
  Classes of Ali Sharifi   MVC 4 Dummies   libs/smarty/sysplugins/smarty_internal_compile_private_print_expression.php   Download  
File: libs/smarty/sysplugins/smarty_internal_compile_private_print_expression.php
Role: Auxiliary script
Content type: text/plain
Description: smarty lib
Class: MVC 4 Dummies
Web development PHP MVC framework
Author: By
Last change:
Date: 9 years ago
Size: 6,647 bytes
 

Contents

Class file image Download
<?php
/**
 * Smarty Internal Plugin Compile Print Expression
 * Compiles any tag which will output an expression or variable
 *
 * @package Smarty
 * @subpackage Compiler
 * @author Uwe Tews
 */

/**
 * Smarty Internal Plugin Compile Print Expression Class
 *
 * @package Smarty
 * @subpackage Compiler
 */
class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase
{
   
/**
     * Attribute definition: Overwrites base class.
     *
     * @var array
     * @see Smarty_Internal_CompileBase
     */
   
public $optional_attributes = array('assign');
   
/**
     * Attribute definition: Overwrites base class.
     *
     * @var array
     * @see Smarty_Internal_CompileBase
     */
   
public $option_flags = array('nocache', 'nofilter');

   
/**
     * Compiles code for generating output from any expression
     *
     * @param array $args array with attributes from parser
     * @param object $compiler compiler object
     * @param array $parameter array with compilation parameter
     *
     * @throws SmartyException
     * @return string compiled code
     */
   
public function compile($args, $compiler, $parameter)
    {
       
// check and get attributes
       
$_attr = $this->getAttributes($compiler, $args);
       
// nocache option
       
if ($_attr['nocache'] === true) {
           
$compiler->tag_nocache = true;
        }
        if (isset(
$_attr['assign'])) {
           
// assign output to variable
           
$output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>";
        } else {
           
// display value
           
$output = $parameter['value'];
           
// tag modifier
           
if (!empty($parameter['modifierlist'])) {
               
$output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], 'value' => $output));
            }
            if (!
$_attr['nofilter']) {
               
// default modifier
               
if (!empty($compiler->smarty->default_modifiers)) {
                    if (empty(
$compiler->default_modifier_list)) {
                       
$modifierlist = array();
                        foreach (
$compiler->smarty->default_modifiers as $key => $single_default_modifier) {
                           
preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array);
                            for (
$i = 0, $count = count($mod_array[0]); $i < $count; $i ++) {
                                if (
$mod_array[0][$i] != ':') {
                                   
$modifierlist[$key][] = $mod_array[0][$i];
                                }
                            }
                        }
                       
$compiler->default_modifier_list = $modifierlist;
                    }
                   
$output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output));
                }
               
// autoescape html
               
if ($compiler->template->smarty->escape_html) {
                   
$output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')";
                }
               
// loop over registered filters
               
if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) {
                    foreach (
$compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) {
                        if (!
is_array($function)) {
                           
$output = "{$function}({$output},\$_smarty_tpl)";
                        } elseif (
is_object($function[0])) {
                           
$output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)";
                        } else {
                           
$output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)";
                        }
                    }
                }
               
// auto loaded filters
               
if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) {
                    foreach ((array)
$compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) {
                       
$result = $this->compile_output_filter($compiler, $name, $output);
                        if (
$result !== false) {
                           
$output = $result;
                        } else {
                           
// not found, throw exception
                           
throw new SmartyException("Unable to load filter '{$name}'");
                        }
                    }
                }
                if (isset(
$compiler->template->variable_filters)) {
                    foreach (
$compiler->template->variable_filters as $filter) {
                        if (
count($filter) == 1 && ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false) {
                           
$output = $result;
                        } else {
                           
$output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), 'value' => $output));
                        }
                    }
                }
            }

           
$compiler->has_output = true;
           
$output = "<?php echo {$output};?>";
        }

        return
$output;
    }

   
/**
     * @param object $compiler compiler object
     * @param string $name name of variable filter
     * @param string $output embedded output
     *
     * @return string
     */
   
private function compile_output_filter($compiler, $name, $output)
    {
       
$plugin_name = "smarty_variablefilter_{$name}";
       
$path = $compiler->smarty->loadPlugin($plugin_name, false);
        if (
$path) {
            if (
$compiler->template->caching) {
               
$compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path;
               
$compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name;
            } else {
               
$compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path;
               
$compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name;
            }
        } else {
           
// not found
           
return false;
        }

        return
"{$plugin_name}({$output},\$_smarty_tpl)";
    }
}