Changeset 14


Ignore:
Timestamp:
Apr 4, 2007, 1:02:49 AM (12 years ago)
Author:
julian
Message:
  • Updated Smarty to version 2.6.18
Location:
trunk/modules/Template
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/Template/Config_File.class.php

    r2 r14  
    1919 *
    2020 * @link http://smarty.php.net/
    21  * @version 2.6.13
     21 * @version 2.6.18
    2222 * @copyright Copyright: 2001-2005 New Digital Group, Inc.
    2323 * @author Andrei Zmievski <andrei@php.net>
     
    2626 */
    2727
    28 /* $Id: Config_File.class.php,v 1.84 2006/01/18 19:02:52 mohrt Exp $ */
     28/* $Id: Config_File.class.php,v 1.88 2007/03/06 10:40:06 messju Exp $ */
    2929
    3030/**
  • trunk/modules/Template/Smarty.class.php

    r2 r14  
    2828 * @author Andrei Zmievski <andrei@php.net>
    2929 * @package Smarty
    30  * @version 2.6.13
     30 * @version 2.6.18
    3131 */
    3232
    33 /* $Id: Smarty.class.php,v 1.524 2006/01/18 19:02:52 mohrt Exp $ */
     33/* $Id: Smarty.class.php,v 1.528 2007/03/06 10:40:06 messju Exp $ */
    3434
    3535/**
     
    465465     * @var string
    466466     */
    467     var $_version              = '2.6.13';
     467    var $_version              = '2.6.18';
    468468
    469469    /**
  • trunk/modules/Template/Smarty_Compiler.class.php

    r2 r14  
    2222 * @author Monte Ohrt <monte at ohrt dot com>
    2323 * @author Andrei Zmievski <andrei@php.net>
    24  * @version 2.6.13
     24 * @version 2.6.18
    2525 * @copyright 2001-2005 New Digital Group, Inc.
    2626 * @package Smarty
    2727 */
    2828
    29 /* $Id: Smarty_Compiler.class.php,v 1.378 2006/01/29 18:11:22 messju Exp $ */
     29/* $Id: Smarty_Compiler.class.php,v 1.395 2007/03/06 10:40:06 messju Exp $ */
    3030
    3131/**
     
    279279        for ($curr_tb = 0, $for_max = count($text_blocks); $curr_tb < $for_max; $curr_tb++) {
    280280            /* match anything resembling php tags */
    281             if (preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)~is', $text_blocks[$curr_tb], $sp_match)) {
     281            if (preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?\s*php\s*[\"\']?)~is', $text_blocks[$curr_tb], $sp_match)) {
    282282                /* replace tags with placeholders to prevent recursive replacements */
    283283                $sp_match[1] = array_unique($sp_match[1]);
     
    305305            }
    306306        }
    307 
     307       
    308308        /* Compile the template tags into PHP code. */
    309309        $compiled_tags = array();
     
    350350        }
    351351        $compiled_content = '';
    352 
     352       
     353        $tag_guard = '%%%SMARTYOTG' . md5(uniqid(rand(), true)) . '%%%';
     354       
    353355        /* Interleave the compiled contents and text blocks to get the final result. */
    354356        for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) {
     
    357359                $text_blocks[$i+1] = preg_replace('~^(\r\n|\r|\n)~', '', $text_blocks[$i+1]);
    358360            }
    359             $compiled_content .= $text_blocks[$i].$compiled_tags[$i];
    360         }
    361         $compiled_content .= $text_blocks[$i];
    362 
     361            // replace legit PHP tags with placeholder
     362            $text_blocks[$i] = str_replace('<?', $tag_guard, $text_blocks[$i]);
     363            $compiled_tags[$i] = str_replace('<?', $tag_guard, $compiled_tags[$i]);
     364           
     365            $compiled_content .= $text_blocks[$i] . $compiled_tags[$i];
     366        }
     367        $compiled_content .= str_replace('<?', $tag_guard, $text_blocks[$i]);
     368
     369        // escape php tags created by interleaving
     370        $compiled_content = str_replace('<?', "<?php echo '<?' ?>\n", $compiled_content);
     371        $compiled_content = preg_replace("~(?<!')language\s*=\s*[\"\']?\s*php\s*[\"\']?~", "<?php echo 'language=php' ?>\n", $compiled_content);
     372
     373        // recover legit tags
     374        $compiled_content = str_replace($tag_guard, '<?', $compiled_content);
     375       
    363376        // remove \n from the end of the file, if any
    364377        if (strlen($compiled_content) && (substr($compiled_content, -1) == "\n") ) {
     
    369382            $compiled_content = "<?php \$this->_cache_serials['".$this->_cache_include."'] = '".$this->_cache_serial."'; ?>" . $compiled_content;
    370383        }
    371 
    372         // remove unnecessary close/open tags
    373         $compiled_content = preg_replace('~\?>\n?<\?php~', '', $compiled_content);
    374384
    375385        // run compiled template through postfilter functions
     
    881891                    $return = null;
    882892                    $postfix = '';
    883             } else {
    884                     $prefix = "\$_obj_block_content = ob_get_contents(); ob_end_clean(); ";
    885                     $return = "\$_block_repeat=false; \$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$_obj_block_content, \$this, \$_block_repeat)";
     893                } else {
     894                    $prefix = "\$_obj_block_content = ob_get_contents(); ob_end_clean(); \$_block_repeat=false;";
     895                    $return = "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$_obj_block_content, \$this, \$_block_repeat)";
    886896                    $postfix = "} array_pop(\$this->_tag_stack);";
    887897                }
     
    925935
    926936        if (empty($name)) {
    927             $this->_syntax_error("missing insert name", E_USER_ERROR, __FILE__, __LINE__);
     937            return $this->_syntax_error("missing insert name", E_USER_ERROR, __FILE__, __LINE__);
     938        }
     939       
     940        if (!preg_match('~^\w+$~', $name)) {
     941            return $this->_syntax_error("'insert: 'name' must be an insert function name", E_USER_ERROR, __FILE__, __LINE__);
    928942        }
    929943
     
    11581172        $item = $this->_dequote($attrs['item']);
    11591173        if (!preg_match('~^\w+$~', $item)) {
    1160             return $this->_syntax_error("'foreach: item' must be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__);
     1174            return $this->_syntax_error("'foreach: 'item' must be a variable name (literal string)", E_USER_ERROR, __FILE__, __LINE__);
    11611175        }
    11621176
     
    16691683        if(preg_match_all('~(?:\`(?<!\\\\)\$' . $this->_dvar_guts_regexp . '(?:' . $this->_obj_ext_regexp . ')*\`)|(?:(?<!\\\\)\$\w+(\[[a-zA-Z0-9]+\])*)~', $var_expr, $_match)) {
    16701684            $_match = $_match[0];
    1671             rsort($_match);
    1672             reset($_match);
     1685            $_replace = array();
    16731686            foreach($_match as $_var) {
    1674                 $var_expr = str_replace ($_var, '".(' . $this->_parse_var(str_replace('`','',$_var)) . ')."', $var_expr);
    1675             }
     1687                $_replace[$_var] = '".(' . $this->_parse_var(str_replace('`','',$_var)) . ')."';
     1688            }
     1689            $var_expr = strtr($var_expr, $_replace);
    16761690            $_return = preg_replace('~\.""|(?<!\\\\)""\.~', '', $var_expr);
    16771691        } else {
     
    22172231            || 0<$this->_cacheable_state++) return '';
    22182232        if (!isset($this->_cache_serial)) $this->_cache_serial = md5(uniqid('Smarty'));
    2219         $_ret = 'if ($this->caching && !$this->_cache_including) { echo \'{nocache:'
     2233        $_ret = 'if ($this->caching && !$this->_cache_including): echo \'{nocache:'
    22202234            . $this->_cache_serial . '#' . $this->_nocache_count
    2221             . '}\'; };';
     2235            . '}\'; endif;';
    22222236        return $_ret;
    22232237    }
     
    22342248        if ($_cacheable
    22352249            || --$this->_cacheable_state>0) return '';
    2236         return 'if ($this->caching && !$this->_cache_including) { echo \'{/nocache:'
     2250        return 'if ($this->caching && !$this->_cache_including): echo \'{/nocache:'
    22372251            . $this->_cache_serial . '#' . ($this->_nocache_count++)
    2238             . '}\'; };';
     2252            . '}\'; endif;';
    22392253    }
    22402254
  • trunk/modules/Template/debug.tpl

    r2 r14  
    11{* Smarty *}
     2{* debug.tpl, last updated version 2.1.0 *}
     3{assign_debug_info}
     4{capture assign=debug_output}
     5<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
     6<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
     7<head>
     8    <title>Smarty Debug Console</title>
     9{literal}
     10<style type="text/css">
     11/* <![CDATA[ */
     12body, h1, h2, td, th, p {
     13    font-family: sans-serif;
     14    font-weight: normal;
     15    font-size: 0.9em;
     16    margin: 1px;
     17    padding: 0;
     18}
    219
    3 {* debug.tpl, last updated version 2.0.1 *}
     20h1 {
     21    margin: 0;
     22    text-align: left;
     23    padding: 2px;
     24    background-color: #f0c040;
     25    color:  black;
     26    font-weight: bold;
     27    font-size: 1.2em;
     28 }
    429
    5 {assign_debug_info}
     30h2 {
     31    background-color: #9B410E;
     32    color: white;
     33    text-align: left;
     34    font-weight: bold;
     35    padding: 2px;
     36    border-top: 1px solid black;
     37}
    638
     39body {
     40    background: black;
     41}
     42
     43p, table, div {
     44    background: #f0ead8;
     45}
     46
     47p {
     48    margin: 0;
     49    font-style: italic;
     50    text-align: center;
     51}
     52
     53table {
     54    width: 100%;
     55}
     56
     57th, td {
     58    font-family: monospace;
     59    vertical-align: top;
     60    text-align: left;
     61    width: 50%;
     62}
     63
     64td {
     65    color: green;
     66}
     67
     68.odd {
     69    background-color: #eeeeee;
     70}
     71
     72.even {
     73    background-color: #fafafa;
     74}
     75
     76.exectime {
     77    font-size: 0.8em;
     78    font-style: italic;
     79}
     80
     81#table_assigned_vars th {
     82    color: blue;
     83}
     84
     85#table_config_vars th {
     86    color: maroon;
     87}
     88/* ]]> */
     89</style>
     90{/literal}
     91</head>
     92<body>
     93
     94<h1>Smarty Debug Console</h1>
     95
     96<h2>included templates &amp; config files (load time in seconds)</h2>
     97
     98<div>
     99{section name=templates loop=$_debug_tpls}
     100    {section name=indent loop=$_debug_tpls[templates].depth}&nbsp;&nbsp;&nbsp;{/section}
     101    <font color={if $_debug_tpls[templates].type eq "template"}brown{elseif $_debug_tpls[templates].type eq "insert"}black{else}green{/if}>
     102        {$_debug_tpls[templates].filename|escape:html}</font>
     103    {if isset($_debug_tpls[templates].exec_time)}
     104        <span class="exectime">
     105        ({$_debug_tpls[templates].exec_time|string_format:"%.5f"})
     106        {if %templates.index% eq 0}(total){/if}
     107        </span>
     108    {/if}
     109    <br />
     110{sectionelse}
     111    <p>no templates included</p>
     112{/section}
     113</div>
     114
     115<h2>assigned template variables</h2>
     116
     117<table id="table_assigned_vars">
     118    {section name=vars loop=$_debug_keys}
     119        <tr class="{cycle values="odd,even"}">
     120            <th>{ldelim}${$_debug_keys[vars]|escape:'html'}{rdelim}</th>
     121            <td>{$_debug_vals[vars]|@debug_print_var}</td></tr>
     122    {sectionelse}
     123        <tr><td><p>no template variables assigned</p></td></tr>
     124    {/section}
     125</table>
     126
     127<h2>assigned config file variables (outer template scope)</h2>
     128
     129<table id="table_config_vars">
     130    {section name=config_vars loop=$_debug_config_keys}
     131        <tr class="{cycle values="odd,even"}">
     132            <th>{ldelim}#{$_debug_config_keys[config_vars]|escape:'html'}#{rdelim}</th>
     133            <td>{$_debug_config_vals[config_vars]|@debug_print_var}</td></tr>
     134    {sectionelse}
     135        <tr><td><p>no config vars assigned</p></td></tr>
     136    {/section}
     137</table>
     138</body>
     139</html>
     140{/capture}
    7141{if isset($_smarty_debug_output) and $_smarty_debug_output eq "html"}
    8     <table border=0 width=100%>
    9     <tr bgcolor=#cccccc><th colspan=2>Smarty Debug Console</th></tr>
    10     <tr bgcolor=#cccccc><td colspan=2><b>included templates & config files (load time in seconds):</b></td></tr>
    11     {section name=templates loop=$_debug_tpls}
    12         <tr bgcolor={if %templates.index% is even}#eeeeee{else}#fafafa{/if}><td colspan=2><tt>{section name=indent loop=$_debug_tpls[templates].depth}&nbsp;&nbsp;&nbsp;{/section}<font color={if $_debug_tpls[templates].type eq "template"}brown{elseif $_debug_tpls[templates].type eq "insert"}black{else}green{/if}>{$_debug_tpls[templates].filename|escape:html}</font>{if isset($_debug_tpls[templates].exec_time)} <font size=-1><i>({$_debug_tpls[templates].exec_time|string_format:"%.5f"}){if %templates.index% eq 0} (total){/if}</i></font>{/if}</tt></td></tr>
    13     {sectionelse}
    14         <tr bgcolor=#eeeeee><td colspan=2><tt><i>no templates included</i></tt></td></tr>   
    15     {/section}
    16     <tr bgcolor=#cccccc><td colspan=2><b>assigned template variables:</b></td></tr>
    17     {section name=vars loop=$_debug_keys}
    18         <tr bgcolor={if %vars.index% is even}#eeeeee{else}#fafafa{/if}><td valign=top><tt><font color=blue>{ldelim}${$_debug_keys[vars]}{rdelim}</font></tt></td><td nowrap><tt><font color=green>{$_debug_vals[vars]|@debug_print_var}</font></tt></td></tr>
    19     {sectionelse}
    20         <tr bgcolor=#eeeeee><td colspan=2><tt><i>no template variables assigned</i></tt></td></tr> 
    21     {/section}
    22     <tr bgcolor=#cccccc><td colspan=2><b>assigned config file variables (outer template scope):</b></td></tr>
    23     {section name=config_vars loop=$_debug_config_keys}
    24         <tr bgcolor={if %config_vars.index% is even}#eeeeee{else}#fafafa{/if}><td valign=top><tt><font color=maroon>{ldelim}#{$_debug_config_keys[config_vars]}#{rdelim}</font></tt></td><td><tt><font color=green>{$_debug_config_vals[config_vars]|@debug_print_var}</font></tt></td></tr>
    25     {sectionelse}
    26         <tr bgcolor=#eeeeee><td colspan=2><tt><i>no config vars assigned</i></tt></td></tr>
    27     {/section}
    28     </table>
    29 </BODY></HTML>
     142    {$debug_output}
    30143{else}
    31 <SCRIPT language=javascript>
    32     if( self.name == '' ) {ldelim}
    33        var title = 'Console';
    34     {rdelim}
    35     else {ldelim}
    36        var title = 'Console_' + self.name;
    37     {rdelim}
    38     _smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes");
    39     _smarty_console.document.write("<HTML><HEAD><TITLE>Smarty Debug Console_"+self.name+"</TITLE></HEAD><BODY bgcolor=#ffffff>");
    40     _smarty_console.document.write("<table border=0 width=100%>");
    41     _smarty_console.document.write("<tr bgcolor=#cccccc><th colspan=2>Smarty Debug Console</th></tr>");
    42     _smarty_console.document.write("<tr bgcolor=#cccccc><td colspan=2><b>included templates & config files (load time in seconds):</b></td></tr>");
    43     {section name=templates loop=$_debug_tpls}
    44         _smarty_console.document.write("<tr bgcolor={if %templates.index% is even}#eeeeee{else}#fafafa{/if}><td colspan=2><tt>{section name=indent loop=$_debug_tpls[templates].depth}&nbsp;&nbsp;&nbsp;{/section}<font color={if $_debug_tpls[templates].type eq "template"}brown{elseif $_debug_tpls[templates].type eq "insert"}black{else}green{/if}>{$_debug_tpls[templates].filename|escape:html|escape:javascript}</font>{if isset($_debug_tpls[templates].exec_time)} <font size=-1><i>({$_debug_tpls[templates].exec_time|string_format:"%.5f"}){if %templates.index% eq 0} (total){/if}</i></font>{/if}</tt></td></tr>");
    45     {sectionelse}
    46         _smarty_console.document.write("<tr bgcolor=#eeeeee><td colspan=2><tt><i>no templates included</i></tt></td></tr>");   
    47     {/section}
    48     _smarty_console.document.write("<tr bgcolor=#cccccc><td colspan=2><b>assigned template variables:</b></td></tr>");
    49     {section name=vars loop=$_debug_keys}
    50         _smarty_console.document.write("<tr bgcolor={if %vars.index% is even}#eeeeee{else}#fafafa{/if}><td valign=top><tt><font color=blue>{ldelim}${$_debug_keys[vars]}{rdelim}</font></tt></td><td nowrap><tt><font color=green>{$_debug_vals[vars]|@debug_print_var|escape:javascript}</font></tt></td></tr>");
    51     {sectionelse}
    52         _smarty_console.document.write("<tr bgcolor=#eeeeee><td colspan=2><tt><i>no template variables assigned</i></tt></td></tr>");   
    53     {/section}
    54     _smarty_console.document.write("<tr bgcolor=#cccccc><td colspan=2><b>assigned config file variables (outer template scope):</b></td></tr>");
    55     {section name=config_vars loop=$_debug_config_keys}
    56         _smarty_console.document.write("<tr bgcolor={if %config_vars.index% is even}#eeeeee{else}#fafafa{/if}><td valign=top><tt><font color=maroon>{ldelim}#{$_debug_config_keys[config_vars]}#{rdelim}</font></tt></td><td><tt><font color=green>{$_debug_config_vals[config_vars]|@debug_print_var|escape:javascript}</font></tt></td></tr>");
    57     {sectionelse}
    58         _smarty_console.document.write("<tr bgcolor=#eeeeee><td colspan=2><tt><i>no config vars assigned</i></tt></td></tr>"); 
    59     {/section}
    60     _smarty_console.document.write("</table>");
    61     _smarty_console.document.write("</BODY></HTML>");
    62     _smarty_console.document.close();
    63 </SCRIPT>
     144<script type="text/javascript">
     145// <![CDATA[
     146    if ( self.name == '' ) {ldelim}
     147       var title = 'Console';
     148    {rdelim}
     149    else {ldelim}
     150       var title = 'Console_' + self.name;
     151    {rdelim}
     152    _smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes");
     153    _smarty_console.document.write('{$debug_output|escape:'javascript'}');
     154    _smarty_console.document.close();
     155// ]]>
     156</script>
    64157{/if}
  • trunk/modules/Template/internals/core.write_compiled_include.php

    r2 r14  
    1616function smarty_core_write_compiled_include($params, &$smarty)
    1717{
    18     $_tag_start = 'if \(\$this->caching && \!\$this->_cache_including\) \{ echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\'; \};';
    19     $_tag_end   = 'if \(\$this->caching && \!\$this->_cache_including\) \{ echo \'\{/nocache\:(\\2)#(\\3)\}\'; \};';
     18    $_tag_start = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\'; endif;';
     19    $_tag_end   = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{/nocache\:(\\2)#(\\3)\}\'; endif;';
    2020
    2121    preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us',
    2222                   $params['compiled_content'], $_match_source, PREG_SET_ORDER);
    23 
     23   
    2424    // no nocache-parts found: done
    2525    if (count($_match_source)==0) return;
  • trunk/modules/Template/internals/core.write_file.php

    r2 r14  
    2424    }
    2525
    26     // write to tmp file, then rename it to avoid
    27     // file locking race condition
     26    // write to tmp file, then rename it to avoid file locking race condition
    2827    $_tmp_file = tempnam($_dirname, 'wrt');
    2928
     
    3938    fclose($fd);
    4039
    41     // Delete the file if it allready exists (this is needed on Win,
    42     // because it cannot overwrite files with rename()
    43     if (file_exists($params['filename'])) {
     40    if (DIRECTORY_SEPARATOR == '\\' || !@rename($_tmp_file, $params['filename'])) {
     41        // On platforms and filesystems that cannot overwrite with rename()
     42        // delete the file before renaming it -- because windows always suffers
     43        // this, it is short-circuited to avoid the initial rename() attempt
    4444        @unlink($params['filename']);
     45        @rename($_tmp_file, $params['filename']);
    4546    }
    46     @rename($_tmp_file, $params['filename']);
    4747    @chmod($params['filename'], $smarty->_file_perms);
    4848
  • trunk/modules/Template/plugins/function.html_select_date.php

    r2 r14  
    2323 *           - 1.3.1 added support for choosing format for
    2424 *                day values (Marcus Bointon)
    25  *           - 1.3.2 suppport negative timestamps, force year
     25 *           - 1.3.2 support negative timestamps, force year
    2626 *             dropdown to include given date unless explicitly set (Monte)
     27 *           - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
     28 *             of 0000-00-00 dates (cybot, boots)
    2729 * @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date}
    2830 *      (Smarty online manual)
    29  * @version 1.3.2
     31 * @version 1.3.4
    3032 * @author Andrei Zmievski
    3133 * @author Monte Ohrt <monte at ohrt dot com>
     
    132134    }
    133135
    134     if(preg_match('!^-\d+$!',$time)) {
     136    if (preg_match('!^-\d+$!', $time)) {
    135137        // negative timestamp, use date()
    136         $time = date('Y-m-d',$time);
     138        $time = date('Y-m-d', $time);
    137139    }
    138140    // If $time is not in format yyyy-mm-dd
    139     if (!preg_match('/^\d{0,4}-\d{0,2}-\d{0,2}$/', $time)) {
     141    if (preg_match('/^(\d{0,4}-\d{0,2}-\d{0,2})/', $time, $found)) {
     142        $time = $found[1];
     143    } else {
    140144        // use smarty_make_timestamp to get an unix timestamp and
    141145        // strftime to make yyyy-mm-dd
     
    144148    // Now split this in pieces, which later can be used to set the select
    145149    $time = explode("-", $time);
    146    
     150
    147151    // make syntax "+N" or "-N" work with start_year and end_year
    148152    if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) {
     
    160164        }
    161165    }
    162     if (strlen($time[0]) > 0) { 
     166    if (strlen($time[0]) > 0) {
    163167        if ($start_year > $time[0] && !isset($params['start_year'])) {
    164168            // force start year to include given date if not explicitly set
     
    175179    $html_result = $month_result = $day_result = $year_result = "";
    176180
     181    $field_separator_count = -1;
    177182    if ($display_months) {
     183        $field_separator_count++;
    178184        $month_names = array();
    179185        $month_values = array();
     
    213219
    214220    if ($display_days) {
     221        $field_separator_count++;
    215222        $days = array();
    216223        if (isset($day_empty)) {
     
    248255
    249256    if ($display_years) {
     257        $field_separator_count++;
    250258        if (null !== $field_array){
    251259            $year_name = $field_array . '[' . $prefix . 'Year]';
     
    311319        }
    312320        // Add the field seperator
    313         if($i != 2) {
     321        if($i < $field_separator_count) {
    314322            $html_result .= $field_separator;
    315323        }
  • trunk/modules/Template/plugins/function.html_table.php

    r2 r14  
    1616 * Input:<br>
    1717 *         - loop = array to loop through
    18  *         - cols = number of columns
     18 *         - cols = number of columns, comma separated list of column names
     19 *                  or array of column names
    1920 *         - rows = number of rows
    2021 *         - table_attr = table attributes
     22 *         - th_attr = table heading attributes (arrays are cycled)
    2123 *         - tr_attr = table row attributes (arrays are cycled)
    2224 *         - td_attr = table cell attributes (arrays are cycled)
    2325 *         - trailpad = value to pad trailing cells with
     26 *         - caption = text for caption element
    2427 *         - vdir = vertical direction (default: "down", means top-to-bottom)
    2528 *         - hdir = horizontal direction (default: "right", means left-to-right)
     
    3235 * {table loop=$data}
    3336 * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
    34  * {table loop=$data cols=4 tr_attr=$colors}
     37 * {table loop=$data cols="first,second,third" tr_attr=$colors}
    3538 * </pre>
    3639 * @author   Monte Ohrt <monte at ohrt dot com>
    37  * @version  1.0
     40 * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
     41 * @author credit to boots <boots dot smarty at yahoo dot com>
     42 * @version  1.1
    3843 * @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table}
    3944 *          (Smarty online manual)
     
    4651    $table_attr = 'border="1"';
    4752    $tr_attr = '';
     53    $th_attr = '';
    4854    $td_attr = '';
    49     $cols = 3;
     55    $cols = $cols_count = 3;
    5056    $rows = 3;
    5157    $trailpad = '&nbsp;';
     
    5359    $hdir = 'right';
    5460    $inner = 'cols';
     61    $caption = '';
    5562
    5663    if (!isset($params['loop'])) {
     
    6673
    6774            case 'cols':
     75                if (is_array($_value) && !empty($_value)) {
     76                    $cols = $_value;
     77                    $cols_count = count($_value);
     78                } elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) {
     79                    $cols = explode(',', $_value);
     80                    $cols_count = count($cols);
     81                } elseif (!empty($_value)) {
     82                    $cols_count = (int)$_value;
     83                } else {
     84                    $cols_count = $cols;
     85                }
     86                break;
     87
    6888            case 'rows':
    6989                $$_key = (int)$_value;
     
    7595            case 'vdir':
    7696            case 'inner':
     97            case 'caption':
    7798                $$_key = (string)$_value;
    7899                break;
     
    80101            case 'tr_attr':
    81102            case 'td_attr':
     103            case 'th_attr':
    82104                $$_key = $_value;
    83105                break;
     
    88110    if (empty($params['rows'])) {
    89111        /* no rows specified */
    90         $rows = ceil($loop_count/$cols);
     112        $rows = ceil($loop_count/$cols_count);
    91113    } elseif (empty($params['cols'])) {
    92114        if (!empty($params['rows'])) {
    93115            /* no cols specified, but rows */
    94             $cols = ceil($loop_count/$rows);
     116            $cols_count = ceil($loop_count/$rows);
    95117        }
    96118    }
     
    98120    $output = "<table $table_attr>\n";
    99121
     122    if (!empty($caption)) {
     123        $output .= '<caption>' . $caption . "</caption>\n";
     124    }
     125
     126    if (is_array($cols)) {
     127        $cols = ($hdir == 'right') ? $cols : array_reverse($cols);
     128        $output .= "<thead><tr>\n";
     129
     130        for ($r=0; $r<$cols_count; $r++) {
     131            $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
     132            $output .= $cols[$r];
     133            $output .= "</th>\n";
     134        }
     135        $output .= "</tr></thead>\n";
     136    }
     137
     138    $output .= "<tbody>\n";
    100139    for ($r=0; $r<$rows; $r++) {
    101140        $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
    102         $rx =  ($vdir == 'down') ? $r*$cols : ($rows-1-$r)*$cols;
     141        $rx =  ($vdir == 'down') ? $r*$cols_count : ($rows-1-$r)*$cols_count;
    103142
    104         for ($c=0; $c<$cols; $c++) {
    105             $x =  ($hdir == 'right') ? $rx+$c : $rx+$cols-1-$c;
     143        for ($c=0; $c<$cols_count; $c++) {
     144            $x =  ($hdir == 'right') ? $rx+$c : $rx+$cols_count-1-$c;
    106145            if ($inner!='cols') {
    107146                /* shuffle x to loop over rows*/
    108                 $x = floor($x/$cols) + ($x%$cols)*$rows;
     147                $x = floor($x/$cols_count) + ($x%$cols_count)*$rows;
    109148            }
    110149
     
    117156        $output .= "</tr>\n";
    118157    }
     158    $output .= "</tbody>\n";
    119159    $output .= "</table>\n";
    120160   
  • trunk/modules/Template/plugins/function.mailto.php

    r2 r14  
    6363    // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
    6464    // so, don't encode it.
     65    $search = array('%40', '%2C');
     66    $replace  = array('@', ',');
    6567    $mail_parms = array();
    6668    foreach ($params as $var=>$value) {
     
    7072            case 'followupto':
    7173                if (!empty($value))
    72                     $mail_parms[] = $var.'='.str_replace('%40','@',rawurlencode($value));
     74                    $mail_parms[] = $var.'='.str_replace($search,$replace,rawurlencode($value));
    7375                break;
    7476               
  • trunk/modules/Template/plugins/modifier.capitalize.php

    r2 r14  
    2222{
    2323    smarty_modifier_capitalize_ucfirst(null, $uc_digits);
    24     return preg_replace_callback('!\b\w+\b!', 'smarty_modifier_capitalize_ucfirst', $string);
     24    return preg_replace_callback('!\'?\b\w(\w|\')*\b!', 'smarty_modifier_capitalize_ucfirst', $string);
    2525}
    2626
     
    3434    }
    3535   
    36     if(!preg_match('!\d!',$string[0]) || $_uc_digits)
     36    if(substr($string[0],0,1) != "'" && !preg_match("!\d!",$string[0]) || $_uc_digits)
    3737        return ucfirst($string[0]);
    3838    else
  • trunk/modules/Template/plugins/modifier.date_format.php

    r2 r14  
    99 * Include the {@link shared.make_timestamp.php} plugin
    1010 */
    11 require_once $smarty->_get_plugin_filepath('shared','make_timestamp');
     11require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp');
    1212/**
    1313 * Smarty date_format modifier plugin
     
    2929 * @uses smarty_make_timestamp()
    3030 */
    31 function smarty_modifier_date_format($string, $format="%b %e, %Y", $default_date=null)
     31function smarty_modifier_date_format($string, $format = '%b %e, %Y', $default_date = '')
    3232{
    33     if (substr(PHP_OS,0,3) == 'WIN') {
    34            $_win_from = array ('%e',  '%T',       '%D');
    35            $_win_to   = array ('%#d', '%H:%M:%S', '%m/%d/%y');
    36            $format = str_replace($_win_from, $_win_to, $format);
    37     }
    38     if($string != '') {
    39         return strftime($format, smarty_make_timestamp($string));
    40     } elseif (isset($default_date) && $default_date != '') {
    41         return strftime($format, smarty_make_timestamp($default_date));
     33    if ($string != '') {
     34        $timestamp = smarty_make_timestamp($string);
     35    } elseif ($default_date != '') {
     36        $timestamp = smarty_make_timestamp($default_date);
    4237    } else {
    4338        return;
    4439    }
     40    if (DIRECTORY_SEPARATOR == '\\') {
     41        $_win_from = array('%D',       '%h', '%n', '%r',          '%R',    '%t', '%T');
     42        $_win_to   = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
     43        if (strpos($format, '%e') !== false) {
     44            $_win_from[] = '%e';
     45            $_win_to[]   = sprintf('%\' 2d', date('j', $timestamp));
     46        }
     47        if (strpos($format, '%l') !== false) {
     48            $_win_from[] = '%l';
     49            $_win_to[]   = sprintf('%\' 2d', date('h', $timestamp));
     50        }
     51        $format = str_replace($_win_from, $_win_to, $format);
     52    }
     53    return strftime($format, $timestamp);
    4554}
    4655
  • trunk/modules/Template/plugins/modifier.debug_print_var.php

    r2 r14  
    2323function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
    2424{
    25     $_replace = array("\n"=>'<i>&#92;n</i>', "\r"=>'<i>&#92;r</i>', "\t"=>'<i>&#92;t</i>');
    26     if (is_array($var)) {
    27         $results = "<b>Array (".count($var).")</b>";
    28         foreach ($var as $curr_key => $curr_val) {
    29             $return = smarty_modifier_debug_print_var($curr_val, $depth+1, $length);
    30             $results .= "<br>".str_repeat('&nbsp;', $depth*2)."<b>".strtr($curr_key, $_replace)."</b> =&gt; $return";
    31         }
    32     } else if (is_object($var)) {
    33         $object_vars = get_object_vars($var);
    34         $results = "<b>".get_class($var)." Object (".count($object_vars).")</b>";
    35         foreach ($object_vars as $curr_key => $curr_val) {
    36             $return = smarty_modifier_debug_print_var($curr_val, $depth+1, $length);
    37             $results .= "<br>".str_repeat('&nbsp;', $depth*2)."<b>$curr_key</b> =&gt; $return";
    38         }
    39     } else if (is_resource($var)) {
    40         $results = '<i>'.(string)$var.'</i>';
    41     } else if (empty($var) && $var != "0") {
    42         $results = '<i>empty</i>';
    43     } else {
    44         if (strlen($var) > $length ) {
    45             $results = substr($var, 0, $length-3).'...';
    46         } else {
    47             $results = $var;
    48         }
    49         $results = htmlspecialchars($results);
    50         $results = strtr($results, $_replace);
     25    $_replace = array(
     26        "\n" => '<i>\n</i>',
     27        "\r" => '<i>\r</i>',
     28        "\t" => '<i>\t</i>'
     29    );
     30
     31    switch (gettype($var)) {
     32        case 'array' :
     33            $results = '<b>Array (' . count($var) . ')</b>';
     34            foreach ($var as $curr_key => $curr_val) {
     35                $results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
     36                    . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
     37                    . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
     38                    $depth--;
     39            }
     40            break;
     41        case 'object' :
     42            $object_vars = get_object_vars($var);
     43            $results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>';
     44            foreach ($object_vars as $curr_key => $curr_val) {
     45                $results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
     46                    . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
     47                    . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
     48                    $depth--;
     49            }
     50            break;
     51        case 'boolean' :
     52        case 'NULL' :
     53        case 'resource' :
     54            if (true === $var) {
     55                $results = 'true';
     56            } elseif (false === $var) {
     57                $results = 'false';
     58            } elseif (null === $var) {
     59                $results = 'null';
     60            } else {
     61                $results = htmlspecialchars((string) $var);
     62            }
     63            $results = '<i>' . $results . '</i>';
     64            break;
     65        case 'integer' :
     66        case 'float' :
     67            $results = htmlspecialchars((string) $var);
     68            break;
     69        case 'string' :
     70            $results = strtr($var, $_replace);
     71            if (strlen($var) > $length ) {
     72                $results = substr($var, 0, $length - 3) . '...';
     73            }
     74            $results = htmlspecialchars('"' . $results . '"');
     75            break;
     76        case 'unknown type' :
     77        default :
     78            $results = strtr((string) $var, $_replace);
     79            if (strlen($results) > $length ) {
     80                $results = substr($results, 0, $length - 3) . '...';
     81            }
     82            $results = htmlspecialchars($results);
    5183    }
     84
    5285    return $results;
    5386}
  • trunk/modules/Template/plugins/modifier.truncate.php

    r2 r14  
    3232
    3333    if (strlen($string) > $length) {
    34         $length -= strlen($etc);
     34        $length -= min($length, strlen($etc));
    3535        if (!$break_words && !$middle) {
    3636            $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
    3737        }
    3838        if(!$middle) {
    39             return substr($string, 0, $length).$etc;
     39            return substr($string, 0, $length) . $etc;
    4040        } else {
    4141            return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
  • trunk/modules/Template/plugins/outputfilter.trimwhitespace.php

    r2 r14  
    5050    $source = trim(preg_replace('/((?<!\?>)\n)[\s]+/m', '\1', $source));
    5151
    52     // replace script blocks
    53     smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:SCRIPT@@@",$_script_blocks, $source);
     52    // replace textarea blocks
     53    smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:TEXTAREA@@@",$_textarea_blocks, $source);
    5454
    5555    // replace pre blocks
    5656    smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:PRE@@@",$_pre_blocks, $source);
    5757
    58     // replace textarea blocks
    59     smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:TEXTAREA@@@",$_textarea_blocks, $source);
     58    // replace script blocks
     59    smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:SCRIPT@@@",$_script_blocks, $source);
    6060
    6161    return $source;
Note: See TracChangeset for help on using the changeset viewer.