示例#1
0
/**
 * Smarty {assign} function plugin
 *
 * Type:     function<br>
 * Name:     assign<br>
 * Purpose:  assign a value to a template variable
 *
 * @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign}
 *       (Smarty online manual)
 * @param array   Format: array('var' => variable name, 'value' => value to assign)
 * @param Smarty
 * @param unknown $params
 * @param unknown $smarty (reference)
 */
function smarty_function_assign($params, &$smarty)
{
    extract($params);
    if (empty($var)) {
        $smarty->trigger_error("assign: missing 'var' parameter");
        return;
    }
    if (!in_array('value', array_keys($params))) {
        $smarty->trigger_error("assign: missing 'value' parameter");
        return;
    }
    $smarty->assign($var, $value);
}
示例#2
0
/**
 * Smarty {math} function plugin
 *
 * Type:     function<br>
 * Name:     math<br>
 * Purpose:  handle math computations in template<br>
 *
 * @link http://smarty.php.net/manual/en/language.function.math.php {math}
 *          (Smarty online manual)
 * @param array
 * @param Smarty
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string
 */
function smarty_function_math($params, &$smarty)
{
    // be sure equation parameter is present
    if (empty($params['equation'])) {
        $smarty->trigger_error("math: missing equation parameter");
        return;
    }
    $equation = $params['equation'];
    // make sure parenthesis are balanced
    if (substr_count($equation, "(") != substr_count($equation, ")")) {
        $smarty->trigger_error("math: unbalanced parenthesis");
        return;
    }
    // match all vars in equation, make sure all are passed
    preg_match_all("!\\!(0x)([a-zA-Z][a-zA-Z0-9_]*)!", $equation, $match);
    $allowed_funcs = array('int', 'abs', 'ceil', 'cos', 'exp', 'floor', 'log', 'log10', 'max', 'min', 'pi', 'pow', 'rand', 'round', 'sin', 'sqrt', 'srand', 'tan');
    foreach ($match[2] as $curr_var) {
        if (!in_array($curr_var, array_keys($params)) && !in_array($curr_var, $allowed_funcs)) {
            $smarty->trigger_error("math: parameter {$curr_var} not passed as argument");
            return;
        }
    }
    foreach ($params as $key => $val) {
        if ($key != "equation" && $key != "format" && $key != "assign") {
            // make sure value is not empty
            if (strlen($val) == 0) {
                $smarty->trigger_error("math: parameter {$key} is empty");
                return;
            }
            if (!is_numeric($val)) {
                $smarty->trigger_error("math: parameter {$key}: is not numeric");
                return;
            }
            $equation = preg_replace("/\\b{$key}\\b/", $val, $equation);
        }
    }
    eval("\$smarty_math_result = " . $equation . ";");
    if (empty($params['format'])) {
        if (empty($params['assign'])) {
            return $smarty_math_result;
        } else {
            $smarty->assign($params['assign'], $smarty_math_result);
        }
    } else {
        if (empty($params['assign'])) {
            printf($params['format'], $smarty_math_result);
        } else {
            $smarty->assign($params['assign'], sprintf($params['format'], $smarty_math_result));
        }
    }
}
/**
 * write the compiled resource
 *
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return true
 */
function smarty_core_write_compiled_resource($params, &$smarty)
{
    if (!@is_writable($smarty->compile_dir)) {
        // compile_dir not writable, see if it exists
        if (!@is_dir($smarty->compile_dir)) {
            $smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR);
            return false;
        }
        $smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR);
        return false;
    }
    $_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true);
    require_once SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_file.php';
    smarty_core_write_file($_params, $smarty);
    touch($params['compile_path'], $params['resource_timestamp']);
    return true;
}
示例#4
0
/**
 * Smarty {cycle} function plugin
 *
 * Type:     function<br>
 * Name:     cycle<br>
 * Date:     May 3, 2002<br>
 * Purpose:  cycle through given values<br>
 * Input:
 *         - name = name of cycle (optional)
 *         - values = comma separated list of values to cycle,
 *                    or an array of values to cycle
 *                    (this can be left out for subsequent calls)
 *         - reset = boolean - resets given var to true
 *         - print = boolean - print var or not. default is true
 *         - advance = boolean - whether or not to advance the cycle
 *         - delimiter = the value delimiter, default is ","
 *         - assign = boolean, assigns to template var instead of
 *                    printed.
 *
 * Examples:<br>
 * <pre>
 * {cycle values="#eeeeee,#d0d0d0d"}
 * {cycle name=row values="one,two,three" reset=true}
 * {cycle name=row}
 * </pre>
 *
 * @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle}
 *       (Smarty online manual)
 * @author Monte Ohrt <*****@*****.**>
 * @author credit to Mark Priatel <*****@*****.**>
 * @author credit to Gerard <*****@*****.**>
 * @author credit to Jason Sweat <*****@*****.**>
 * @version  1.3
 * @param array
 * @param Smarty
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string|null
 */
function smarty_function_cycle($params, &$smarty)
{
    static $cycle_vars;
    extract($params);
    if (empty($name)) {
        $name = 'default';
    }
    if (!isset($print)) {
        $print = true;
    }
    if (!isset($advance)) {
        $advance = true;
    }
    if (!isset($reset)) {
        $reset = false;
    }
    if (!in_array('values', array_keys($params))) {
        if (!isset($cycle_vars[$name]['values'])) {
            $smarty->trigger_error("cycle: missing 'values' parameter");
            return;
        }
    } else {
        if (isset($cycle_vars[$name]['values']) && $cycle_vars[$name]['values'] != $values) {
            $cycle_vars[$name]['index'] = 0;
        }
        $cycle_vars[$name]['values'] = $values;
    }
    if (isset($delimiter)) {
        $cycle_vars[$name]['delimiter'] = $delimiter;
    } elseif (!isset($cycle_vars[$name]['delimiter'])) {
        $cycle_vars[$name]['delimiter'] = ',';
    }
    if (!is_array($cycle_vars[$name]['values'])) {
        $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']);
    } else {
        $cycle_array = $cycle_vars[$name]['values'];
    }
    if (!isset($cycle_vars[$name]['index']) || $reset) {
        $cycle_vars[$name]['index'] = 0;
    }
    if (isset($assign)) {
        $print = false;
        $smarty->assign($assign, $cycle_array[$cycle_vars[$name]['index']]);
    }
    if ($print) {
        $retval = $cycle_array[$cycle_vars[$name]['index']];
    } else {
        $retval = null;
    }
    if ($advance) {
        if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) {
            $cycle_vars[$name]['index'] = 0;
        } else {
            $cycle_vars[$name]['index']++;
        }
    }
    return $retval;
}
/**
 * Smarty {popup_init} function plugin
 *
 * Type:     function<br>
 * Name:     popup_init<br>
 * Purpose:  initialize overlib
 *
 * @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init}
 *          (Smarty online manual)
 * @param array
 * @param Smarty
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string
 */
function smarty_function_popup_init($params, &$smarty)
{
    $zindex = 1000;
    if (!empty($params['zindex'])) {
        $zindex = $params['zindex'];
    }
    if (!empty($params['src'])) {
        return '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:' . $zindex . ';"></div>' . "\n" . '<script type="text/javascript" language="JavaScript" src="' . $params['src'] . '"></script>' . "\n";
    } else {
        $smarty->trigger_error("popup_init: missing src parameter");
    }
}
/**
 *
 *
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return unknown
 */
function smarty_core_create_dir_structure($params, &$smarty)
{
    if (!file_exists($params['dir'])) {
        $_open_basedir_ini = ini_get('open_basedir');
        if (DIRECTORY_SEPARATOR == '/') {
            /* unix-style paths */
            $_dir = $params['dir'];
            $_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);
            $_new_dir = $_dir[0] == '/' ? '/' : getcwd() . '/';
            if ($_use_open_basedir = !empty($_open_basedir_ini)) {
                $_open_basedirs = explode(':', $_open_basedir_ini);
            }
        } else {
            /* other-style paths */
            $_dir = str_replace('\\', '/', $params['dir']);
            $_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);
            if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) {
                /* leading "//" for network volume, or "[letter]:/" for full path */
                $_new_dir = $_root_dir[1];
                /* remove drive-letter from _dir_parts */
                if (isset($_root_dir[3])) {
                    array_shift($_dir_parts);
                }
            } else {
                $_new_dir = str_replace('\\', '/', getcwd()) . '/';
            }
            if ($_use_open_basedir = !empty($_open_basedir_ini)) {
                $_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini));
            }
        }
        /* all paths use "/" only from here */
        foreach ($_dir_parts as $_dir_part) {
            $_new_dir .= $_dir_part;
            if ($_use_open_basedir) {
                // do not attempt to test or make directories outside of open_basedir
                $_make_new_dir = false;
                foreach ($_open_basedirs as $_open_basedir) {
                    if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) {
                        $_make_new_dir = true;
                        break;
                    }
                }
            } else {
                $_make_new_dir = true;
            }
            if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) {
                $smarty->trigger_error("problem creating directory '" . $_new_dir . "'");
                return false;
            }
            $_new_dir .= '/';
        }
    }
}
/**
 * Smarty {html_options} function plugin
 *
 * Type:     function<br>
 * Name:     html_options<br>
 * Input:<br>
 *           - name       (optional) - string default "select"
 *           - values     (required if no options supplied) - array
 *           - options    (required if no values supplied) - associative array
 *           - selected   (optional) - string default not set
 *           - output     (required if not options supplied) - array
 * Purpose:  Prints the list of <option> tags generated from
 *           the passed parameters
 *
 * @link http://smarty.php.net/manual/en/language.function.html.options.php {html_image}
 *      (Smarty online manual)
 * @param array
 * @param Smarty
 * @uses smarty_function_escape_special_chars()
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string
 */
function smarty_function_html_options($params, &$smarty)
{
    require_once $smarty->_get_plugin_filepath('shared', 'escape_special_chars');
    $name = null;
    $values = null;
    $options = null;
    $selected = array();
    $output = null;
    $extra = '';
    foreach ($params as $_key => $_val) {
        switch ($_key) {
            case 'name':
                ${$_key} = (string) $_val;
                break;
            case 'options':
                ${$_key} = (array) $_val;
                break;
            case 'selected':
            case 'values':
            case 'output':
                ${$_key} = array_values((array) $_val);
                break;
            default:
                if (!is_array($_val)) {
                    $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
                } else {
                    $smarty->trigger_error("html_options: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
                }
                break;
        }
    }
    if (!isset($options) && !isset($values)) {
        return '';
    }
    /* raise error here? */
    $_html_result = '';
    if (is_array($options)) {
        foreach ($options as $_key => $_val) {
            $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected);
        }
    } else {
        foreach ((array) $values as $_i => $_key) {
            $_val = isset($output[$_i]) ? $output[$_i] : '';
            $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected);
        }
    }
    if (!empty($name)) {
        $_html_result = '<select name="' . $name . '"' . $extra . '>' . "\n" . $_html_result . '</select>' . "\n";
    }
    return $_html_result;
}
/**
 *
 *
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return unknown
 */
function smarty_core_write_cache_file($params, &$smarty)
{
    // put timestamp in cache header
    $smarty->_cache_info['timestamp'] = time();
    if ($smarty->cache_lifetime > -1) {
        // expiration set
        $smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime;
    } else {
        // cache will never expire
        $smarty->_cache_info['expires'] = -1;
    }
    // collapse {nocache...}-tags
    $params['results'] = preg_replace('!((\\{nocache\\:([0-9a-f]{32})#(\\d+)\\})' . '.*' . '{/nocache\\:\\3#\\4\\})!Us', '\\2', $params['results']);
    $smarty->_cache_info['cache_serials'] = $smarty->_cache_serials;
    // prepend the cache header info into cache file
    $params['results'] = serialize($smarty->_cache_info) . "\n" . $params['results'];
    if (!empty($smarty->cache_handler_func)) {
        // use cache_handler function
        call_user_func_array($smarty->cache_handler_func, array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null));
    } else {
        // use local cache file
        if (!@is_writable($smarty->cache_dir)) {
            // cache_dir not writable, see if it exists
            if (!@is_dir($smarty->cache_dir)) {
                $smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR);
                return false;
            }
            $smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR);
            return false;
        }
        $_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']);
        $_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id);
        $_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true);
        require_once SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.write_file.php';
        smarty_core_write_file($_params, $smarty);
        return true;
    }
}
/**
 * Smarty {html_table} function plugin
 *
 * Type:     function<br>
 * Name:     html_table<br>
 * Date:     Feb 17, 2003<br>
 * Purpose:  make an html table from an array of data<br>
 * Input:<br>
 *         - loop = array to loop through
 *         - cols = number of columns
 *         - rows = number of rows
 *         - table_attr = table attributes
 *         - tr_attr = table row attributes (arrays are cycled)
 *         - td_attr = table cell attributes (arrays are cycled)
 *         - trailpad = value to pad trailing cells with
 *         - vdir = vertical direction (default: "down", means top-to-bottom)
 *         - hdir = horizontal direction (default: "right", means left-to-right)
 *         - inner = inner loop (default "cols": print $loop line by line,
 *                   $loop will be printed column by column otherwise)
 *
 *
 * Examples:
 * <pre>
 * {table loop=$data}
 * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
 * {table loop=$data cols=4 tr_attr=$colors}
 * </pre>
 *
 * @author   Monte Ohrt <*****@*****.**>
 * @version  1.0
 * @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table}
 *          (Smarty online manual)
 * @param array
 * @param Smarty
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string
 */
function smarty_function_html_table($params, &$smarty)
{
    $table_attr = 'border="1"';
    $tr_attr = '';
    $td_attr = '';
    $cols = 3;
    $rows = 3;
    $trailpad = '&nbsp;';
    $vdir = 'down';
    $hdir = 'right';
    $inner = 'cols';
    extract($params);
    if (!isset($loop)) {
        $smarty->trigger_error("html_table: missing 'loop' parameter");
        return;
    }
    $loop_count = count($loop);
    if (empty($params['rows'])) {
        /* no rows specified */
        $rows = ceil($loop_count / $cols);
    } elseif (empty($params['cols'])) {
        if (!empty($params['rows'])) {
            /* no cols specified, but rows */
            $cols = ceil($loop_count / $rows);
        }
    }
    $output = "<table {$table_attr}>\n";
    for ($r = 0; $r < $rows; $r++) {
        $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
        $rx = $vdir == 'down' ? $r * $cols : ($rows - 1 - $r) * $cols;
        for ($c = 0; $c < $cols; $c++) {
            $x = $hdir == 'right' ? $rx + $c : $rx + $cols - 1 - $c;
            if ($inner != 'cols') {
                /* shuffle x to loop over rows*/
                $x = floor($x / $cols) + $x % $cols * $rows;
            }
            if ($x < $loop_count) {
                $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n";
            } else {
                $output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">{$trailpad}</td>\n";
            }
        }
        $output .= "</tr>\n";
    }
    $output .= "</table>\n";
    return $output;
}
示例#10
0
/**
 * Smarty {eval} function plugin
 *
 * Type:     function<br>
 * Name:     eval<br>
 * Purpose:  evaluate a template variable as a template<br>
 *
 * @link http://smarty.php.net/manual/en/language.function.eval.php {eval}
 *       (Smarty online manual)
 * @param array
 * @param Smarty
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return unknown
 */
function smarty_function_eval($params, &$smarty)
{
    if (!isset($params['var'])) {
        $smarty->trigger_error("eval: missing 'var' parameter");
        return;
    }
    if ($params['var'] == '') {
        return;
    }
    $smarty->_compile_source('evaluated template', $params['var'], $_var_compiled);
    ob_start();
    $smarty->_eval('?>' . $_var_compiled);
    $_contents = ob_get_contents();
    ob_end_clean();
    if (!empty($params['assign'])) {
        $smarty->assign($params['assign'], $_contents);
    } else {
        return $_contents;
    }
}
示例#11
0
/**
 *
 *
 * @param unknown $params
 * @param unknown $bBlog  (reference)
 * @return unknown
 */
function smarty_function_getpost($params, &$bBlog)
{
    $ar = array();
    // If "assign" is not set... we'll establish a default.
    if ($params['assign'] == '') {
        $params['assign'] = 'post';
    }
    if ($params['postid'] == '') {
        $bBlog->trigger_error('postid is a required parameter');
        return '';
    }
    $q = $bBlog->make_post_query(array("postid" => $params['postid']));
    $ar['posts'] = $bBlog->get_posts($q);
    // No posts.
    if (!is_array($ar['posts'])) {
        return false;
    }
    $ar['posts'][0]['newday'] = 'yes';
    $ar['posts'][0]['newmonth'] = 'yes';
    $bBlog->assign($params['assign'], $ar['posts'][0]);
    return '';
}
示例#12
0
/**
 * Smarty {mailto} function plugin
 *
 * Type:     function<br>
 * Name:     mailto<br>
 * Date:     May 21, 2002
 * Purpose:  automate mailto address link creation, and optionally
 *           encode them.<br>
 * Input:<br>
 *         - address = e-mail address
 *         - text = (optional) text to display, default is address
 *         - encode = (optional) can be one of:
 *                * none : no encoding (default)
 *                * javascript : encode with javascript
 *                * hex : encode with hexidecimal (no javascript)
 *         - cc = (optional) address(es) to carbon copy
 *         - bcc = (optional) address(es) to blind carbon copy
 *         - subject = (optional) e-mail subject
 *         - newsgroups = (optional) newsgroup(s) to post to
 *         - followupto = (optional) address(es) to follow up to
 *         - extra = (optional) extra tags for the href link
 *
 * Examples:
 * <pre>
 * {mailto address="*****@*****.**"}
 * {mailto address="*****@*****.**" encode="javascript"}
 * {mailto address="*****@*****.**" encode="hex"}
 * {mailto address="*****@*****.**" subject="Hello to you!"}
 * {mailto address="*****@*****.**" cc="you@domain.com,they@domain.com"}
 * {mailto address="*****@*****.**" extra='class="mailto"'}
 * </pre>
 *
 * @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
 *          (Smarty online manual)
 * @version  1.2
 * @author  Monte Ohrt <*****@*****.**>
 * @author credits to Jason Sweat (added cc, bcc and subject functionality)
 * @param array
 * @param Smarty
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string
 */
function smarty_function_mailto($params, &$smarty)
{
    $extra = '';
    extract($params);
    if (empty($address)) {
        $smarty->trigger_error("mailto: missing 'address' parameter");
        return;
    }
    if (empty($text)) {
        $text = $address;
    }
    // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
    // so, don't encode it.
    $mail_parms = array();
    if (!empty($cc)) {
        $mail_parms[] = 'cc=' . str_replace('%40', '@', rawurlencode($cc));
    }
    if (!empty($bcc)) {
        $mail_parms[] = 'bcc=' . str_replace('%40', '@', rawurlencode($bcc));
    }
    if (!empty($subject)) {
        $mail_parms[] = 'subject=' . rawurlencode($subject);
    }
    if (!empty($newsgroups)) {
        $mail_parms[] = 'newsgroups=' . rawurlencode($newsgroups);
    }
    if (!empty($followupto)) {
        $mail_parms[] = 'followupto=' . str_replace('%40', '@', rawurlencode($followupto));
    }
    $mail_parm_vals = '';
    for ($i = 0; $i < count($mail_parms); $i++) {
        $mail_parm_vals .= 0 == $i ? '?' : '&';
        $mail_parm_vals .= $mail_parms[$i];
    }
    $address .= $mail_parm_vals;
    if (empty($encode)) {
        $encode = 'none';
    } elseif (!in_array($encode, array('javascript', 'hex', 'none'))) {
        $smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex");
        return;
    }
    if ($encode == 'javascript') {
        $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
        for ($x = 0; $x < strlen($string); $x++) {
            $js_encode .= '%' . bin2hex($string[$x]);
        }
        return '<script type="text/javascript" language="javascript">eval(unescape(\'' . $js_encode . '\'))</script>';
    } elseif ($encode == 'hex') {
        preg_match('!^(.*)(\\?.*)$!', $address, $match);
        if (!empty($match[2])) {
            $smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.");
            return;
        }
        for ($x = 0; $x < strlen($address); $x++) {
            if (preg_match('!\\w!', $address[$x])) {
                $address_encode .= '%' . bin2hex($address[$x]);
            } else {
                $address_encode .= $address[$x];
            }
        }
        for ($x = 0; $x < strlen($text); $x++) {
            $text_encode .= '&#x' . bin2hex($text[$x]) . ';';
        }
        return '<a href="mailto:' . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>';
    } else {
        // no encoding
        return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
    }
}
/**
 * Smarty {html_radios} function plugin
 *
 * File:       function.html_radios.php<br>
 * Type:       function<br>
 * Name:       html_radios<br>
 * Date:       24.Feb.2003<br>
 * Purpose:    Prints out a list of radio input types<br>
 * Input:<br>
 *           - name       (optional) - string default "radio"
 *           - values     (required) - array
 *           - options    (optional) - associative array
 *           - checked    (optional) - array default not set
 *           - separator  (optional) - ie <br> or &nbsp;
 *           - output     (optional) - without this one the buttons don't have names
 * Examples:
 * <pre>
 * {html_radios values=$ids output=$names}
 * {html_radios values=$ids name='box' separator='<br>' output=$names}
 * {html_radios values=$ids checked=$checked separator='<br>' output=$names}
 * </pre>
 *
 * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
 *      (Smarty online manual)
 * @author     Christopher Kvarme <*****@*****.**>
 * @author credits to Monte Ohrt <*****@*****.**>
 * @version    1.0
 * @param array
 * @param Smarty
 * @uses smarty_function_escape_special_chars()
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string
 */
function smarty_function_html_radios($params, &$smarty)
{
    require_once $smarty->_get_plugin_filepath('shared', 'escape_special_chars');
    $name = 'radio';
    $values = null;
    $options = null;
    $selected = null;
    $separator = '';
    $labels = true;
    $output = null;
    $extra = '';
    foreach ($params as $_key => $_val) {
        switch ($_key) {
            case 'name':
            case 'separator':
                ${$_key} = (string) $_val;
                break;
            case 'checked':
            case 'selected':
                if (is_array($_val)) {
                    $smarty->trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
                } else {
                    $selected = (string) $_val;
                }
                break;
            case 'labels':
                ${$_key} = (bool) $_val;
                break;
            case 'options':
                ${$_key} = (array) $_val;
                break;
            case 'values':
            case 'output':
                ${$_key} = array_values((array) $_val);
                break;
            case 'radios':
                $smarty->trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING);
                $options = (array) $_val;
                break;
            default:
                if (!is_array($_val)) {
                    $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
                } else {
                    $smarty->trigger_error("html_radios: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
                }
                break;
        }
    }
    if (!isset($options) && !isset($values)) {
        return '';
    }
    /* raise error here? */
    $_html_result = '';
    if (isset($options) && is_array($options)) {
        foreach ((array) $options as $_key => $_val) {
            $_html_result .= smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
        }
    } else {
        foreach ((array) $values as $_i => $_key) {
            $_val = isset($output[$_i]) ? $output[$_i] : '';
            $_html_result .= smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
        }
    }
    return $_html_result;
}
示例#14
0
/**
 * Smarty {html_image} function plugin
 *
 * Type:     function<br>
 * Name:     html_image<br>
 * Date:     Feb 24, 2003<br>
 * Purpose:  format HTML tags for the image<br>
 * Input:<br>
 *         - file = file (and path) of image (required)
 *         - border = border width (optional, default 0)
 *         - height = image height (optional, default actual height)
 *         - image =image width (optional, default actual width)
 *         - basedir = base directory for absolute paths, default
 *                     is environment variable DOCUMENT_ROOT
 *
 * Examples: {html_image file="images/masthead.gif"}
 * Output:   <img src="images/masthead.gif" border=0 width=400 height=23>
 *
 * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image}
 *      (Smarty online manual)
 * @author   Monte Ohrt <*****@*****.**>
 * @author credits to Duda <*****@*****.**> - wrote first image function
 *           in repository, helped with lots of functionality
 * @version  1.0
 * @param array
 * @param Smarty
 * @uses smarty_function_escape_special_chars()
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string
 */
function smarty_function_html_image($params, &$smarty)
{
    require_once $smarty->_get_plugin_filepath('shared', 'escape_special_chars');
    $alt = '';
    $file = '';
    $border = 0;
    $height = '';
    $width = '';
    $extra = '';
    $prefix = '';
    $suffix = '';
    $basedir = isset($GLOBALS['HTTP_SERVER_VARS']['DOCUMENT_ROOT']) ? $GLOBALS['HTTP_SERVER_VARS']['DOCUMENT_ROOT'] : '';
    if (strstr($GLOBALS['HTTP_SERVER_VARS']['HTTP_USER_AGENT'], 'Mac')) {
        $dpi_default = 72;
    } else {
        $dpi_default = 96;
    }
    foreach ($params as $_key => $_val) {
        switch ($_key) {
            case 'file':
            case 'border':
            case 'height':
            case 'width':
            case 'dpi':
            case 'basedir':
                ${$_key} = $_val;
                break;
            case 'alt':
                if (!is_array($_val)) {
                    ${$_key} = smarty_function_escape_special_chars($_val);
                } else {
                    $smarty->trigger_error("html_image: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
                }
                break;
            case 'link':
            case 'href':
                $prefix = '<a href="' . $_val . '">';
                $suffix = '</a>';
                break;
            default:
                if (!is_array($_val)) {
                    $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
                } else {
                    $smarty->trigger_error("html_image: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
                }
                break;
        }
    }
    if (empty($file)) {
        $smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE);
        return;
    }
    if (substr($file, 0, 1) == '/') {
        $_image_path = $basedir . $file;
    } else {
        $_image_path = $file;
    }
    if (!isset($params['width']) || !isset($params['height'])) {
        if (!($_image_data = @getimagesize($_image_path))) {
            if (!file_exists($_image_path)) {
                $smarty->trigger_error("html_image: unable to find '{$_image_path}'", E_USER_NOTICE);
                return;
            } else {
                if (!is_readable($_image_path)) {
                    $smarty->trigger_error("html_image: unable to read '{$_image_path}'", E_USER_NOTICE);
                    return;
                } else {
                    $smarty->trigger_error("html_image: '{$_image_path}' is not a valid image file", E_USER_NOTICE);
                    return;
                }
            }
        }
        $_params = array('resource_type' => 'file', 'resource_name' => $_image_path);
        require_once SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.is_secure.php';
        if (!$smarty->security && !smarty_core_is_secure($_params, $smarty)) {
            $smarty->trigger_error("html_image: (secure) '{$_image_path}' not in secure directory", E_USER_NOTICE);
            return;
        }
        if (!isset($params['width'])) {
            $width = $_image_data[0];
        }
        if (!isset($params['height'])) {
            $height = $_image_data[1];
        }
    }
    if (isset($params['dpi'])) {
        $_resize = $dpi_default / $params['dpi'];
        $width = round($width * $_resize);
        $height = round($height * $_resize);
    }
    return $prefix . '<img src="' . $file . '" alt="' . $alt . '" border="' . $border . '" width="' . $width . '" height="' . $height . '"' . $extra . ' />' . $suffix;
}
示例#15
0
/**
 *
 *
 * @param unknown $params
 * @param unknown $bBlog  (reference)
 * @return unknown
 */
function smarty_function_getposts($params, &$bBlog)
{
    $ar = array();
    $opt = array();
    if (is_numeric($params['postid']) && $params['postid'] > 0) {
        $postid = $params['postid'];
    } else {
        $postid = FALSE;
    }
    // If "assign" is not set... we'll establish a default.
    if ($params['assign'] == '') {
        if ($postid) {
            $params['assign'] = 'post';
        } else {
            $params['assign'] = 'posts';
        }
    }
    if ($postid) {
        //we've been given a post id so we'll just get it and get outta here.
        $q = $bBlog->make_post_query(array("postid" => $params['postid']));
        $ar['posts'] = $bBlog->get_posts($q);
        // No post.
        if (!is_array($ar['posts'])) {
            return false;
        }
        $ar['posts'][0]['newday'] = 'yes';
        $ar['posts'][0]['newmonth'] = 'yes';
        $bBlog->assign($params['assign'], $ar['posts'][0]);
        return '';
        // so if postid is given this is the last line processed
    }
    // If "archive" is set, order them ASCENDING by posttime.
    if ($params['archive']) {
        $opt['order'] = " ORDER BY posttime ";
    }
    // If num is set, we'll only get that many results in return
    if (is_numeric($params['num'])) {
        $opt['num'] = $params['num'];
    }
    // If skip is set, we'll skip that many results
    if (is_numeric($params['skip'])) {
        $opt['skip'] = $params['skip'];
    }
    if ($params['section'] != '') {
        $opt['sectionid'] = $bBlog->sect_by_name[$params['section']];
    }
    if ($bBlog->show_section) {
        $opt['sectionid'] = $bBlog->show_section;
    }
    if (is_numeric($params['year'])) {
        if (strlen($params['year']) != 4) {
            $bBlog->trigger_error('getposts: year parameter requires a 4 digit month');
            return '';
        }
        $opt['year'] = $params['year'];
    }
    if (is_numeric($params['month'])) {
        if (strlen($params['month']) != 2) {
            $bBlog->trigger_error('getposts: month parameter requires a 2 digit month');
            return '';
        }
        $opt['month'] = $params['month'];
    }
    if (is_numeric($params['day'])) {
        if (strlen($params['day']) != 2) {
            $bBlog->trigger_error('getposts: day parameter requires a 2 digit day');
            return '';
        }
        $opt['day'] = $params['day'];
    }
    if (is_numeric($params['hour'])) {
        if (strlen($params['hour']) != 2) {
            $bBlog->trigger_error('getposts: hour parameter requires a 2 digit hour');
            return '';
        }
        $opt['hour'] = $params['hour'];
    }
    if (is_numeric($params['minute'])) {
        if (strlen($params['minute']) != 2) {
            $bBlog->trigger_error('getposts: minute parameter requires a 2 digit minute');
            return '';
        }
        $opt['minute'] = $params['minute'];
    }
    if (is_numeric($params['second'])) {
        if (strlen($params['second']) != 2) {
            $bBlog->trigger_error('getposts: second parameter requires a 2 digit second');
            return '';
        }
        $opt['second'] = $params['second'];
    }
    $opt['home'] = $params['home'];
    $q = $bBlog->make_post_query($opt);
    $ar['posts'] = $bBlog->get_posts($q);
    // No posts.
    if (!is_array($ar['posts'])) {
        return '';
    }
    $lastmonth = 0;
    $lastdate = 0;
    foreach ($ar['posts'] as $key => $value) {
        /* check if new day  - used by block.newday.php */
        if (date('Ymd', $ar['posts'][$key]['posttime']) != $lastdate) {
            $ar['posts'][$key]['newday'] = TRUE;
        }
        $lastdate = date('Ymd', $ar['posts'][$key]['posttime']);
        /* check if new month - use by block.newmonth.php */
        if (date('Fy', $ar['posts'][$key]['posttime']) != $lastmonth) {
            $ar['posts'][$key]['newmonth'] = TRUE;
        }
        $lastmonth = date('Fy', $ar['posts'][$key]['posttime']);
    }
    $bBlog->assign($params['assign'], $ar['posts']);
    return '';
}
/**
 *
 *
 * @param unknown $params
 * @param unknown $bBlog  (reference)
 * @return unknown
 */
function smarty_function_getarchiveposts($params, &$bBlog)
{
    $ar = array();
    $opt = array();
    // If "assign" is not set... we'll establish a default.
    if ($params['assign'] == '') {
        $params['assign'] = 'posts';
    }
    // If "archive" is set, order them ASCENDING by posttime.
    if ($params['archive']) {
        $opt['order'] = " ORDER BY posttime ";
    }
    if (is_numeric($params['num'])) {
        $opt['num'] = $params['num'];
    }
    if (is_numeric($params['year'])) {
        if (strlen($params['year']) != 4) {
            $bBlog->trigger_error('getarchiveposts: year parameter requires a 4 digit year');
            return '';
        }
        $opt['year'] = $params['year'];
    }
    if (is_numeric($params['month'])) {
        if (strlen($params['month']) != 2) {
            $bBlog->trigger_error('getarchiveposts: month parameter requires a 2 digit month');
            return '';
        }
        $opt['month'] = $params['month'];
    }
    if (is_numeric($params['day'])) {
        if (strlen($params['day']) != 2) {
            $bBlog->trigger_error('getarchiveposts: day parameter requires a 2 digit day');
            return '';
        }
        $opt['day'] = $params['day'];
    }
    if (is_numeric($params['hour'])) {
        if (strlen($params['hour']) != 2) {
            $bBlog->trigger_error('getarchiveposts: hour parameter requires a 2 digit hour');
            return '';
        }
        $opt['hour'] = $params['hour'];
    }
    if (is_numeric($params['minute'])) {
        if (strlen($params['minute']) != 2) {
            $bBlog->trigger_error('getarchiveposts: minute parameter requires a 2 digit minute');
            return '';
        }
        $opt['minute'] = $params['minute'];
    }
    if (is_numeric($params['second'])) {
        if (strlen($params['second']) != 2) {
            $bBlog->trigger_error('getarchiveposts: second parameter requires a 2 digit second');
            return '';
        }
        $opt['second'] = $params['second'];
    }
    if ($params['section'] != '') {
        $opt['sectionid'] = $bBlog->sect_by_name[$params['section']];
    }
    $q = $bBlog->make_post_query($opt);
    $ar['posts'] = $bBlog->get_posts($q);
    // No posts.
    if (!is_array($ar['posts'])) {
        return '';
    }
    $lastmonth = '';
    $lastdate = '';
    foreach ($ar['posts'] as $key => $value) {
        // It seems silly to do this. Especially since,
        // this kind of check can be done in Smarty template.
        // Additionally, since {newday} and {newmonth} require
        // the data to be in a variable named "post" it may not
        // function at all.
        //
        // We'll leave it here for now.
        if (date('Fy', $ar['posts'][$key]['posttime']) != $lastmonth) {
            $ar['posts'][$key]['newmonth'] = 'yes';
        }
        $lastmonth = date('Fy', $ar['posts'][$key]['posttime']);
        if (date('Ymd', $ar['posts'][$key]['posttime']) != $lastdate) {
            $ar['posts'][$key]['newday'] = 'yes';
        }
        $lastdate = date('Ymd', $ar['posts'][$key]['posttime']);
    }
    $bBlog->assign($params['assign'], $ar['posts']);
    return '';
}
示例#17
0
/**
 * Smarty {popup} function plugin
 *
 * Type:     function<br>
 * Name:     popup<br>
 * Purpose:  make text pop up in windows via overlib
 *
 * @link http://smarty.php.net/manual/en/language.function.popup.php {popup}
 *          (Smarty online manual)
 * @param array
 * @param Smarty
 * @param unknown $params
 * @param unknown $smarty (reference)
 * @return string
 */
function smarty_function_popup($params, &$smarty)
{
    extract($params);
    if (empty($text) && !isset($inarray) && empty($function)) {
        $smarty->trigger_error("overlib: attribute 'text' or 'inarray' or 'function' required");
        return false;
    }
    if (empty($trigger)) {
        $trigger = "onmouseover";
    }
    $retval = $trigger . '="return overlib(\'' . preg_replace(array("!'!", "![\r\n]!"), array("\\'", '\\r'), $text) . '\'';
    if ($sticky) {
        $retval .= ",STICKY";
    }
    if (!empty($caption)) {
        $retval .= ",CAPTION,'" . str_replace("'", "\\'", $caption) . "'";
    }
    if (!empty($fgcolor)) {
        $retval .= ",FGCOLOR,'{$fgcolor}'";
    }
    if (!empty($bgcolor)) {
        $retval .= ",BGCOLOR,'{$bgcolor}'";
    }
    if (!empty($textcolor)) {
        $retval .= ",TEXTCOLOR,'{$textcolor}'";
    }
    if (!empty($capcolor)) {
        $retval .= ",CAPCOLOR,'{$capcolor}'";
    }
    if (!empty($closecolor)) {
        $retval .= ",CLOSECOLOR,'{$closecolor}'";
    }
    if (!empty($textfont)) {
        $retval .= ",TEXTFONT,'{$textfont}'";
    }
    if (!empty($captionfont)) {
        $retval .= ",CAPTIONFONT,'{$captionfont}'";
    }
    if (!empty($closefont)) {
        $retval .= ",CLOSEFONT,'{$closefont}'";
    }
    if (!empty($textsize)) {
        $retval .= ",TEXTSIZE,{$textsize}";
    }
    if (!empty($captionsize)) {
        $retval .= ",CAPTIONSIZE,{$captionsize}";
    }
    if (!empty($closesize)) {
        $retval .= ",CLOSESIZE,{$closesize}";
    }
    if (!empty($width)) {
        $retval .= ",WIDTH,{$width}";
    }
    if (!empty($height)) {
        $retval .= ",HEIGHT,{$height}";
    }
    if (!empty($left)) {
        $retval .= ",LEFT";
    }
    if (!empty($right)) {
        $retval .= ",RIGHT";
    }
    if (!empty($center)) {
        $retval .= ",CENTER";
    }
    if (!empty($above)) {
        $retval .= ",ABOVE";
    }
    if (!empty($below)) {
        $retval .= ",BELOW";
    }
    if (isset($border)) {
        $retval .= ",BORDER,{$border}";
    }
    if (isset($offsetx)) {
        $retval .= ",OFFSETX,{$offsetx}";
    }
    if (isset($offsety)) {
        $retval .= ",OFFSETY,{$offsety}";
    }
    if (!empty($fgbackground)) {
        $retval .= ",FGBACKGROUND,'{$fgbackground}'";
    }
    if (!empty($bgbackground)) {
        $retval .= ",BGBACKGROUND,'{$bgbackground}'";
    }
    if (!empty($closetext)) {
        $retval .= ",CLOSETEXT,'" . str_replace("'", "\\'", $closetext) . "'";
    }
    if (!empty($noclose)) {
        $retval .= ",NOCLOSE";
    }
    if (!empty($status)) {
        $retval .= ",STATUS,'" . str_replace("'", "\\'", $status) . "'";
    }
    if (!empty($autostatus)) {
        $retval .= ",AUTOSTATUS";
    }
    if (!empty($autostatuscap)) {
        $retval .= ",AUTOSTATUSCAP";
    }
    if (isset($inarray)) {
        $retval .= ",INARRAY,'{$inarray}'";
    }
    if (isset($caparray)) {
        $retval .= ",CAPARRAY,'{$caparray}'";
    }
    if (!empty($capicon)) {
        $retval .= ",CAPICON,'{$capicon}'";
    }
    if (!empty($snapx)) {
        $retval .= ",SNAPX,{$snapx}";
    }
    if (!empty($snapy)) {
        $retval .= ",SNAPY,{$snapy}";
    }
    if (isset($fixx)) {
        $retval .= ",FIXX,{$fixx}";
    }
    if (isset($fixy)) {
        $retval .= ",FIXY,{$fixy}";
    }
    if (!empty($background)) {
        $retval .= ",BACKGROUND,'{$background}'";
    }
    if (!empty($padx)) {
        $retval .= ",PADX,{$padx}";
    }
    if (!empty($pady)) {
        $retval .= ",PADY,{$pady}";
    }
    if (!empty($fullhtml)) {
        $retval .= ",FULLHTML";
    }
    if (!empty($frame)) {
        $retval .= ",FRAME,'{$frame}'";
    }
    if (isset($timeout)) {
        $retval .= ",TIMEOUT,{$timeout}";
    }
    if (!empty($function)) {
        $retval .= ",FUNCTION,'{$function}'";
    }
    if (isset($delay)) {
        $retval .= ",DELAY,{$delay}";
    }
    if (!empty($hauto)) {
        $retval .= ",HAUTO";
    }
    if (!empty($vauto)) {
        $retval .= ",VAUTO";
    }
    $retval .= ');" onmouseout="nd();"';
    return $retval;
}