PageRenderTime 49ms CodeModel.GetById 12ms app.highlight 27ms RepoModel.GetById 0ms app.codeStats 1ms

/framework/vendor/smarty2/lib/Smarty.class.php

http://zoop.googlecode.com/
PHP | 1944 lines | 1040 code | 177 blank | 727 comment | 136 complexity | ac146cfd830944566d74a36e50533795 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

   1<?php
   2
   3/**
   4 * Project:     Smarty: the PHP compiling template engine
   5 * File:        Smarty.class.php
   6 *
   7 * This library is free software; you can redistribute it and/or
   8 * modify it under the terms of the GNU Lesser General Public
   9 * License as published by the Free Software Foundation; either
  10 * version 2.1 of the License, or (at your option) any later version.
  11 *
  12 * This library is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15 * Lesser General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU Lesser General Public
  18 * License along with this library; if not, write to the Free Software
  19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20 *
  21 * For questions, help, comments, discussion, etc., please join the
  22 * Smarty mailing list. Send a blank e-mail to
  23 * smarty-general-subscribe@lists.php.net
  24 *
  25 * @link http://smarty.php.net/
  26 * @copyright 2001-2005 New Digital Group, Inc.
  27 * @author Monte Ohrt <monte at ohrt dot com>
  28 * @author Andrei Zmievski <andrei@php.net>
  29 * @package Smarty
  30 * @version 2.6.14
  31 */
  32
  33/* $Id: Smarty.class.php,v 1.524 2006/01/18 19:02:52 mohrt Exp $ */
  34
  35/**
  36 * DIR_SEP isn't used anymore, but third party apps might
  37 */
  38if(!defined('DIR_SEP')) {
  39    define('DIR_SEP', DIRECTORY_SEPARATOR);
  40}
  41
  42/**
  43 * set SMARTY_DIR to absolute path to Smarty library files.
  44 * if not defined, include_path will be used. Sets SMARTY_DIR only if user
  45 * application has not already defined it.
  46 */
  47
  48if (!defined('SMARTY_DIR')) {
  49    define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
  50}
  51
  52if (!defined('SMARTY_CORE_DIR')) {
  53    define('SMARTY_CORE_DIR', SMARTY_DIR . 'internals' . DIRECTORY_SEPARATOR);
  54}
  55
  56define('SMARTY_PHP_PASSTHRU',   0);
  57define('SMARTY_PHP_QUOTE',      1);
  58define('SMARTY_PHP_REMOVE',     2);
  59define('SMARTY_PHP_ALLOW',      3);
  60
  61/**
  62 * @package Smarty
  63 */
  64class Smarty
  65{
  66    /**#@+
  67     * Smarty Configuration Section
  68     */
  69
  70    /**
  71     * The name of the directory where templates are located.
  72     *
  73     * @var string
  74     */
  75    var $template_dir    =  'templates';
  76
  77    /**
  78     * The directory where compiled templates are located.
  79     *
  80     * @var string
  81     */
  82    var $compile_dir     =  'templates_c';
  83
  84    /**
  85     * The directory where config files are located.
  86     *
  87     * @var string
  88     */
  89    var $config_dir      =  'configs';
  90
  91    /**
  92     * An array of directories searched for plugins.
  93     *
  94     * @var array
  95     */
  96    var $plugins_dir     =  array('plugins');
  97
  98    /**
  99     * If debugging is enabled, a debug console window will display
 100     * when the page loads (make sure your browser allows unrequested
 101     * popup windows)
 102     *
 103     * @var boolean
 104     */
 105    var $debugging       =  false;
 106
 107    /**
 108     * When set, smarty does uses this value as error_reporting-level.
 109     *
 110     * @var boolean
 111     */
 112    var $error_reporting  =  null;
 113
 114    /**
 115     * This is the path to the debug console template. If not set,
 116     * the default one will be used.
 117     *
 118     * @var string
 119     */
 120    var $debug_tpl       =  '';
 121
 122    /**
 123     * This determines if debugging is enable-able from the browser.
 124     * <ul>
 125     *  <li>NONE => no debugging control allowed</li>
 126     *  <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li>
 127     * </ul>
 128     * @link http://www.foo.dom/index.php?SMARTY_DEBUG
 129     * @var string
 130     */
 131    var $debugging_ctrl  =  'NONE';
 132
 133    /**
 134     * This tells Smarty whether to check for recompiling or not. Recompiling
 135     * does not need to happen unless a template or config file is changed.
 136     * Typically you enable this during development, and disable for
 137     * production.
 138     *
 139     * @var boolean
 140     */
 141    var $compile_check   =  true;
 142
 143    /**
 144     * This forces templates to compile every time. Useful for development
 145     * or debugging.
 146     *
 147     * @var boolean
 148     */
 149    var $force_compile   =  false;
 150
 151    /**
 152     * This enables template caching.
 153     * <ul>
 154     *  <li>0 = no caching</li>
 155     *  <li>1 = use class cache_lifetime value</li>
 156     *  <li>2 = use cache_lifetime in cache file</li>
 157     * </ul>
 158     * @var integer
 159     */
 160    var $caching         =  0;
 161
 162    /**
 163     * The name of the directory for cache files.
 164     *
 165     * @var string
 166     */
 167    var $cache_dir       =  'cache';
 168
 169    /**
 170     * This is the number of seconds cached content will persist.
 171     * <ul>
 172     *  <li>0 = always regenerate cache</li>
 173     *  <li>-1 = never expires</li>
 174     * </ul>
 175     *
 176     * @var integer
 177     */
 178    var $cache_lifetime  =  3600;
 179
 180    /**
 181     * Only used when $caching is enabled. If true, then If-Modified-Since headers
 182     * are respected with cached content, and appropriate HTTP headers are sent.
 183     * This way repeated hits to a cached page do not send the entire page to the
 184     * client every time.
 185     *
 186     * @var boolean
 187     */
 188    var $cache_modified_check = false;
 189
 190    /**
 191     * This determines how Smarty handles "<?php ... ?>" tags in templates.
 192     * possible values:
 193     * <ul>
 194     *  <li>SMARTY_PHP_PASSTHRU -> print tags as plain text</li>
 195     *  <li>SMARTY_PHP_QUOTE    -> escape tags as entities</li>
 196     *  <li>SMARTY_PHP_REMOVE   -> remove php tags</li>
 197     *  <li>SMARTY_PHP_ALLOW    -> execute php tags</li>
 198     * </ul>
 199     *
 200     * @var integer
 201     */
 202    var $php_handling    =  SMARTY_PHP_PASSTHRU;
 203
 204    /**
 205     * This enables template security. When enabled, many things are restricted
 206     * in the templates that normally would go unchecked. This is useful when
 207     * untrusted parties are editing templates and you want a reasonable level
 208     * of security. (no direct execution of PHP in templates for example)
 209     *
 210     * @var boolean
 211     */
 212    var $security       =   false;
 213
 214    /**
 215     * This is the list of template directories that are considered secure. This
 216     * is used only if {@link $security} is enabled. One directory per array
 217     * element.  {@link $template_dir} is in this list implicitly.
 218     *
 219     * @var array
 220     */
 221    var $secure_dir     =   array();
 222
 223    /**
 224     * These are the security settings for Smarty. They are used only when
 225     * {@link $security} is enabled.
 226     *
 227     * @var array
 228     */
 229    var $security_settings  = array(
 230                                    'PHP_HANDLING'    => false,
 231                                    'IF_FUNCS'        => array('array', 'list',
 232                                                               'isset', 'empty',
 233                                                               'count', 'sizeof',
 234                                                               'in_array', 'is_array',
 235                                                               'true', 'false', 'null'),
 236                                    'INCLUDE_ANY'     => false,
 237                                    'PHP_TAGS'        => false,
 238                                    'MODIFIER_FUNCS'  => array('count'),
 239                                    'ALLOW_CONSTANTS'  => false
 240                                   );
 241
 242    /**
 243     * This is an array of directories where trusted php scripts reside.
 244     * {@link $security} is disabled during their inclusion/execution.
 245     *
 246     * @var array
 247     */
 248    var $trusted_dir        = array();
 249
 250    /**
 251     * The left delimiter used for the template tags.
 252     *
 253     * @var string
 254     */
 255    var $left_delimiter  =  '{';
 256
 257    /**
 258     * The right delimiter used for the template tags.
 259     *
 260     * @var string
 261     */
 262    var $right_delimiter =  '}';
 263
 264    /**
 265     * The order in which request variables are registered, similar to
 266     * variables_order in php.ini E = Environment, G = GET, P = POST,
 267     * C = Cookies, S = Server
 268     *
 269     * @var string
 270     */
 271    var $request_vars_order    = 'EGPCS';
 272
 273    /**
 274     * Indicates wether $HTTP_*_VARS[] (request_use_auto_globals=false)
 275     * are uses as request-vars or $_*[]-vars. note: if
 276     * request_use_auto_globals is true, then $request_vars_order has
 277     * no effect, but the php-ini-value "gpc_order"
 278     *
 279     * @var boolean
 280     */
 281    var $request_use_auto_globals      = true;
 282
 283    /**
 284     * Set this if you want different sets of compiled files for the same
 285     * templates. This is useful for things like different languages.
 286     * Instead of creating separate sets of templates per language, you
 287     * set different compile_ids like 'en' and 'de'.
 288     *
 289     * @var string
 290     */
 291    var $compile_id            = null;
 292
 293    /**
 294     * This tells Smarty whether or not to use sub dirs in the cache/ and
 295     * templates_c/ directories. sub directories better organized, but
 296     * may not work well with PHP safe mode enabled.
 297     *
 298     * @var boolean
 299     *
 300     */
 301    var $use_sub_dirs          = false;
 302
 303    /**
 304     * This is a list of the modifiers to apply to all template variables.
 305     * Put each modifier in a separate array element in the order you want
 306     * them applied. example: <code>array('escape:"htmlall"');</code>
 307     *
 308     * @var array
 309     */
 310    var $default_modifiers        = array();
 311
 312    /**
 313     * This is the resource type to be used when not specified
 314     * at the beginning of the resource path. examples:
 315     * $smarty->display('file:index.tpl');
 316     * $smarty->display('db:index.tpl');
 317     * $smarty->display('index.tpl'); // will use default resource type
 318     * {include file="file:index.tpl"}
 319     * {include file="db:index.tpl"}
 320     * {include file="index.tpl"} {* will use default resource type *}
 321     *
 322     * @var array
 323     */
 324    var $default_resource_type    = 'file';
 325
 326    /**
 327     * The function used for cache file handling. If not set, built-in caching is used.
 328     *
 329     * @var null|string function name
 330     */
 331    var $cache_handler_func   = null;
 332
 333    /**
 334     * This indicates which filters are automatically loaded into Smarty.
 335     *
 336     * @var array array of filter names
 337     */
 338    var $autoload_filters = array();
 339
 340    /**#@+
 341     * @var boolean
 342     */
 343    /**
 344     * This tells if config file vars of the same name overwrite each other or not.
 345     * if disabled, same name variables are accumulated in an array.
 346     */
 347    var $config_overwrite = true;
 348
 349    /**
 350     * This tells whether or not to automatically booleanize config file variables.
 351     * If enabled, then the strings "on", "true", and "yes" are treated as boolean
 352     * true, and "off", "false" and "no" are treated as boolean false.
 353     */
 354    var $config_booleanize = true;
 355
 356    /**
 357     * This tells whether hidden sections [.foobar] are readable from the
 358     * tempalates or not. Normally you would never allow this since that is
 359     * the point behind hidden sections: the application can access them, but
 360     * the templates cannot.
 361     */
 362    var $config_read_hidden = false;
 363
 364    /**
 365     * This tells whether or not automatically fix newlines in config files.
 366     * It basically converts \r (mac) or \r\n (dos) to \n
 367     */
 368    var $config_fix_newlines = true;
 369    /**#@-*/
 370
 371    /**
 372     * If a template cannot be found, this PHP function will be executed.
 373     * Useful for creating templates on-the-fly or other special action.
 374     *
 375     * @var string function name
 376     */
 377    var $default_template_handler_func = '';
 378
 379    /**
 380     * The file that contains the compiler class. This can a full
 381     * pathname, or relative to the php_include path.
 382     *
 383     * @var string
 384     */
 385    var $compiler_file        =    'Smarty_Compiler.class.php';
 386
 387    /**
 388     * The class used for compiling templates.
 389     *
 390     * @var string
 391     */
 392    var $compiler_class        =   'Smarty_Compiler';
 393
 394    /**
 395     * The class used to load config vars.
 396     *
 397     * @var string
 398     */
 399    var $config_class          =   'Config_File';
 400
 401/**#@+
 402 * END Smarty Configuration Section
 403 * There should be no need to touch anything below this line.
 404 * @access private
 405 */
 406    /**
 407     * where assigned template vars are kept
 408     *
 409     * @var array
 410     */
 411    var $_tpl_vars             = array();
 412
 413    /**
 414     * stores run-time $smarty.* vars
 415     *
 416     * @var null|array
 417     */
 418    var $_smarty_vars          = null;
 419
 420    /**
 421     * keeps track of sections
 422     *
 423     * @var array
 424     */
 425    var $_sections             = array();
 426
 427    /**
 428     * keeps track of foreach blocks
 429     *
 430     * @var array
 431     */
 432    var $_foreach              = array();
 433
 434    /**
 435     * keeps track of tag hierarchy
 436     *
 437     * @var array
 438     */
 439    var $_tag_stack            = array();
 440
 441    /**
 442     * configuration object
 443     *
 444     * @var Config_file
 445     */
 446    var $_conf_obj             = null;
 447
 448    /**
 449     * loaded configuration settings
 450     *
 451     * @var array
 452     */
 453    var $_config               = array(array('vars'  => array(), 'files' => array()));
 454
 455    /**
 456     * md5 checksum of the string 'Smarty'
 457     *
 458     * @var string
 459     */
 460    var $_smarty_md5           = 'f8d698aea36fcbead2b9d5359ffca76f';
 461
 462    /**
 463     * Smarty version number
 464     *
 465     * @var string
 466     */
 467    var $_version              = '2.6.14';
 468
 469    /**
 470     * current template inclusion depth
 471     *
 472     * @var integer
 473     */
 474    var $_inclusion_depth      = 0;
 475
 476    /**
 477     * for different compiled templates
 478     *
 479     * @var string
 480     */
 481    var $_compile_id           = null;
 482
 483    /**
 484     * text in URL to enable debug mode
 485     *
 486     * @var string
 487     */
 488    var $_smarty_debug_id      = 'SMARTY_DEBUG';
 489
 490    /**
 491     * debugging information for debug console
 492     *
 493     * @var array
 494     */
 495    var $_smarty_debug_info    = array();
 496
 497    /**
 498     * info that makes up a cache file
 499     *
 500     * @var array
 501     */
 502    var $_cache_info           = array();
 503
 504    /**
 505     * default file permissions
 506     *
 507     * @var integer
 508     */
 509    var $_file_perms           = 0644;
 510
 511    /**
 512     * default dir permissions
 513     *
 514     * @var integer
 515     */
 516    var $_dir_perms               = 0771;
 517
 518    /**
 519     * registered objects
 520     *
 521     * @var array
 522     */
 523    var $_reg_objects           = array();
 524
 525    /**
 526     * table keeping track of plugins
 527     *
 528     * @var array
 529     */
 530    var $_plugins              = array(
 531                                       'modifier'      => array(),
 532                                       'function'      => array(),
 533                                       'block'         => array(),
 534                                       'compiler'      => array(),
 535                                       'prefilter'     => array(),
 536                                       'postfilter'    => array(),
 537                                       'outputfilter'  => array(),
 538                                       'resource'      => array(),
 539                                       'insert'        => array());
 540
 541
 542    /**
 543     * cache serials
 544     *
 545     * @var array
 546     */
 547    var $_cache_serials = array();
 548
 549    /**
 550     * name of optional cache include file
 551     *
 552     * @var string
 553     */
 554    var $_cache_include = null;
 555
 556    /**
 557     * indicate if the current code is used in a compiled
 558     * include
 559     *
 560     * @var string
 561     */
 562    var $_cache_including = false;
 563
 564    /**#@-*/
 565    /**
 566     * The class constructor.
 567     */
 568    function Smarty()
 569    {
 570      $this->assign('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME']
 571                    : @$GLOBALS['HTTP_SERVER_VARS']['SCRIPT_NAME']);
 572    }
 573
 574    /**
 575     * assigns values to template variables
 576     *
 577     * @param array|string $tpl_var the template variable name(s)
 578     * @param mixed $value the value to assign
 579     */
 580    function assign($tpl_var, $value = null)
 581    {
 582        if (is_array($tpl_var)){
 583            foreach ($tpl_var as $key => $val) {
 584                if ($key != '') {
 585                    $this->_tpl_vars[$key] = $val;
 586                }
 587            }
 588        } else {
 589            if ($tpl_var != '')
 590                $this->_tpl_vars[$tpl_var] = $value;
 591        }
 592    }
 593
 594    /**
 595     * assigns values to template variables by reference
 596     *
 597     * @param string $tpl_var the template variable name
 598     * @param mixed $value the referenced value to assign
 599     */
 600    function assign_by_ref($tpl_var, &$value)
 601    {
 602        if ($tpl_var != '')
 603            $this->_tpl_vars[$tpl_var] = &$value;
 604    }
 605
 606    /**
 607     * appends values to template variables
 608     *
 609     * @param array|string $tpl_var the template variable name(s)
 610     * @param mixed $value the value to append
 611     */
 612    function append($tpl_var, $value=null, $merge=false)
 613    {
 614        if (is_array($tpl_var)) {
 615            // $tpl_var is an array, ignore $value
 616            foreach ($tpl_var as $_key => $_val) {
 617                if ($_key != '') {
 618                    if(!@is_array($this->_tpl_vars[$_key])) {
 619                        settype($this->_tpl_vars[$_key],'array');
 620                    }
 621                    if($merge && is_array($_val)) {
 622                        foreach($_val as $_mkey => $_mval) {
 623                            $this->_tpl_vars[$_key][$_mkey] = $_mval;
 624                        }
 625                    } else {
 626                        $this->_tpl_vars[$_key][] = $_val;
 627                    }
 628                }
 629            }
 630        } else {
 631            if ($tpl_var != '' && isset($value)) {
 632                if(!@is_array($this->_tpl_vars[$tpl_var])) {
 633                    settype($this->_tpl_vars[$tpl_var],'array');
 634                }
 635                if($merge && is_array($value)) {
 636                    foreach($value as $_mkey => $_mval) {
 637                        $this->_tpl_vars[$tpl_var][$_mkey] = $_mval;
 638                    }
 639                } else {
 640                    $this->_tpl_vars[$tpl_var][] = $value;
 641                }
 642            }
 643        }
 644    }
 645
 646    /**
 647     * appends values to template variables by reference
 648     *
 649     * @param string $tpl_var the template variable name
 650     * @param mixed $value the referenced value to append
 651     */
 652    function append_by_ref($tpl_var, &$value, $merge=false)
 653    {
 654        if ($tpl_var != '' && isset($value)) {
 655            if(!@is_array($this->_tpl_vars[$tpl_var])) {
 656             settype($this->_tpl_vars[$tpl_var],'array');
 657            }
 658            if ($merge && is_array($value)) {
 659                foreach($value as $_key => $_val) {
 660                    $this->_tpl_vars[$tpl_var][$_key] = &$value[$_key];
 661                }
 662            } else {
 663                $this->_tpl_vars[$tpl_var][] = &$value;
 664            }
 665        }
 666    }
 667
 668
 669    /**
 670     * clear the given assigned template variable.
 671     *
 672     * @param string $tpl_var the template variable to clear
 673     */
 674    function clear_assign($tpl_var)
 675    {
 676        if (is_array($tpl_var))
 677            foreach ($tpl_var as $curr_var)
 678                unset($this->_tpl_vars[$curr_var]);
 679        else
 680            unset($this->_tpl_vars[$tpl_var]);
 681    }
 682
 683
 684    /**
 685     * Registers custom function to be used in templates
 686     *
 687     * @param string $function the name of the template function
 688     * @param string $function_impl the name of the PHP function to register
 689     */
 690    function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null)
 691    {
 692        $this->_plugins['function'][$function] =
 693            array($function_impl, null, null, false, $cacheable, $cache_attrs);
 694
 695    }
 696
 697    /**
 698     * Unregisters custom function
 699     *
 700     * @param string $function name of template function
 701     */
 702    function unregister_function($function)
 703    {
 704        unset($this->_plugins['function'][$function]);
 705    }
 706
 707    /**
 708     * Registers object to be used in templates
 709     *
 710     * @param string $object name of template object
 711     * @param object &$object_impl the referenced PHP object to register
 712     * @param null|array $allowed list of allowed methods (empty = all)
 713     * @param boolean $smarty_args smarty argument format, else traditional
 714     * @param null|array $block_functs list of methods that are block format
 715     */
 716    function register_object($object, &$object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
 717    {
 718        settype($allowed, 'array');
 719        settype($smarty_args, 'boolean');
 720        $this->_reg_objects[$object] =
 721            array(&$object_impl, $allowed, $smarty_args, $block_methods);
 722    }
 723
 724    /**
 725     * Unregisters object
 726     *
 727     * @param string $object name of template object
 728     */
 729    function unregister_object($object)
 730    {
 731        unset($this->_reg_objects[$object]);
 732    }
 733
 734
 735    /**
 736     * Registers block function to be used in templates
 737     *
 738     * @param string $block name of template block
 739     * @param string $block_impl PHP function to register
 740     */
 741    function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null)
 742    {
 743        $this->_plugins['block'][$block] =
 744            array($block_impl, null, null, false, $cacheable, $cache_attrs);
 745    }
 746
 747    /**
 748     * Unregisters block function
 749     *
 750     * @param string $block name of template function
 751     */
 752    function unregister_block($block)
 753    {
 754        unset($this->_plugins['block'][$block]);
 755    }
 756
 757    /**
 758     * Registers compiler function
 759     *
 760     * @param string $function name of template function
 761     * @param string $function_impl name of PHP function to register
 762     */
 763    function register_compiler_function($function, $function_impl, $cacheable=true)
 764    {
 765        $this->_plugins['compiler'][$function] =
 766            array($function_impl, null, null, false, $cacheable);
 767    }
 768
 769    /**
 770     * Unregisters compiler function
 771     *
 772     * @param string $function name of template function
 773     */
 774    function unregister_compiler_function($function)
 775    {
 776        unset($this->_plugins['compiler'][$function]);
 777    }
 778
 779    /**
 780     * Registers modifier to be used in templates
 781     *
 782     * @param string $modifier name of template modifier
 783     * @param string $modifier_impl name of PHP function to register
 784     */
 785    function register_modifier($modifier, $modifier_impl)
 786    {
 787        $this->_plugins['modifier'][$modifier] =
 788            array($modifier_impl, null, null, false);
 789    }
 790
 791    /**
 792     * Unregisters modifier
 793     *
 794     * @param string $modifier name of template modifier
 795     */
 796    function unregister_modifier($modifier)
 797    {
 798        unset($this->_plugins['modifier'][$modifier]);
 799    }
 800
 801    /**
 802     * Registers a resource to fetch a template
 803     *
 804     * @param string $type name of resource
 805     * @param array $functions array of functions to handle resource
 806     */
 807    function register_resource($type, $functions)
 808    {
 809        if (count($functions)==4) {
 810            $this->_plugins['resource'][$type] =
 811                array($functions, false);
 812
 813        } elseif (count($functions)==5) {
 814            $this->_plugins['resource'][$type] =
 815                array(array(array(&$functions[0], $functions[1])
 816                            ,array(&$functions[0], $functions[2])
 817                            ,array(&$functions[0], $functions[3])
 818                            ,array(&$functions[0], $functions[4]))
 819                      ,false);
 820
 821        } else {
 822            $this->trigger_error("malformed function-list for '$type' in register_resource");
 823
 824        }
 825    }
 826
 827    /**
 828     * Unregisters a resource
 829     *
 830     * @param string $type name of resource
 831     */
 832    function unregister_resource($type)
 833    {
 834        unset($this->_plugins['resource'][$type]);
 835    }
 836
 837    /**
 838     * Registers a prefilter function to apply
 839     * to a template before compiling
 840     *
 841     * @param string $function name of PHP function to register
 842     */
 843    function register_prefilter($function)
 844    {
 845    $_name = (is_array($function)) ? $function[1] : $function;
 846        $this->_plugins['prefilter'][$_name]
 847            = array($function, null, null, false);
 848    }
 849
 850    /**
 851     * Unregisters a prefilter function
 852     *
 853     * @param string $function name of PHP function
 854     */
 855    function unregister_prefilter($function)
 856    {
 857        unset($this->_plugins['prefilter'][$function]);
 858    }
 859
 860    /**
 861     * Registers a postfilter function to apply
 862     * to a compiled template after compilation
 863     *
 864     * @param string $function name of PHP function to register
 865     */
 866    function register_postfilter($function)
 867    {
 868    $_name = (is_array($function)) ? $function[1] : $function;
 869        $this->_plugins['postfilter'][$_name]
 870            = array($function, null, null, false);
 871    }
 872
 873    /**
 874     * Unregisters a postfilter function
 875     *
 876     * @param string $function name of PHP function
 877     */
 878    function unregister_postfilter($function)
 879    {
 880        unset($this->_plugins['postfilter'][$function]);
 881    }
 882
 883    /**
 884     * Registers an output filter function to apply
 885     * to a template output
 886     *
 887     * @param string $function name of PHP function
 888     */
 889    function register_outputfilter($function)
 890    {
 891    $_name = (is_array($function)) ? $function[1] : $function;
 892        $this->_plugins['outputfilter'][$_name]
 893            = array($function, null, null, false);
 894    }
 895
 896    /**
 897     * Unregisters an outputfilter function
 898     *
 899     * @param string $function name of PHP function
 900     */
 901    function unregister_outputfilter($function)
 902    {
 903        unset($this->_plugins['outputfilter'][$function]);
 904    }
 905
 906    /**
 907     * load a filter of specified type and name
 908     *
 909     * @param string $type filter type
 910     * @param string $name filter name
 911     */
 912    function load_filter($type, $name)
 913    {
 914        switch ($type) {
 915            case 'output':
 916                $_params = array('plugins' => array(array($type . 'filter', $name, null, null, false)));
 917                require_once(SMARTY_CORE_DIR . 'core.load_plugins.php');
 918                smarty_core_load_plugins($_params, $this);
 919                break;
 920
 921            case 'pre':
 922            case 'post':
 923                if (!isset($this->_plugins[$type . 'filter'][$name]))
 924                    $this->_plugins[$type . 'filter'][$name] = false;
 925                break;
 926        }
 927    }
 928
 929    /**
 930     * clear cached content for the given template and cache id
 931     *
 932     * @param string $tpl_file name of template file
 933     * @param string $cache_id name of cache_id
 934     * @param string $compile_id name of compile_id
 935     * @param string $exp_time expiration time
 936     * @return boolean
 937     */
 938    function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)
 939    {
 940
 941        if (!isset($compile_id))
 942            $compile_id = $this->compile_id;
 943
 944        if (!isset($tpl_file))
 945            $compile_id = null;
 946
 947        $_auto_id = $this->_get_auto_id($cache_id, $compile_id);
 948
 949        if (!empty($this->cache_handler_func)) {
 950            return call_user_func_array($this->cache_handler_func,
 951                                  array('clear', &$this, &$dummy, $tpl_file, $cache_id, $compile_id, $exp_time));
 952        } else {
 953            $_params = array('auto_base' => $this->cache_dir,
 954                            'auto_source' => $tpl_file,
 955                            'auto_id' => $_auto_id,
 956                            'exp_time' => $exp_time);
 957            require_once(SMARTY_CORE_DIR . 'core.rm_auto.php');
 958            return smarty_core_rm_auto($_params, $this);
 959        }
 960
 961    }
 962
 963
 964    /**
 965     * clear the entire contents of cache (all templates)
 966     *
 967     * @param string $exp_time expire time
 968     * @return boolean results of {@link smarty_core_rm_auto()}
 969     */
 970    function clear_all_cache($exp_time = null)
 971    {
 972        return $this->clear_cache(null, null, null, $exp_time);
 973    }
 974
 975
 976    /**
 977     * test to see if valid cache exists for this template
 978     *
 979     * @param string $tpl_file name of template file
 980     * @param string $cache_id
 981     * @param string $compile_id
 982     * @return string|false results of {@link _read_cache_file()}
 983     */
 984    function is_cached($tpl_file, $cache_id = null, $compile_id = null)
 985    {
 986        if (!$this->caching)
 987            return false;
 988
 989        if (!isset($compile_id))
 990            $compile_id = $this->compile_id;
 991
 992        $_params = array(
 993            'tpl_file' => $tpl_file,
 994            'cache_id' => $cache_id,
 995            'compile_id' => $compile_id
 996        );
 997        require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php');
 998        return smarty_core_read_cache_file($_params, $this);
 999    }
1000
1001
1002    /**
1003     * clear all the assigned template variables.
1004     *
1005     */
1006    function clear_all_assign()
1007    {
1008        $this->_tpl_vars = array();
1009    }
1010
1011    /**
1012     * clears compiled version of specified template resource,
1013     * or all compiled template files if one is not specified.
1014     * This function is for advanced use only, not normally needed.
1015     *
1016     * @param string $tpl_file
1017     * @param string $compile_id
1018     * @param string $exp_time
1019     * @return boolean results of {@link smarty_core_rm_auto()}
1020     */
1021    function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null)
1022    {
1023        if (!isset($compile_id)) {
1024            $compile_id = $this->compile_id;
1025        }
1026        $_params = array('auto_base' => $this->compile_dir,
1027                        'auto_source' => $tpl_file,
1028                        'auto_id' => $compile_id,
1029                        'exp_time' => $exp_time,
1030                        'extensions' => array('.inc', '.php'));
1031        require_once(SMARTY_CORE_DIR . 'core.rm_auto.php');
1032        return smarty_core_rm_auto($_params, $this);
1033    }
1034
1035    /**
1036     * Checks whether requested template exists.
1037     *
1038     * @param string $tpl_file
1039     * @return boolean
1040     */
1041    function template_exists($tpl_file)
1042    {
1043        $_params = array('resource_name' => $tpl_file, 'quiet'=>true, 'get_source'=>false);
1044        return $this->_fetch_resource_info($_params);
1045    }
1046
1047    /**
1048     * Returns an array containing template variables
1049     *
1050     * @param string $name
1051     * @param string $type
1052     * @return array
1053     */
1054    function &get_template_vars($name=null)
1055    {
1056        if(!isset($name)) {
1057            return $this->_tpl_vars;
1058        } elseif(isset($this->_tpl_vars[$name])) {
1059            return $this->_tpl_vars[$name];
1060        } else {
1061            // var non-existant, return valid reference
1062            $_tmp = null;
1063            return $_tmp;   
1064        }
1065    }
1066
1067    /**
1068     * Returns an array containing config variables
1069     *
1070     * @param string $name
1071     * @param string $type
1072     * @return array
1073     */
1074    function &get_config_vars($name=null)
1075    {
1076        if(!isset($name) && is_array($this->_config[0])) {
1077            return $this->_config[0]['vars'];
1078        } else if(isset($this->_config[0]['vars'][$name])) {
1079            return $this->_config[0]['vars'][$name];
1080        } else {
1081            // var non-existant, return valid reference
1082            $_tmp = null;
1083            return $_tmp;
1084        }
1085    }
1086
1087    /**
1088     * trigger Smarty error
1089     *
1090     * @param string $error_msg
1091     * @param integer $error_type
1092     */
1093    function trigger_error($error_msg, $error_type = E_USER_WARNING)
1094    {
1095        trigger_error("Smarty error: $error_msg", $error_type);
1096    }
1097
1098
1099    /**
1100     * executes & displays the template results
1101     *
1102     * @param string $resource_name
1103     * @param string $cache_id
1104     * @param string $compile_id
1105     */
1106    function display($resource_name, $cache_id = null, $compile_id = null)
1107    {
1108        $this->fetch($resource_name, $cache_id, $compile_id, true);
1109    }
1110
1111    /**
1112     * executes & returns or displays the template results
1113     *
1114     * @param string $resource_name
1115     * @param string $cache_id
1116     * @param string $compile_id
1117     * @param boolean $display
1118     */
1119    function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false)
1120    {
1121        static $_cache_info = array();
1122        
1123        $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(isset($this->error_reporting)
1124               ? $this->error_reporting : error_reporting() & ~E_NOTICE);
1125
1126        if (!$this->debugging && $this->debugging_ctrl == 'URL') {
1127            $_query_string = $this->request_use_auto_globals ? $_SERVER['QUERY_STRING'] : $GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING'];
1128            if (@strstr($_query_string, $this->_smarty_debug_id)) {
1129                if (@strstr($_query_string, $this->_smarty_debug_id . '=on')) {
1130                    // enable debugging for this browser session
1131                    @setcookie('SMARTY_DEBUG', true);
1132                    $this->debugging = true;
1133                } elseif (@strstr($_query_string, $this->_smarty_debug_id . '=off')) {
1134                    // disable debugging for this browser session
1135                    @setcookie('SMARTY_DEBUG', false);
1136                    $this->debugging = false;
1137                } else {
1138                    // enable debugging for this page
1139                    $this->debugging = true;
1140                }
1141            } else {
1142                $this->debugging = (bool)($this->request_use_auto_globals ? @$_COOKIE['SMARTY_DEBUG'] : @$GLOBALS['HTTP_COOKIE_VARS']['SMARTY_DEBUG']);
1143            }
1144        }
1145
1146        if ($this->debugging) {
1147            // capture time for debugging info
1148            $_params = array();
1149            require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
1150            $_debug_start_time = smarty_core_get_microtime($_params, $this);
1151            $this->_smarty_debug_info[] = array('type'      => 'template',
1152                                                'filename'  => $resource_name,
1153                                                'depth'     => 0);
1154            $_included_tpls_idx = count($this->_smarty_debug_info) - 1;
1155        }
1156
1157        if (!isset($compile_id)) {
1158            $compile_id = $this->compile_id;
1159        }
1160
1161        $this->_compile_id = $compile_id;
1162        $this->_inclusion_depth = 0;
1163
1164        if ($this->caching) {
1165            // save old cache_info, initialize cache_info
1166            array_push($_cache_info, $this->_cache_info);
1167            $this->_cache_info = array();
1168            $_params = array(
1169                'tpl_file' => $resource_name,
1170                'cache_id' => $cache_id,
1171                'compile_id' => $compile_id,
1172                'results' => null
1173            );
1174            require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php');
1175            if (smarty_core_read_cache_file($_params, $this)) {
1176                $_smarty_results = $_params['results'];
1177                if (!empty($this->_cache_info['insert_tags'])) {
1178                    $_params = array('plugins' => $this->_cache_info['insert_tags']);
1179                    require_once(SMARTY_CORE_DIR . 'core.load_plugins.php');
1180                    smarty_core_load_plugins($_params, $this);
1181                    $_params = array('results' => $_smarty_results);
1182                    require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php');
1183                    $_smarty_results = smarty_core_process_cached_inserts($_params, $this);
1184                }
1185                if (!empty($this->_cache_info['cache_serials'])) {
1186                    $_params = array('results' => $_smarty_results);
1187                    require_once(SMARTY_CORE_DIR . 'core.process_compiled_include.php');
1188                    $_smarty_results = smarty_core_process_compiled_include($_params, $this);
1189                }
1190
1191
1192                if ($display) {
1193                    if ($this->debugging)
1194                    {
1195                        // capture time for debugging info
1196                        $_params = array();
1197                        require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
1198                        $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $_debug_start_time;
1199                        require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php');
1200                        $_smarty_results .= smarty_core_display_debug_console($_params, $this);
1201                    }
1202                    if ($this->cache_modified_check) {
1203                        $_server_vars = ($this->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS'];
1204                        $_last_modified_date = @substr($_server_vars['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_server_vars['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3);
1205                        $_gmt_mtime = gmdate('D, d M Y H:i:s', $this->_cache_info['timestamp']).' GMT';
1206                        if (@count($this->_cache_info['insert_tags']) == 0
1207                            && !$this->_cache_serials
1208                            && $_gmt_mtime == $_last_modified_date) {
1209                            if (php_sapi_name()=='cgi')
1210                                header('Status: 304 Not Modified');
1211                            else
1212                                header('HTTP/1.1 304 Not Modified');
1213
1214                        } else {
1215                            header('Last-Modified: '.$_gmt_mtime);
1216                            echo $_smarty_results;
1217                        }
1218                    } else {
1219                            echo $_smarty_results;
1220                    }
1221                    error_reporting($_smarty_old_error_level);
1222                    // restore initial cache_info
1223                    $this->_cache_info = array_pop($_cache_info);
1224                    return true;
1225                } else {
1226                    error_reporting($_smarty_old_error_level);
1227                    // restore initial cache_info
1228                    $this->_cache_info = array_pop($_cache_info);
1229                    return $_smarty_results;
1230                }
1231            } else {
1232                $this->_cache_info['template'][$resource_name] = true;
1233                if ($this->cache_modified_check && $display) {
1234                    header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT');
1235                }
1236            }
1237        }
1238
1239        // load filters that are marked as autoload
1240        if (count($this->autoload_filters)) {
1241            foreach ($this->autoload_filters as $_filter_type => $_filters) {
1242                foreach ($_filters as $_filter) {
1243                    $this->load_filter($_filter_type, $_filter);
1244                }
1245            }
1246        }
1247
1248        $_smarty_compile_path = $this->_get_compile_path($resource_name);
1249
1250        // if we just need to display the results, don't perform output
1251        // buffering - for speed
1252        $_cache_including = $this->_cache_including;
1253        $this->_cache_including = false;
1254        if ($display && !$this->caching && count($this->_plugins['outputfilter']) == 0) {
1255            if ($this->_is_compiled($resource_name, $_smarty_compile_path)
1256                    || $this->_compile_resource($resource_name, $_smarty_compile_path))
1257            {
1258                include($_smarty_compile_path);
1259            }
1260        } else {
1261            ob_start();
1262            if ($this->_is_compiled($resource_name, $_smarty_compile_path)
1263                    || $this->_compile_resource($resource_name, $_smarty_compile_path))
1264            {
1265                include($_smarty_compile_path);
1266            }
1267            $_smarty_results = ob_get_contents();
1268            ob_end_clean();
1269
1270            foreach ((array)$this->_plugins['outputfilter'] as $_output_filter) {
1271                $_smarty_results = call_user_func_array($_output_filter[0], array($_smarty_results, &$this));
1272            }
1273        }
1274
1275        if ($this->caching) {
1276            $_params = array('tpl_file' => $resource_name,
1277                        'cache_id' => $cache_id,
1278                        'compile_id' => $compile_id,
1279                        'results' => $_smarty_results);
1280            require_once(SMARTY_CORE_DIR . 'core.write_cache_file.php');
1281            smarty_core_write_cache_file($_params, $this);
1282            require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php');
1283            $_smarty_results = smarty_core_process_cached_inserts($_params, $this);
1284
1285            if ($this->_cache_serials) {
1286                // strip nocache-tags from output
1287                $_smarty_results = preg_replace('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!s'
1288                                                ,''
1289                                                ,$_smarty_results);
1290            }
1291            // restore initial cache_info
1292            $this->_cache_info = array_pop($_cache_info);
1293        }
1294        $this->_cache_including = $_cache_including;
1295
1296        if ($display) {
1297            if (isset($_smarty_results)) { echo $_smarty_results; }
1298            if ($this->debugging) {
1299                // capture time for debugging info
1300                $_params = array();
1301                require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
1302                $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = (smarty_core_get_microtime($_params, $this) - $_debug_start_time);
1303                require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php');
1304                echo smarty_core_display_debug_console($_params, $this);
1305            }
1306            error_reporting($_smarty_old_error_level);
1307            return;
1308        } else {
1309            error_reporting($_smarty_old_error_level);
1310            if (isset($_smarty_results)) { return $_smarty_results; }
1311        }
1312    }
1313
1314    /**
1315     * load configuration values
1316     *
1317     * @param string $file
1318     * @param string $section
1319     * @param string $scope
1320     */
1321    function config_load($file, $section = null, $scope = 'global')
1322    {
1323        require_once($this->_get_plugin_filepath('function', 'config_load'));
1324        smarty_function_config_load(array('file' => $file, 'section' => $section, 'scope' => $scope), $this);
1325    }
1326
1327    /**
1328     * return a reference to a registered object
1329     *
1330     * @param string $name
1331     * @return object
1332     */
1333    function &get_registered_object($name) {
1334        if (!isset($this->_reg_objects[$name]))
1335        $this->_trigger_fatal_error("'$name' is not a registered object");
1336
1337        if (!is_object($this->_reg_objects[$name][0]))
1338        $this->_trigger_fatal_error("registered '$name' is not an object");
1339
1340        return $this->_reg_objects[$name][0];
1341    }
1342
1343    /**
1344     * clear configuration values
1345     *
1346     * @param string $var
1347     */
1348    function clear_config($var = null)
1349    {
1350        if(!isset($var)) {
1351            // clear all values
1352            $this->_config = array(array('vars'  => array(),
1353                                         'files' => array()));
1354        } else {
1355            unset($this->_config[0]['vars'][$var]);
1356        }
1357    }
1358
1359    /**
1360     * get filepath of requested plugin
1361     *
1362     * @param string $type
1363     * @param string $name
1364     * @return string|false
1365     */
1366    function _get_plugin_filepath($type, $name)
1367    {
1368        $_params = array('type' => $type, 'name' => $name);
1369        require_once(SMARTY_CORE_DIR . 'core.assemble_plugin_filepath.php');
1370        return smarty_core_assemble_plugin_filepath($_params, $this);
1371    }
1372
1373   /**
1374     * test if resource needs compiling
1375     *
1376     * @param string $resource_name
1377     * @param string $compile_path
1378     * @return boolean
1379     */
1380    function _is_compiled($resource_name, $compile_path)
1381    {
1382        if (!$this->force_compile && file_exists($compile_path)) {
1383            if (!$this->compile_check) {
1384                // no need to check compiled file
1385                return true;
1386            } else {
1387                // get file source and timestamp
1388                $_params = array('resource_name' => $resource_name, 'get_source'=>false);
1389                if (!$this->_fetch_resource_info($_params)) {
1390                    return false;
1391                }
1392                if ($_params['resource_timestamp'] <= filemtime($compile_path)) {
1393                    // template not expired, no recompile
1394                    return true;
1395                } else {
1396                    // compile template
1397                    return false;
1398                }
1399            }
1400        } else {
1401            // compiled template does not exist, or forced compile
1402            return false;
1403        }
1404    }
1405
1406   /**
1407     * compile the template
1408     *
1409     * @param string $resource_name
1410     * @param string $compile_path
1411     * @return boolean
1412     */
1413    function _compile_resource($resource_name, $compile_path)
1414    {
1415
1416        $_params = array('resource_name' => $resource_name);
1417        if (!$this->_fetch_resource_info($_params)) {
1418            return false;
1419        }
1420
1421        $_source_content = $_params['source_content'];
1422        $_cache_include    = substr($compile_path, 0, -4).'.inc';
1423
1424        if ($this->_compile_source($resource_name, $_source_content, $_compiled_content, $_cache_include)) {
1425            // if a _cache_serial was set, we also have to write an include-file:
1426            if ($this->_cache_include_info) {
1427                require_once(SMARTY_CORE_DIR . 'core.write_compiled_include.php');
1428                smarty_core_write_compiled_include(array_merge($this->_cache_include_info, array('compiled_content'=>$_compiled_content, 'resource_name'=>$resource_name)),  $this);
1429            }
1430
1431            $_params = array('compile_path'=>$compile_path, 'compiled_content' => $_compiled_content);
1432            require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php');
1433            smarty_core_write_compiled_resource($_params, $this);
1434
1435            return true;
1436        } else {
1437            return false;
1438        }
1439
1440    }
1441
1442   /**
1443     * compile the given source
1444     *
1445     * @param string $resource_name
1446     * @param string $source_content
1447     * @param string $compiled_content
1448     * @return boolean
1449     */
1450    function _compile_source($resource_name, &$source_content, &$compiled_content, $cache_include_path=null)
1451    {
1452        if (file_exists(SMARTY_DIR . $this->compiler_file)) {
1453            require_once(SMARTY_DIR . $this->compiler_file);
1454        } else {
1455            // use include_path
1456            require_once($this->compiler_file);
1457        }
1458
1459
1460        $smarty_compiler = new $this->compiler_class;
1461
1462        $smarty_compiler->template_dir      = $this->template_dir;
1463        $smarty_compiler->compile_dir       = $this->compile_dir;
1464        $smarty_compiler->plugins_dir       = $this->plugins_dir;
1465        $smarty_compiler->config_dir        = $this->config_dir;
1466        $smarty_compiler->force_compile     = $this->force_compile;
1467        $smarty_compiler->caching           = $this->caching;
1468        $smarty_compiler->php_handling      = $this->php_handling;
1469        $smarty_compiler->left_delimiter    = $this->left_delimiter;
1470        $smarty_compiler->right_delimiter   = $this->right_delimiter;
1471        $smarty_compiler->_version          = $this->_version;
1472        $smarty_compiler->security          = $this->security;
1473        $smarty_compiler->secure_dir        = $this->secure_dir;
1474        $smarty_compiler->security_settings = $this->security_settings;
1475        $smarty_compiler->trusted_dir       = $this->trusted_dir;
1476        $smarty_compiler->use_sub_dirs      = $this->use_sub_dirs;
1477        $smarty_compiler->_reg_objects      = &$this->_reg_objects;
1478        $smarty_compiler->_plugins          = &$this->_plugins;
1479        $smarty_compiler->_tpl_vars         = &$this->_tpl_vars;
1480        $smarty_compiler->default_modifiers = $this->default_modifiers;
1481        $smarty_compiler->compile_id        = $this->_compile_id;
1482        $smarty_compiler->_config            = $this->_config;
1483        $smarty_compiler->request_use_auto_globals  = $this->request_use_auto_globals;
1484
1485        if (isset($cache_include_path) && isset($this->_cache_serials[$cache_include_path])) {
1486            $smarty_compiler->_cache_serial = $this->_cache_serials[$cache_include_path];
1487        }
1488        $smarty_compiler->_cache_include = $cache_include_path;
1489
1490
1491        $_results = $smarty_compiler->_compile_file($resource_name, $source_content, $compiled_content);
1492
1493        if ($smarty_compiler->_cache_serial) {
1494            $this->_cache_include_info = array(
1495                'cache_serial'=>$smarty_compiler->_cache_serial
1496                ,'plugins_code'=>$smarty_compiler->_plugins_code
1497                ,'include_file_path' => $cache_include_path);
1498
1499        } else {
1500            $this->_cache_include_info = null;
1501
1502        }
1503
1504        return $_results;
1505    }
1506
1507    /**
1508     * Get the compile path for this resource
1509     *
1510     * @param string $resource_name
1511     * @return string results of {@link _get_auto_filename()}
1512     */
1513    function _get_compile_path($resource_name)
1514    {
1515        return $this->_get_auto_filename($this->compile_dir, $resource_name,
1516                                         $this->_compile_id) . '.php';
1517    }
1518
1519    /**
1520     * fetch the template info. Gets timestamp, and source
1521     * if get_source is true
1522     *
1523     * sets $source_content to the source of the template, and
1524     * $resource_timestamp to its time stamp
1525     * @param string $resource_name
1526     * @param string $source_content
1527     * @param integer $resource_timestamp
1528     * @param boolean $get_source
1529     * @param boolean $quiet
1530     * @return boolean
1531     */
1532
1533    function _fetch_resource_info(&$params)
1534    {
1535        if(!isset($params['get_source'])) { $params['get_source'] = true; }
1536        if(!isset($params['quiet'])) { $params['quiet'] = false; }
1537
1538        $_return = false;
1539        $_params = array('resource_name' => $params['resource_name']) ;
1540        if (isset($params['resource_base_path']))
1541            $_params['resource_base_path'] = $params['resource_base_path'];
1542        else
1543            $_params['resource_base_path'] = $this->template_dir;
1544
1545        if ($this->_parse_resource_name($_params)) {
1546            $_resource_type = $_params['resource_type'];
1547            $_resource_name = $_params['resource_name'];
1548            switch ($_resource_type) {
1549                case 'file':
1550                    if ($params['get_source']) {
1551                        $params['source_content'] = $this->_read_file($_resource_name);
1552                    }
1553                    

Large files files are truncated, but you can click here to view the full file